Slide 1

Slide 1 text

New "Type" System on PicoRuby 関ケ原Ruby会議01 時、令和八年 丙午 皐月三十日 備中守 仁雄

Slide 2

Slide 2 text

名乗り 🏯 岡山城 2026-05-20 岡山県。先週行ってきました

Slide 3

Slide 3 text

名乗り 藤原 桒原 備中守 歩通鍵 仁雄 (ふじわらの くわばら びっちゅうのかみ ぽつけ まさたか) 備中(現在の岡山県)在住 RBSメンテナ Rubyで静的型を扱うためのライブラリ PicoRubyファン 株式会社コードタクト勤務 趣味: ピアノ / 園芸 / 車 / 城巡り 🏯Tips: 岡山城は黒い外壁から別名「烏城」とも呼ばれる 🏯

Slide 4

Slide 4 text

城巡り 旅行中に城に立ち寄るのが好きです。 27/100名城に行った 公益財団法人日本城郭協会が制定 うち、10/12現存天守に行った 弘前城、松本城、姫路城、彦根 城、松江城、備中松山城、丸亀 城、松山城、宇和島城、高知城 丸岡城、犬山城がまだ 城の写真/Tipsと共に発表をお楽しみくだ さい 🏯Tips: 岡山城のニ代目城主は 小早川秀秋 で、関ケ原合戦の後に城主となった。 🏯

Slide 5

Slide 5 text

New "Type" System on PicoRuby 🏯 備中松山城 2022-11-03 岡山県。現存12天守の1つ。

Slide 6

Slide 6 text

New "Type" System on PicoRuby 🏯Tips: 備中松山城は猫城主がいることで有名 🏯

Slide 7

Slide 7 text

New "Type" System on PicoRuby 🏯Tips: 備中松山城は秋から春にかけて雲海が発生し、雲海に浮かぶように見えることでも有名 🏯

Slide 8

Slide 8 text

New "Type" System on PicoRuby 🏯Tips: 備中松山城は日本で唯一現存する山城 🏯

Slide 9

Slide 9 text

New "Type" System on PicoRuby

Slide 10

Slide 10 text

Scrimonia scrivere (書く) + armonia (ハーモニー) MIDIキーボードを、文字入力のキーボードとするプロダクトを作成しました PicoRubyで実装 Raspberry Pi Pico上で動作 MIDIキーボードとPCの間に入って、MIDI入力を文字入力に変換する https://github.com/pocke/scrimonia (トーク終了後に公開予定)

Slide 11

Slide 11 text

実演披露 (Demo) 🏯 姫路城 2023-01-01 兵庫県。姫路駅前で撮影

Slide 12

Slide 12 text

実演披露 Scrimonia回路の紹介 MIDIキーボードの紹介 文字入力のデモ ここでカメラを有効にします 🏯Tips: 姫路城は、白い城壁などから別名「白鷺城」とも呼ばれる 🏯

Slide 13

Slide 13 text

軍議の次第 (Agenda) 🏯 大洲城 2025-04-15 愛媛県。RubyKaigi 2025の直前に訪れました

Slide 14

Slide 14 text

軍議の次第 以下の2つの側面から、Scrimoniaを紹介します 基本編: Scrimonia の基本的な機能 実践編: Scrimonia をどう使っていくのか 🏯Tips: 大洲城の近くに猫がたくさんいる旅館(松楽旅館)があり、いつか行きたい 🏯

Slide 15

Slide 15 text

基本編 🏯 津山城 2022-04-10 岡山県。桜の時期に行きました

Slide 16

Slide 16 text

Rubyでのキーマップ設定 設定ファイルはRubyで記述 MIDIのNote(鍵盤の入力)から文字へのマップを定義する require 'scrimonia' include Scrimonia::Notes include Scrimonia::Keycodes s = Scrimonia.new s.add_layer :default, { C3 => KC_A, # C3 を弾くとAが入力される } Rubyファイルで設定を書くという点はprk_firmwareを参考にしています 🏯Tips: 津山城近くのつやま自然のふしぎ館は、初代館長のホルマリン漬けが展示されていることで有名 🏯

Slide 17

Slide 17 text

問題: キーの数 🏯 松本城 2023-05-10 長野県。現存12天守の1つ

Slide 18

Slide 18 text

キーの数 25鍵盤のMIDIキーボードを使用 小さくて持ち運びやすい KORG microKEY Arturia MiniLab 3 しかしキー数が明らかに足りない 英語アルファベットだけでも26文字ある(1足りない) Scrimoniaは扱える文字の数を増やすための機能を3つ持っています。

Slide 19

Slide 19 text

ベロシティ 打鍵の強さ(ベロシティ)によって、出力を切り替える機能 ベロシティ対応のMIDIキーボードであれば、1..127の範囲で打鍵の強さが送られ て来る これによって、1つの鍵盤に複数の文字を割り当てられる s.add_layer :default, { C3.with(velocity: 1..60) => KC_A, # C3を弱く弾くとAが入力される C3.with(velocity: 61..127) => KC_Q, # C3を強く弾くとQが入力される }

Slide 20

Slide 20 text

和音 複数の音を同時に打鍵した時のキー出力を定義できる s.add_layer :default, { [B3, C4] => KC_SPC, # B3, C4を同時に弾くと、スペースが入力される B3 => KC_G, # 当然単音との同居も可能 C4 => KC_H, }

Slide 21

Slide 21 text

レイヤー切り替え 複数のレイヤーを切り替えられる s.add_layer :default, { # ... # 3つのキー同時押しで別のレイヤーに切り替え [C3, Cs3, D3] => Scrimonia::Action::LayerChange.new(:fn, :switch), } s.add_layer :fn, { # ... # もとのレイヤーに戻るキー [C3, Cs3, D3] => Scrimonia::Action::LayerChange.new(:default, :switch), }

Slide 22

Slide 22 text

他の機能 🏯 首里城 2018-03-11 沖縄県。焼失前の写真

Slide 23

Slide 23 text

MIDI出力 当然MIDIキーボードとしても使える s.add_layer :default, { C4 => C4, # C4を弾いたときはそれをそのまま出力する D4 => D5, # 別の音に振り替えることも可能 } 🏯Tips: 今年2026年の秋に、焼失した首里城正殿の復元が完成する予定らしい。早くない!? 🏯

Slide 24

Slide 24 text

実践編 🏯 高松城跡 2022-12-11 香川県。天守は現存しない

Slide 25

Slide 25 text

実践編 ここまででType Systemの説明をした Type Systemを使うには、Type Definitionが必要 型定義……ではなくてキーマップ定義 🏯Tips: 高松城のお掘は海水で、鯛にえさやりが出来ます 🏯

Slide 26

Slide 26 text

私が使っているキーマップ QWERTYベース 新しいキーマップを覚えるのは大変 ベロシティベース 強弱で入力されるキーを変える 和音ベースのキーマップも実装したけれど、試したら難しすぎた……

Slide 27

Slide 27 text

私が使っているキーマップ 実線: 強く弾いた場合 / 破線: 普通に弾いた場合 普通に弾いた時によく使うキーに割り当てる 弱く弾くより強く弾くほうが簡単

Slide 28

Slide 28 text

キーマップの習得 Type SystemとType Definitionが揃ってScrimoniaが使えるようになった!が…… QWERTYベースとはいえ、新しいキーマップを覚えるのは大変 人間はどうやってキーマップを覚えるのか

Slide 29

Slide 29 text

タイピング ゲーム 🏯 松山城 2026-04-13 愛媛県。現存12天守の1つ

Slide 30

Slide 30 text

タイピングゲーム タイピングゲームも作りました お題となる文章を入力する、一般的なタイピングゲーム 日本語のお題に百人一首を採用 例文が多い、大体覚えてる、長さが均一で時間を計りやすい 特徴的な機能 入力の補助として、鍵盤とそれに対応するキーが表示される 次に入力するべき鍵盤の位置がハイライトされる 静的Webアプリとして実装 Claude Codeが実装。コードは全く読んでない DEMOします

Slide 31

Slide 31 text

便利機能: キーマップの読み込み このタイピングゲームはキーマップを知らないと成立しない キーマップを定義するRubyファイルをアップロードすると、それに対応したキー マップを表示 キーマップの解釈にはPicoRuby.wasmを利用 アップロードされたキーマップをブラウザ上で実行し、マップを組み立てる Noteやキーの定義コードは、Scrimonia本体と同じRubyファイルを読み込み キーボードとして動作するランタイム部分を、マップを組み立てるコードに 差し替え PicoRubyはどこでも動いて便利! (UIもFunicularで書き直したかったけど時間がなかった)

Slide 32

Slide 32 text

便利機能: レイヤーの検知 レイヤーはScrimonia内部の概念 つまりPCから見るとレイヤーという概念はない タイピングゲームでは現在のレイヤーでキーマップを表示 Scrimoniaは構造化ログでレイヤーの切り替えイベントを出力 タイピングゲームはWeb Serial APIでScrimoniaに接続 副産物として、Scrimoniaのログビューワも出来た

Slide 33

Slide 33 text

便利機能: MIDIキーボードによる演奏 ScrimoniaはMIDIキーボードとしても動作する ならばMIDIキーボードとして動作確認をしたい 音を鳴らして遊びたい 自由に音を鳴らせる機能も実装 Web MIDI APIでScrimoniaに接続 MIDI出力が来たら音を鳴らすように Web、何でも出来てすごい

Slide 34

Slide 34 text

Yet Another "Type" System 🏯 宇和島城 2020-11-14 愛媛県。現存12天守の1つ

Slide 35

Slide 35 text

Yet Another "Type" System ここまではキーボードをTypeするシステムの話 せっかくなので、Static Typeの話も少ししましょう 🏯Tips: 宇和島城には伊達政宗の長男 伊達秀宗が1614年に入封し、幕末まで伊達家が城主だった 🏯

Slide 36

Slide 36 text

Steep::PicoRuby https://github.com/pocke/steep-picoruby PicoRubyのビルド設定から、必要なpicogemの型定義をSteepにロード これによってScrimoniaの設定も静的型の恩恵を受けられるように # Steepfile require 'steep/picoruby' target :keymap do picoruby_library check 'keymap.rb' end 🏯Tips: 鯛めしは松山風より宇和島風のほうが好き。 🏯

Slide 37

Slide 37 text

事の起こりに 寄せて 🏯 松江城 2018-02-05 島根県。現存12天守の1つ。雪の松江城、とて もきれいでした

Slide 38

Slide 38 text

事の起こりに寄せて PicoPicoRubyのメンバー、特に makicamelさんと hasumikinさんのお陰でこの発表 を出来ています。ありがとうございます。 🏯Tips: 松江城の堀を一周できる遊覧船がおすすめです。 🏯

Slide 39

Slide 39 text

事の起こりに寄せて 私がピコピコし始めたきっかけは、2026-02-21に開催された出雲Ruby会議01の懇親会 < ちょっとこっちのテーブルに来てもらっても良いですか? < PicoRubyであれこれできたらめちゃくちゃ面白くないですか??(熱弁) < PicoRubyでSteepをアップデートしたらなんかうまくいかないけど、心当た りはない? < 1年前に買って眠っているRaspberry Pi Picoがあるし、手を出してみるかあ…

Slide 40

Slide 40 text

Scrimonia 開発タイムラ イン 🏯 彦根城 2026-05-29 滋賀県。現存12天守の1つ。昨日行ってきまし た

Slide 41

Slide 41 text

Scrimonia 開発タイムライン 2024-12-19: Interface 2022年10月号を注文 Raspberry Pi Pico特集 2024-12-20: Raspberry Pi Pico と部品諸々を注文 この頃からScrimoniaの原形となるイメージがあった 年末年始にやるぞという気持ちはありつつ、Lチカだけして放置 2025-09-07: 無職で時間があったので、ChatGPTにScrimoniaの開発相談 ChatGPTに提案された回路は、現在のScrimoniaのものより複雑だった なんか難しそうで実装までたどり着けず… 2026-02-21: 出雲Ruby会議01で沼から手が伸びてきた背中を押される これが本当に転換点でした

Slide 42

Slide 42 text

Scrimonia 開発タイムライン (2) 2026-02-24: picorubyに初PRを出す Steepアップデートの課題の第一歩 出雲Ruby会議の3日後! 2026-02-25: Scrimonia first commit 2026-03-01: 基本のコンセプトであるMIDI-文字入力変換は動くように 福岡Rubyist会議05の翌日で、岡山に帰ってきてすぐ開発していた 2026-03-09: 関ケ原Ruby会議のCFPに応募 出雲で背中を押されてからは、すごい速度で開発していました

Slide 43

Slide 43 text

Scrimoniaの今後 キーマップを習得したい まだQWERTYの数倍遅い 単体で音を出せるように より洗練されたキーマップの研究 今は音楽的な要素がキーマップに反映されていない 記号やファンクションキーが足りない

Slide 44

Slide 44 text

大尾 (最後に) 🏯 鬼ノ城 2026-05-28 岡山県。桃太郎伝説を構成する要素の1つ。 一昨日行ってきました

Slide 45

Slide 45 text

大尾 Scrimoniaの紹介 MIDIキーボードを文字入力キーボードとして使うType System PicoRubyは物理に近いことを出来て楽しい アイディアを形にするのにとてもいい時代 不慣れな実装もAIとともに進める 温めているアイディア、思いついたものを形にしてみませんか? 背中を押したい人・押されたい人・Scrimoniaを試してみたい人はぜひ声をかけてくだ さい♫ __END__ 🏯Tips: 鬼ノ城は1971年に発見されたらしい。結構最近。 🏯