20130615 組込みの仕事場でrubyを使う
DESCRIPTION
第58回 Ruby/Rails勉強会@関西 でお話しした、ライトユーザなRubyistの日常のお話です。TRANSCRIPT
![Page 1: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/1.jpg)
組込みの仕事場でRubyを使うしずと (@shizuto_a)
2013/6/15 第58回Ruby/Rails勉強会@関西
![Page 2: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/2.jpg)
最初におことわり
残念ながら組み込みRuby (Rite, mruby)
の話ではありません
![Page 3: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/3.jpg)
最初におことわり
Rubyライトユーザな組込みプログラマがRubyを細々と使う、ライトユーザのライトユーザによるライトユーザのためのお話です
![Page 4: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/4.jpg)
しずと (@shizuto_a)
Rubyライトユーザ歴10年ぐらい
仕事は組込みソフト(車載機器)
言語好き(仏、亜、洪、etc)
![Page 5: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/5.jpg)
組込みソフトの仕事場
![Page 6: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/6.jpg)
組込みソフトの仕事場
基本はC言語で開発する
![Page 7: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/7.jpg)
組込みソフトの仕事場
基本はC言語で開発する
ソフトとしては古い技術で生きている
![Page 8: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/8.jpg)
組込みソフトの仕事場
基本はC言語で開発する
ソフトとしては古い技術で生きている
RubyistsにはつまらないライトなRubyistsが活躍できる!
![Page 9: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/9.jpg)
Ruby勉強会@関西 参加者
Rubyistの輪
RubyistsPerl Mongers
Pythonisti
![Page 10: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/10.jpg)
同僚(組込みソフト)
Rubyistの輪
RubyistsPerl Mongers
Pythonisti
![Page 11: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/11.jpg)
同僚(組込みソフト)
Rubyistの輪
RubyistsPerl Mongers
Pythonisti
![Page 12: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/12.jpg)
同僚(組込みソフト)
Rubyistの輪
Rubyists
Perl Mongers
PythonistiできればRubyの輪を広げたい
![Page 13: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/13.jpg)
組み込み (車載)の環境
1.品質(信頼性)重視
2.製造コスト重視
3.潤沢ではない環境
4.慎重なプロセス管理
![Page 14: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/14.jpg)
1. 品質(信頼性)重視
車なので不具合流出は事故に直結
バグ一つが信用問題
事故の前でもリコールすれば大損失
![Page 15: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/15.jpg)
2. 製造コスト重視
製品は車の部品
ソフトの値段よりハードの値段
![Page 16: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/16.jpg)
3. 潤沢ではない環境
CPU : 20~80MHz
RAM : 64KB~256KB
ほぼC言語(一部アセンブラ)
![Page 17: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/17.jpg)
4. 慎重なプロセス管理
ウォーターフォール
設計レビュー、ソースレビュー
C1カバレッジの単体検査
検査、検査、検査
品質とは「変えない」こと
![Page 18: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/18.jpg)
なので
「アジャイルでRuby使ってやろうぜ」と気楽には言えない
スクリプト言語が好きな人もいるけど嫌いな人もいる
![Page 19: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/19.jpg)
Why (not) Arabic Ruby?
![Page 20: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/20.jpg)
Why not Ruby?
Rubyistなら仕事でもRuby使いたいよね
![Page 21: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/21.jpg)
Why Ruby?
Enjoy Programmingしたいから。(C言語も楽しいけど)
![Page 22: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/22.jpg)
Rubyを使うために
何にRubyを使おうか?
抵抗なく受け入れられるのは?
できれば喜んでもらえるのは?
![Page 23: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/23.jpg)
Where can we enjoy Ruby?
![Page 24: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/24.jpg)
どこで使うか(夢)
![Page 25: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/25.jpg)
どこで使うか(夢)
Rubyで制御プログラムを書く
![Page 26: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/26.jpg)
どこで使うか(夢)
Rubyで制御プログラムを書く
Rubyでプログラムを書いてCに変換
![Page 27: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/27.jpg)
どこで使うか(夢)
Rubyで制御プログラムを書く
Rubyでプログラムを書いてCに変換
Cで書いたものをRubyを使って検証
![Page 28: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/28.jpg)
どこで使うか(夢)
Rubyで制御プログラムを書く
Rubyでプログラムを書いてCに変換
Cで書いたものをRubyを使って検証
プロトタイプをRubyで作る
![Page 29: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/29.jpg)
どこで使うか(夢)
Rubyで制御プログラムを書く
Rubyでプログラムを書いてCに変換
Cで書いたものをRubyを使って検証
プロトタイプをRubyで作る夢は大事だけど、まだもう少し先
![Page 30: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/30.jpg)
どこで使うか(現実)
![Page 31: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/31.jpg)
どこで使うか(現実)
電卓代わりにirb (pry)を使う
![Page 32: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/32.jpg)
どこで使うか(現実)
電卓代わりにirb (pry)を使う
補助的なプチツールを作る
![Page 33: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/33.jpg)
どこで使うか(現実)
電卓代わりにirb (pry)を使う
補助的なプチツールを作る
設定ファイルやテーブルの生成を行う
![Page 34: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/34.jpg)
どこで使うか(現実)
電卓代わりにirb (pry)を使う
補助的なプチツールを作る
設定ファイルやテーブルの生成を行う
作ったものを他人に使ってもらう
![Page 35: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/35.jpg)
Rubyの立ち位置
Rubyを主役級には(まだ)しにくい
脇役、エキストラとして活躍しよう
Rubyの輪を徐々に広げよう
![Page 36: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/36.jpg)
おことわり
![Page 37: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/37.jpg)
おことわり
まだRubyの輪を広げられてはいません
![Page 38: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/38.jpg)
Gems, Tools, OrangeJuices
![Page 39: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/39.jpg)
irb / pry
高性能電卓としても使えるインタラクティブ環境
irbは標準添付、pryはgem install pry
数値の確認などで使っています
![Page 40: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/40.jpg)
例題(irb / pry)
(x / 1.8)を整数演算だけで精度良く計算するには?
C言語で長くても3行以内
浮動小数点と除算使用不可
xの範囲は0~65535等、制限あり
![Page 41: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/41.jpg)
正規表現
テンプレートや静的コード検証、検査ツールのログ解析などテキスト処理ができると嬉しい場面は多い
![Page 42: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/42.jpg)
例題 (正規表現)
Cソースの中から32文字以上の変数名をリストアップしよう
![Page 43: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/43.jpg)
ocra
スクリプトをWindowsアプリにする
Rubyistでない人に作ったものを使ってもらうための便利なアイテム
Ruby1.8系ではExerb
![Page 44: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/44.jpg)
例題 (ocra)
作ったツールを ocra にかけてみよう
引数なしで実行したときにrequireを全て通るなど、多少制限がある
![Page 45: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/45.jpg)
eRuby
テンプレートの中にRubyのコードを埋め込んで展開する <% rubycode %>
設定ファイルやテーブルを生成するのに便利
Rubyist以外も編集できるようにする
![Page 46: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/46.jpg)
例題 (eRuby)
“変数1”, type=char, range=0...20
“変数2”, type=long, range=-1000..1000
Excelの変数詳細リストから上記のような設定ファイルを生成しよう
![Page 47: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/47.jpg)
RSpec / Test::Unit
Test::Unit は標準、RSpecは gem install
rspec で。何を使うかは好みで。
プチツールならテストケースを説明できれば納得してもらえることも多い
![Page 48: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/48.jpg)
例題 (RSpec / Test::Unit)
ひがきさんの初心者レッスンに期待!
「ツール作るのはいいけど、それで不具合出したりしないよね? どんなパターンで試したの?」に先に備えよう
![Page 49: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/49.jpg)
黒魔術は控えめに
メタプログラミングは面白いけど使いどころは慎重に考えよう。
DSLを作るのはいいかも。でも時間を取られすぎないように気をつけよう。
![Page 50: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/50.jpg)
Key Points
![Page 51: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/51.jpg)
まずは脇役に徹する
主役(のルールや風土)を尊重する
![Page 52: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/52.jpg)
まずは脇役に徹する
主役(のルールや風土)を尊重する
プロダクトの品質のことを常に考える(納得いく答えを用意しておく)
![Page 53: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/53.jpg)
まずは脇役に徹する
主役(のルールや風土)を尊重する
プロダクトの品質のことを常に考える(納得いく答えを用意しておく)
いつか主役になれる日が来るかも…
![Page 54: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/54.jpg)
Rubyは強力な武器
強力な武器を使うときには責任が伴う
![Page 55: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/55.jpg)
Rubyは強力な武器
強力な武器を使うときには責任が伴う
先に組込ソフトでちゃんと信頼を得ておくのも大事です
![Page 56: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/56.jpg)
Rubyは強力な武器
強力な武器を使うときには責任が伴う
先に組込ソフトでちゃんと信頼を得ておくのも大事です
自分の置かれた環境に注意して使おう
![Page 57: 20130615 組込みの仕事場でRubyを使う](https://reader038.vdocuments.pub/reader038/viewer/2022102716/5565ffd8d8b42a2a4d8b4dc3/html5/thumbnails/57.jpg)
Let’s Enjoy Programming!