albatrosary's blog

UI/UXとエンタープライズシステム

MEAN(MongoDB, Express, AngularJS, Node.js)スタックが優れている理由 - Mozilla Open Web Day in Tokyoを終えて

MEANとは、LAMP(Linux, Apache, MySQL, PHP)に変わる技術としてじわじわと注目されはじめているアーキテクチャです。このアーキテクチャMEAN(MongoDB, Express, AngularJS, Node.js)は、シンプルでかつ強力なアーキテクチャで、現在のJavaを利用したアプリケーション開発とは一線を画すところです。HTML5開発にとってJavaの役割が殆どなくなるというのも注目すべき点だと考えます。MEANで一般的に言われる注目すべき事項は次のところです:

  • JavaScriptフルスタックである
  • データモデルとしてクライアントからデータベースに至までJSON

 

そして、この記事を書こうと思ったきっかけですが、2014/10/5(日) Mozilla Open Web Day in Tokyo | Mozilla Japan でのMEAN解説展示で、様々な方から反響を得ましたので改めて整理しました。MozillaのイベントでしたのでMEAN展示はあまり集客無いなと思い軽い気持ちで臨んだのですが、ことのほか話を聞きたいと言う方が多く訪れて嬉しい悲鳴を上げておりました。こういった場を与えて頂いたMozilla Japanには感謝致します。

 

MEANアーキテクチャ

MEANアーキテクチャを綺麗にまとめている概要図がありますので添付します。

f:id:albatrosary:20141005234024p:plain

What Developers Mean When They Build a MEAN Stack - New Spin Digital

MongoDB - http://www.mongodb.org/

データベースはドキュメント・データベースであるMongoDBを利用します。スケールをとると言った場合には技術スキルが必要になります。RDBと概念が異なり「DB」「コレクション」「オブジェクト(=ドキュメント)」といった(RDBを利用している人にとっては)新しい概念が必要になります。より複雑な処理を行わせる場合にはHadoopを使うことも考慮に入れます。

Express - http://expressjs.com/

Node.js上で動くWeb Applicationフレームワークです。Webアプリケーションのための基本的なツール含まれています。用意されているさまざまなオブジェクトを利用することで比較的簡単に実装することができます。

AngularJS - https://angularjs.org/

UIフレームワークとしてAngularJSを利用します。AngularJSは「Directive」を始め「Module」や「Provider」、「Dependency Injection」といったアーキテクチャを持ったJavaScriptフレームワークです。Web標準、ECMAをターゲットとしているため現在エンタープライズ系システムを始め様々なところで人気があります。

Node.js - http://nodejs.org/

サーバサイドJavaScript環境です。アプリケーションのみならず開発ツールYEOMANなどでも既に利用されている方も多いかと思います。

 

個別にそれぞれ発展し地位を築いて来た技術ですが、それをまとめMEANというアーキテクチャを構成しています。

 

YEOMANジェネレータ

いくつかMEANのYEOMANジェネレータが存在しますが、もっとも良いのではないかと思っているのが次のジェネレータです。

 

DaftMonk/generator-angular-fullstack · GitHub

 

このジェネレーターを利用すると分かるのですが、AngularJSやExpressなどの記述、ディレクトリ構造がベストプラクティスになっています。またsocket.ioの実装もありますのでアプリケーションを作るときのひな形の基本的な部分はそろっています。google認証、twitter認証、facebook認証も利用することが既にテンプレート化されていますので至れり尽くせりです。サブジェネレータも揃っていてますので列記します。

App

  • angular-fullstack (aka angular-fullstack:app)

Server Side

  • angular-fullstack:endpoint

Client Side

  • angular-fullstack:route
  • angular-fullstack:controller
  • angular-fullstack:filter
  • angular-fullstack:directive
  • angular-fullstack:service
  • angular-fullstack:provider
  • angular-fullstack:factory
  • angular-fullstack:decorator

Deployment

  • angular-fullstack:openshift
  • angular-fullstack:heroku

f:id:albatrosary:20141006003010p:plain

 

もっと都合の良い話

MEANスタックはJavaScriptフルスタックであり、クライアントからサーバまでJSONでやり取りするのでシンプルなアプリケーションが作れることが優れています。

旧来のJavaを使ったシステムではJSONからPOJOへデータモデルの変換を行い、ORマッパを使って正規化するというデータモデルの変換を行ってきました。こう考えるとアプリケーション開発はビジネスロジックの開発というよりもデータモデルの変換ロジックを懸命に作るということに終始していたことになります。

f:id:albatrosary:20141006003147p:plain

これ以外に実はもっと優れている点があります。それは、これらアーキテクチャを専門的に扱っている優れたユーザグループが日本にあるという事実です。

何か困ったときに身近にやり取りできるというのはエンタープライズにとってハードルがかなり低いのではないかと思います。心置きなくMEANを利用することができるのではと思います。

 

まとめ

MEANが優れている理由は

  • シンプルで強力なアーキテクチャ
  • 優れたYEOMANジェネレータ
  • 日本のユーザグループの存在

ということです。最近の登壇ではMEANやWeb標準の話をさせて頂いております。色々な技術がありますが、資料としてまとめていますので合わせてお読みくだされば幸いです。