この記事は「NervesJP Advent Calendar 2019」の25日目です
昨日は @piacerex さんの「Nerves/Elixir/Phoenixによるエッジコンピューティングの可能性+α」でした
はじめに
Very Merry Christmas!!
・・・・・・嘘です,5日も遅れてしまってスミマセンm(_ _)m
でもand a Happy New Year!!には間に合いました.
本記事では,日本でのNerves元年!と呼ぶに相応しい2019年を,私情をふんだんに交えつつつふりかえります.
Nervesってなにそれ?
「Nerves」は,関数型言語ElixirによるIoT開発フレームワークです.
RaspberryPiなどのIoTボード上で動作する最小構成のLinuxブートローダ+Elixir実行環境+各種デバドラのパッケージセットで,Elixir × IoTの文脈で最も活発なプロジェクトです.
過去記事もご参照くださいませ
要するに,NervesはElixirのIoTでナウでヤングなクールなすごいやつです
# @torifukukaiou さんの金言を借りました^^;
ここからめちゃ長くなります.
メンドい方は最後のWhy, Nerves??だけでも読んでいってください〜〜
まずはちょっと遡って,,,Nervesとの出会い
私がNervesと出会ったのは,2018年5月頃です.
そもそもElixirに出会った(@zacky1972 先生に教えてもらった)のが2月末で,そこから4月に開催されたfukuoka.ex#8(福岡Elixir会):2018年 春のElixir入学式にて,Web/エンタプライズ系が集まるMeetUpにIoTボードを持ち込んでライブデモさせるという,IoT芸人としての鮮烈な(?)デビューを飾った矢先でした.
そういえばNerveプロジェクトってどうなってますっけ
— ラーメン大好きしろくまさん (@Kumappus) April 20, 2018
という感じでTwitterにて教えてもらったのが最初の出会いです.
なおこの時はIoTとはいえベタのLinuxカーネル環境上でElixir/Erlangをナマで動かして遊んでいただけです.詳しい内容はこのへんをご参照ください.
- Qiita記事: ElixirでIoT#1:IoTボード上でのElixir/Phoenix環境構築と性能評価篇
- SlideShare: ElixirをIoTボードで動かしてみた ~ラズパイ・big.LITTLE・Zynq編~
それからとにかくNervesを触ってみました.
んで早々にfukuoka.ex#11:DB/データサイエンスにコネクトするElixirに,IoTボードをまた携えて再登場w
ライブデモこれです。手ぶれ酷くてすんません。
— TAKASE hideki (@TAKASEhideki) June 22, 2018
温湿度センサと超音波センサの値をラズパイ3B&GrovePi+で取得して、LCDに表示させつつWebページにもリアルタイム表示!もちろんすべてElixir/Phoenix!! #fukuokaex pic.twitter.com/loGk3yZxzW
- Qiita記事: ElixirでIoT#2.1:Nervesって何者?ラズパイでLチカできんの!?
- SlideShare: 環境センシングとデータ表示をサクっと?やってみた
ぶっちゃけこの頃に抱いた第一印象は,「プログラミング言語を組込みな環境にも使いたいってやつねwあるある〜ww でも(やっぱあ)ちょっとこなれてへんなぁ」くらいの感じでした.SlideShareのP.27にも当時の率直な感想が残っています.
(もう今となっては全力な土下座でゴザイマス
そこからElixir-lang Slackの #nerves チャンネルに参加してみたものの,ウォッチしているだけで流し読み,あんまりフォローしてない日々が続いたのが本音です.
そして時は流れ,,,
2月:Lonestar ElixirConf 2019に参加
Elixirのカンファレンスは世界各地で様々に開催されています.
Lonestar ElixirConfは,そんなElixir Conference始まりの地であるAustinで毎年2月頃に開催されている,US, EUに続く3番目?の規模を誇るTech Confです.
これに参加したきっかけは @zacky1972 先生が,ElixirでGPU駆動しようぜ!なライブラリ・フレームワークであるHastega(現在は Pelemay に改称して研究開発が絶賛進行中!)の発表をするということで,その腰巾着のように着いて行きました^^;
いやぁ,今思い出してもZacky先生の発表の反響は凄まじかった!!
拍手の量で反響の凄さが分かる!!@zacky1972 先生お疲れさまでした!!! #fukuokaex pic.twitter.com/9fQOQWEhKa
— TAKASE hideki (@TAKASEhideki) March 2, 2019
ElixirConfには,本体の発表的なdayとは別に,ひとつのトピックに特化して丸一日の講習を実施するTraining Dayが設けられています.せっかくなのでIoTなTrainingだよね!ということで,Nerves co-authorのFrankとJustinによる "Device to the Cloud with Nerves and NervesHub" を選択したわけです.
このtrainingに参加です
— TAKASE hideki (@TAKASEhideki) February 28, 2019
Device to the Cloud with Nerves and NervesHubhttps://t.co/c3OKSiyiOq
世界的にもみんな大好きIoT,知見を持ち帰って #fukuokaex とかで共有できるようにがむばります!
こんな感じ
— TAKASE hideki (@TAKASEhideki) February 28, 2019
ラズパイ0とOLEDBonnetを使ってます #fukuokaex pic.twitter.com/d1K07kAxV9
そしてConference本体のKeynoteもガッツリと聴講
始まりました!最初のkeynoteは(昨日に引き続きの)NervesなJustin!! #fukuokaex pic.twitter.com/IvZFthDcxy
— TAKASE hideki (@TAKASEhideki) March 1, 2019
結果的にこの機会が転換点でしたね.もうでドタマぶん殴られた衝撃でした!
Lonestarは実はローカル色風味なConferenceではあるのですが,そこに日本人がやってきた!!?というのが功を奏したように思えます.
なぜ(三銃士でw)やってきた??GPUとか面白いコト言ってるのは誰だ!?IoTとかNervesとかめっちゃ調べてるやん!?
FrankやJustin,GregにToddにChrisなどなど,多くのNerves Friendsとの出会いが非常に貴重なモノとなりました.
4月:fukuoka.exにて参加報告
fukuoka.ex#21:Lonestar Elixir Conf 2019報告+世界デビュー祝にて,Lonestarの参加報告をしました.
「ElixirでIoT」が世界でどんなコトになっているのか?
「Nerves」が拓くElixirでのデバイスコントロールを総レビューして紹介しました.
Nervesめっちゃウケたぞーうおーー!! #fukuokaex
— TAKASE hideki (@TAKASEhideki) April 17, 2019
日本全国津々浦々どんどんTrainingやってきたいと思ってますので,お気軽にお声がけどうぞ〜
ということでスライドこちらhttps://t.co/MzGnToNqqP
次の項にも被るんで,カッツアイ
6月:Erlang & Elixir Fest 2019にて登壇・日本初のNerves旋風??
Austinで受けたこの衝撃とNerves Friendsからの恩を,日本に広めねばっ!ということで,,,
帰国早々にErlang & Elixir Fest 2019へProposalを出したわけです.
Erlang & Elixir FestにはNervesネタでProposalを出すことに決めた
— TAKASE hideki (@TAKASEhideki) March 3, 2019
こんなにお手軽にIoT開発が出来るQuick Demo,Nervesが目指していることと最新の現状,Lonestar ElixirConfで感じ取った世界の潮流,,,
これを日本に広めるのが私のミッションと勝手に自負することにした^^; #fukuokaex #kyotoex
Erlang & Elixir Fest 2019で講演させていただきます
— TAKASE hideki (@TAKASEhideki) April 27, 2019
『Nervesが開拓する「ElixirでIoT」の新世界』
ElixirでIoTつくっちゃおうぜっ!という心意気でこのところ話題沸騰!?(高瀬調べ)なNervesについて語り尽くします!! #elixirfestjp #fukuokaex #kyotoexhttps://t.co/B4cvAFzLzb
#elixirfest での発表資料です!@LonestarElixir 2019で学んできた @NervesProject の革新性について,ハンズオンをたっぷり交えてご紹介しました!https://t.co/6yO3BgJoTG
— TAKASE hideki (@TAKASEhideki) June 1, 2019
ご存知の通り,日本でもElixirの知名度は急速に高まっており,企業での実例としての活用も広がっています.でもWebアプリやサーバ系での採用ばかりなのが,もちろん良いこと!ではありますが,IoT芸人wとしては歯痒いところです.
この登壇をきっかけとして,デバイス開発でもElixir使えるぜっ!てなところへの風穴は開けられたんじゃないかと信じています.
5-10月:Nerves Trainingを各地で開催!
Elixir/Erlang界隈で国内でのNervesの知名度はグングン上がってきましたが,ただ話しを聴いてもらうだけではそれまでです.実際にデバイスを使って開発してもらえれば,さらにその革新性を分かってもらえるはずです.
という仕掛けのために,Nerves Trainingを全国行脚しました!
実施した内容は下記のとおりです
|> Elixir.Circutisによる外部デバイスの制御
|> NervesによるIoT開発の基礎
|> NervesHubによるデプロイ
|> Scenic連携によるUI操作
|> Phoenix Channels連携によるゲーム開発
Lonestarで実施されていたTraining内容を,FrankとJustinのご好意によって譲り受けました.改めて感謝!
ちなみに,クラウドサービスであるNervesHubを介したOTAデプロイを体験するためにはNervesKeyという暗号回路が必要ですが,この副産物として日本からでも購入できるようになったり( @kikuyuta 先生に感謝!
実施したスケジュールと案内はコチラ
|> kochi.ex @ 05/28
|> kyoto.ex @ 06/16
|> fukuoka.ex @ 07/06
|> tokyo.ex/beam-lang.tokyo @ 07/21
|> SWEST21 @ 09/06
|> Sapporo.beam @ 10/05
延べ60人以上がこのTrainingを受講してNervesデビューを飾りました.すごくない??
いろいろな地域で受け入れていただき,会場手配や提供などなどご協力いただいた方には大感謝でっす!!
(あと各地での美味いお酒とご馳走をありがとうございました^^;
ただちょっとこのTraining内容は分量が多いのとElixirワカル系な方向けなので,独自コンテンツを整備しないといけないなと思う今日この頃です.
8月:ElixirConf US 2019へ参加
Elixirのビッグイベント,ElixirConf US 2019に参加しました!
Nervesの進化について,また改めて衝撃を受けたワケです.
次の項にも繋がりますが,JustinのJapan Tourの前哨戦でもありました!
Justin @mobileoverlord will come to ElixirConf JP!
— TAKASE hideki (@TAKASEhideki) August 30, 2019
We believe @NervesProject brings revolution to Japanese industry!! #ElixirConf2019 pic.twitter.com/v2BZQBeryr
なお私もSpeakerデビューしたのですが,それはまた別の話しということで,,,
9月:Justinが日本にやってきた!
Erlang & Elixir Fest登壇や全国各地のNervesTrainingなど,日本でのNerves普及にいろいろやってきました.
でも開発者みずからの熱いpassionを伝えたい!ということで,Nerves Project co-authorのひとりであるJustin Schneck氏を日本にお呼びしちゃいました!!
1週間で京都→岐阜(下呂)→小倉と周る強行スケジュールだったのですが,
We are Engineers!! という言葉から始まるプレゼンを,kyoto.ex,SWEST21,ElixirConf JPと3回やっていただき,それぞれ強いインプレッションを与えてもらいました.
これまでElixir/Erlang界隈には訴求してきましたが,組込み界隈にも広めるべき,Nervesは革新的なフレームワークと考えています.
高瀬はちょうどSWEST(組込みシステム技術に関するサマーワークショップ)という呑み会イベントのプログラム委員長を務めていました.この機会を逃すまじ!ということで,大博打に出たわけです.
ここで長くを語るよりは,,,SWEST21におけるJustinの講演動画をYouTubeにアップしてますのでご参照ください!!
https://www.youtube.com/watch?v=JstWMMVFS8c
写真や長いながーいメッセージは,Facebookへの投稿をご参照くださいませm(_ _)m
9月:NervesJP発足!
JustinがElixirConf JP 2019でEmotionalな最後の講演を終えたその夜,@kikuyuta センセと @myasu さんとで盛り上がり,日本でのNervesなグループを立ち上げることになりました!
Big news!
— KIKUCHI Yutaka 🌒 菊池 豊 (@kikuyuta) September 7, 2019
I and @etcinitd have established the #Nerves Users Group in Japan today. This is the first #Nerves users group in the world. @mobileoverlord, @zacky1972, and @TAKASEhideki are the witnesses.
If you want to join us, please do not hesitate to contact us.#ElixirConfJP
ということで勢いで, @NervesProject Users Group in Japanが設立されました〜
— TAKASE hideki (@TAKASEhideki) September 7, 2019
日本語でおけですオンラインでやりましょう.ぜひご参加をば!! #ElixirConfJP #fukuokaex #kochiex #kyotoex #tokyoex #okayamaex #SWEST21https://t.co/hCWkJqh9oW
『NervesJP』とは,
Elixir/Nervesをもっと知りたい方,Nervesでなんか作ってみたい方,Nerves Projectに貢献したい方,そんなコミュニティです.
副題は "Nerves Community in Japan" です.
日本語でやり取りできる場所としつつ,ただ "User Group" になるだけじゃなくて,日進月歩で進化しているNervesにどんどんcontributionしていこう!という意図を込めています.
ロゴはオリジナルの右側を赤い点にしました.
オリジナルNerves Logoは,IoTよろしくデバイスが繋がる様子だけでなく,世界中のヒトが繋がっていくことと解釈しています.
そこに世界から東側の日本も繋がっていくぜ!という意図を加えてみました.(クールなデザインをしてくれた @myasu さんに多謝!!
2〜3週に1回程度,基本はオンラインで開催しています.
connpassとSlackで主に動いていますので,気になった方はれっつじょいなす!!
- connpass: https://nerves-jp.connpass.com/
- Slack 招待URL
11月:IoTつくるよ!に出展
IoTつくるよ!2というイベントに,NervesJPとして初出展しました!
「IoT つくるよ!」は、さまざまな分野の人が日頃のものづくりを発表し、交流するものづくり博覧祭です。
@myasu さんがNervesのFA応用を目指して開発されているGroveボードを展示されたり,
@torifukukaiou さんが開発されていたWeb天気予報と連動したTwitter自動投稿botを展示させてもらったり,
@shaga さんの設計されているGroveインタフェース拡張ボードであるNerves Training Add-on Boardを展示させてもらったり,
みずりゅさんが技術書典7で頒布されていたえりいざ本(PhoenixLiveViewとNervesをさわるElixirへのいざない)を置かせてもらったり,
高瀬もOmni_Eye (Nerves Camera)を展示したりBeagleBoneで動くよ!を仕込んだり,とっても楽しい1日でした!
というコトで今日これ
— TAKASE hideki (@TAKASEhideki) November 30, 2019
やっと設営完了! #NervesJP #ALGYAN #つくるよ https://t.co/ZxmCQyGkCH pic.twitter.com/kMcCkw7lXs
https://t.co/fYvkULpFv7さんのブース。
— みずりゅ(技術書典8は2日目:しがないラジオsp65出演しました。) (@MzRyuKa) November 30, 2019
本日の目的の一つ。
ラズパイ制御をElixirに置き換えられるかもと考えるとワクワクします。
#ALGYAN pic.twitter.com/40DnYQIOdM
https://t.co/fYvkULpFv7さんのブースにて。
— みずりゅ(技術書典8は2日目:しがないラジオsp65出演しました。) (@MzRyuKa) November 30, 2019
もともとはPythonでかかれていたものを急遽Elixirに置き換えてみたとのこと。#algyan #つくるよ pic.twitter.com/SNd3qqvptW
【B-3】NervesJP「IoT systems powered by Nerves」#ALGYAN #つくるよ pic.twitter.com/HFJ5TR3M6S
— ALGYAN (@IOT_ALGYAN) November 30, 2019
捲くり喋り倒しました〜
— TAKASE hideki (@TAKASEhideki) November 30, 2019
資料コチラ! #NervesJP #つくるよ #ALGYAN https://t.co/wVx62bE14Z https://t.co/AkzR2ZWJTX
出展を提案してくれた @myasu さんには大感謝です
そしてコミュニティのチカラを感じた次第ですね.機会を見つけてどんどんやっていきたいと思っています.
12月:Advent Calendarに参加!
NervesJPメンバを中心として,Advent Calendarに参加するという賭けに出ました!
なぜ賭けだったかというと,始めるときは正直言って埋まるとは全く思えなかったんですよね,,,
普及活動いろいろやってきましたが,そこまで広まっているのか,何を隠そう私自身がいちばん疑心暗鬼でしたww
それが蓋を開けてみると,,,
なんと全日の記事投稿を達成!!
内容も,とにかくNerves使ってみたからこんなん作ってみたよ!触ってみて分かった色々なTips,Nervesでこんな将来できるんじゃない?のポエムまで,様々な技術ノウハウの蓄積がなされました!
Advent Calendarに参加いただいた皆さまには大感謝であります!
そしてなんと!
途中経過では「IoT・ハードウェア」部門のいいね数順1位を獲得!!
# 最終結果はみんな大好きobnizにまくられましたが^^
どう考えてもこの並びでコレはなにかの間違いだとは思うんですが,途中とはいえ記念ということで,魚拓してみておきます^^; #NervesJP https://t.co/ZXHJZiTiUE pic.twitter.com/nbTHYLlKBm
— TAKASE hideki (@TAKASEhideki) December 22, 2019
アドカレのランキング見ると何が人気か分かるね。やっぱりM5Stackとobnizあたりは扱いやすいから人気なんだろうなー。https://t.co/T6MHtTJSIh pic.twitter.com/qJ5thzkcEi
— Katsu Shun (@katsushun89) December 25, 2019
Nervesも扱いやすいよっ!
やはり2019年は,日本でのNerves元年!になりましたねっ!
Why, Nerves??
Qiitaは技術的なことも触れないと・・・なので,なぜNervesが良いのか持論を展開してみたいと思います.
堅牢なIoTデバイスを開発できる
Nervesの下回りはElixir,そしてさらにその下回りはもちろんErlang VMで動きます.Erlangは電話交換機向けに開発された由来のとおり,高い堅牢性(耐障害性)と同時接続要求に応えうる並列性能を誇ります.
NervesにはネイティブなErlang VMがほぼそのまま搭載されており,OTP機能も大部分を活用することができます.つまりErlangのもたらす貢献をIoTデバイス開発でもそのまま享受できるわけです.例えば,プロセスごとに軽量なメモリ管理ができますし,プロセス単位での障害復旧もできるわけです.
なお,NervesではBuildroot由来のLinuxカーネルを採用しています.このため,必要最小限のカーネル機能とモジュールのみをコンフィギュレーション指定して,カーネルビルドすることが出来ています.
さらにNervesは,ブートローダとファイルシステム(rootfs)の領域が,A/Bと2領域もつ構造を取っています.システム全体として二重化されているわけです.
これによって,A領域でアプリが動作している場合にシステム全体がハングアップしてしまっても,B領域に動作をすぐに遷移させてシステム実行を継続できる仕掛けがあります.そしてその間にA領域の障害を復旧することになります.っよぃ.
この2領域構成がもたらすもう1つの貢献として,A領域での実行中に,新しいファーム・アプリをB領域に展開してアップデートする仕組みも持っています(B領域への展開完了後にシステムリセットして起動,起動後にB領域のイメージをA領域にコピーして二重化が保たれます)
アプリが書きやすい!
IoTデバイスのアプリの開発はもちろんElixirで行います.
Elixirの良さとしてはもちろん記述容易性ですよね.Rubyを参考にした言語設計になっていて,スクリプト言語っぽく関数型言語のプログラミングを実現できます.モジュールと関数を定義してそれらを組み合わせていくことで,いつの間にやらオブジェクト指向なプログラミングも実現できます.
Nervesでは,Elixirの文法やさらに各種ライブラリをそのまま使えます.特にBinary操作とパターンマッチは,ビット操作の多い組込み開発では有用になります.イミュータブル性も組込みデバイスの開発に活きる重要な特性です.描画ライブラリScenicやWebフレームワークPhoenixの活用も役立つことでしょう.
ツールチェーンが綺麗に整備されています.mixコマンドによってNervesアプリの開発ができます.つまり,プロジェクトの新規作成やビルド,依存関係の管理など,通常のElixirと同様の開発手法で進めることができます.
細かいデバイスドライバの開発なんかはCやRust等のベアメタル言語との連携も必須ではあります.
ただしElixir Circuitsでたいていの通信プロトコルは整備されていますし,いったんデバドラを開発・公開すれば使い回しも容易です.言い方をかえれば,言語ごとの特性と長所を活かしあって使い分けすればいいだけです.
NervesHubがカッコイイ!
NervesHubとは,クラウドサーバ越しにIoTデバイスのファーム・アプリをアップデートする仕組みです.つまりアプリの新規更新を,デバイスに物理的に接続することなく,どこにあるデバイスでも,自由に行うことができます!この仕組みがとっても素晴らしい!!
OTA技術は他のフレームワークでも実現されていますが,ここまでcoolに実現できているものはNerves以外に知りません.
ネットワークとなるとセキュリティが気になるところですが,X.509認証とNervesKey回路の技術によってきちんと担保されます.
# この辺りの記事もきちんと書かないとなぁ^^;
IoT"システム"の開発がElixirだけで出来る!
IoTってITの総合格闘技なんですよ!
本記事でも触れていますが,WebフレームワークPhoenixの人気によって,Elixir/Erlangはサーバ・エンタプライズ分野ではすでに多くの事例があります.
NervesでもPhoenixはChannel/PubSub通信などもちろん使えますので,つまりクラウドやサーバとの連携が容易になります.つまりIoTシステム全体の開発が,1つのプログラミング言語Elixirで実現できるようになります!!
ただし,性能面はカナリ気になるところではあります.
この辺りはZacky先生のPelemayやウチで研究開発を進めているCockatriceも支援できるように頑張りたいところです.
また,特に組込みまわりでは気になるリアルタイム性については,ウチで評価や研究を進めていますので,また追って紹介したいなぁと思っています.
2020年はどうなる?どうする??
インパクトを巻き起こすのも難しいですが,これを継続していくのも大変です.極私的な来年の所信表明を記すことします.
- Nervesの良さをもっと広めていくぞ!
- 記事とか技術書の執筆も!??
- NervesJPの同志をもっと増やす!300名に!!(現在はconnpassで72名,Slackで40名です)
- Maker Faire出展!??
- JPオリジナルなNerves Trainingをやるぞ!
- 2019年に開催したNerves Trainingは,Elixir初見にも組込み初見にもツラいですし,なにより分量が多いんですよね,,,
- よりElixir/Nervesの楽しさが始められるようなコンテンツ作りを準備中です.Grove対応なAdd-on Boardを活用予定!
- その折には,全国の皆さままたご協力とご参加を〜
- [hard mode] 日本でのNervesの「実例」をつくるぞ!
- ホビー層にはウケてます,これはとても大事です.
- でも,実際のIoTサービス製品や産業製品にNervesが使われた!となったら,その衝撃ヤバくないですか??
- ご興味のある企業様や技術者の方,いませんか??高瀬はacademiaとしても全力でサポートします!!
来年もAdvent Calendarやりましょう!いろいろ作っていきましょう!
というところで,良い年をお迎えください〜〜