こんにちは、エンジニアののびすけです。
突然ですが、みなさんは「NodeBots」という言葉を知っていますか?
最近、海外のNode.js界隈では、Node.jsを使ったハードウェアの制御が流行ってきています。今回の記事では、先日おこなわれたNode.jsのイベント「東京Node学園20時限目」で話してきた内容をもとに、NodeBotsについてやNodeBotsの学び方を取り上げたいと思います。
NodeBotsとは
NodeBotsとは、Node.jsでハードウェアを制御するイベントやコミュニティの総称です。世界中でおこなわれている取り組みで、International NodeBots Dayという世界で同時開催されるイベントもあります。今年は7月30日におこなわれ、日本でのイベントは僕も参加する予定です。
このような大規模なイベントが発生するくらい、Web界隈の人からもIoTやハードウェア関連の技術は注目されているのだと思います。
JavaScript Roboticsの盛り上がりはWeb技術との連携がスムーズだからなのでは
JavaScriptでハードウェアを制御することや、周辺知識を「JavaScript Robotics」と呼びます。
はじめは、JavaScriptはブラウザだけで動作するプログラミング言語でした。その後、Node.jsなどのサーバーサイドでも動作するJavaScriptが主流になっていき、クロスプラットフォームでの実行を想定した動きが活発になってきます。
Titanium MobileやPhoneGap、最近ではReactNativeなどスマートフォンアプリケーションをJavaScriptで開発する技術も流行りだしてきます。また、Electronの登場によって、デスクトップアプリケーションの開発もJavaScriptでできるようになってきました。この流れの中で、最近ではハードウェアやIoTデバイスなどにも対応できる幅を広げてきています。
Go言語でスマホアプリ開発ができるようになったり、Swiftでサーバーサイド開発ができるようになったりと、さまざまな言語がクロスプラットフォームで展開される兆候がありますが、未だにブラウザはJavaScript一択です。JavaScript Roboticsが盛り上がっているのは、ブラウザ側と同じ言語を採用することで、Web技術との連携がスムーズにできるからだと感じています。
NodeBotsはこの盛り上がりの中から生まれた、今勢いのある取り組みです。
JavaScript Roboticsの代表的ライブラリ 「Johnny-Five」
JavaScript Roboticsに入門するにあたり、Johnny-FiveというNode.jsのライブラリを使うことが主流となっています。O’Reillyが出版しているJavaScript Roboticsの書籍では、Johnny-Fiveを使ってハードウェアを制御する方法がメインで紹介されています。
電子工作の入門としてはArduinoというマイコンボードが有名です。通常は専用のIDEと専用のArduino言語を用いて開発しますが、Johnny-FiveならNode.jsでArduinoを制御することができます。
また、Johnny-FiveはArduino以外にも、Raspberry PiやIntel Edisonなどさまざまなマイコンボードに対応しています。
実際に始める際は、以下の記事を参考にしてみてください。
Johnny-Fiveを学べる「NodeBot-Workshop」
Johnny-Fiveをどうやって使えばいいか分からない、という人もいるかと思います。そんな方にオススメなのがNodeBot Workshopというツールです。NodeBot WorkshopはNodeSchoolというNode.jsや関連する技術を学ぶイベントやコミュニティの総称です。国内でもNode.js日本ユーザーグループが主催しているNodeSchool Tokyoなどが開催されています。
NodeSchoolにはさまざまなカリキュラムが存在しています。
- JavaScriptを学ぶ「javascripting」
- Node.jsを学ぶ「learnyounode」
- npmを学ぶ「how-to-npm」
といった代表的なものもあれば、
- Reactを学べる「learnyoureact」
- Web Audio APIを学べる「web-audio-school」
といったフロントエンド寄りのニッチな技術を学うぶこともできます。
Johnny-Fiveを学べる「 NodeBot Workshop 」は、海外でおこなわれているNodeBotsのイベントで、NodeBot Workshopを使ってJohnny-Fiveを学ぶ際に使われていることも多いみたいです。
NodeBot WorkshopでJavaScript Roboticsを始めてみよう!
実際にNodeBot Workshopの使い方を紹介していきたいと思います。ちなみに自分の環境はMac OS 10.11
、Node.js v6.2.1
です。JavaScriptを少しでも触ったことがある方が対象となっています。
ちなみに、Arduinoなどのハードウェアを制御するワークショップもありますが、手元に実物がなくても勉強できます。
1. Node.jsのインストール
Node.jsのインストールをしましょう。以下の記事通り、もしくはnodebrew経由でNode.jsをインストールすることをオススメします。
いまアツいJavaScript!ゼロから始めるNode.js入門〜5分で環境構築編〜
$ node -v
上記をターミナルで実行し、
v6.2.1
などバージョン情報が表示されていればOKです。
- 補足
-
command not found: $
と表示される人へ→ $は入力しませんよ(小声)
2. NodeBot Workshopのインストール
次に、NodeBot Workshopをインストールしましょう。以下を実行します。
$ npm i -g nodebot-workshop
エラーなどが出なければ正常にインストールされているので、
nodebot-whorkshop
コマンドが実行できるようになります。$ nodebot-workshop
実行すると、このようなメニューが表示されます。矢印キーの上下で選択し、エンターキーで確定するという操作になります。英語に抵抗感のある人は、
CHOOSE LANGUAGE
を選択し、Japanese(日本語)
を選ぶと日本語で使えます。3. 問題を解いてみよう
メニューにある問題は、Workshoperと呼ばれるコマンドラインツールを用いて学習していきます。
$ mkdir mysolution
まずは、任意のディレクトリを作成します。ここでは
mysolution
という名前にしました。$ cd mysolution
作成したディレクトリに移動します。
$ atom .
このディレクトリを任意のエディタで開きましょう。僕はAtomをよく使うのでAtomを使って紹介します。
次に、任意のJavaScriptファイルを作成し、そこに問題に対する回答を記述します。NodeBot-Workshopでは
board.on()
のコールバック関数内("ここに処理を記述"と書いている部分)に具体的な回答を記述していきます。var five = require("johnny-five"); var board = new five.Board(); board.on("ready", function() { //ここに処理を記述 });
また、NodeBot WorkshopではJohnny-Fiveを利用するため、Johnny-Fiveのインストールもしておきます。$ npm i johnny-five
こんな感じで
mysolution
の中に1.js
とnode_modules
がある状態になってるかと思います。$ ls 1.js node_modules
NodeBot Workshopは現時点で全9問あります。まずは、1問目のLチカ(Blink Blink)を解いてみましょう。簡単に言うと、"Lチカをしよう!"という問題です。Lチカを選択しエンターで決定すると、問題文が表示されます。
ヒントはJohnny-FiveのLEDクラスのWikiページです。ここにほぼ答えありますね(笑) 答えを確認する場合は、
nodebot-workshop verify 回答を記述したファイル
を選択します。$ nodebot-workshop verify 1.js
不正解の場合は「残念!」と表示されるので、別の回答を考えてみましょう。
正解すると「おめでとう!」と褒めてくれます。正解できましたか? 1問目をクリアしたら、2問目、3問目と進めていきましょう。
ちなみに、1問目の正解コードを実際のハードウェアで試すと、このようにLEDをチカチカ光らせることができます。
まとめ
今回はNodeBotsについて紹介しつつ、入門向けのJohnny-FiveとNodeBot Workshopの始め方を紹介しました。 Webな人でもハードウェアを制御する敷居がだいぶ下がってきているのを感じてもらえたら幸いです。
記事を読んだだけではうまくできなかったという人は、ハンズオンイベントも開催しているのでぜひご参加下さい。次回は6月14日にDMM.make AKIBAで実施します。
NodeBots Johnny-Five ハンズオン vol2
また、IoTLTというIoTを学ぶLT会も主催しています。IoTやハードウェアに興味を持った方がいましたら、ぜひこれらのイベントにも参加してみてください。みんなで界隈を盛り上げていきましょう!