クラウドワークス テックの開発チームでEMをしている @tama50505 です。今回は今年4月に函館で開催された RubyKaigi 2026 に参加してきたので、その様子と、帰ってきてからPicoRubyに触れて感じたことを書き残しておこうと思います。
RubyKaigiとは
RubyKaigiは、世界中のRubyistが集まるプログラミング言語Rubyの国際カンファレンスです。毎年場所を変えて開催される3日間のお祭りで、今年も世界中のRubyistが日本に集まりました。
今年はPicoRubyに触れた年になった
私は普段マネージャー業務が中心で、最近はガッツリとコードを書く機会から少し距離ができていました。それでもRubyKaigiは毎年いろんな刺激をくれる場で、今年は特にPicoRubyに初めて触れた年となりました。
PicoRubyとは
PicoRubyとは、メモリが非常に小さい組み込み環境で動かすために設計された、軽量なRubyの実装です。Raspberry Pi Picoなどを使って、LEDを光らせたり、音を出したり、電子工作で色々と実現できます。
RubyKaigi 2026ではPicoRubyに触れる機会が2回ありました。
- スマートバンクさんのワークショップでいただいた「Board43」
- 繋いで3分で光った!
- Board43専用のブラウザで操作できるアプリが素晴らしかった
- 好きな画像をアップロードすればドット絵に変換してすぐに光らせられた
- アンドパッドさんのコード懇親会会場で参加した「PicoPicoRuby」
- 事前に持ち込んだRaspberry Pi Pico 2 Wの基板でLチカできた
- 函館に行く前ちょっと触って挫折していたので、無事に光ったときは嬉しかった!
- マイクやスピーカーなどのパーツをまとめたキットを購入させてもらった
- @makicamel さんありがとうございます!
- 事前に持ち込んだRaspberry Pi Pico 2 Wの基板でLチカできた
| スマートバンクさんのBoard43 | PicoPicoRubyで購入したキットでLチカ |
|---|---|
![]() |
![]() |
帰ってきてから作ったもの
スマートバンクさんのオリジナル基板「Board43」を題材に、16×16のLEDマトリクスで動くメッセージボードを作りました。RubyKaigi会期中は画像を表示する程度でしたが、帰ってからじっくり触ったので、その紹介です。
- メッセージをドットフォントで横スクロール表示
- ボタンで色(ドレミに対応した8色)とメッセージを切り替え
- 切替時にブザーで音階を鳴らす
- 傾きセンサーで上下が反転すると文字も自動で反転
なかでも一番流したかったのが「Thank you RubyKaigi 2026!」のメッセージ。タイトルにも書いた通り、RubyKaigiへの感謝を伝えたくて試行錯誤しました。
PicoRubyとメモリの話
今回いちばん面白かったのが、PicoRubyのメモリと向き合ったことです。
普段Webアプリケーションを書いているときにはそこまで意識しない領域で、小さい環境だからこそ向き合わざるを得なくて、その制約のなかでコードをどうシンプルにするか考えるのが楽しかったです。
最初は「全ピクセルのRGB値を配列で持てばいい」という発想で書いたところ、PicoRubyがOut of Memoryで止まってしまいました。
pattern = [
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], ... [0, 0, 0]],
...
[[0, 0, 0], [103, 16, 23], [103, 16, 23], [0, 0, 0], [0, 0, 0], ... [0, 0, 0]],
...
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], ... [0, 0, 0]]
]
そこで発想を変えて、マトリックスのどこが光るかは "0" / "1" の文字列で持ち、色は別の配列でパレットとして管理することにしました。Rubyの多次元配列は、各要素([0, 0, 0] のような配列)が独立したオブジェクトとしてメモリを消費しますが、"0101..." のような '0' と '1' だけの文字列なら全体で1つの文字列オブジェクトに収まるので、メモリ消費を抑えられます。
raw_texts = []
raw_texts << <<~TEXT
000000000000000000000000000000000000000000000000000000000 ... 0
...
000111111111100000011111010000000000000000010000000000000 ... 0
...
000000000000000000000000000000000000000000000000000000000 ... 0
TEXT
# '0'のときのRGBデータ
color_off = [0, 0, 0]
# '1'のときのRGBデータ
color_on = [103, 16, 23] # Red
これでメモリの問題が落ち着き、1つのパターンだけでなく複数のマトリックスデータを持てるようにもなりました。
小さなメモリの制約のなかで、それでもやりたいことを実現できるように工夫するのは初めての経験で、とても面白かったです。
AIを「壁打ち相手」にした開発体験
もうひとつ書き残しておきたいのが、AIをペアプロ相手にした開発の楽しさです。
手作業でやりたくなかった「16ドットフォントで文字をドットに起こす」作業は、AIにブラウザで動く専用ジェネレーターを作ってもらいました。フォントサイズや太さ、余白などをスライダーで調整できるもので、本来やりたかった「どんなメッセージを出すか」に集中できました。
開発中のバグも、どこが間違っているかすぐ指摘してくれて、詰まって疲れて投げ出すことも少なかったです。
「スイッチを押したら色が変わって音を鳴らしたい」など、ふと思いついたネタを、その日のうちに実機で動かせるのは楽しかったです。RubyKaigiの会場では短い時間ながらとても楽しく、お家でじっくり自分のやりたいことを突き詰める時間もまた、同じくらい楽しい体験になりました。
まとめ
今年のRubyKaigiは、私にとって、久しぶりに自分の手でコードを書いて思った通りに動く楽しさを思い出させてくれました。コードを書かなくてもエンジニアリングはできるけれど、自分の手で書くことでしか得られない栄養素は確かにある、というのが一番の収穫でした。
最後に、Board43のワークショップを開催してくださったスマートバンクさん、誘ってくれた @masawada さん、PicoPicoRubyに誘ってくれた @makicamel さん・@youchan さん、当日教えてくれた @bash さん、会場を貸してくださったコード懇親会主催のアンドパッドさん、そしてRubyKaigi運営の皆さんに、心から感謝を伝えたいです。ありがとうございました!
おまけ
| 函館タワー(昼) | 函館タワー(夜) |
|---|---|
![]() |
![]() |
| イカ | イカ(マンホール) |
|---|---|
![]() |
![]() |
| 旧函館区公会堂 | 旧函館区公会堂(マンホール) |
|---|---|
![]() |
![]() |









