LoginSignup
27
27

More than 5 years have passed since last update.

MEANスタックにおける開発環境構築

Last updated at Posted at 2016-10-20

MEANスタックとは

MongoDB,Express,AngularJS,Node.jsのソフトウェアバンドルのことである。Webアプリケーション開発に用いられる。このソフトウェアの組み合わせは、MongoDB開発者のValeri Karpovniにより、2013年4月30日にWeb上で提唱され、2014年以降より徐々に有名になってきた。

MEANスタックの提唱が行われた、Valeri Karpovniによるブログエントリ

MEANスタックの本来の思想を確認する事が出来ます。

The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js

特長

インターネット上で広く流布している説によれば、サーバサイドからクライアントサイドまでの開発言語がJavaScriptに一本化でき、Perl,PHP,Python,Ruby等のCGI言語を採用した場合と比較して学習コストが大幅に削減できる点が最大の特長であるとされている。しかし、実際にはサーバサイドJavaScriptとクライアントサイドJavaScriptではプログラミングパラダイムとAPI体系が大きく異なっているため、開発言語のJavaScriptへの統一自体は学習コストの低減にはあまり寄与していないと推測できる。

実際的には、LAMPスタックやRails等と比較して、下記の特長を持つと考えられる。

  • 従来難しかった、1つのスレッドに複数のコネクション処理を多重化する、シングルスレッドかつノンブロッキングなイベント駆動I/Oの容易なプログラミングが可能になる。従って、1コネクションに対し1スレッドを割り当てることを前提とした、従来型のHTTPサーバソフトウェアと比較して、処理効率を容易かつ飛躍的に高くできる。

  • クライアントサイドからサーバサイドのデータベースまで、やり取りするデータがJSON形式に一本化でき、データ形式の変換が無くなる。

MEANスタックにおける個々のソフトウェアの役割

MongoDB

ドキュメント指向のNoSQLデータベース

概要

JSON形式のデータをそのまま格納できるため、SQLデータベースと比較して、入出力時におけるデータ形式の変換がなく、オーバーヘッドも少なくなる。

入手方法

各OS向けに用意されたパッケージ管理システムから最新版がインストールできる。

Express

サーバサイドMVCフレームワーク

入手方法

Node.js上の追加パッケージとして提供される。

AngularJS

クライアントサイドMVWフレームワーク

概要

自身が採用するモデルをModel-View-Whatever(MVW)モデルとしており、MVC,MVVM等の様々なモデルを利用可能としている。

入手方法

クライアントサイドJavaScriptライブラリとして提供される。

Node.js

Google V8 JavaScript Engineに基づいた、イベント駆動I/Oを実現するサーバサイドJavaScript実行環境

概要

主にHTTPサーバの役割を果たす。C10K問題(10000個のコネクションが、同時に1台かつ1CPUのサーバに対して張られた際のサービス破綻の問題)を解決する手法である、シングルスレッドかつノンブロッキングなイベント駆動I/OをJavaScriptで容易にプログラムできるようにした事で話題になっている。Apache,Nginx等の、1コネクションに対して1スレッドを割り当てるマルチスレッド型のHTTPサーバソフトウェアよりも、圧倒的に省メモリかつ高速に動作する。

Node.jsの動作原理である、シングルスレッドかつノンブロッキングなイベント駆動I/Oでは、1つのコネクションのデータ入出力の待ち時間に、同じスレッドで別のコネクションの処理を開始することが出来る。従って、I/Oバウンドな処理に向いている。これは、HTTPサーバで一般的に行われる処理の内容と非常にマッチし、HTTPサーバの処理効率の向上に大きく寄与している。

従って、科学技術計算に代表されるようなCPUバウンドな処理をNode.jsのイベントループ内で多用することは、コネクションを全く捌けなくなる可能性が高まるため、あまり好ましくないと言える。

シングルスレッドかつノンブロッキングなイベント駆動型I/Oの特性上、1つのコアに対して1つのイベントループを割り当てて運用するべきである。

C10K問題に関する、数少ない解決策の1つである。

入手方法

各OS向けに用意されたパッケージ管理システムの他、公式サイトのバイナリパッケージ,ソースコードパッケージからもインストールできる。公式サイトでは常に安定版と最新版の両方を提供している。

YEOMANとは

下記のワークフローを一括して行えるようにするツールである。YEOMANの下位ではBowerとGruntが動作している。

YEOMANが扱うワークフロー

  1. クライアントサイドJavaScriptライブラリのインストールと依存関係管理
  2. WebアプリケーションのScaffolding
  3. Webアプリケーションの起動
  4. WebブラウザによるWebアプリケーションのプレビュー

実際の開発環境構築作業

世界で最も広く普及しているLinuxディストリビューションであるUbuntuを前提として、開発環境構築作業を進める。

WebアプリケーションのScaffold生成に必要なソフトウェア群のインストール

MEANスタックやYEOMANとYEOMANが依存するツール等、WebアプリケーションのScaffold生成に必要なソフトウェア群をインストールする。

MondoDB,Ruby,Compassのインストール

MongoDBと、Grunt用にRubyとCompassをインストールする。

sudo apt install mongodb ruby ruby-compass
sudo gem install compass

Node.jsのインストール

公式サイトからダウンロードできるソースコードをビルドしてインストールする。

パッケージのルートディレクトリに移動
sudo ./configure
sudo make
sudo make test
sudo make install

Node.js上の追加パッケージのインストール

sudo npm install generator-webapp generator-angular-fullstack generator-karma grunt-karma jit-grunt karma-phantomjs-launcher karma-jasmine gulp-cli bower express yo --save-dev

YEOMANを用いたScaffold生成&動作確認作業

次に、WebアプリケーションのScaffoldを生成する。

WebアプリケーションのScaffolding

sudo yo
キーボード操作で Angular Fullstack を選択し、エンターキーを押して処理を進める。

Webアプリケーションの起動とWebブラウザによるプレビュー

gulp serve
自動的にWebブラウザが起動し、Webアプリケーションが操作可能になる。

Node.jsの次世代: Vert.x

2009年に提供され始めたNode.jsに影響を受け、2012年にVert.xが提供され始めている。Vert.xはNode.jsと比較しても動作効率が高いと言うベンチマーク結果が出ている。

27
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
27