なぜ僕はNervesに期待するのか

本記事は「[#NervesJP Advent Calendar 2020](https://qiita.com/advent-calendar/2020/nervesjp)」の4日目です。

昨日は @torifukukaiou さんの「[Nervesで湯婆婆を実装してみる](https://qiita.com/torifukukaiou/items/5f68fbc1b151b137d5d1)」でした。
明日は @MzRyuKa さんの「[nerves_system_*から読み解くNervesの動向](https://qiita.com/MzRyuKa/items/e326ee256451f2fc0f27)」です。

---

最初は「組み込みLinuxとしてのNerves探険」というタイトルだったのだけど、考えが変わってタイトルを変えた。

カッとなったことを言い訳に、普段は思っているけれど、自分の技術に自信がなくて言えずにいることを思い切って書いてみる。


# 技術の活用に対する漠然とした不満

果たして僕らは技術を活用しきれているのか？

twitterでつよつよエンジニアと思われる人をフォローしまくっているけど、彼らの専門的な強さが本当にすごいシステムにまとめあげられて社会にでているのか僕は疑問に思っていて、特にIoT分野には不満がある。


* Web方面のつよつよエンジニア達が組み込みの方へ、はみ出てきたりはしているようには見えないし
* 組み込み方面のつよつよエンジニア達がWebの方へ、はみ出てきているようにも見えない


めちゃくちゃ強そうなのに、なんではみ出てもっとスゴイことを成し遂げないのか？という素朴な疑問と不満がある。
（僕の視野が狭いだけかも


受託だけやるのが仕事なの？
いつまで管理サイトつくるの？いつまでイーコマースやるの？
いつまで名ばかりスマートなんちゃらの組み込みやるの？
何か本質的に進化してるの？
（全部何も知らずに煽ってる、ごめん


※話と全く関係ないけど、最近感謝してる技術はDeepLで疲れて英語の読み書きが嫌になったときでもDeepLがあるから頑張れるはある。すごく感謝している技術である。


# 「Webと組み込みが融合するからこそ解ける問題」を解くのがIoT

だと思ってるんだけど違うの？

スマートロックが流行った時、どう思った？
僕は「まじかよ。。。」って思った。こんなのが流行っちゃうのかよって。これがIoTって？
セコムがずっと昔からやってるんじゃない？しらんけど（昔からやってる（としたら）セコムはスゴイよ


僕が思う「いいな！、すごいな！」と思うIoTは例えば

* [Farmnote](https://farmnote.jp/features/) & [Farmnote Color](https://farmnote.jp/color/)

で、難しい問題を解決してると思う。泥臭いことも含めて解決してるんだろうなって。
だって、屋外の牛さんの状態を把握するんだよ。システムいかれて牛さんの調子が悪いこと気づけなくて死んだら大変だ。

牛舎は知らないけど、鶏舎なんかだと糞尿からアンモニアがあがる、すると蛍光灯なんかは専用のものを使わないと腐食がはやくてダメらしい。こういう外環境に耐えるハードを用意する必要もある。


「Webと組み込みが融合するからこそ解ける問題」を解いてるように見える。


# NervesはWebと組み込みの架け橋になる（と思ってる

Webと組み込みを組み合わせることは技術的にはNervesなんかなくたって可能なんだけど、その程度の問題が両分野の技術者のはみ出させ方に影響すると思ってる。


Nervesそのものは、buildrootで作るLinuxの上でErlang VMを走らせてElixirを実行する**「組み込みLinux」[^2]**だ。
ただ、従来の「組み込みLinux」で開発者が泥臭く考えなきゃいけないネットワーク回りの設定やデバイス操作をElixirのライブラリである程度ではあるが隠蔽している。

僕はその意味でNervesはLinuxを隠蔽してると思ってる。

これはWeb屋にとっては嬉しいことのはずで、Linuxボードのネットワークやハード回りのことを深く考えずに開発ができる。

また嬉しいことに、ファームウェアの遠隔アップデートができる仕組みも用意されている。それもファイルシステムごと。[^3]

これは組み込み屋にとって嬉しいはずで、出荷後にドライバの差し替えや機能のONができる。（すごくない？
例えば、製品リリース時にCANをつなぐ端子を出してはおくが、実装はまだだからドライバも入れずに出荷したとする。それでも後からONにできる。端子に取り付けるCANデバイスはお客さんに後から送ったっていいし、別で買ってもらってもいい。

他にも嬉しいことはあって、Nervesはlinuxを隠蔽してくれているので、Elixir側は他のボードへの移植が簡単にできる。
ボードがディスコンになっても、linux側の始末をして（ここは組み込みlinuxのプロだから問題ないでしょ？）、Elixirのコードのテストがとおれば、移植は終了だ。

もし、仮にWebと組み込みの技術者がはみ出るのをためらう理由が技術なら、その溝を超えさせる橋にNervesはなれると思う。
（ためらう理由は別かもしれないけどね！
（ま、はみ出ないにしてもNervesは使えるからぜひさわってほしい


なんだ簡単にできそうじゃん？って思わせるのって大事で、それをきっかけに橋がかかればいろんな未来が作れるかもしれない。


[^2]: 「組み込みLinux」だから当然だけど、ファイルシステムはリードオンリーで守られていて電断とかも気にならない。

[^3]: [NervesHub](https://www.nerves-hub.org/)を使ってOTAできる。使い方は [Interface 2020年12月号](https://shop.cqpub.co.jp/hanbai/books/MIF/MIF202012.html) に @takasehideki さんと記事書いてるから読んでちょ


# 僕がNervesに期待する理由

たぶんNervesがあってもはみ出る人や企業は少ないんじゃないかなって思ってる。

ただ、はみ出た場合にNervesはいいよ！Webから組み込みまでElixirで書ける。

@takasehideki さんがいつも示す以下のように、IoTが他の技術スタックよりも圧倒的に簡単にできる（と思ってる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/369713/feea5d04-931e-4221-2572-baf0cd75615d.png)


はみ出た少人数で何か作ろうとおもったら、複数言語使うよりは一つでやる方が楽だしね。
それにElixirは平行処理がマジで楽に書けるからスレッドとか考えなくていいし、異常時の復帰はSupervisorに任せられる。


そんなこんなで**僕はNervesにマジで期待してる。**


## お願い

もしNervesに興味をもって使うようになったらフリーライダーにならないで欲しい、時間かお金でコントリビュートして欲しい。

時間なら

* バグ報告（再現方法も含めてね）
* ドキュメントのミスを見つけて直す
* 関連ライブラリを作る（これは仕事だと無理かもしれないけど
* SBCにポーティングした際のシステムを公開する（これは仕事だと無理かもしれないけど

お金なら

* open collectiveに[Nerves Project](https://opencollective.com/nerves-project) がある Backerなら 2$/月 からなれる
    * 僕は今 5$/月 のBackerでNervesでお金を稼いで将来的にはSponsorになりたいと思ってる

使うだけ使ってバグが出たら文句だけいうのはやめよう。


# FAQ

> Linuxだからリアルタイム無理じゃんね？

それはそう。
でも[KMCのSOLID](https://solid.kmckk.com/SOLID/)[^4]と組み合わせられそうだし、
[STM32MP1](https://www.st.com/en/microcontrollers-microprocessors/stm32mp1-series.html)のA7側でNerves動かして、M4にリアルタイム処理まかすとかもできるんじゃね？（しらんけど

京都マイクロコンピュータさんにはぜひNervesを使ってみてほしい。

[^4]: KMCさん、ウェブページが重いです。


> Linuxの隠蔽っていうけどさ、どこまでなん？

うーん、答えにくい。[ドキュメント](https://hexdocs.pm/nerves/getting-started.html)読みこんで、さわってみて欲しい


> 片側だけがはみ出たってだめでしょ？

そうだね。
何かいいIoTを作ろうしたら、ウェブ屋と組み込みLinux屋とプラスして**ネットワーク屋**が必要になるとおもう。

だから、たとえば

* GMOペパボの @kentaro さん
* 京大の @takasehideki さん（KMCも巻き込んで
* さくらインターネットの @kikuzo さん

とかが組んでNervesで色々研究したらそれはスゴイ面白いんじゃないかなと思う（ワクテカ
できれば、よわよわだけど混ぜて欲しい（で鍛えて欲しいｗ


# おわり

> 黙ってたほうがよかったな。

うるせーやい、言えなくて我慢してるだけでよわよわだって言いたいことがあるんだ。


## 謝辞

僕がElixir/Nervesに手を出したのが去年の10月くらいだったと思う。
以下の二人の活動がなければそうならなかったことは確かなので、この場を借りて心からの感謝を伝えたい。

Elixir布教のエバンジェリストである @piacerex さん
Nerves布教のエバンジェリストである @takasehideki さん 

いつもありがとうございます。