Node.jsでの最強は本当にExpressなのか

今現在、Node.jsのフレームワークを使おうと思って調べた時、まず筆頭に挙がってくるのがExpressです。というか最早Express一強と言っても過言ではない状況です。
とはいえ、当然のことながらNode.jsには他にも色々なフレームワークが存在しています。
ということで、特にExpressに不満があったりするわけではないですが、今回は敢えて他のフレームワークも使ってみようかなと思います。
Hapi
、Koa
、Meteor
というフレームワークを使い、それそれで
localhost:3000にアクセスしたら「hello world」とブラウザに表示される
というところまで実装してみます。実装に関してはそれぞれのサイトに記載されている記法に出来るだけ則りながら行います。
Hapi
まずはHapiを用います。
今回は”sample-hapi”という空のディレクトリを用意しました。sample-hapiの中で
npm init -y
npm i -s hapi
とコマンドを打つとHapiのインストール完了です。
続いて、sample-hapiの中に”server.js”という名前で
'use strict';
const Hapi=require('hapi');
const server=Hapi.server({
host:'localhost',
port:3000
});
server.route({
method:'GET',
path:'/',
handler:function(request,h) {
return'hello world';
}
});
async function start() {
try {
await server.start();
}
catch (err) {
console.log(err);
process.exit(1);
}
console.log('Server running at:', server.info.uri);
};
start();
というファイルを用意します。
あとは
npm start
とコマンドを打ち、localhost:3000にアクセスすると
無事表示されました。
viewなどを表示するとなるとまた別途用意しなければならないのですが。APIサーバーなどの実装ではExpressよりも迅速に実装できそうです。
さらにHapiはデフォルトのオプションも豊富で、Expressとは違い新たに追加せずとも実現できる機能も多いです。
書き方もJSONっぽくて明快です。
Koa
続いてKoaです。
実はExpressと同じ製作者によって作られています。なので考え方も近いフレームワークだと言われています。
こちらも先ほどと同様に”sample-koa”という空のディレクトリを用意し、その中で
npm init -y
npm i -s koa
を実行するとインストール完了です。
(ちなみに上記のやり方でインストールされるのはv1と呼ばれるもので、現在v2もリリースされていますが、公式ページやGithubの導入方がv1のやり方を記載しているので今回はv1で実装します)
インストールが完了したら、”app.js”という名前で
const Koa = require('koa');
const app = new Koa();
app.use(ctx => {
ctx.body = 'hello world';
});
app.listen(3000);
というファイルを用意し、
node app.js
というコマンドを実行すると、
無事実装されました。
書いたのはたったの6行です。
また、プラグインを導入すればルーティングも可能だそうです。ただ、作者が同じだけにルーティングの記法もExpressに似ていて、そこまでするんであれば最初からExpressを使った方がいい気もします…。
Meteor
最後はMeteorです。
Meteorはフルスタックフレームワークで、実はGithubのスターの数でいうとExpressよりMeteorの方が上
です。
導入から何から上記の二つとは違います。まず
curl https://install.meteor.com/ | sh
でMeteorをインストールします。Meteorには雛形を生成する機能が用意されているので、今までに倣って”sample-meteor”というアプリケーションを作るのであれば
meteor create sample-meteor
というコマンドで作成できます。更に、
cd sample-meteor
meteor npm install
で準備が整い、ここで
meteor
というコマンドを実行すると、localhost:3000でボタンのクリック数をカウントするという、”hello world”を表示させるよりも手が込んでる雛形が最初から提供されています。
ここで無理やり”hello world”と表示させるだけのページにするとするならば、sample-meteorの中のclient/main.htmlというファイルを
<head>
<title>sample-meteor</title>
</head>
<body>
<h1>hello world</h1>
</body>
と書き換え、再び
meteor
で再起動すると、
無事表示されます。
まとめ
個人的にはMeteorはかなり魅力的に映りました。モバイルアプリも作成できるそうです。
ただ難点としては、Githubのスター数からわかるように性能は高い評価を得ているものの、何かしら有名なサイトやアプリとして起用されたことがなく、そのせいかイマイチ広まっていない点です。
広まっていないということはユーザーも少なく、それだけMeteorの実装に関する文献やサイトが見つからないということなので、行き詰まった際はかなり困ってしまうことになりそうです。
Expressはほぼ一強という地位を築いた時点でユーザーも増え、その分Expressに関する資料も大量に見つかるので、実装する上での心強さという点では分があると言わざるを得ません。
また、Expressは必要な機能はその都度付け加えていくという考え方なので最初からフルスタックのMeteorに比べて軽量ですし、設計も柔軟です。
やはりExpressは強かったです。
とはいえMeteorはちょっと使ってみたくなったので、隙を見て何か作れたらなと思います。