より高機能なWebサービスを提供するためには、クライアント側で動いているHTMLやJavaScriptに加えてサーバー側のPHPなどのプログラムを活用するべきです。
しかしPHPやJava、PythonなどはJavaScriptと書き方が結構異なっていたりして慣れない… そんな時に活躍するのが「Node.js」です。 サーバー側でJavaScriptを動かせるようなシステムであり、これを使いこなせばフロントもバックもJavaScriptで完結してしまいます。
今回はそんな「Node.js」をレンタルサーバー(私の場合はXserver)に導入する方法を紹介します。
Node.jsとは
まず最初に、そもそもNode.jsとは何ぞやというのは軽く説明していきます。
サーバー側でJSを動かす
Node.jsを説明しろと言われたらこの一言につきます。「サーバー側でJSを動かす」
本来Google Chromeなどのブラウザ上でしか動作しないJavaScriptをサーバー側で実行できるようにしたもので、他のサーバーサイドで動かすPHPなどのプラグラムと同じように、サーバー内のファイル操作ができたりデータベース接続などの処理もできます。
しかもそれが普段使い慣れている&比較的扱いやすい言語であるJavaScriptでできるのですから、非常に便利というわけですね。 フロントエンド専門だった人でもバックの開発がしやすくなるというメリットがあるようです。
大量アクセスに強い
Webサーバーを建てるためのアプリケーションと言ったら一番有名なのはApacheでしょう。しかしApacheには弱みがあり、同時に数万リクエスト程度しか扱うことができず(C10K問題) 大量アクセスに弱いというところですね。
一方でNode.jsが建てることのできるWebサーバーでは「ノンブロッキングI/O方式」によってリクエスト数の制限が解除され、サーバーの処理能力を思う存分発揮することができます。
ただしこの「C10K問題」に関してはNode.js以外にも、例えばNginx(エンジンエックス)というWebサーバーアプリケーションでも解決されていて、現在多くのレンタルサーバーではApacheではなくNginxが動作しています。私が使っているXserverについてもそうですね。
そのため、Node.jsだけの強みというわけではないです。
Node.jsをレンタルサーバーに導入する
それでは早速、Node.jsをXserver(レンタルサーバー)に導入する方法を紹介していきます。
レンタルサーバーでは通常、管理者権限を使うことができないので、「Nodebrew」という専用のバージョン管理ツールを使っていきます。
私はなぜか「brew」系のバージョン管理ツールに「面倒くさい」とかの苦手意識があるのですが、今回導入してみたら割とあっさりできてびっくりですね。
SSH接続をする
前回、【1分で】Go言語をXserverに導入する簡単な方法【レンタルサーバー】という記事で紹介したように、Xserver上にプログラミングとかの環境を構築するためには必ずSSH接続が必要になってきます。
とはいえSSH接続はそこまで難しいものではありません。自分のレンタルサーバーの名前+SSH接続+方法みたいな感じで検索すればすぐに確認することができます。
Nodebrewをインストール
それではまず最初にNodebrewをインストールします。
$ curl -L git.io/nodebrew | perl - setup
curlというLinuxコマンドを使います。そしてダウンロードしたファイルをperlというコマンドでセットアップしています。 この一行を記述するだけでいとも簡単にインストールできますね。
パスを通す
続いてパスを通していきます。パスを通すというととても面倒くさいイメージがあるのですが、本当に一瞬で終わります。
$ vi ~/.bash_profile
export PATH=$HOME/.nodebrew/current/bin:$PATH
viコマンドでbash_profileの編集モードに入り、export ~ の記述を追記して保存するだけです。
そして反映させるために以下のコマンドを実行しましょう。
$ source ~/.bash_profile
こうすることで変更した設定を反映させることができます。
そして、nodebrewなどのコマンドを入力してエラーが起きないことを確認しましょう。
Node.jsのインストール
続いて、Node.jsをインストールしていきます。nodebrewを使うことで様々なバージョンのNode.jsを簡単にインストールすることができます。
$ nodebrew install stable
このコマンドを入力することで安定版の新しめのNode.jsを自動的にインストールしてくれます。
$ nodebrew list
そして上のコマンドを実行したら現在インストールされているNode.jsのバージョンリスト、および現在有効になっているバージョンを確認することができます。
最初は何も有効になってなかった気がします。 そこで、リストに出てきたバージョン(例えば v20.1.0)を覚えておくようにしてください。
$ nodebrew use v20.1.0 # 自分のバージョンを入力
$ node -v
そしてこの一行目のコマンドを実行することで指定のバージョンのNode.jsを有効にすることができます。 そして二行目のコマンドで、実際に稼働しているNode.jsのバージョンを確認できます。
これで導入完了… ですが、私の環境(Xserver)ではうまくいきませんでした。そこで、以下のようにしてv17.6.0に切り替えることでうまくいきました。
$ nodebrew install v17.6.0
$ nodebrew use v17.6.0
$ node -v
これでしっかりと動作するようになりました。
Node.jsを実行してみる
せっかくなので何かプログラムを作ってみましょう。
コマンドライン上から実行
まずはSSH上でお手軽に実行してみます。nodeというコマンドを入力するだけですぐに対話モードを利用することができるのですが、ここでは実際にjsファイルを作って実行してみます。
$ mkdir ~/sample
$ vi ~/sample/hello.js
console.log(process.argv[2]);
$ node ~/sample/hello.js "Hello World"
これは、コマンドライン上からの文字列入力をそのまま出力するプログラムです。非常にシンプルですね。
Web上から実行
Node.jsはWebサーバー機能もあって、それも目玉機能の一つなのですが、ここではPHPを経由して疑似CGIみたいなのをやってみます。 WordPress環境が構築されているのであればひとまずはこういった実行の仕方でも良いでしょう。
ひとまず、Node.jsのパスを確認しておきましょう。
$ which node
そしたら恐らく、「~/.nodebrew/current/bin/node」と表示されると思います。これをコピーしておきましょう。
Web上に公開されているディレクトリにtest.phpというファイルを新しく作り、以下のような記述をしましょう。
<?php
$t = $_GET["t"];
$interpreter = "~/.nodebrew/current/bin/node"; //Node.jsのパス
$file = "~/sample/hello.js"; //JSファイルのパス
$arg = "'{$t}'"; //実行引数
$cmd = implode(' ',[$interpreter,$file,$arg]); //コマンドを組み立てる
exec($cmd,$result);
echo $result[0]; //実行結果を表示
上のようなプログラムを設置して、ブラウザ上からアクセスしてみましょう。その時に、「test.php?t=Hello World」というようにtという名前のパラメータを指定してみましょう。
そしてアクセスしてみたらブラウザ上で表示結果が出てくるはずです。
これを応用すれば最小限のPHP+JavaScriptでフロントもバックも開発できますね。本来のNode.jsの使い方とちょっと違う気もしますが、レンタルサーバー+WordPressという環境ではこういう風に使うのがベストかもしれません。
Node.jsを使ってWebサーバーを建てたり、Apacheとかと共存させたいという場合は管理者権限が必要になってくるのでVPS等を借りるしかなさそうです。
私も今年中にVPSを借りる予定なので、その時にいろいろやってみようと思います。