この記事は 【RubyKaigi 2023連動イベント】みんなでRubyの知見を共有しよう - Qiita の参加記事です。
はじめに
先日のRubyKaigi 2023でノベルティグッズとして、マイクロパッドキットが配布されました!
最近 ここからはじめる自作キーボード をやり、またキーボードつくりたいなと思っており、ちょうどRubyKaigiでいただいたのでつくってみました。
ビルドガイド通りに進める
いただいたPCBにビルドガイドへのリンクが記載されていました。
詳細な組み立て手順はビルドガイドにあるので省略します。
なお、KeebKaigi 2023でノベルティキーボード製作者の魔王さんがノベルティキーボードについてお話されていましたので、先に見ておくと組み立てが楽しくなる!かもしれません。
(「ミスしないようにビルドガイドをしっかり読みましょう」って話はここだったのかなと考察できて楽しかった)
で、組み立ててできたものがこちらです!
カラフルに光ってかっこいい!
また、各キーはbundle execやrails sなどRubyist向けのマクロになっていました!(詳細はkeymap.rbを参照)
(Twitterで魔王さんからコメントいただきました!嬉しい!)
キーマップをカスタマイズしてみる
せっかくなので、キーマップをカスタムして、rubyと入力できるようにしてみます。
ビルドガイド通りに進めると、このノベルティキーボードのファームウェアは、Rubyでキーマップを書ける「PRK Firmware」が使われています!
(RubyKaigi 2023の@hasumikinさんのセッションでも紹介されていました)
なので、すでにあるkeymap.rb(ビルドガイドでダウンロードしたもの)をもとにカスタムしてみます。
まず、keymap.rbを読んでみます。
なお、以下のリポジトリでkeymap.rbは公開されていました。
require "consumer_key"
kbd = Keyboard.new
kbd.init_direct_pins([
3, 4, 6, 29,
2, 1, 7, 0
])
kbd.add_layer :default, %i[
COPY RAILS CONSOLE PASTE
BKSP_LEFT BUNDLE RAKE DEL_RIGHT
]
# (snip)
init_direct_pinsとadd_layerの部分に注目します。
init_direct_pinsはPRK FirmwareのWikiによると、
Direct-scan
Direct-scan circuit has no diode and one-to-one correspondence between pins and switches.
とのことです。
以下のリポジトリでPCBのデータが公開されていたので、回路図を見てみましょう。
また、Seeed Studio XIAO RP2040の各ピンは以下のとおりです。
(Overview | Seeed Studio Wiki より引用)
これらから、各ピンとキースイッチは1対1でつながっており、実際のキーとピンの対応は以下の図のようになることがわかります。
次に、add_layerはその名の通り、レイヤーを設定できる様です。
修飾キーが押されていない状態でのレイヤーにはdefaultが使われるため、ここにキーコードを設定すると良さそうだということがわかります。
ということで、「rubyとpicorubyが入力できるキーマップ」を考えてみました!
(複数のレイヤーをやりたいと思ったんですが、人生初のLEDのはんだ付けで力尽きそうなのでお許しください)
そして、書いたkeymap.rbはこちらです!
(RGBの設定も少し触ってみました)
いざ、入力...!
できました!ばんざーい ![]()
さいごに
人生初のLEDのはんだ付けで力尽きそうになりましたが、無事LEDを壊すことなく完成できてよかったです。
また、PRK FirmwareをRubyKaigiで知って使ってみたのですが、すっとRubyで書けるのがとてもよかったです。
RubyKaigi 2023 ノベルティキーボード最高に楽しめました!ありがとうございました!
追記
自分用のキーマップをRubyist仕様を残しつつ、つくってみたので載せておきます。







