LoginSignup
38

More than 5 years have passed since last update.

Raspberry Pi への Node.js インストールとnvmでのバージョン管理

Last updated at Posted at 2016-10-21

Raspberry Pi のGPIOに色々なデバイスを接続しIoTを試しています。Node.jsとJohnny-fiveを使えばRaspberry PiでIoTを容易に実現できます。しかし,GPIOを使った入出力制御にはroot権限が必要でNode.js動作環境のセットアップに工夫が必要です。このページは,その工夫の備忘書きです。

1.概要

  1. RASBIAN JESSIE には node v0.10.29 が収容されていますが,現行のものと比べてかなり古いバージョンなのでアンインストールしv5.4.0をインストールします。
  2. nvm(node version manager)を使うとnodeのインストールとバージョンコントロールを極めて簡単に行うことができます。
  3. しかし,nvmの一般的方法でインストールしたnodeは複数ユーザで使う考慮がされてません。
  4. sudo node としてroot権限でnodeを動かそうとしても node: command not found となります。
  5. 上の不都合を回避するための環境設定が必要です。

2.前提

  1. RASBIAN JESSIEがインストールされ正しく動いていること。
  2. インターネットに接続していること。
  3. gitコマンドが有効になっていること。
  4. shell(bash)の操作に,ある程度習熟していること。

3.作業

  1. コンソールの表示を英語モードにします。
    日本語モードのままでもOKなのですが,条件によっては日本語フォントが表示できず操作への反応メッセージがトーフ(■)で表示され場合があるのでこれを回避するためです。
    $ export LANG=C

  2. gitコマンドの動作を確認します。
    $ git --version
    git version 2.1.4
    バージョン番号が帰ってくればgitコマンドは動作します。

  3. node v0.10.29をアンインストールします
    $ sudo apt-get autoremove nodejs

  4. nvmをインストールするディレクトリ(/usr/local/nvm)を作成しアトリビュートを変更します
    $ sudo mkdir /usr/local/nvm
    $ sudo chmod 777 /usr/local/nvm

  5. nvm.gitリポジトリのクローンを作成します
    $ git clone https://github.com/creationix/nvm.git /usr/local/nvm

  6. nvmを使えるようにします
    $ source /usr/local/nvm/nvm.sh

  7. nodeをインストールします
    nvmでインストールできるnodeのバージョン一覧を表示
    $ nvm ls-remote
    v5.4.0をインストール
    $ nvm install v5.4.0

  8. node, npm のバージョン表示して動作することを確認します
    $ node -v
    v5.4.0
    $ npm -v
    3.3.12

  9. ログイン時にnvm,nodeの起動設定を行うようにします
    /etc/profile.d/ディレクトリ配下に次の内容のnvm.shを作成します。
    $ sudo vi /etc/profile.d/nvm.sh
    または
    $ sudo nano /etc/profile.d/nvm.sh
    でnvm.shを作成し,次の行を記述して保存
    source /usr/local/nvm/nvm.sh

    node-v5.4.0 が node コマンドで起動するようにdefaultエイリアスを設定します。
    $ nvm alias default v5.4.0

    以上の設定でログイン時にnvm.shが実行され node コマンドへの v5.4.0の割り付けとnvm, npmへのパスが設定されます。

  10. sudo node が動くようにします
    $ sudo visudo
    nanoエディタが起動しsudoの動作定義ファイルが開きます。
    次の行をコメントアウトします。
    #Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
    次の行を追加します。
    Defaults env_keep += "PATH"
    sudoの動作環境に現在のユーザのコマンド・パスを引き渡す設定です。

4.NodeでGPIOを動かす

  1. johnny-five他のパッケージをインストールします
    johnny-fiveパッケージのインストール
    $ npm install johnny-five
    raspi-ioパッケージのインストール
    $ npm install raspi-io

  2. GPIOの7番ピンに接続したLEDを1秒(1000mS)間隔で点滅させます。
    次のコードを記述したソース・ファイルgpio-led7.jsを作成します。

    var raspi = require('raspi-io');
    var five = require('johnny-five');
    var board = new five.Board({
         io: new raspi();
    });
    board.on('ready', function() {
         var led = new five.led('P1-7');
         led.blink(1000);
    });

    sudoで実行します
    $ sudo node gipo-led7.js
    1453297162821 Device(s) RaspberryPi-IO
    1453297162907 Connected RaspberryPi-IO
    1453297162937 Repl Initialized
    >>

    一般ユーザで実行して見ます
    $ node gpio-led7.js
    wiringPiSetup: Must be root. (Did you forget sudo?)
    Aborted
    GPIOを操作するプログラムは sudo で実行しないと動作しません。

5.Node.jsのバージョン管理

  1. Node.jsの開発スピードは非常に早く頻繁にバージョンアップされます。 nvmは使用するNode.jsのバージョンコントロールを強力にかつ簡単に行なえます。

  2. Node.jsのバージョンリストを表示する。
    $ nvm ls-remote
    リストが表示されます。青文字のバージョンは現在自分がaliasに設定している(node で起動する)バージョンです。 末尾が奇数のバージョンは開発版,偶数のものが安定版です。

  3. 最新版をインストールする
    2016.06.18時点での最新安定版v6.2.2をインストールします。
    $ nvm install v6.2.2
    Downloading https://nodejs.org/dist/v6.2.2/node-v6.2.2-linux-...
    ######################################################### 100.0%
    Now using node v6.2.2 (npm v3.9.5)

  4. インストールされているNode.jsのリストを表示する
    $nvm ls
         v5.4.0
    -> v6.2.2
    default -> v5.4.0
    node -> stable (-> v6.2.2) (default)
    stable -> 6.2 (-> v6.2.2) (default)
    iojs -> N/A (default)
    v5.4.0とv6.2.2がインストールされているのがわかります

  5. defaultをv6.2.2にする
    $ nvm alias default v6.2.2

  6. 旧バージョンを使う
    ソースコードが新バージョンに対応せず旧バージョンのNode.jsで実行したいときは
    $ nvm use v5.4.0
    として,一時的にnodeのaliasをv5.4.0に変更します。

  7. 旧バージョンのアンインストール
    $ nvm uninstall v5.4.0

原典 http://make.kosakalab.com/make/electronic-work/nodejs_raspi/

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38