RubyとIoTをもっと簡単にする
Tamashii誕生の話
RubyWorld Conference 2017

株式会社ファイブルビー
侯大偉

アジェンダ自己紹介
IoTについてTamashiiとは？
Tamashiiのきっかけは何ですか？
Tamashii開発の話
実際の運用
課題

アジェンダ自己紹介
IoTについてTamashiiとは？
Tamashiiのきっかけは何ですか？
Tamashii開発の話
実際の運用
課題

whoami侯大偉(コウダイイ) or David

台湾出身
2009年 -> 来日
2012年 -> Ruby エンジニア
2017年 -> 株式会社ファイブルビー

株式会社ファイブルビー2016 RWC スピーカー

2015 RWC スピーカー

2015 RWC スピーカー

台湾でRuby大好きな上記3人が作った会社の日本法人
2017年3月、日本法人を立ち上げました！

会社業務

受託開発
コンサルティング
Ruby教育会社理念
企業

高品質なプログラムの提供

コミュニティへの支援
ソリューション

5xRuby
導指のイ
ベン

へト者

発開発者

開

仕事の増加

コミュニティ

アジェンダ自己紹介
IoTについてTamashiiとは？
Tamashiiのきっかけは何ですか？
Tamashii開発の話
実際の運用
課題

IoTとは？

IoT(Internet of Thing)とは、日本語に訳すと“モノのインターネット”で、パソコンやプリンター、サーバー以外の様々な「モノ（物）」（例：冷蔵庫など）がインターネットに接続され、情報交換することにより相互に制御するされる仕組みです。
–wikipedia（前年度比予測）アジェンダ自己紹介
IoTについてTamashiiとは？
Tamashiiのきっかけは何ですか？
Tamashii開発の話
実際の運用
課題

Tamashiiってなんですか？

TamashiiとはIoTデバイスとウェブアプリを簡単に統合するために作られたオープンソースです名前はなぜTamashiiなのか？

Tamashiiは何を解決したいのか？

What to Solve?
Ruby言語を使用してハードウェアのコントロー
ルをもっと単純化（簡単化）したい
開発者がビジネスロジックの開発に集中して欲しいRubyのIoTエコシステムを作りたいHigh-level API
ブザー：音を出す

buzzer = Buzzer.new
buzzer.beep(3) #=> Beep, Beep, Beep!
LCD：テキストを表示する

display = Lcd.new
display.print(“Ruby World Conference 2017!")
RFIDリーダー：カードデータを読み込む

reader = RfidReader.new
if data = reader.read
puts "Card data: #{data}"
endDevice Wrapper

LCDで”A”という文字を表示する[0x49, 0x4d, 0x49, 0x19, 0x1d, 0x19].each do |byte|
i2c_write_byte(byte)end# => "A"gem i2c

Device Wrapper
module Lcd
class Lcm1602I2C < Basedef print(message)# Lots of tedious stuff
end
end
end
Lcd::Lcm1602I2C.new.print("A")

技術の話Henry Tseng

Tamashii - Create Rails IoT applications more easily
2017 RubyKaigi
http://rubykaigi.org/2017/presentations/lctseng.html

アジェンダ自己紹介
IoTについてTamashiiとは？
Tamashiiのきっかけは何ですか？
Tamashii開発の話
実際の運用
課題

一番最初は..

悔しい気持ちRubyで遊びたい
目の前の問題を解決したい
現状を改善したい2015年9月11、12日

ラズベリーパイ
Raspberry Pi 3 Model B

CPU: 1.2GHz Broadcom BCM2837 64bit
RAM: 1GB
Wireless LAN
Bluetooth40-pin extended GPIO
4 USB 2 ports
HDMI

RFIDリーダー
MFRC522-PA

RFIDリーダー
13.56 MHz

ラズベリーパイ + RFIDリーダー

RFIDリーダー

ブザー

ラズベリーパイラズベリーパイ + RFIDリーダー

名札の後ろでRFIDラベルを付ける
セッション入る前にデバイスにタッチする
参加者の興味あるセッションがわかるDemo videoただ、一つ問題点があり、このシステムは「Python」の言語で作成されておりました。
Rubyエンジニアとしては悔しいですね2016年3月のある日..
うちの社長と新入社員Henryがこのような会話がありました..

Henry！このデバイスは去年(2015)ruby conf taiwanの参加者登録デバイスです！

おお！面白いですね！

今年(2016年)12月ruby conf taiwanの会場でrubyのコードでこのデバイスを動いてくれ！
はい……分かりました！

アジェンダ自己紹介
IoTについてTamashiiとは？
なぜTamashiiを作りたい
Tamashii開発の話
実際の運用
課題

３ヶ月後、2016年6月..

一代目

2015年のRuby Conf Taiwanと同じ機能のrubyバージョンが出来ました！

問題点

パフォーマンスが悪かった
RFID検出には1秒以上かかってしまったCheck-in Server(Manager)

コマンド

データ

例：reboot, stopAgent

Xvfb + headless

Agent

Check-in Server(Manager)2016年7月~11月

AgentCheck-in Server(Manager)2016年12月
Ruby Conf Taiwan

RFIDリーダー

ブザー

ラズベリーパイ二代目
action̲cable̲clientのruby gemを使う
RFIDの検出は1秒以内になった会場でデバイス17個 300人の参加者
無事…………

2016年3月のある日..
今年(2016年)の台湾ruby conf会場でrubyのコードでこのデバイスを動いてくれ！

👍問題点

デバイスをコントロールするため、既存のgemを使います
デバイスがサーバと自動的に再接続ができない
コードがモジュール化されていない

2017年1月〜

改善したいことrails依存の問題を改善したい
コードをモジュール化したい
新しいデバイスをもっと簡単に追加したいrails依存の問題
rails action̲cableの使用をやめる
サーバとクライアント側のwebsocket通信は自前で実装する -> tamashii
rake-basedのウェブフレームワークであれば、使えます！

Gem
tamashii -> サーバ側のwebsocketライブラリー
tamashii-client -> デバイス側のwebsocketライブラリーtamashii-common -> 共通ライブラリー
tamashii-manager -> サーバ側使われるライブラリー
tamashii-agent -> デバイス側使われるライブラリー

デバイス追加を簡単にする

モジュール化することによって、tamashiiagentのgemを使えば、最低限のIoTデバ
イス側実装が終わり、詳しく定義したい部分だけ実装すれば終わり！

https://tamashii.io/https://github.com/tamashii-io

アジェンダ自己紹介
IoTについてTamashiiとは？
なぜTamashiiを作りたい
Tamashii開発の話
実例紹介
課題tamashii-clockinhttp://panfest2017.panmedia.asia/

アジェンダ自己紹介
IoTについてTamashiiとは？
なぜTamashiiを作りたいTamashii開発の話
実例紹介
課題In Future
もっと幅広いIoTデバイスをサポートするIoTとはいえ、まだラズベリーパイだけのこと試したので、これからもっとハードウェアのスペックが低いデバイスを試さないとデバイス側はcrubyによる実装ですが、mrubyにしたいコンフィギュレーションをもっと簡単にしたい
リファクタリング & テストカバレッジ

ご静聴、ありがとうございました！

2018.4.27-28 Taiwan Ruby Conference

https://2018.rubyconf.tw/