Raspberry PiとNode.jsで作る独立稼働モバイルサーバ

2013年8月22日(木)
渡辺 知男

Raspberry Piを購入したきっかけ

筆者がRaspberry Piを購入したのは、3,500円程度でLinuxが動くという理由からでした。よく使用するArduino Uno※1が3,000円くらいでマイコンレベルなのに比べると、性能的にはるかに安かったのです。しかし、買った時点では特に何に使おうかは考えていませんでした。とりあえず起動して、安いのにXウィンドウ動いてスゴイな、という印象でした。ところがふとしたことから、次に取り上げるNode.jsが動くらしいという情報を得て、本格的にいじり始めました。

まずはNode.jsをRaspberry Piにインストールして、チャットアプリを作成するところまでを説明していこうと思います。後半ではRaspberry PiでNode.jsを使ったプロトタイピングの例を紹介します。

  • ※1 Arduino Uno: プロトタイピングデバイスとも呼ばれる。初心者でも使える小型マイコンボード

Node.jsとは

Node.jsはサーバーサイドJavaScriptとも呼ばれ、サーバ側もクライアント側もJavaScriptで記述できるのが大きな特徴です。またNode.jsは大体の場合、WebSocketの実装であるSocket.IOモジュールと組み合わせて使われ、リアルタイムWebを実現するためのサーバとして利用されるパターンが多いようです。Node.jsのインストールからSocket.IOを使ったチャットアプリの作成までの過程を、順を追って説明していきます。

準備

まずはRaspberry Piに公式のカーネル一式がインストールされて起動していて、リモートログインしている、という前提から始めます。早速Node.jsをインストールするのですが、Node.jsは開発のスピードが速くバージョンがすぐに上がってしまいます。そのため、Node.jsのバージョンを管理するためのマネージャをまずインストールし、実際に使用するバージョンのNode.jsをインストールするようにします。今回はnodebrewというバージョンマネージャを使用します。

pi@raspberry ~ $ sudo apt-get update
pi@raspberry ~ $ sudo apt-get install vim # エディタとしてvimをインストールしておく(他でもよい)
pi@raspberry ~ $ curl -L git.io/nodebrew | perl - setup

.bashrcにパス(export PATH=$HOME/.nodebrew/current/bin:$PATH)を追加して読み込み直します。

pi@raspberry ~ $ vim .bashrc  # エディタで"export PATH=$HOME/.nodebrew/current/bin:$PATH" を追加
pi@raspberry ~ $ source .bashrc

Node.jsのインストール

Node.jsの最新バージョンはv0.11.15(8/12現在)ですが、今回はv0.10.12を使用します。Raspberry Piは、以前はソースを落としてきてセルフビルドに2時間近く掛かっていたのですが、現在は下記のようにバイナリをインストールできるようになっています。

pi@raspberry ~ $ nodebrew install-binary v0.10.12

このバージョンを使えるように下記コマンドを使用します。

pi@raspberry ~ $ nodebrew use v0.10.12
v0.10.12

current: v0.10.12

複数のバージョンをインストールしたい場合は、同じように他のバージョンもインストールできます。使用するバージョンを切り替える場合は、上記コマンドで使用するバージョンを指定して切り替えられます。インストールされているNode.jsのバージョンを調べるには、下記コマンドを使用します。

pi@raspberry ~ $ nodebrew list

これでNode.jsのインストールは完了です。

expressのインストール

次にNode.jsでよく使われるWebフレームワークのexpressをインストールします。ここでnpmというコマンドを使いますが、これはnodebrewのインストール時に同時にインストールされています。npm : Node Package Manager で、Node.jsに関するインストールその他を管理するモジュールです。通常npmコマンドを使用してインストールすると、カレントディレクトリに展開されます。今回のexpressはカレントディレクトリではなく、-gオプションを付けてグローバルインストールしておきます。

pi@raspberry ~ $ npm install -g express

expressを使ったサンプルアプリを動かす

では、expressを使ってNode.jsサーバを作って動かしてみましょう。expressを使う時にテンプレートエンジンとして-eオプションでEJSを指定します。

pi@raspberry ~ $ mkdir work # workディレクトリ作成
pi@raspberry ~ $ cd work
pi@raspberry ~/work $ express -e sample

   create : sample
   create : sample/package.json
   create : sample/app.js
   create : sample/public
   create : sample/public/javascripts
   create : sample/public/images
   create : sample/public/stylesheets
   create : sample/public/stylesheets/style.css
   create : sample/routes
   create : sample/routes/index.js
   create : sample/routes/user.js
   create : sample/views
   create : sample/views/index.ejs

   install dependencies:
     $ cd sample && npm install

   run the app:
     $ node app

出力された指示通りにします

pi@raspberry ~/work $ cd samaple && npm install

さて、あとは実行するだけです。ifconfigで予めRaspberry PIのIPアドレスを調べておいてください。

pi@raspberry ~/work/sample $ node app.js
Express server listening on port 3000

PCなどのブラウザから"Raspberry PIのIP"である3000ポートにアクセスして、下記の画面が表示されればOKです。これでNode.jsを使ったWebサーバが動作しました。

図1: Express起動画面

フリービット株式会社 R&D部所属 元メーカ系組込み系エンジニア。今はRaspberry Pi、Android、Arduinoなど、WebとMobileとHardwareの組合せ系エンジニア。デモや講演なども承ります\(^o^)/
Twitter: @tomo_watanabe / blog : http://tomowatanabe.hatenablog.com/

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています