1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RubyKaigi 2026への感謝を伝えたくてPicoRubyのメモリと向き合った話

1
Posted at

クラウドワークス テックの開発チームでEMをしている @tama50505 です。今回は今年4月に函館で開催された RubyKaigi 2026 に参加してきたので、その様子と、帰ってきてからPicoRubyに触れて感じたことを書き残しておこうと思います。

RubyKaigiとは

RubyKaigiは、世界中のRubyistが集まるプログラミング言語Rubyの国際カンファレンスです。毎年場所を変えて開催される3日間のお祭りで、今年も世界中のRubyistが日本に集まりました。

RubyKaigi 2026の会場「函館サーモン・まるなまアリーナ」正面の様子。レンガのデザインの立て看板が掲示された入口が見える。.jpg

今年は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 さんありがとうございます!
スマートバンクさんのBoard43 PicoPicoRubyで購入したキットでLチカ
たま(tama5050)、Ikuta Mayumi、CrowdWorks Inc.と書かれたイベント参加者の名札と、カラーLEDが点灯したBoard43.jpg Raspberry Pi Pico 2 Wをブレッドボードに接続し、抵抗を介して赤色LEDを点灯させた電子工作の様子.jpg

帰ってきてから作ったもの

スマートバンクさんのオリジナル基板「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にブラウザで動く専用ジェネレーターを作ってもらいました。フォントサイズや太さ、余白などをスライダーで調整できるもので、本来やりたかった「どんなメッセージを出すか」に集中できました。

AIに作ってもらったドットデータジェネレーターの画面。上部に「Thank you RubyKaigi 2026!」を入力するテキストフィールドと、フォントサイズ・太さ・上下位置・判定しきい値・左右余白を調整するスライダーが並ぶ。下半分には、ドット文字に変換されたプレビューと、PicoRubyにコピペして使える0と1の文字列データが表示されている。.png

開発中のバグも、どこが間違っているかすぐ指摘してくれて、詰まって疲れて投げ出すことも少なかったです。

「スイッチを押したら色が変わって音を鳴らしたい」など、ふと思いついたネタを、その日のうちに実機で動かせるのは楽しかったです。RubyKaigiの会場では短い時間ながらとても楽しく、お家でじっくり自分のやりたいことを突き詰める時間もまた、同じくらい楽しい体験になりました。

まとめ

今年のRubyKaigiは、私にとって、久しぶりに自分の手でコードを書いて思った通りに動く楽しさを思い出させてくれました。コードを書かなくてもエンジニアリングはできるけれど、自分の手で書くことでしか得られない栄養素は確かにある、というのが一番の収穫でした。

最後に、Board43のワークショップを開催してくださったスマートバンクさん、誘ってくれた @masawada さん、PicoPicoRubyに誘ってくれた @makicamel さん・@youchan さん、当日教えてくれた @bash さん、会場を貸してくださったコード懇親会主催のアンドパッドさん、そしてRubyKaigi運営の皆さんに、心から感謝を伝えたいです。ありがとうございました!

おまけ

函館タワー(昼) 函館タワー(夜)
桜の花と函館タワー.jpg 満開の夜桜越しに見える函館タワー。.png
イカ イカ(マンホール)
朝イカのお刺身.jpg イカのマンホール.jpg
旧函館区公会堂 旧函館区公会堂(マンホール)
旧函館区公会堂.jpg 旧函館区公会堂のマンホール.jpg
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?