多様なソフトウェアスタック
今日は、
プログラミング学習を進めていくと出会うであろう、
について紹介します。
ソフトウェアスタックというのは、簡単に言うと
開発に必要なソフトウェアをまとめたもの
です。
ソフトウェアバンドルなどとも呼ばれています。ソフトウェア / 技術の組み合わせ、開発環境に近い意味で使われることもあるようです。
色々な場面で使われる用語ですが、今日は、Webアプリ開発でどんなソフトウェアスタックがあるかを見ていきます。
かなりの種類があるので、大きく3つに分けています。
- JAM Stack
- MEN系
- AMP系
です。
どのソフトウェアスタックも広く使われているのですが、
注目されはじめた時期をさかのぼって、AMP系から見ていきます。
AMP系
AMPとは、
- Apache
- MySQL / MariaDB
- Perl / PHP / Python
の頭文字を取ったものです。
それぞれ、
- Apache → Webサーバーのソフトウェア
- MySQL / MariaDB → データベース管理システム
- Perl / PHP / Python → サーバーサイドで使われるプログラミング言語
という役割があります。
データベース管理システムでは、MySQLかMariaDBのどちらかが使用されることが多いので、このような書き方になっています。サーバーサイドの言語も3つのうちのどれかが使われることが多いので、3つ併記しています。この3言語を合わせてP言語と呼ぶこともあります。
ここではそれぞれの役割の詳細が分からなくても大丈夫です。
簡単にいうと、これらAMPと、OSを組み合わせてWeb開発環境を構築することができる、ということです。
AMP系では最後の1ピース(OS)に、いろいろと選択肢があるため、多くの種類があります。
オープンソースソフトウェアを組み合わせる
- LAMP Linux、Apache、MariaDB、MySQL、Perl、PHP、Python
Windows版の
- WAMP Windows Server、Apache、MariaDB、MySQL、Perl、PHP、Python
Mac版の
- MAMP macOS、Apache、MariaDB、MySQL、Perl、PHP、Python
が知られています。
AMPの組み合わせからは外れますが、
データベース管理システムに、PostgreSQLを採用した
- LAPP Linux、Apache、PostgreSQL、Perl、PHP、Python
Firebirdを採用した
- FLAP Firebird、Linux、Apache、Perl、PHP、Python
などもあります。
また、Microsoft関連のソフトウェアベースに開発環境を構築する方法もあります。WAMPからさらにMicrosoft関連のソフトを増やすイメージです。
Apacheの代わりにWindowsのIISを、MySQL / MariaDBの代わりにMicrosoft SQL Serverを、P言語の代わりにWebアプリケーション開発フレームワークのMicrosoft製ASP.NETを採用して、
- WISA Windows Server、IIS、SQL Server、ASP.NET
となります。
すべてMicrosoft関連で揃えなくても、WAMPとの折衷案という形で、
- WIMP Windows Server、IIS、MariaDB、MySQ、Perl、PHP、Python
- WISP Windows Server、IIS、SQL Server、Perl、PHP、Python
ということもあります。
このような、LAMPをはじめとするAMP系の環境は2000年代以降、広く使われてきました。
MEN系
次に、
MEN系のソフトウェアスタック
です。
2010年代に入り、AMP系のソフトウェアスタックに加え、MEN系のソフトウェアスタックが注目されてきました。
MENとは、
- MongoDB
- Express.js
- Node.js
の頭文字を取ったものです。
- MongoDB → ドキュメント指向データベース
- Express.js → Node.jsのWebアプリケーションフレームワーク
- Node.js → サーバサイドでも使えるJavaScript環境
です。
MongoDBは、MySQLやMariaDBなどのRDBMS(リレーショナルデータベースマネジメントシステム)ではなく、ドキュメント指向データベースです。ここでは、データベース管理方法が、MySQL / MariaDBと異なる、という認識で大丈夫です。
Node.jsは、JavaScript環境です。Node.jsを使うことで、本来Webブラウザで動くプログラムにフォーカスしていたJavaScriptを他の環境でも使用できるようになります。AMP系でのP言語の役割に近づけることができます。
Express.jsは、Node.jsで使用することができるWebアプリ開発用のフレームワークです。
MEN系の組み合わせの特徴は、
基本的にJavaScriptで開発できる
ということです。
このMENに、フロントエンドの開発に使うJavaScriptのフレームワークが加わり、
- MEAN MongoDB、Express.js、AngularJS / Angular、Node.js
- MERN MongoDB、Express.js、React、Node.js
- MEVN MongoDB、Express.js、Vue.js、Node.js
というバリエーションができます。
AngularJS、React、Vue.jsは、JavaScriptのフレームワークです。
MEAN環境では、AngularJSの代わりに、TypeScriptのフレームワークであるAngularを使用することもあります。
TypeScriptは、JavaScriptを拡張したプログラミング言語です。
開発の多くの部分をJavaScriptを用いて行える、MEN系のソフトウェアスタックは、2010年代半ばから人気を集めてきました。
JAM Stack
そして、
です。
JAMは、
- JavaScript
- API
- Markup language
の頭文字です。
JAMのJ、JavaScriptは、Webサイト、Webアプリ、モバイルアプリなど幅広い開発で使用されているプログラミング言語です。
JAMのA、APIとは、アプリケーションプログラミングインターフェースの略です。
ソフトウェアの一部の機能を、外部から利用するためのインターフェースの仕様のことです。
簡単に言えば、APIを使用することで、いろいろなソフトウェアの機能を外部の人も活用できるようになります。
例えば、
を使うと、YouTubeの様々なデータをまとめて取り扱うことができます。
今では多様なAPIが公開されており、これらをうまく使うことで開発効率を上げることができます。
JAMのMは、マークアップ言語です。
マークアップ言語は、視覚表現、文章構造などを記述するための言語です。
- HTML
- TeX
などが代表例です。
HTMLは、Webページを作成する際に使用するマークアップ言語です。
TeXは、文字やグラフなど様々な要素を任意に配置した文書を作成するためのマークアップ言語です。数式の記述が簡単になるので、科学技術系の論文や記事執筆に広く用いられています。
このJAM Stackは、
Netlify創業者のMathias Biilmann氏が、近年活用を呼び掛けている開発環境です。
Netlifyは、サンフランシスコを拠点とするクラウドコンピューティングの会社です。Web開発関連の様々なサービスを提供しています。2014年創業と比較的若い会社ですが、GoogleやFacebookなど名だたる企業がNetlifyのサービスを使っています。
JAM Stackでは、Web開発において
- セキュリティの向上
- 高いパフォーマンス
などが実現できる、ということをMathias Biilmann氏は主張しています。
- サーバーの処理をAPIに代替、攻撃対象を小さくする → セキュリティの向上
- CDNでコンテンツを公開 → 高いパフォーマンス
を実現すると考えられています。
CDNとはコンテンツデリバリーネットワークのことです。
Webコンテンツをインターネットで配信するために最適化されたネットワークのことを指します。
JAM Stackでは、サーバーレスな環境で、コンテンツを公開します。Webサーバーに依存しない構成なので、高速にコンテンツを公開できます。
近年、様々なツールやサービスが提供され、JAM Stackを活用する土壌が整ってきたことから広く注目されるようになってきています。
一長一短
変化のスピードが速いWeb開発でのソフトウェアスタックを見てみると、
- 思ったよりもJavaScriptで出来そうなことが多い
- jQueryが一回も登場しない…
- JavaScriptがプログラミング学習で人気の理由が分かった
など、プログラミング学習初学者から10年以上前にJavaScriptを使っていた、といった色々な視点から様々な意見が出ると思います。
Web開発環境では、
日々様々なアイデア、ツール、環境が提案されています。
AMP系 → MEN系 → JAM Stack
と常に新しいパラダイムが出てきています。
ただ、これは、必ずしもAMP系が古くて全く使われていない、ということ
ではないと思います。
今でも、AMP系が使われるケースはあります。
新しいソフトウェアスタックが、すべて良いということではなく、
使用する場面によって、他の選択肢と比較しつつ、どのソフトウェアスタックがいいか
が決まる、ということだと思います。
プログラミングを学んでいく時には、
これまでの流れを踏まえつつ、新しいソフトウェアスタックについて学んで行くと、
選択肢が増えるのではないかと思います。
コメント