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というバージョンマネージャを使用します。

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

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

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

Node.jsのインストール

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

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

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

1pi@raspberry ~ $ nodebrew use v0.10.12
2v0.10.12
3 
4current: v0.10.12

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

1pi@raspberry ~ $ nodebrew list

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

expressのインストール

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

1pi@raspberry ~ $ npm install -g express

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

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

01pi@raspberry ~ $ mkdir work # workディレクトリ作成
02pi@raspberry ~ $ cd work
03pi@raspberry ~/work $ express -e sample
04 
05   create : sample
06   create : sample/package.json
07   create : sample/app.js
08   create : sample/public
09   create : sample/public/javascripts
10   create : sample/public/images
11   create : sample/public/stylesheets
12   create : sample/public/stylesheets/style.css
13   create : sample/routes
14   create : sample/routes/index.js
15   create : sample/routes/user.js
16   create : sample/views
17   create : sample/views/index.ejs
18 
19   install dependencies:
20     $ cd sample && npm install
21 
22   run the app:
23     $ node app

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

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

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

1pi@raspberry ~/work/sample $ node app.js
2Express 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メルマガ会員のサービス内容を見る

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