マイコンで動くプレゼンツールRapiccoまたはルー大柴メソッド

hasumikin is a programmer.


これはmrubyファミリ (組み込み向け軽量Ruby) Advent Calendar 2025の12/6の記事です。


Rapiccoとは、Raspberry Pi Pico 2上のR2P2で動くプレゼンツールです。 Rabbitのマイコン版です。 ターミナルエミュレータに文字をアスキーアート的に表示することで、大きな文字でプレゼンできます。

なぜつくったか

憧れのプログラマである世界のshugomaedaTextbringerというテキストエディタをつくっていますね。 このエディタにはプレゼンモードがあり、shugomaedaはそれをつかってカンファレンス登壇しています。 これを見て、「ターミナルエミュレータでプレゼンするのかっこいい! これぞプログラマだ!」と常々思っていました。

この時点で、以下のアイデアはすでにありました:

  • ターミナルエミュレータの文字サイズを小さくして、ビットマップフォントをAA表示する
  • Rabbitのようにウサギとカメがいる

Textbringerのプレゼンモードは、端末のふつうの文字をそのまま使用するだけなので、文字サイズに大小をつけられません。 しかし、Rapiccoなら文字サイズを変更できるのです!

うさぎの名前はラピ子、かめの名前はカメルレンゴです。

Rapiccoを支える技術

和文フォントには東雲フォントを使用しています。 懐しい、と思ったあなたはおっさんですね。

Rapiccoの初期バージョンでは、ビットマップフォントの1ドットを"\xE2\x96\x88" * 2で表現していました。 U+2588と書いたほうがよいでしょうか。 ユニコード名ではFULL BLOCKです。 "\xE2\x96\x88"を表示するとです。 この文字は多くのターミナルエミュレータ上では半角サイズ(みなさんのブラウザ上では全角っぽく表示されているかもしれません)なので、これをふたつ並べるとだいたい正方形になります。 つまり、2文字で1ドットです。 だからターミナルエミュレータのフォントサイズを2pxくらいの極小にする必要がありました。 16×16ドットの文字をひとつ描画するのに、32文字×16行も使っていたのです。

PicoRuby Overflow会議でのトークはこのバージョンのRapiccoをつかっており、スライドの描画がたいへんにねっとりしていました。

その後、FULL BLOCKに加えてUPPER HALF BLOCK:"\xE2\x96\x80")とLOWER HALF BLOCK:"\xE2\x96\x84")もつかえば端末のフォントサイズを2倍にできることに気づきました。 16×16ドットの文字をひとつ描画するのに、16文字×8行で済みます。 これによりスライドの描画スピードが約4倍(当社調べ)になりました。 やったね!

Rubygemもあるよ

Rapiccoはマイコンでプレゼンするためのツールですが、スライドを修正するたびにマイコンにファイルを送るのはめんどうです。 もちろん、POSIXビルドのR2P2でもRapiccoが動きます。 PCの端末だと描画が非常に速いです。

筆者は自他ともに認めるRabbitのヘビーユーザです。 スライドをラビットショッカーにアップロードできるのがRabbitの魅力でもありますが、Rapiccoではそうもいきません。 と思っていたのですけど、Rabbit作者のすとうさんに「RapiccoをPDF化できたらスライドショッカーにアップロードしていいですか」とおそるおそる聞いたところ、「いいよ!」と快諾していただきました。

そこで急遽、RapiccoスライドをPDF化してgemとしてpushするためのrapicco gemをつくりました。 みなさんもこれを使えばRapiccoでスライドをつくり、全世界にシェアできます! (PicoRubyをローカルでビルドしておく必要があります)

下記リンクが、記念すべきRapiccoスライドアップロードの第一段です。

https://slide.rabbit-shocker.org/authors/hasumikin/RubyWorldConference2025/

マイコンでプレゼンするとき

じつはPicoRuby版(VMがmruby/c)だと、Rapiccoのスライド描画がとても遅いです。 MicroRuby版(mruby)ならだいぶ実用的な速度ですので、MicroRubyを各自ビルドしてお使いください(リリースしろ?はい…)。 たぶんmruby/cの参照カウンタGCがRapiccoの描画と相性わるいのかな、と想像しています。

ルー大柴メソッド

先日のRubyWorld Conference 2025での登壇でも、ラズパイピコ2のMicroRuby版R2P2でRapiccoをつかってプレゼンしました。 控え室で@koicさんにスライドをちらっと見せたところ、「英語をちょいちょい入れてて偉い」(意訳)と褒められました。

RubyWorld Conferenceは国際カンファレンスですし、実際に海外からRubyfriendsが何人か来ることも知っていたので、スライドになるべく英語を入れるよう工夫しました。 しかしRapiccoスライドはあまりたくさんの情報を書けないのです。 むしろそこが売りでもあると信じていて、いわゆる「高橋メソッド」に寄せたツールなのです。

しかしなんとかしてちょっとは英語を入れたい。 それによって、同時通訳のサポートになるとよい。 かと言って全面的に英語にすると、来場者の大半の日本人に伝わりにくくなります。 とくに今回のわたくしの発表は学生さんへ届けたかったので、その妨げになるようなスライドにはしたくありませんでした。

というわけで、日本語の文に英単語を折り混ぜたスライドをつくりました。 @koicさんとの会話のなかで、これをルー大柴メソッドと命名したのです。