Slide 1

Slide 1 text

「RubyでLチカ」に挑戦してみた RubyKaigi 2024 Wrap Party

Slide 2

Slide 2 text

自己紹介 井上 周 (@isaka1022) Amane Inoue バックエンドエンジニア Opexミッション dev lead | プロダクト開発部 社内のオペレーショナル・エクセレンスの実現にむけて試行錯誤中 https://zenn.dev/isaka102 https://x.com/isaka1022 https://speakerdeck.com/isaka1022

Slide 3

Slide 3 text

月間利用者 数 3,000 ユーザーの “選択”を サポートする 商品比較サービス 万人以 上 (2023年7月時点)

Slide 4

Slide 4 text

商品を自社で購入し、専門性を持ったメンバーが徹底検証 ユーザーに正確・詳細な情報を届けるために、各領域で専門性を持った人材が社内に在籍。 実際に商品を購入し、社外の専門家や施設とも協力しながら、相対比較や実測した情報に基づいたオリジナルのデータベースを制 作しています。

Slide 5

Slide 5 text

検証環境も自社で整備 自社内に倉庫やテストラボ、撮影スタジオまで完備。 スティックのりから洗濯機まであらゆる商品を自社内で保管し、検証しています。

Slide 6

Slide 6 text

十数名のエンジニアで “選択” という大きな課題に取り組んでいます! アピールポイント 国内3,000万人の月間利用者数、 海外8ヵ国にも展開 日本のみならず世界中のユーザーに使っていただけるサービスの開発ができます! 最新のRuby, Railsでの開発 Ruby3.3+YJIT、Rails7.1.3を使っており、積極的にバージョンアップを行っています! GraphQLを全面採用 Production Ready GraphQLの輪読会をしたり、部内でルールやガイドを議論・整備してドキュメントにまとめています! US攻略、パーソナライズ、 モジュラーモノリス の検討、 LLMを活用した PoC、etc… プロダクトとしても技術面でもまだまだやりたいことが盛り沢山です!! 自社検証 したどこにもない商品データ あらゆるジャンルの商品を自社で購入して徹底的に検証し、実際に使ってみないとわからない商品情報をデータベースに蓄積しています!

Slide 7

Slide 7 text

だんだんとわかること、知り合い、興味関心が高まってくる RubyKaigiと私

Slide 8

Slide 8 text

KaigiEffect 2024

Slide 9

Slide 9 text

Rubyのみでラジコンカーを作ったという hachi (Hayao Kimura)さんの発表 https://speakerdeck.com/hayaokimura/drive-your-code-building-an-rc-car-by-writing-only-ruby Drive Your Code ~ Building an RC Car by Writing Only Ruby

Slide 10

Slide 10 text

Displate 井上周・秋田純一, Displate:アンビエントな事前情報提示により食体験を向 上させる食器型デバイス, イ\ンタラクション2019予稿集, 2019.3. Asym-mekakushi A.Inoue, J.Akita, Asym-mekakushi: Development and evaluation of augmented reality system to support face-to-face communication by asymmetric gaze information, ISID2021 Best Poster Award, 2021.3. 今はソフトウェアエンジニアとして働いているが、大学・大学院では HCI(ヒューマンインタフェース)の研究をやっていた →血が騒ぐ ハードウェアに触れていた時代

Slide 11

Slide 11 text

毎年RubyKaigiで思うこと ↓ コンパイラとかちゃんと 勉強しておけばよかったかな、、

Slide 12

Slide 12 text

しかし

Slide 13

Slide 13 text

Connecting the dots 米アップルの創始者スティーブ・ジョブズが、 2005年スタンフォード大学のスピーチで語った 言葉です。 過去の取り組みがどこかでつながる Connecting the dots

Slide 14

Slide 14 text

KaigiEffect 2024 for me ↓ Ruby × Hardware

Slide 15

Slide 15 text

マイコン マイクロコントローラやMCU(Micro Controller Unit)、マイクロコンピュータとも呼ばれていま す。 最近ではあらゆる電子器具に埋め込まれてい る。 パーソナルピュータやスマートフォン用の計算装置に比べて演算性能は落ちるが、安価で小型、実世界との連携が得意 ハードウェアを操作するのに欠かせない「マイコン」 PC スマホ マイコン 演算性能 ◎ ◯〜◎ △ 大メモリ ◎ ◯ △ 小サイズ △ ◯ ◎ 低価格 △ △〜◯ ◎

Slide 16

Slide 16 text

Arduino (ハードウェアの)「Arduinoボード」、および(ソ フトウェアの)「Arduino IDE」から構成されるシ ステム 学生時代はArduino IDEでC言語のプログラムをマイコンに書き込んで動作させる、というようなことをやっていた。 MicroPythonも使用している人がいた。 https://blog.arduino.cc/2024/01/17/your-classic-arduino-ide-experience-now-in-the-cloud C言語でArduinoに書き込むということをよくやっていた

Slide 17

Slide 17 text

mruby(エムルビー) https://mruby.org/ ・組込み機器向けに最適化されたスクリプト言語 ・Rubyの開発者であるまつもとゆきひろ氏が主体となり、福岡県内の産学官が連携して開発 (リリース) ・組込み開発におけるプロタイピングや試行錯誤の必要な IoTシステム開発に適しています。 mruby/c(エムルビー・スラッシュ・シー) https://github.com/mrubyc/mrubyc ・プログラム実行時に必要なメモリ消費量が mrubyより少ないソフトウェアの開発言語です ・小さなワンチップマイコンでも動作するように開発 ・センサーネットワークやウェアラブルデバイスなどの小型端末向けソフトウェア開発に適す PicoRuby(ピコ・ルビー) https://github.com/picoruby/picoruby ・mrubyの別実装でPicoRubyコンパイラとmruby/c VMを統合したもの ・ワンチップマイコンで Ruby言語を動かすための処理系 https://qiita.com/advent-calendar/2023/mruby-family Rubyをマイコンで動かす? mrubyファミリーの紹介  

Slide 18

Slide 18 text

Lチカ プログラムでいうところの「Hello World」 電子工作でまずはやってみる最も簡単な実装 のひとつ。 最も簡易的にできそうな、 picoruby×Raspberry Pi Picoにて挑戦 まずは「Lチカ」からやってみる

Slide 19

Slide 19 text

Raspberry Pi Pico ジャンピングワイヤ 必要なものを揃えます。秋葉原の「秋月電子通商」「千石電商」「 Amazon」あたりで揃える 準備したもの Raspberry Pi Pico イギリスのRaspberry Pi 財団(非営利組織)と Raspberry Pi Ltd(営利組織)によって開発されて いるARMプロセッサを搭載したシングルボードコン ピュータ。 Picoはコンパクトかつ低価格で、電子工作に特化 したコントローラーです。 ジャンピングワイヤ ブレッドボード上で電子部品を結線するためのワ イヤ 電子工作キット 電子工作を始めるためのセンサや素子などの一 式が揃っている。3,000円前後で購入できる。

Slide 20

Slide 20 text

まずは「基板の内蔵 Lチカ」から raspberry Pi Picoには内臓のLEDがあるので、これを光らせてみる https://shimane.monstar-lab.com/hasumin/reiwa5-picoruby-l-chika

Slide 21

Slide 21 text

ファームウェアをダウンロード https://github.com/picoruby/r2P2/releases/

Slide 22

Slide 22 text

BOOTSELボタンを押しながら USB接続 USBモードとするには、ボードの電源投入時にBOOTSELボタンを押し続けます(USBを接続する間、BOOTSEL を押し続ける)。そうすると、Raspberry Pi PicoはUSBマスストレージデバイスとしてPC上に表示されます。 https://datasheets.raspberrypi.com/pico/pico-datasheet.pdf

Slide 23

Slide 23 text

USBデバイスとして認識してくれる 次はPCからアップロード

Slide 24

Slide 24 text

しかし反応しない。。

Slide 25

Slide 25 text

USBケーブルには「データ転送用」「給電用」の 2つがあるので注意。 付属品などではデータ転送にしていないものがある。(今回はこちらを使ってしまっていた) ハマりポイント①

Slide 26

Slide 26 text

これでPicoRubyが使えるようになった! ドラッグドロップで書き込み!

Slide 27

Slide 27 text

screenコマンドでシリアル通信 screenコマンド Linuxのユーティリティでターミナルセッションを 作成して管理できる。 今回はマイコンにリモート接続している。

Slide 28

Slide 28 text

Raspberry Pi Picoでirbを使用できる! これでPicoRubyが使えるようになった!

Slide 29

Slide 29 text

しかし、LEDは反応しない。。

Slide 30

Slide 30 text

Raspberry Pi Picoファミリーは現在、 Raspberry Pi Pico(左端)、Pico H(左中)、Pico W(右中)、Pico WH(右端)の4つのボードで構 成されている。 https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html ハマりポイント②

Slide 31

Slide 31 text

買ってきてしまったのは Raspberry Pi Pico W 「(ちなみにラズパイピコ W(Raspberry Pi Pico W)のオンボードLEDはちょっと違う仕組みになっており、 PicoRubyがまだ対応して いません)」 https://shimane.monstar-lab.com/hasumin/reiwa5-picoruby-l-chika ハマりポイント②

Slide 32

Slide 32 text

追加で購入! Raspberry Pi Picoは1個800円前後なので、もし失敗しても何度でも(気軽に)やり直せる

Slide 33

Slide 33 text

無事にLチカができた!

Slide 34

Slide 34 text

Lチカ プログラムでいうところの「Hello World」 電子工作でまずはやってみる最も簡単な実装 のひとつ。 ブレッドボードで回路を組み、 LEDを光らせたい もう少し複雑な Lチカ

Slide 35

Slide 35 text

ブレッドボードを使用するためにピンヘッダと組み立てていきます はんだづけして準備

Slide 36

Slide 36 text

さあ、作ろう。 しかし

Slide 37

Slide 37 text

はんだづけしたところ、土台が傾いており派手に失敗。 ハマりポイント③

Slide 38

Slide 38 text

追加で購入! ※失敗したものについては、リカバリ方法があるのでちゃんと再活用しています

Slide 39

Slide 39 text

Raspberry Pi Pico H、Raspberry Pi Pico WHであればピンヘッダが付いているのではんだづけの必要なし はんだ付け不要なモデルも存在する

Slide 40

Slide 40 text

はんだ付けも完了 Raspberry Pi Picoが立った!

Slide 41

Slide 41 text

データシートを見ながら回路を組む https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html#pinout-and-design-files 引用、参考にさせていただきました mm https://zenn.dev/ythk/articles/ythk-raspico-led01 https://zenn.dev/ythk/articles/ythk-raspico-led01

Slide 42

Slide 42 text

回路を組んで、 LED点灯! こちらも動作しました!

Slide 43

Slide 43 text

アクチュエータ 入力されたエネルギーもしくはコンピュータが出 力した電気信号を物理的運動に変換する、機 械・電気回路を構成する機械要素 電子工作の基本はセンサ+アクチュエータ センサからの入力をアクチュエータの出力として処理するプログラムを書いてマイコンで実行する もういっちょ! input output

Slide 44

Slide 44 text

CdS “硫化カドミウム(CdS)を主成分とする光導電 素子の一種で、光の当たる量によって抵抗値 が変化 光センサ(CdSセル)と接続して ↓のような回路を作成 もう少し複雑な Lチカ

Slide 45

Slide 45 text

ハードウェアをRubyでプログラミングするという不思議な感覚 Rubyプログラミング

Slide 46

Slide 46 text

動作完了! 周囲の明るさに応じて LEDの明るさが変わるという回路が完成!

Slide 47

Slide 47 text

これで冒険が始められる! Future Work ● Rubyで回路を操作するという体験が良かった ● これまでの知識をどんどん組み合わせていきたい ○ まだまだできそうなことありそう ● 「マイコン」という単位から Rubyの仕組みにせまれるかも? ● これまで触っていたRuby以外の世界があることを知った ● いざやってみると、理解があいまいな部分があるので補って行きたい ● 社内のオペレーション改善 ×IoT×Rubyの可能性あるか? ● (生成AIとの相性がもしかしたらよいかも) このあと懇親会でデモするのでもしよければわいわいしましょう!