「標準化された構成要素」の一般的な例として、MEAN スタックが挙げられます。本記事では、MEAN スタックの概要、仕組み、長所・短所、主なユースケースについて解説します。
MEAN スタックは、スケーラブルな Web アプリケーションを開発するための JavaScript ベースのフレームワークです。MEAN とは、技術スタックの層を構成する 4 つの主要技術である、MongoDB、Express、Angular、Node の頭文字を組み合わせた略語です。
・MongoDB
:クラウドアプリケーション用に設計された、オブジェクト指向の NoSQL データベース。
・Express(.js)
:フロントエンド(例:クライアント側)とデータベース間の相互作用をサポートするNode(.js) 用の Web アプリケーションフレームワーク。
・Angular(.js)
:一般的に「フロントエンド」と呼ばれ、インタラクティブなユーザーインターフェースで動的な Web アプリケーションを作成するためのクライアント側 JavaScript フレームワーク。
・Node(.js)
:スケーラブルなネットワークアプリケーションの構築のために使用される高度な JavaScript Web サーバー。
目次
•MEAN と MERN と MEVN の違い
•MEAN スタックの仕組み
•MEAN スタックの長所
•MEAN スタックの短所
•MEAN スタックのユースケース
•MEAN スタックと MongoDB Atlas を組み合わせる
•MEAN スタックの安全性
•よくある質問
MEAN スタックは、Web アプリケーションを構築するための技術コンセプトとして特に高い注目を集めています。一方、MEAN スタック以外にも次のようなスタックがあります。
MEAN、MERN、MEVN の最も大きな違いは、フロントエンド(クライアントサイドなど)の開発方法がそれぞれ異なることです。一方、バックエンド(サーバーサイドなど)の開発については、いずれも MongoDB、Express.js、Node.js を使用します。採用する技術スタックを決める際の判断材料として、次のようなものが挙げられます。
・開発者の経験:開発者は、使い慣れたフレームワークを選択する傾向があります。多くの開発チームは、プロジェクトの成果物に大きな影響がない限り、チームメンバーの経験に基づいてスタックを選択します。
・シングルページアプリケーション(SPA):複雑で機能豊富な SPA を構築する場合は、Google がサポートする Angular が最適であるため、MEAN スタックが選ばれる傾向にあります。
・高速なユーザーインターフェースを必要とする大規模なアプリケーション:Meta がサポートする JavaScript ライブラリである ReactJS(MERN スタックなどで使用)は、高速でインタラクティブなユーザーインターフェースの構築に特に役立ちます。MERN フレームワークは、大規模なアプリケーションの構築に求められる高い性能と拡張性も備えています。
・シンプルさ:プログレッシブ JavaScript フレームワークである Vue.js(MEVN スタックなどで使用)は、使いやすく、統合のしやすさに定評があります。小・中規模のアプリケーションをシンプルかつ迅速に開発する必要がある場合は、MEVN が選ばれる傾向にあります。
MEAN スタックは、 JavaScript による Web アプリケーションの構築と JSON の操作を非常に容易に行える構成になっています。
Angular.js は MEAN スタックの最上層に位置し、公式サイトでは「JavaScript MVW フレームワーク」と定義されています(MVW は、「Model、View、Whatever」の略語)。
Angular.js を使用すると、既存の HTML タグをメタデータで拡張することが可能で、静的 HTML と JavaScript(または jQuery)を用いて自分で構築するよりもはるかに効率的に、動的でインタラクティブな Web アプリケーションを構築できます。
Angular は、フォームバリデーション、ローカライゼーション、バックエンドサービスとの通信など、フロントエンドの JavaScript フレームワークに期待されるあらゆる機能を備えています。
フロントエンドの下の層には、Node.js サーバー上で動作する Express.js があります。Express.js は、公式サイトにあるとおり、まさしく「Node.js のための高速で、革新的な、最小限の Web フレームワーク」です。
Express.js には、URL ルーティング(入力された URL をサーバー関数と照合する)や、HTTP リクエストとレスポンスの処理に関する強力なモデルがあります。Angular.js のフロントエンドから XML HTTP リクエスト(XHR)、GET、または POST を実行することで、アプリケーションを動かす Express.js 関数に接続できます。
それらの関数が、コールバックまたはプロミスのいずれかを介して MongoDB の Node.js ドライバーを使用し、MongoDB データベース内のデータにアクセスして更新します。
アプリケーションにデータ(ユーザープロファイル、コンテンツ、コメント、アップロード、イベントなど)を保存する場合は、Angular、Express、Node と同様、容易に扱えるデータベースが必要となります。
そこで MongoDB の出番です。Angular.js のフロントエンドで作成された JSON ドキュメントを Express.js サーバーに送信すると、そこで処理が行われ、(有効なドキュメントである場合は)MongoDB に直接保存して後で検索できます。
MongoDB の利点を手軽に最大限活用したい場合は、MongoDB Atlas の利用をお勧めします。MongoDB Atlas では、ボタンをクリックするだけで、ビルトインの完全なデータベースセキュリティと、クロスクラウドな拡張性を確保できます。詳しくは、後述します。
MEAN アプリケーションは、一度プログラムを書けば、異なるプラットフォームで多様な使い方ができます。クラウドでネイティブに動作するアプリケーションや、Angular.js で構築された(動的な)シングルページ Web アプリケーションなど、リアルタイムアプリケーションに特に適しているほか、次のようなユースケースもあります。</p>
MEAN スタックのユースケースは、この他にも多数あります。
全てのコンポーネントが JavaScript と JSON を基盤としているため、スタックのコンポーネントを直感的に容易に統合できます。
さらに、MEAN の E(Express)と A(Angular)は、それぞれバックエンド開発とフロントエンド開発用の JavaScript フレームワークとして特に人気が高く、サポートも充実しています。Express は、HTTP リクエストとレスポンスのルーティングと管理を非常に容易にし、ミドルウェアによる JSON エンドポイントやフォーム投稿の処理のサポートも優れています。Angular は、バックエンドサーバーと通信する動的な HTML ページを構築するための強力なツールとなります。
高スループットの API、シンプルな Web アプリケーション、マイクロサービスのいずれを構築する場合でも、Node.js アプリケーションの構築には MEAN スタックが最適です。
MEAN スタックのコンポーネントは全てオープンソースであり、無料で開発に使用できます。
JavaScript は優れたモダン言語です。しかし、本来はバックエンドサーバーの構築用に設計された言語ではありません。バックエンドサーバーも含め、MEAN スタックは JavaScript を基盤としています。そのため、JavaScript の性質上、規模が大きくなると並行処理やパフォーマンスの問題が生じる可能性があります。
さらに、開発速度が非常に速いため、ビジネスロジックとサーバーロジックを適切に分離できず、途中でスパゲッティコードやバッドプラクティスが生じるおそれがあります。
JavaScript に関しては多くのガイドやチュートリアルが公開されています。しかし、MEAN スタックに適したコーディング方法を具体的に解説しているものは多くありません。そのため、あるアプリケーションでは非常にうまく機能したコードが、別のアプリケーションでは問題を引き起こしてしまうおそれもあります。
MEAN は、表示層(Angular.js)、アプリケーション層(Express.js と Node.js)、データベース層(MongoDB)から成る、従来の 3 層スタック方式を採用しています。
特に Node.js で JavaScript アプリケーションを構築する場合は、MEAN スタックの使用を検討することを強くお勧めします。
MongoDB は JSON ライクな形式(BSON:バイナリ JSON 拡張)でデータを保存します。MongoDB Query API は JSON で定義され、そのコマンドラインインターフェース(CLI)が JavaScript インタプリタとなっています。MongoDB は、JavaScript / JSON データを保存できるだけではありません。インデックスの作成や、JSON ドキュメントに対する詳細なクエリの実行など高度な機能も満載で、強力な Node.js ネイティブドライバーを備え、水平スケールアウトに対応するよう設計されています。MongoDB の開発元が提供するクラウドネイティブな DBaaS(サービスとしてのデータベース)である MongoDB Atlas を使用することで、クラウドでのアプリケーション開発がさらに容易になります。
高スループットの API、シンプルな Web アプリケーション、マイクロサービスのいずれを構築する場合でも、Node.js アプリケーションの構築には MEAN スタックが最適です。
MongoDB Node.js ドライバー を使用すると、Node.js スクリプト内から MongoDB を容易に直感的に操作できるようになるため、開発時間を短縮でき、生産性が向上します。
MongoDB Node.js driver を操作する準備ができたら、次は MongoDB データベースが必要です。MongoDB を導入するには、MongoDB のフルマネージドな開発者プラットフォームである MongoDB Atlas で無料のクラスタを作成するのが最も容易な方法です。
Atlas データベースはデプロイメントとスケーリングが容易で、一貫した URI で接続できます。クラスタへの接続については、MongoDB の公式ドキュメントをご参照ください。
Atlas への接続には、ユーザー名/パスワードによる組み込み認証と、TLS によるエンドツーエンド暗号化機能がデフォルトで備わっています。また、Atlas に接続することで、証明書 / IAM 認証、LDAP、保存時の暗号化、監査など、MongoDB の高度なセキュリティ機能をボタンをクリックするだけで利用できます。
さらに、Atlas プロジェクトは、アプリケーションプラットフォームである Atlas App Services を利用することで、Google、Facebook、JWT、カスタム認証など、多くの認証プロバイダを容易に統合できます。
Atlas はスケーリングと管理が非常に容易です。最大の利点は、MEAN スタックで最も重要な層であるデータベース層をサポートし、セキュリティを確保できる点です。
MongoDB Atlas は、組み込み認証、ファイアウォール、エンドツーエンド暗号化の機能を備えており、MongoDB のセキュリティを確保するのに最適な基盤です。そのため、MEAN スタックを使用する際は Atlas との併用をお勧めします。
加えて、MEAN スタックは 3 つの層が明確に分離しています。ベストプラクティスに基づき、ネットワークを適切に分離することで、エンドユーザーによるビジネスロジック、さらには、データベース層へのアクセスを防止できます。アプリケーションは、悪意のあるユーザーがアプリケーションを危険にさらす操作(クエリインジェクション、コード操作、ポートスプーフィングなど)を行えないよう、デフォルトで設定されています。
MEAN スタックは、直感的な JavaScript 開発をベースとするスタックです。MongoDBは JSON 構造との親和性が高いデータベースであり、適応・保守が容易です。多くの開発者が他の選択肢よりも習得しやすいと感じています。
MEAN スタックの習得のしやすさや速さは、次のような要素によっても変わってきます。
MEAN 開発は JavaScript に頼るところが大きいため、JavaScript をよく理解していると非常に役立ちます。
過去に Web 開発の経験があり、Angular、ReactJS、Vue.js、Express.js などのフレームワークやライブラリに精通していると、MEAN スタックをさらに直感的に習得できます。
Node.js は非同期のイベント駆動型プログラミングを基盤としているため、コールバック、プロミス、async 関数 / await キーワードなどの非同期の概念に精通していると役立ちます。
MongoDB はオブジェクト指向の NoSQL データベースであるため、NoSQL データベースを理解していると役立ちます。
MEAN スタックを習得するためにこれらの知識を全て持っている必要はありません。オンラインには、MEAN スタック開発に必要な知識やスキルの習得に役立つチュートリアルやコース、コミュニティが多数あります。
フルスタックと MEAN スタックの違いは何ですか? MEAN スタックとフルスタックはどちらも、フロントエンド(クライアントサイドなど)、バックエンド(サーバーサイドなど)、データベースの開発を行うものです。しかし、フルスタック開発においては多くの場合、MEAN スタックの構成要素よりも幅広く深いスキルと技術が必要になります。フルスタック開発で別途必要になる知識として、次のようなものが挙げられます。