2023年にさわったキーボードファームウェアについて

この記事は、キーボード #2 Advent Calendar 2023 の1日目の記事です。

2023年、自作キーボードおよびその関連製品についての活動をいろいろ行いました。
その中で、いくつかのキーボードファームウェアを使いました。
せっかくなので、それらについて特徴や個人的な感想などをまとめます。

個人的な振り返りなので皆様のお役に立つかどうかはわかりませんが、「こんなことやった人もいるのねーふーん」くらいの軽い気持ちで読んでいただければ幸いです。


目次


1. 前置き

RP2040-Zeroを使うことが多いので、使ったファームウェアもRP2040に対応しているものが多いです。
余談ですが、RP2040-Zeroはいいですよ。安くて、ピン数も割と多くて、USB-Cコネクター標準装備です。


2. さわったファームウェア

順序は適当です。


2-1. QMK Firmware

自作キーボード界隈のデファクトスタンダードともいうべきファームウェアです。
色々なことができる奥深さがありますが、私はまだまだ仲良くなりきれていません。がんばる。

キーマップの変更にはRemapを使う方が多い印象です。
そういえばこのRemap、カスタマイズポイントを使って手軽に設定変更ができるようになりました。
そして間を置かずに、ソース自体をRemap上でいじくってRemap上でビルドできる機能がリリースされましたね。すごい。


2-2. Vial

前述のQMK Firmwareのフォークですが、”decentrailized” 、つまり「分散型」であることを掲げています。フォークなだけに?、QMK向けのソースを少しいじるとVialでビルドできるようになります。
QMKは各キーボードのソースをQMKリポジトリに集約して管理していますが、Vialはそれを必要としません。キーマップのJSON定義をファームウェアに内包することにより、GUIでのキーマップ変更を容易にしています。
あえて前述のRemapと比較するなら、どちらもキーマップのJSON定義が必要なのは変わりませんが、それをサイト側に持つかキーボード側に持つかの違いです。

  • QMK+Remap :
    • キーマップのJSON定義をRemapサイト側に持つ
    • キーボード設計者はJSON定義などをRemapに申請&登録してもらう必要がある
    • Remapに登録済みのキーボードなら、Remapのサイトに接続すればキーマップの変更ができる
    • Remapに未登録のキーボードでも、JSON定義を都度アップロードすればキーマップの変更ができる
  • Vial :
    • キーマップのJSON定義をキーボード内に持つ
    • キーボード設計者はJSON定義などをVialのサイトに登録してもらう必要がない
    • Vialのサイトやアプリでキーマップが変更できる

どちらがいいとか優れているとかいうつもりはありません。どちらにもそれぞれの魅力があり、単純に比較できないからです。
Remapにはキーマップ変更以外にもいろんな機能(キーボードカタログ、ソースの編集、など)があります。キーボードの情報をサイト側で保持しているからこそできることです。
一方のVialは申請というステップが無い分、自設計キーボードを使ってもらうまでのハードルが少し低いとも言えます。


2-3. PRK Firmware

キーボードの動作やキーマップをRubyで記述できるファームウェアです。
テキストエディタさえあれば、色々な設定変更ができます。
keymap.rbというファイル一つだけ書けばすぐキーボードとして動かせますし、ビルドせずに様々な機能をいじって試してができるのは強みだと思います。

え、ドキュメントが英語なのでちょっととっつきにくい?
いえいえ、日本語ドキュメントあります!(ただし一部だけ)

(ja)と書かれたリンクが、日本語化されたものです。
何を隠そう(別に隠してないですが)私がちまちま日本語化しています。私以外の方が日本語化したものもあるのかな?(把握してない)
え、日本語化されたものが少ない?すみません、がんばります……。

なお、keymap.rbの書き方をしょっちゅう忘れる私は、自分のためにkeymap.rbの大枠を作ってくれるWebアプリを作りました。

これがあれば書き方忘れても大丈夫!
来年はもうちょっと機能を追加したいです。


2-4. Kermite

Kermiteは、ファームウェアおよびエコシステムの名称です。……というとよくわからないかもしれません。

ファームウェアだけでなく、以下のツールや機能が標準で提供されているのがKermiteです。

  • キーマップのカスタマイズができるWebブラウザツール
  • 自設計キーボード向けファームウェアをプログラミング不要で作れるウィザード
  • キーマップ共有サイト

そしてなんと、ファームウェアを作るのにプログラムを書く必要がないんです!
Web上のUIでポチポチ指定していくだけであら不思議、ファームウェアができちゃいます。
これ助かる、という方は多いんじゃないでしょうか。

標準ファームウェアでカバーしていない機能を使いたい場合はプログラムを書く必要がありますが、私の場合はほとんどその必要がありませんでした。
プログラムを書く場合はこちらの記事が参考になるかと思います。


2-5. tinygo-keyboard

Goでファームウェアが書けるtinygo-keyboardです。
tinygo-keyboardで作ったファームウェアは、前述のVialのサイトやアプリでキーマップ変更ができます。

実際に使ってみたときのことを記事にまとめましたので、興味があればこちらもあわせて読んでみてください。


2-6. KMK Firmware

KMK Firmwareは、Pythonで書けるファームウェアです。またこちらもPRK Firmwareと同様に、変更したコードはビルドせずに動きます。
……ただ、私が作るキーボードではこちらに対応しないことが多いです。
その理由の一つは、分割キーボードの左右間通信に線が4本必要な点です。
他のファームウェアは3本だったり、3本と4本どちらか選べたりするんですが、KMKだけは4本必須なんですよね。確か。
あんまりちゃんと追えてないので、最近は違っているorそもそもそんなことはないのかもしれませんが。


2-7. Keyberon

Rustで書かれたファームウェアです。たぶん。
以前ちょっと試してみたんですが、何をどうしたらファームウェアが作れるのかさっぱりわかりませんでした。
私がRustのお作法を全く知らないのが一因と思われます。

この記事は「2023年に さわった キーボードファームウェアについて」なので、さわったものの完成させることができなかったファームウェアがあってもいいよね?嘘はついてないよ!


2-8. (番外編)GP2040-CE

こちらはキーボードではなくゲームコントローラーのファームウェアです。
キーボードとゲームコントローラー、ボタンがいくつかあってPCなどと接続して使うという点で似ているので取り上げました。
(一時期、キーボード界隈の人が何人もレバーレスコントローラー作ってましたし)

私が面白いなーと思ったのは、「設定ツールを内包している」という点です。

これまで出てきたファームウェア、設定変更したい場合はソースをいじったりサイトやアプリでキーマップを変更したり、というものでした。
GP2040-CEは、特定のボタンを押しながらPCに接続すると、そのハードウェアはゲームコントローラーではなくWebサーバーとして振る舞います。
で、そのWebサーバーのURL( http://192.168.7.1/ )をブラウザで開くと、各種設定変更画面が開くんですね。
これ、キーボードのファームウェアでもできたら便利かも。
誰かやりません?(他力本願)


3. 最後に

以上まとめましたが、なにか誤りがあったら優しく教えてください。こっそりなおします。
来年はZMK Firmwareに手を出して、無線キーボードを作ってみたいです。

明日は、ぴろりどんさんの「今年設計したキーボードのこだわりポイント」です。
きっとアレの話ですね。楽しみです。

この記事は、以下のキーボードで書きました。