MongoDB World is back in NYC June 7 - 9!MongoDB World is back in NYC June 7 - 9!

MEAN スタックとは

アプリケーション開発では、基礎技術を組み合わせたスタックを基盤に構築することが重要視されています。標準化された構成要素を基盤に開発することで、複数の異なるコンポーネントを一から組み合わせる必要がなくなり、ビジネスの差別化につながるアプリケーションの開発に専念できるようになります。

MEAN スタックとは

「標準化された構成要素」の一般的な例として、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、MERN、MEVN の違い

MEAN スタックは、Web アプリケーションを構築するための技術コンセプトとして特に高い注目を集めています。一方、MEAN スタック以外にも次のようなスタックがあります。

  • MERN: MERN スタックは、MEAN の「A」(Angular など)を「R」(ReactJS)に置き換えたスタックです。
  • MEVN: MEVN スタックは、MEAN の「A」を「V」(Vue.js)に置き換えたスタックです。

MEAN、MERN、MEVN の最も大きな違いは、フロントエンド(クライアントサイドなど)の開発方法がそれぞれ異なることです。一方、バックエンド(サーバーサイドなど)の開発については、いずれも MongoDB、Express.js、Node.js を使用します。採用する技術スタックを決める際の判断材料として、次のようなものが挙げられます。

開発者の経験:開発者は、使い慣れたフレームワークを選択する傾向があります。多くの開発チームは、プロジェクトの成果物に大きな影響がない限り、チームメンバーの経験に基づいてスタックを選択します。
シングルページアプリケーション(SPA):複雑で機能豊富な SPA を構築する場合は、Google がサポートする Angular が最適であるため、MEAN スタックが選ばれる傾向にあります。
高速なユーザーインターフェースを必要とする大規模なアプリケーション:Meta がサポートする JavaScript ライブラリである ReactJS(MERN スタックなどで使用)は、高速でインタラクティブなユーザーインターフェースの構築に特に役立ちます。MERN フレームワークは、大規模なアプリケーションの構築に求められる高い性能と拡張性も備えています。
シンプルさ:プログレッシブ JavaScript フレームワークである Vue.js(MEVN スタックなどで使用)は、使いやすく、統合のしやすさに定評があります。小・中規模のアプリケーションをシンプルかつ迅速に開発する必要がある場合は、MEVN が選ばれる傾向にあります。

MEAN スタックの仕組み


MEAN スタックのコンポーネント

MEAN スタックは、 JavaScript による Web アプリケーションの構築と JSON の操作を非常に容易に行える構成になっています。

Mean スタックのダイアグラム

MEAN スタックのコンポーネント


Angular.js(フロントエンド)

Angular.js は MEAN スタックの最上層に位置し、公式サイトでは「JavaScript MVW フレームワーク」と定義されています(MVW は、「Model、View、Whatever」の略語)。

Angular.js を使用すると、既存の HTML タグをメタデータで拡張することが可能で、静的 HTML と JavaScript(または jQuery)を用いて自分で構築するよりもはるかに効率的に、動的でインタラクティブな Web アプリケーションを構築できます。

Angular は、フォームバリデーション、ローカライゼーション、バックエンドサービスとの通信など、フロントエンドの JavaScript フレームワークに期待されるあらゆる機能を備えています。


Express.js および Node.js(サーバー層)

フロントエンドの下の層には、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 データベース内のデータにアクセスして更新します。


MongoDB(データベース層)

アプリケーションにデータ(ユーザープロファイル、コンテンツ、コメント、アップロード、イベントなど)を保存する場合は、Angular、Express、Node と同様、容易に扱えるデータベースが必要となります。

そこで MongoDB の出番です。Angular.js のフロントエンドで作成された JSON ドキュメントを Express.js サーバーに送信すると、そこで処理が行われ、(有効なドキュメントである場合は)MongoDB に直接保存して後で検索できます。

MongoDB の利点を手軽に最大限活用したい場合は、MongoDB Atlas の利用をお勧めします。MongoDB Atlas では、ボタンをクリックするだけで、ビルトインの完全なデータベースセキュリティと、クロスクラウドな拡張性を確保できます。詳しくは、後述します

MEAN スタックの長所

MEAN アプリケーションは、一度プログラムを書けば、異なるプラットフォームで多様な使い方ができます。クラウドでネイティブに動作するアプリケーションや、Angular.js で構築された(動的な)シングルページ Web アプリケーションなど、リアルタイムアプリケーションに特に適しているほか、次のようなユースケースもあります。</p>

  • ワークフロー管理ツール
  • ニュースアグリゲーションサイト
  • ToDo アプリケーション、カレンダーアプリケーション
  • 対話型フォーラム

MEAN スタックのユースケースは、この他にも多数あります。

全てのコンポーネントが JavaScript と JSON を基盤としているため、スタックのコンポーネントを直感的に容易に統合できます。

さらに、MEAN の E(Express)と A(Angular)は、それぞれバックエンド開発とフロントエンド開発用の JavaScript フレームワークとして特に人気が高く、サポートも充実しています。Express は、HTTP リクエストとレスポンスのルーティングと管理を非常に容易にし、ミドルウェアによる JSON エンドポイントやフォーム投稿の処理のサポートも優れています。Angular は、バックエンドサーバーと通信する動的な HTML ページを構築するための強力なツールとなります。

高スループットの API、シンプルな Web アプリケーション、マイクロサービスのいずれを構築する場合でも、Node.js アプリケーションの構築には MEAN スタックが最適です。

MEAN スタックのコンポーネントは全てオープンソースであり、無料で開発に使用できます。

MEAN スタックの短所

JavaScript は優れたモダン言語です。しかし、本来はバックエンドサーバーの構築用に設計された言語ではありません。バックエンドサーバーも含め、MEAN スタックは JavaScript を基盤としています。そのため、JavaScript の性質上、規模が大きくなると並行処理やパフォーマンスの問題が生じる可能性があります。

さらに、開発速度が非常に速いため、ビジネスロジックとサーバーロジックを適切に分離できず、途中でスパゲッティコードやバッドプラクティスが生じるおそれがあります。

JavaScript に関しては多くのガイドやチュートリアルが公開されています。しかし、MEAN スタックに適したコーディング方法を具体的に解説しているものは多くありません。そのため、あるアプリケーションでは非常にうまく機能したコードが、別のアプリケーションでは問題を引き起こしてしまうおそれもあります。

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 スタックが最適です。

MEAN スタックと MongoDB Atlas を組み合わせる

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 スタックで最も重要な層であるデータベース層をサポートし、セキュリティを確保できる点です。

MEAN スタックの安全性

MongoDB Atlas は、組み込み認証、ファイアウォール、エンドツーエンド暗号化の機能を備えており、MongoDB のセキュリティを確保するのに最適な基盤です。そのため、MEAN スタックを使用する際は Atlas との併用をお勧めします。

加えて、MEAN スタックは 3 つの層が明確に分離しています。ベストプラクティスに基づき、ネットワークを適切に分離することで、エンドユーザーによるビジネスロジック、さらには、データベース層へのアクセスを防止できます。アプリケーションは、悪意のあるユーザーがアプリケーションを危険にさらす操作(クエリインジェクション、コード操作、ポートスプーフィングなど)を行えないよう、デフォルトで設定されています。

よくある質問

MEAN スタックは容易に習得できますか?

MEAN スタックは、直感的な JavaScript 開発をベースとするスタックです。MongoDBは JSON 構造との親和性が高いデータベースであり、適応・保守が容易です。多くの開発者が他の選択肢よりも習得しやすいと感じています。

MEAN スタックの習得のしやすさや速さは、次のような要素によっても変わってきます。

  • JavaScript の習熟度

    MEAN 開発は JavaScript に頼るところが大きいため、JavaScript をよく理解していると非常に役立ちます。

  • Web 開発全般の経験

    過去に Web 開発の経験があり、Angular、ReactJS、Vue.js、Express.js などのフレームワークやライブラリに精通していると、MEAN スタックをさらに直感的に習得できます。

  • 非同期プログラミング

    Node.js は非同期のイベント駆動型プログラミングを基盤としているため、コールバック、プロミス、async 関数 / await キーワードなどの非同期の概念に精通していると役立ちます。

  • NoSQL データベース

    MongoDB はオブジェクト指向の NoSQL データベースであるため、NoSQL データベースを理解していると役立ちます。

  • MEAN スタックを習得するためにこれらの知識を全て持っている必要はありません。オンラインには、MEAN スタック開発に必要な知識やスキルの習得に役立つチュートリアルやコース、コミュニティが多数あります。

    MEAN はフルスタックのソリューションですか?

    はい、そうです。MEAN は、表示層(Angular.js)、アプリケーション層(Express.js と Node.js)、データベース層(MongoDB)から成る、従来の 3 層スタック方式を採用しています。

    フルスタックと MEAN スタックの違いは何ですか?

    フルスタックと MEAN スタックの違いは何ですか? MEAN スタックとフルスタックはどちらも、フロントエンド(クライアントサイドなど)、バックエンド(サーバーサイドなど)、データベースの開発を行うものです。しかし、フルスタック開発においては多くの場合、MEAN スタックの構成要素よりも幅広く深いスキルと技術が必要になります。フルスタック開発で別途必要になる知識として、次のようなものが挙げられます。

    • 言語:フルスタック開発においては、HTML、CSS、JavaScript などのフロントエンド言語と、Python、PHP、Java、C+、Ruby などのバックエンド言語に関する知識が欠かせません。一方、MEAN 開発は、MongoDB、Express.js、Angular、Node.js に精通していれば対応できます。
    • 幅広い知識:フルスタック開発者は、ユーザーインターフェースの設計、サーバーサイドのロジックの実装、データベースの管理・運用、アプリケーション全体のパフォーマンスとセキュリティなど、Web 開発のあらゆる領域に携わります。一方、MEAN 開発者は、MEAN の構成要素のみに特化します。
    • データベース:フルスタック開発者は SQL データベースと NoSQL データベースの両方に詳しくなければなりません。一方、MEAN スタック開発者は MongoDB(NoSQL データベース)にさえ精通していれば問題ありません。
    • MEAN スタックは MERN スタックより優れているのですか?

      MEAN と MERN はどちらも重要なフレームワークです。Angular と ReactJS のどちらを選択するかは、それぞれに関する専門知識、必要なプロジェクト要件、環境サイズ、性能ニーズ、スケーラビリティなどの要素を考慮して決定します。

      MEAN スタックは現在もニーズがありますか?

      あります。2024 年現在、MEAN スタック開発者の需要と MEAN スタックの使用率は高まっており、今後さらに増えると予測されます。また、MEAN ソフトウェアは費用対効果が高く、使いやすいため、多くの中小企業において MEAN スタック開発者はますます欠かせない存在となっています。

      MongoDB Atlas を是非お試しください。

      MongoDB Atlas を利用することで、 MongoDB をクラウド環境で無料で実行できます。クレジットカードの登録は不要です。