Edited at
IoTLTDay 22

IoT勉強会に通い詰めて得られたもの

More than 1 year has passed since last update.

この記事は IoTLT Advent Calendar 2017 の12月22日の記事です。私の25歳の誕生日でした。1日遅刻してしまい申し訳ございません!

IoT勉強会に通い詰めて得たものを紹介したいと思います。


自己紹介

FXY149Ke.png

mascii(ますきー)です。

今年3月までは数学を研究する大学院生兼Webサービス開発のインターン、今年4月からSIerのSEになりました。

Raspberry Piは2016年5月頃から触り始めました。好きな言語(現在)はJavaScriptです。

IoT縛りの勉強会! IoTLT vol.33 @ LINEでは「あなたのお家に眠るラズパイを救出したい」(スライド)というタイトルでLT登壇しました。


2017年に参加したIoT勉強会

今年は23回も行っていたようです。よく参加していたのは

でした。


IoT勉強会に通い詰めて得られたもの


様々なポジション・年代の方々との交流

Web系の勉強会(JavaScriptの勉強会やフロントエンドの勉強会など)に比べて、自分と違う年代、ポジションの方と会って話す機会が多いと感じます。

IoTLTは平日の夜に開催されており、ソフトウェアのエンジニア以外にもハードウェア系のエンジニアや大学生といった方々も多く参加されている印象です。

IoT もくもく会 KOILArduinoファンもくもく会のようなもくもく形式の勉強会は、主に土日の昼に開催されており、小学生から60代でOSSにコミットされている方まで幅広い年代の方々が揃っている印象です。

boy_and_elderly.png

Web系の勉強会で60代の方を見ることはほとんどなく、知識量に圧倒されることもあります。自分と年代もポジションも違う人と会うことは多くの学びを得ることができると思います。


趣味でプログラミングするきっかけ

作りたいものがないとプログラミングをするモチベーションが高まらないと考えています。

Web系の勉強会だと業務で得た知見をアウトプットされている方が多く、SI系や組み込み系などに勤めている方が勉強会で聞いたことを業務で活用するのが難しかったり、趣味で活用するのが難しかったりします。

IoTの勉強会は趣味で得た知見をアウトプットされている方も多く、これ作ってみたい!というものに巡り会える可能性が高いです。趣味でプログラミングするきっかけが欲しい方はぜひ参加して欲しいです!

kaizoku_takara.png


Linuxを学ぶきっかけ

Raspberry Piに触れていると避けて通れないのがRaspbian(Debian系Linux)なのですが、このOSをきっかけにLinuxのコマンドや動きを多く学ぶことができ、業務で活かすこともできました。Raspberry Piが教育用コンピュータであったことを再確認しました。

rasp_and_penguin.png


最新のJavaScriptを学ぶきっかけ

IoTLTではWeb系エンジニアの方々が多く参加されているためか、JavaScriptを活用した事例をLT発表されている方が多い印象です。

JavaScriptにもバージョンがあり、ES5, ES6(ES2015), ES2017などがあります。ブラウザで動く最新のJavaScriptを書く際は、Babelというツールを使ってトランスパイル(ES5などバージョンの低いJavaScriptに変換)することがほぼ必須となっています。

このトランスパイルしたりする環境を構築すること自体が大変だったりします。

website_normal.png

しかし、JavaScriptはブラウザ上だけでなく、Raspberry Piでも動かすことができます。

Raspberry PiにNode.jsをインストールすれば、最新のJavaScriptで書いたプログラムをトランスパイルをしなくてもRaspberry Piで動かすことができます。

Raspberry PiにNode.jsとnpmの最新版をインストールする

また、BabelといったツールはNode.js上で動くため、Node.jsの勉強はブラウザで動く最新のJavaScriptを書くための準備にもなります。なので、Raspberry Pi + Node.jsで最新のJavaScriptで書いてみることは大変良い勉強になりますし、実際に私はRaspberry Pi + Node.jsから最新のJavaScriptを学びました。


IoT + JavaScriptで世の中に貢献できたこと


Raspberry Piの無線LAN設定ツールを作った

Vue.jsといった今流行りのJavaScriptのフレームワークの勉強をしてみたいと思っていたのですが、なかなか作りたいものも思いつかず、"Hello, World!"や、LEDを点滅させる"Lチカ"のようにVue.jsの最初の一歩として紹介されることが多い「ToDoアプリの作り方」を見るだけではモチベーションが上がりませんでした。

todo_flowers_blue.png

そこで、IoTを絡めたMVP(Minimum Viable Product : 実用最小限の製品)を作って公開することを目標とすることを考えました。

JavaScriptの勉強会、IoTの勉強会、Qiitaでのフィードバックなどによって得られた知見により、ToDoリストのサンプルにちょっと機能を付け加えるとブラウザ上で動作するRaspberry Piの無線LAN設定ツールを製作することができることがわかり、これを製作することにしました。

wpa-supplicant-conf-tool.png

Raspberry Piの無線LANをmicroSDで簡単に設定するためのツールを作った

このツールはブラウザ上でSSIDとパスフレーズを入力するだけで簡単にRaspberry Piの無線LAN設定ファイル(wpa_supplicant.conf)を作成でき、これをPCでMicroSDに書き込んでおくことでRaspberry Pi起動前から無線LANの設定ができてしまうというものです。

パスフレーズはハッシュ化するので、セキュリティリスクが比較的低い設定ファイルを作ることができます。このハッシュ化の操作をLinuxだと標準のコマンドでできますが、WindowsとMacではそれができず、このツールが必要であった理由の一つとなっています。

pass_and_hash.png

このツールを作ることができることに気付いたおかげで、モチベーション高くVue.jswebpackBabelなどを学ぶことができ、製作したツールに対し良い評価をいただくこともありました。

IoTとJavaScriptのフロントエンド技術の勉強を結びつけられたことは偶然かもしれませんが、Raspberry PiでNode.jsを勉強しておいて本当に良かったと思いました。


Arduino core for ESP32 WiFi chipにコミット

Raspberry Piでは無線LANの設定時にパスフレーズをハッシュ化したものを利用できるのに、ESP32をArduino IDEで使う際にはパスフレーズをハッシュ化したものを利用できないことに疑問を感じていました。

そこで、ESP32と似たような機能を持っているESP8266ではどうか調べてみたところ、ESP8266ではパスフレーズをハッシュ化したものを利用できること(esp8266/Arduino#1850)がわかり、ESP8266と同じコードを espressif/arduino-esp32 にPull Requestを送ったところ、マージされました。

マージを記念(?)して、Raspberry Piの無線LAN設定ツールをESP32向けのパスフレーズのハッシュ化ツールとしてスピンオフしました。

スクリーンショット 2017-12-23 15.43.54.png

ESP32のArduinoスケッチにWi-Fiのパスワードを平文で書くのはやめよう!


Google Homeの弱点をJavaScriptで補う記事を書いた

Google HomeとIFTTTTrello(タスク管理アプリ)を連携し、声でタスクの追加をすることができるのですが、無駄な半角スペースや「 を」が入ってしまい、日本語だとちょっと使いづらい感じでした。

スクリーンショット 2017-12-16 12.53.50.png

そこで、IoT勉強会やJavaScriptの勉強会で知った "Google Apps Script" を間に挟むことで、理想的なタスク追加を実現することができました。

構成図.png

Google Homeを使ってToDoリストにタスクを追加してみた

課題解決を実現するJavaScriptを書き、Qiitaに記事を書いて、誰かが記事を読んで役に立つ、という流れができ、JavaScriptの勉強に対するモチベーションを高く保つことができたと感じています。


IoTLTでLT発表できたこと

今年の4月からIoTLTに行き始めましたが、常連になったからなのかまだIoTLTで発表したことなかったの?と言われるまでになっていました。

そこで、今までIoT縛りの勉強会! IoTLT vol.33 @ LINEで「あなたのお家に眠るラズパイを救出したい」(スライド)というタイトルでLT登壇してみることにしました。

slide_0.jpg

DSC_7633.jpg

Photo by @romromofficer

LTではRaspberry Piをヘッドレス(ディスプレイ、キーボード、マウスなし)で利用するための手順を、OSイメージ書き込みにEtcher、無線LAN設定に本ページで紹介した設定ツール、SSH接続の際にZeroconfを用いる方法で、初心者の方々に向けて紹介いたしました。

発表後、Twitterや懇親会で「ラズパイを救出したくなりました!」という声をいただき、大変嬉しかったです。

LTを聞いてくださった皆さんがラズパイを救出し、勉強のきっかけを作ってくれたらいいなと思っています。


まとめ

IoT勉強会という場所は勉強のきっかけを得る場所なのだと、私は考えています。