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アーキテクチャを綺麗にまとめている概要図がありますので添付します。
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
もっと都合の良い話
MEANスタックはJavaScriptフルスタックであり、クライアントからサーバまでJSONでやり取りするのでシンプルなアプリケーションが作れることが優れています。
旧来のJavaを使ったシステムではJSONからPOJOへデータモデルの変換を行い、ORマッパを使って正規化するというデータモデルの変換を行ってきました。こう考えるとアプリケーション開発はビジネスロジックの開発というよりもデータモデルの変換ロジックを懸命に作るということに終始していたことになります。
これ以外に実はもっと優れている点があります。それは、これらアーキテクチャを専門的に扱っている優れたユーザグループが日本にあるという事実です。
何か困ったときに身近にやり取りできるというのはエンタープライズにとってハードルがかなり低いのではないかと思います。心置きなくMEANを利用することができるのではと思います。
まとめ
MEANが優れている理由は
- シンプルで強力なアーキテクチャ
- 優れたYEOMANジェネレータ
- 日本のユーザグループの存在
ということです。最近の登壇ではMEANやWeb標準の話をさせて頂いております。色々な技術がありますが、資料としてまとめていますので合わせてお読みくだされば幸いです。