MEANスタックとは何ですか?JavaScriptWebアプリケーション

定義されたMEANスタック

MEANスタックは、完全にJavaScriptで構築されたソフトウェアスタック(つまり、最新のアプリケーションを構成するテクノロジーレイヤーのセット)です。MEANは、JavaScriptの登場を「フルスタック開発」言語として表し、フロントエンドからバックエンドまでアプリケーション内のすべてを実行します。MEANの各イニシャルは、スタック内のコンポーネントを表します。

  • MongoDB: JSON(JavaScript Object Notation)を使用してクエリされ、データ構造をバイナリJSON形式で格納するデータベースサーバー
  • Express:サーバー側のJavaScriptフレームワーク
  • Angular:クライアント側のJavaScriptフレームワーク
  • Node.js: JavaScriptランタイム

MEANの魅力の大部分は、JavaScriptであるという事実に由来する一貫性です。データベース内のオブジェクトからクライアント側のコードまで、アプリケーションのすべてのコンポーネントが同じ言語で記述されているため、開発者の生活はよりシンプルになります。 

この一貫性は、Webアプリケーション開発者の長年の定番であるLAMPの寄せ集めとは対照的です。MEANと同様に、LAMPは、スタックで使用されるコンポーネント(Linux、Apache HTTPサーバー、MySQL、およびPHP、Perl、Pythonのいずれか)の頭字語です。スタックの各部分には、他の部分との共通点はほとんどありません。 

これは、LAMPスタックが劣っていると言っているわけではありません。それはまだ広く使用されており、スタック内の各要素は依然として活発な開発コミュニティから恩恵を受けています。しかし、MEANが提供する概念の一貫性は恩恵です。スタックのすべてのレベルで同じ言語と同じ言語の概念の多くを使用すると、開発者はスタック全体を一度に習得しやすくなります。

ほとんどのMEANスタックは、データベース、フロントエンド、バックエンド、実行エンジンの4つのコンポーネントすべてを備えています。これは、スタックがこれらの要素のみで構成されていることを意味するのではなく、コアを形成します。

MongoDB

他のNoSQLデータベースシステムと同様に、MongoDBはスキーマレス設計を使用します。データはJSON形式のドキュメントとして保存および取得されます。このドキュメントには、ネストされたフィールドをいくつでも含めることができます。この柔軟性により、MongoDBは、急速に変化する要件に対処する際の迅速なアプリケーション開発に最適です。

MongoDBの使用には、いくつかの注意点があります。1つは、MongoDBは、デフォルトでは安全ではないという評判があります。実稼働環境にデプロイする場合は、セキュリティで保護するための手順を実行する必要があります。また、リレーショナルデータベースや他のNoSQLシステムを利用している開発者の場合は、MongoDBとその仕組みを理解するために時間を費やす必要があります。のMartinHellerは、のレビューでMongoDB 4を深く掘り下げ、MongoDBの内部、クエリ、および欠点について説明しています。

他のデータベースソリューションと同様に、MongoDBとJavaScriptコンポーネント間の通信には何らかのミドルウェアが必要です。MEANスタックの一般的な選択肢の1つは、マングースです。Mongooseは、接続性を提供するだけでなく、オブジェクトモデリング、アプリ側の検証、および新しいプロジェクトごとに再発明することに煩わされたくないその他の多くの機能を提供します。

Express.js 

Expressは、間違いなくNode.jsで最も広く使用されているWebアプリケーションフレームワークです。Expressは、基本的に最小限のプログラム可能なWebサーバーである、重要な機能の小さなセットのみを提供しますが、プラグインを介して拡張できます。この飾り気のないデザインは、Expressの軽量性とパフォーマンスを維持するのに役立ちます。

MEANアプリをExpress経由でユーザーに直接提供する必要があるとは何も言われていませんが、それは確かに一般的なシナリオです。別のアーキテクチャは、リバースプロキシとしてExpressの前にNginxやApacheなどの別のWebサーバーをデプロイすることです。これにより、負荷分散などの機能を別のリソースにオフロードできます。

Expressは意図的に最小限に抑えられているため、概念的なオーバーヘッドはそれほど多くありません。Expressjs.comのチュートリアルでは、基本の概要からデータベースの接続などまで簡単に説明できます。

Angular

Angular(以前のAngularJS)は、MEANアプリケーションのフロントエンドを構築するために使用されます。Angularは、ブラウザーのJavaScriptを使用してサーバー提供のデータをHTMLテンプレートにフォーマットするため、Webページをレンダリングする作業の多くをクライアントにオフロードできます。多くの単一ページのWebアプリは、フロントエンドでAngularを使用して構築されています。

重要な注意点の1つ:開発者は、JavaScriptにコンパイルされるJavaScriptのような型付き言語であるTypeScriptで記述することにより、Angularを操作します。一部の人々にとって、これはMEANスタックの基本概念の1つである、JavaScriptがどこでも排他的に使用されるという違反です。ただし、TypeScriptはJavaScriptに近いいとこであるため、2つの間の移行は、他の言語の場合ほど不快ではありません。

Angularを深く掘り下げるために、のMartinHellerがカバーしています。彼のAngularチュートリアルでは、最新のAngularWebアプリの作成について説明します。

Node.js 

最後になりましたが、ほとんどの場合、Node.jsがあります。これはMEANWebアプリケーションのサーバー側を強化するJavaScriptランタイムです。Nodeは、ChromeWebブラウザで実行されるのと同じJavaScriptエンジンであるGoogleのV8JavaScriptエンジンに基づいています。ノードはクロスプラットフォームであり、サーバーとクライアントの両方で実行され、Apacheなどの従来のWebサーバーに比べて特定のパフォーマンス上の利点があります。 

Node.jsは、従来のWebサーバーとは異なるアプローチでWeb要求を処理します。従来のアプローチでは、サーバーは新しい実行スレッドを生成するか、要求を処理するために新しいプロセスをフォークします。スレッドの生成はフォークプロセスよりも効率的ですが、どちらもかなりのオーバーヘッドが伴います。スレッドの数が多いと、負荷の高いシステムがスレッドのスケジューリングとコンテキストスイッチングに貴重なサイクルを費やし、遅延が追加され、スケーラビリティとスループットに制限が課される可能性があります。 

Node.jsははるかに効率的です。ノードは、システムに登録されたシングルスレッドのイベントループを実行して接続を処理し、新しい接続ごとにJavaScriptコールバック関数を起動します。コールバック関数は、非ブロッキングI / O呼び出しで要求を処理でき、必要に応じて、プールからスレッドを生成して、ブロッキングまたはCPUを集中的に使用する操作を実行し、CPUコア間で負荷分散を行うことができます。

Node.jsは、Apache HTTPサーバー、ASP.NET、Ruby on Rails、Javaアプリケーションサーバーなど、スレッドで拡張できるほとんどの競合アーキテクチャよりも多くの接続を処理するために必要なメモリが少なくて済みます。したがって、Nodeは、Webサーバー、REST API、およびチャットアプリやゲームなどのリアルタイムアプリケーションを構築するための非常に人気のある選択肢になりました。MEANスタックを定義するコンポーネントが1つある場合、それはNode.jsです。 

Node.jsの概要については、MartinHellerの説明を参照してください。Nodeの開発を開始するには、彼のNode.jsチュートリアルを参照してください。 

MEANスタックの利点と利点 

連携して動作するこれらの4つのコンポーネントは、すべての問題の解決策ではありませんが、現代の開発におけるニッチを確実に見つけました。IBMは、MEANスタックが法案に適合する領域を分類します。スケーラブルで多数のユーザーを同時に処理できるため、MEANスタックはクラウドネイティブアプリに特に適しています。Angularフロントエンドは、シングルページアプリケーションにも最適です。例は次のとおりです。

  • 経費追跡アプリ
  • ニュースアグリゲーションサイト
  • マッピングとロケーションアプリ

MEAN vs. MERN

頭字語「MERN」は、Angularの代わりにReact.jsを使用するMEANスタックを表すために使用されることがあります。 Reactはフレームワークであり、Angularのような本格的なライブラリではありません。また、ReactをJavaScriptベースのスタックにスワップすることには長所と短所があります。簡単に言うと、Reactは習得が容易であり、ほとんどの開発者は、本格的なAngularアプリを作成してテストするよりも速くReactコードを作成してテストできます。 Reactはまた、より優れたモバイルフロントエンドを生み出します。一方、Angularコードはより安定していて、クリーンで、パフォーマンスが高くなっています。一般的に、Angularはエンタープライズクラスの開発に最適です。

しかし、この選択肢が利用できるという事実は、MEANが開発者にとって限定された拘束衣ではないことを示しています。正規の4つのレイヤーの1つに異なるコンポーネントを交換できるだけでなく、補完的なコンポーネントを追加することもできます。たとえば、RedisやMemcachedなどのキャッシュシステムをExpress内で使用して、リクエストへの応答を高速化できます。

MEANスタック開発者

MEANスタック開発者になるスキルを身に付けるには、基本的に、ここで説明した特定のJavaScriptツールのセットに焦点を当てたフルスタック開発者になる必要があります。ただし、MEANスタックの人気は、多くの求人広告がMEAN固有のスキルを持つフルスタック開発者を対象としていることを意味します。Guru99は、これらのジョブの1つを妨害するための前提条件を分解します。基本的なMEANスタックコンポーネントに精通しているだけでなく、MEANスタック開発者は次のことを十分に理解している必要があります。

  • フロントエンドとバックエンドのプロセス
  • HTMLとCSS
  • プログラミングテンプレートとアーキテクチャ設計ガイドライン
  • Web開発、継続的インテグレーション、およびクラウドテクノロジー
  • データベースアーキテクチャ
  • ソフトウェア開発ライフサイクル(SDLC)とそれがアジャイル環境で開発するのはどのようなものか

MEANスタック開発者の給与はいくらですか?経験と雇用主に基づく範囲は常にありますが、それは間違いなく儲かる分野です。2019年12月の時点で、Neuvoo.comによると、MEANスタック開発者が期待できる給与の中央値は年間約125,000ドルです。Indeed.comは、MEANスタック開発者をより一般的にフルスタック開発者にまとめ、通常の年俸を約112,000ドルに固定しています。

MEANスタックチュートリアル

技術的な基本に慣れていて、MEANスタックに飛び込んで学ぶ準備ができていますか?あなたが始めることができるそこにたくさんの無料のチュートリアルがあります。Angular Templatesサイトには、MEANスタックを使用して簡単なWebサイトを構築するプロセスをガイドする特に徹底的なチュートリアルがあります。TutorialsPointには、MEANスタックを使用して単一ページのWebアプリケーションを構築するための優れたガイドがあります。手を汚して頑張ってください!