SWEST22 s5a@2020/08/21

Nervesでなにつくろ？
@takasehideki @zacky1972

やりたいコト• 「ナウでヤングなcoolな」Nervesを思い出そう

or 新しく知ってみよう！
• こんなことがいいかも？の使いどころをつかもう！
• じゃあこんなものに使えるんじゃね？のアイデアを語り合おう！

2あじぇんだ
アイスブレイク(自己紹介)
2. Elixir/Nervesの紹介
3. アイデアソン進め方の説明
4. Nervesでなにつくろ？
5. わかちあい・まとめ1.

[ 5 min][20 min][ 5 min][30 min][10 min]3

SWEST22 s5a@2020/08/21

1. アイスブレイク(自己紹介)[5 min]アイスブレイク・自己紹介
お名前は？ニックネームでもOK！
2. どんなことしてます？作ってます？
3. 普段よく使う言語は？
4. Elixir/Nervesは使ったことある？
1.

※SWEST22開催時に参加者の皆さまに記入いただいたアイデアソンシートには個人情報等が含まれるため，一般公開資料からはリンクを除外しています．ご了承ください．

5

SWEST22 s5a@2020/08/21

2. Elixir/Nervesってなに？
[20 min]Elixirとは？

Elixirとは？
2012年に登場した新たな関数型言語
Erlang VM上で動作• 高い並列性能を誇る• 軽量かつ頑強なプロセスモデル• 耐障害性が極めて高い

Rubyを基にした言語設計• 習得しやすく生産性が向上する• WebフレームワークPhoenixを持つ
応答性が極めて高い
8Elixirの採用例•8 Companies That Use Elixir in Production
https://serokell.io/blog/elixir-companies•

日本で Erlang/OTP や Elixir を利用している会社一覧
github: voluntas/japanese-erlang-elixir-companies

画像クリックで詳細ページに9

Elixir Zen Style
Zen(禅) とは本質美である1..1000|> Flow.from_enumerable()|> Flow.map(& foo(&1))|> Flow.map(& bar(&1))|> Enum.to_list|> Enum.sort

プログラミングの本質とはデータの流れである
Elixirではデータフローと並列処理をEnum Flow |> で直感的に記述できる
10

Elixirの気持ちよさ• Zen Style!!

• (やや)強い動的型付け• オブジェクトのイミュータブル性(不変性)• バイナリ操作とApp
パターンマッチ• メモリ軽量かつSuper
堅牢なプロセスモデル− 障害時にはプロセス単位で復旧可能• マクロプログラミング

Visor

one_for_one

データロガー

Link

監視制御

Link

ダッシュボード

Link

センサ

ボタン

液晶

11

Elixirって,,,https://nerves-project.org

Platform

Framework#NervesJP

Tooling

13

Platform• ブートローダ＋rootfs＋

Erlang OTP＋Elixirアプリ− 一括でビルドしてSDカード等に書込み#NervesJP

14

Framework• IoTデバイス開発に欠かせない

強力なライブラリ−Elixir Circuits: GPIO, I2C, SPI, UART
−IoTモジュール向けライブラリも• 通常のElixirライブラリも利用可−描画系ライブラリ Scenic やWebフレームワーク Phoenixとも容易に連携可能！

#NervesJP

15

Tooling• mixによるプロジェクト管理− いつものElixirアプリ開発と一緒！
− クロスコンパイルは裏でよしなに• IExでのインタプリタ実行も可能− VirtualEther越しのssh接続− /dev/tty* 越しのserial接続• ファーム・アプリの書き込み− SDカードに書き込み− VirtualEther越しの更新− NervesHub : Device to the Cloud!!
サーバ経由のOTAでアプリをリモートデプロイ！

#NervesJP

16

NervesHub• サーバ経由のOTA (Over The Air) でNervesアプリをリモートデプロイ！
− X.509署名証明書とNervesKey回路でセキュアな接続経路を実現
 https://www.tindie.com/products/troodonsw/nerveskey/− 更新先とファームを任意指定可

17

山崎進が思うNervesの使いどころ(1/3)• ネットワーク越しのアップデートを行えるIoT機器として• Nervesのファイルシステム• システムファイルを格納するパーティションを2セット持つことで，実行中にシステムをアップデートすることができる• 一方をアクティブに，アップデート時にもう一方を書換える• NervesHub が生きてくる• システムのアップデートをリモートからセキュアかつ一斉に実施可能© 2020 Susumu Yamazaki1山崎進が思うNervesの使いどころ(2/3)• LANとインターネットを繋ぐゲートウェイとして• 例としては車や工場など• 中のLANには，従来の組込みシステムボードが多数存在する• ゲートウェイの位置にNervesが存在する• Nervesの役割は，中のLANとインターネット／クラウドとの間の仲介をすること• Nerves/Elixirの持つ高速通信性が生きてくる• また，組込みシステムボードのモニタリングも行い，必要に応じて再起動をかけるなどのメンテナンスをする• Nerves/Elixirの持つ再起動による耐障害性が生きてくる© 2020 Susumu Yamazaki2山崎進が思うNervesの使いどころ(3/3)• 即応性を持った計算集約資源として• 画像処理や機械学習など，ある程度のリアルタイム性を求められる計算集約的な処理を実行する部品になれる• Pelemayと組み合わせることで，さらにこの方向性の機能性が増す© 2020 Susumu Yamazaki3主な対応デバイス
ラ ズパイ

BeagleBone
CustomBoardsx86_64https://www.youtube.com/
watch?v=DvwgGz_5D5I#NervesJP

18

こんなことができます！
Nerves Weather Forecast
Nervesから「livedoor 天気情報」の情報を取得してTwitterに定期投稿しています。
ラズパイ４でも動くよ！！
主に次のライブラリを使っています。
● HTTPoison: httpクライアント● ExTwitter: Twitter投稿ライブラリ● Cronex: cronライクなElixirライブラリ
I use Nerves, I like it!
作者：@torifukukaiou さん
Qiita #NervesJP Advent Calendarの2日目に解説記事を公開予定！

#NervesJP19

こんなことができます！
• Elixirでラズパイカメラ！

−with customized F/W of Nerves!
−with Zbar for QR code!
−with GraphQL for resize & effect!
−with Phoenix for RT browsing!!

Presentation on CODE BEAM STO 2018

DeveloperGreg Mefford

Omni Eye on GitHub
Training Materials on Lonestar 201920

こんなことができます！
• Nerves Kiosk System− ラズパイ3＋タッチスクリーンで動く− Phoenix LiveViewと連携してリアルタイムWeb UIがさくっと開発できる！

21

Nervesの採用例
Le Tote:
衣料品倉庫のRFIDとキオスクによる在庫管理
Hop:
顔認証機能付きのキオスクビールサーバ

FarmBot:
スマートファームの実現

https://www.nerves-project.org/case-studies
22

SWEST22 s5a@2020/08/21

3. アイデアソンの進め方[5 min]ぐらんどるーる• マイクはオンに！

• ビデオも(できれば)オンに！
• やる気もオンに！
• 楽しく和気あいあいとやりましょう！！

• ここからの退室はご遠慮くださいm(_ _)m24

アイデアソンの進め方• Breakout roomsで3-4名グループに分割− グループごとにアイデアソンを進めます− 最後にわかちあいをしましょう

割り当てられたルーム番号を見つける
2. アイデアソンシート 自分のルーム番号を開く
3. まずはチーム内で自己紹介！
1.

− 最初に書いた “自己紹介” シートを使おう！
− なるべく手短に^^;4.

さぁアイデアソン！

※SWEST22開催時に参加者の皆さまに記入いただいたアイデアソンシートには個人情報等が含まれるため，一般公開資料からはリンクを除外しています．ご了承ください．

25

アイデアソンの進め方
今回はトップダウンに進めてみます

どんなIoTのお困りごとがある？
こんなことを解決したい！
みんなでいろいろ挙げてみよう！
どの課題を深堀りするか，最後に選ぼう！
B) こんなIoTシステムを作ればいいのかも？
選んだ課題の解決策を考えてみよう！
C) それElixir/Nervesでできたら素敵じゃない？
Nervesの気持ちよさがどう活きるかな！？
A)

26

SWEST22 s5a@2020/08/21

4. Nervesでなにつくろ？
[30 min]Breakout Roomにれっつごー！！
28

SWEST22 s5a@2020/08/21

5. わかちあい・まとめ[10 min]関数型言語ElixirでIoT開発！？を楽しんでいるオンラインコミュニティです
Elixir/Nervesをもっと知りたい方、Nervesでなんか作ってみたい方、Nerves Projectに貢献したい方、

れっつじょいなす！！

https://nerves-jp.connpass.com/

30

サッポロビームhttps://nerves-jp.connpass.com/

れっつじょいなす！！

31

SWEST22 s5a@2020/08/21

さんくす！