LAMPとMEAN:何が違うのか

オフィスのデスクでコードをめぐって議論する男性コンピューター・プログラマーたち

著者

IBM Cloud Education Team

IBM Cloud Education

LAMPスタックとMEANスタックの違い、それぞれのメリット、ウェブアプリ開発における利点を学びます。

LAMPとMEANは、高性能のエンタープライズ・グレードのWebアプリやモバイル・アプリケーションの開発に使用される人気のオープンソース・ウェブ・スタックです。他のスタックと同様に、開発者がスタック開発を通じて効率的かつ確実に完全な機能を持つアプリを作成、デプロイ、管理するために使用できるテクノロジー(オペレーティングシステム、プログラミング言語、データベース、ライブラリ、アプリケーションフレームワーク)を組み合わせています。

LAMPとMEANの違いは、ウェブアプリがフロントエンドのインターフェース、ネットワーク、バックエンドサーバーの全活動にわたって機能するために必要な、異なるレイヤー(「スタック」)の技術を開発者に提供する点にあります。たとえば、ウェブベースの銀行アプリケーションでは、LAMPスタックまたはMEANスタックのいずれかを利用して、ユーザーの銀行取引閲覧リクエストを解釈し、必要なデータを取得してユーザーインターフェースに表示することがあります。

 

LAMPスタックとは

LAMPとは、次のようなスタックされたテクノロジーのことです。

  • L:Linux(オペレーティング・システム)
  • A:Apache(ウェブサーバー)
  • M: MySQL(SQLを使用するリレーショナル・データベース管理システム(RDBMS))
  • P:PHP(プログラミング/スクリプト言語)

Linux OSは、特定のハードウェア上でウェブアプリ全体が正しく動作することを可能にします。Apacheウェブサーバーはユーザーのリクエストを解釈し、その情報を HTTP(Hypertext Transfer Protocol)を介してユーザーに「提供」します。MySQLデータベース(リレーショナルデータベース管理システム)は、ウェブサーバーがユーザーの特定のリクエストに基づいて取得・提供できるデータ(銀行取引明細のアーカイブ、金融活動データ、画像ファイル、CSSスタイルシートなど)を格納します。PHPプログラミング言語はApacheと連携してMySQLデータベースから動的コンテンツを取得し、ユーザーに提示します。HTMLは静的コンテンツ(たとえば、データに関わらずインターフェース上に表示される見出し)を表示できますが、ユーザーの操作によって変化する動的コンテンツはPHPに依存します。プログラミング言語のPERLとPythonもLAMPスタックで使用可能です。作家のMichael Kunze氏は、1998 年にドイツのコンピュータ誌で記事を執筆した際、初めて「LAMP」スタックという頭字語を使用しました。

図1:ユーザー・リクエストがLAMPスタック上でどのように処理されるか。

 

MEANスタックとは

MEANは、次のスタックされたテクノロジーを表します。

  • M:MongoDB(非RDBMS NoSQLデータベース)
  • E:Express.js(バックエンドWebフレームワーク)
  • A:AngularJS(ユーザーインターフェースを構築するフロントエンド・フレームワーク)
  • N:Node.js(オープンソースのバックエンド・ランタイム環境)

AngularJS フレームワークは、ユーザーからのリクエストを処理します。次に、Node.jsがリクエストを解析し、ウェブアプリが理解できるインプットに変換します。Express.jsはこの変換済みのインプットを用いて、MongoDB(非リレーショナルのNoSQLデータベース)に対してどの呼び出しを行うかを判断します。MongoDBが必要な情報を提供すると、Express.jsはそのデータをNode.jsに返し、Node.jsがAngularJSフレームワークに送信して、ユーザー・インターフェース上にリクエストされた情報を表示します。

AngularJSフロントエンド・フレームワークはReact.jsなどの他のフレームワークに置き換えることも可能ですが、Node.js環境はMEANスタックにおいて不可欠であり、代替できません。これは、Node.jsがフルスタックJavaScript開発を可能にし、MEANスタックを使ったアプリケーションの開発および管理を非常に効率的にする主要なメリットをもたらすからです。AngularJSフレームワークがReact.jsに置き換えられると、このスタックはMERNと呼ばれます。MEANスタックの頭字語は、2013年にMongoDB開発者のValeri Karpov氏によって初めて使用されました。

図2は、ユーザーの情報リクエストに応答する際、MEANスタック全体でウェブアプリがどのように動作するかを示す概略の例です。

図2:ウェブアプリがMEANスタック全体で応答してリクエストを満たす方法。

LAMPスタック開発の長所と短所は何か

LAMPのメリット

Webアプリケーションの作成、デプロイ、管理にLAMPを使用するメリットは以下の通りです。

  • 幅広いサポートと信頼:LAMPのテクノロジーは1990年代から存在し、様々なソフトウェア開発で使用されてきたため、オープンソース・コミュニティーから広く信頼され、支持されています。例えば、多くのホスティング・プロバイダーはPHPとMySQLをサポートしています。
  • オープンソース・テクノロジー:LAMPの各テクノロジーはオープンソースであり、開発者が自由に利用できるだけでなく、無料で入手可能です。オープンソースのテクノロジーにより、LAMPは非常に柔軟になっており、開発者は特定のウェブアプリに最適なコンポーネントを自由に選択できます。たとえば、PHPは、ZendやLaravelなどの複数のコンパイラー・ランタイム・エンジンを使用できます。また、LAMPはPostgreSQLなど、任意のオープンソース・データベースを使用することも可能です。
  • Apache:Apacheウェブサーバーは信頼性が高く、高速で安全と評価されています。また、モジュール化されており、高度にカスタマイズ可能です。
  • セキュリティー:LAMPスタックは、エンタープライズレベルのセキュリティー・アーキテクチャーと暗号化機能を備えています。
  • 効率性:LAMPスタックはカスタマイズが容易なため、アプリ開発の時間を短縮できます。たとえば、プログラマーはApacheモジュールから始めて必要に応じてコードを変更することができ、完全に一からコードを開発する場合に比べて効率的です。
  • 拡張性:LAMPスタックを用いて構築、デプロイ、管理されたウェブアプリは、ノンブロッキング構造のおかげで高い拡張性を持ち、開発も迅速に行えます。
  • 低メンテナンス性:LAMPスタックのエコシステムは安定しており、ほとんどメンテナンスを必要としません。
  • 理解しやすさ:PHPやMySQLは比較的理解しやすいため、LAMPスタックを用いた開発は初心者にとって適した選択肢です。

LAMPの短所

ウェブアプリケーションの作成、デプロイ、管理にLAMPを使用する短所は以下の通りです。

  • 複数の言語:LAMPは、開発において複数の言語を必要とするため、「フルスタック」とはみなされません。サーバー側のプログラミングにはPHPが使われますが、クライアント側のプログラミングはJavaScriptで行われます。つまり、フルスタックの開発者、または複数の開発者が必要になります。
  • 限定的なOSサポート:LAMPはLinuxおよびその派生OS(Oracle Linuxなど)のみをサポートしています。
  • モノリシック・アーキテクチャー:クラウドよりも安全であることは間違いありませんが、LAMPはクラウドベースのアーキテクチャーよりもモノリシックです(クラウド・アーキテクチャーはよりスケーラブルで手頃な価格で、APIを介してデータをより迅速に返します)。

MEANスタック開発のメリットとデメリットとは?

MEANのメリット

MEANを使ってウェブ・アプリケーションを作成、デプロイ、管理するメリットは次のとおりです。

  • 単一言語の使用:MEANは唯一の言語としてJavaScriptを使用するため、「フルスタック」とみなされます。これにより、クライアント側とサーバー側でのプログラミングの切り替えが、便利で効率的になります。例えば、一人のJavaScript開発者が、表向きにはウェブアプリ全体を構築することができます。
  • リアルタイムの更新とデモ:MEANスタックのテクノロジーは、デプロイされたWebアプリにリアルタイムで更新をプッシュすることを可能にします。開発者は、開発中のWebアプリの機能を素早く実証することもできます。
  • クラウドとの互換性:MEANスタックのテクノロジーは、最新のWebサービスに見られるクラウドベースの機能(データ検索のためのAPIの呼び出しなど)と連携できます。
  • JSONファイル:MEANを使用すると、ユーザーはドキュメントをJSONファイルとして保存できます。JSONファイルはネットワーク間でのファストデータ交換用に設計されています。
  • 効率:開発者はパブリック・リポジトリーやライブラリーのリソースを使用して、アプリケーションの開発時間を短縮できます。このためスタートアップにとって、MEANスタック開発は魅力的な費用対効果の高い選択肢となっています。
  • 高速なランタイム環境と保守の容易さ:Node.jsのランタイムは高速で応答性が高く、Angular.jsフレームワークは保守が容易でテスト可能です。
  • クロスプラットフォームのサポート:MEANはクロスプラットフォーム・スタックであ、Webアプリケーションは複数のオペレーティングシステム上で機能します。

MEANのデメリット

MEANを使ってウェブアプリケーションを作成、デプロイ、管理する際の主なデメリットは以下の通りです。

  • データ損失の可能性:大規模なアプリケーションでは、MongoDBがデータ・ストレージに過剰なメモリーを必要とするため、データ損失が発生する可能性があります。さらに、MongoDBはトランザクション機能をサポートしていません。
  • 読み込み時間と非互換性: JavaScriptは、一部のデバイス、特に古いデバイスや低スペックのデバイスでウェブサイトやアプリケーションの読み込みが遅くなる場合があります。デバイスでJavaScriptが無効になっている場合、ウェブアプリが正常に動作しないこともあります。さらに、古いアプリケーションではJavaScriptを使用する可能性が低いため、MEANを既存のアーキテクチャーに実装するのが困難な場合があります。
  • 高いメンテナンス負荷:MEANスタックの各テクノロジーは頻繁にアップデートされるため、ウェブアプリには頻繁なメンテナンスが必要です。

MEANとLAMP:どちらが優れているか

本質的に、どちらのスタックが優れているということはありません。ですが、LAMPスタックまたはMEANスタックが、特定のウェブ開発のユースケースに適している場合があります。

LAMPスタックは一般的に、以下のような特徴を持つWebアプリケーションやサイトに適した選択肢です。

  • スコープが大きく、静的(つまり、リアルタイムの更新が必要ない)で、トラフィックの急増に伴い重いワークフローが発生する
  • 寿命が短い
  • 本質的にサーバー側である
  • WordPressなどのCMSを使用する

逆に、MEANスタックは、次のようなWebアプリケーションやサイトには良い選択肢です。

  • APIやマイクロサービスなどの最新のクラウド・テクノロジーを活用する
  • 寿命が長い
  • 常に予測可能なトラフィックで範囲が小さい(データ損失の可能性が低い)
  • クライアント側で多くのロジックを必要とする

LAMPスタック、MEANスタック、IBM

基本に立ち返ると、LAMPスタックにより、ウェブページの技術的な配信とその実現がさらに近づきます。データベース、スクリプト言語、そしてクライアントに提供する手段が揃っているのがLAMPです。

LAMPまたはMEANスタックを使ってクラウドにアプリケーションを開発・デプロイする手軽さを確認したい場合、IBMでは以下のチュートリアルを提供しています。

関連ソリューション
Enterprise Application Service for Java

IBMのフルマネージド・サービスでJavaアプリケーションのワークロードを容易にモダナイズします。

    エンタープライズ向けJavaアプリケーション・サービスについてはこちら
    アプリケーション開発ソリューション

    イノベーションを引き出し、既存のアプリケーションを迅速にモダナイズして、新しいクラウドネイティブなサービスを提供します。

      アプリケーション開発ソリューションの詳細はこちら
      クラウド・アプリケーション開発コンサルティング

      クラウド・アプリケーション開発とは、一度構築すれば、迅速に反復し、どこにでもデプロイできます。

      クラウド・アプリケーション開発コンサルティング・サービスの詳細はこちら
      次のステップ

      シームレスなモダナイゼーション、迅速な導入、レジリエンスを推進します。レガシー・アプリケーションからクラウドネイティブ・ソリューションまで、IBMは、進化するビジネス・ニーズに適応する柔軟で高性能なアプリケーション・エコシステムの構築を支援します。

        エンタープライズ向けJavaアプリケーション・サービスについてはこちら アプリケーション開発ソリューションの詳細はこちら