2023年のRemap
このブログエントリは、 キーボード #2 Advent Calendar 2023 の25日目の記事です。
メリークリスマス!アドベントカレンダー最後の記事のテーマは、Remap です。今年の Remap を振り返っていきたいと思います。
9月11日 QMK Firmware Ver. 0.22対応
昨年から今年の9月にかけて、しばらくRemapのバージョンアップが停滞していました。Remapの動向をウォッチされている方はすでにご存じのことと思いますが、QMK Firmwareの内部キーコードに依存しているRemapは、QMK Firmware側の大きな変更の影響を受けて、QMK Firmware 0.19 以降でビルドされたファームウェアを扱えない、という大きな問題を抱えていました。
昨年の12月23日に公開した 現在のRemapと今後のRemapについて にて、Remap の方針について表明していましたが、着手が遅れてしまったことは事実であり、多くの方々にご心配とご迷惑をおかけいたしました。お詫びいたします。
QMK Firmware の最新バージョン対応の着手は、6月です。最初のコミットは、6月26日でした。
そこから地道にコミットを重ねていきますが、最終的には9月11日のリリースとなりました。3ヶ月弱かかってますね。
この QMK Firmware のキーコード変更については、完全に Remap の内部的な話であり、Remap の UI に何か新しい機能が追加されるというわけでもない、とても地味な対応でした。ただし、これを乗り越えないと Remap の今後はない、ということも事実でしたので、なんとか完遂できたことは、Remap にとっては大きなことだったかなと思っています。
Remap supports QMK Firmware 0.22.2 or higher
QMK Firmware Ver. 0.18 以前のファームウェアについては、キーコードの大幅な変更を行う直前のソースコードを使って、別ドメイン( https://qmk018.remap-keys.app/ )にて対応させていただくことにしました。当初は「過渡期の環境として、1ヶ月程度運用する」と考えていましたが、アクセス状況を見ると比較的利用者が多いため、現在も継続して提供させていただいております。シャットダウンについては現時点では未定です。しばらく運用し続けるつもりですので、安心して利用いただければと思います。
9月21日 ロータリーエンコーダーサポート
QMK Firmware Ver. 0.22 対応を終えた後、これで開発のモチベーションが復活しました。そこで次に着手した機能が、ロータリーエンコーダーのサポートです。
実は昨年からロータリーエンコーダーのサポートへの要望はかなり来ていて、海外からも熱望されていました。かなりお待ちいただいてしまったことは残念ですが、「対応します!」とお約束していましたので、その約束は果たせたかなと。
ロータリーエンコーダーのサポートは、その UI について結構悩みました。1つのデバイスに対して3つのキーコードを割り当てる、という命題についていろいろ試行錯誤しました。
わかりやすい UI となったかな、と自負しています。
Remap supports Rotary Encoders
今では、Remap に登録されている多くのキーボードにて、上記の UI を見ることができます。
9月25日 ファイルコピーによるファームウェア書き込み
僕は最近 Lunakey Pico というキーボードをずっと使っています。このキーボードは Raspberry Pi Pico を使っています。Raspberry Pi Pico は、ファイル書き換え、つまり OS にマウントされたファイルシステムに対してファームウェアのファイルを書き込むことで、ファームウェアの更新を行うことができます。
これはこれでとても楽なのですが、Remap にて配布されているファームウェアのファイルがあったとすると、
- ファイルを Remap からダウンロードする。
- Raspberry Pi Pico のファイルシステムマウントをする。
- ダウンロードしたファイルをファイルシステムに書き込む。
という手順を踏まないといけないため、ちょっと面倒だったりします。
この作業を軽減するために、Remap から直接ファイルシステムにファームウェアのファイルを書き込む機能を作りました。
Raspberry Pi Pico のファイルシステムをマウントしたあと、Remap からそのディレクトリを指定するだけで、ファームウェアのファイルを書き込みに行ってくれます。
9月30日 マクロの遅延機能のサポート
マクロは「複数の OS の操作を1キーで行う」という利用の仕方をしている人が比較的多く、OS の処理速度や画面効果などに影響を受けて、あまりにも早いキー入力だと、やりたいことが途中で失敗してしまうことがあります。
そこで、マクロの中で「ちょっとだけ遅延させる」機能を実装して公開しました。マクロに入れた各キーの打鍵後に遅延させる時間を指定できるようにしました。
11月9日 ファームウェアビルド機能のリリース
Remap は「VIA クライアントのウェブアプリ版」として開発がスタートしました。もちろんそれだけでも便利なものでしたが、Remap でできることが VIA プロトコルの範疇となってしまうことに不満を感じていました。
それを打破するために、ついに「ファームウェアビルド機能」を実装してリリースしました。これは、皆さんが手元にある PC に QMK Firmware をビルドする環境を準備しなくても、Remap にてファームウェアをビルドして結果を得ることができる機能になります。
この時点では、各キーボード作者がファームウェアのソースコードを Remap に登録することで、ユーザーはそのファイルを使ってビルドした結果のファイルを得ることができます。さらに、キーボード作者が各ファイルに埋め込んだ「カスタマイズポイント」により、ユーザーは自身が望む機能を ON にしたり OFF にしたりすることで「カスタマイズされた自分だけのファームウェア」をビルドして入手することができます。
この機能は、Remap の今後の可能性を高めてくれるだろうと考えています。また、僕としては、キーボード作者が「ハードウェア的なカスタマイズだけでなく、ソフトウェア的なカスタマイズもユーザーに提供する」ということを今後積極的に行っていって欲しい、という願いを込めて作りました。キーボードによって如何に効率よくコンピューターに入力していくか、これはハードウェアだけでなく、ソフトウェアによってさらに高めていくことができると考えているからです。
11月30日 ビルド機能にてファイル編集のサポート
11月9日にリリースしたビルド機能では、ファームウェアのファイルが登録され、しかもキーボード作者によってカスタマイズポイントが埋め込まれた状態になって、ユーザーがその恩恵を受けることができます。しかし、キーボード作者全員にこれを求めたい一方で、ちょっと非現実的かも?、とも思っていました。
そこで、カスタマイズポイントに頼らなくても、ファームウェアのプログラムを追記や変更できるユーザー向けに、ファイルの変更を Remap でできる機能をリリースしました。
これにより、ファームウェアのファイルさえ登録されていれば、ユーザーは QMK Firmware が提供してくれる機能のほとんどを引き出すことができるようになりました。プログラミングの知識が必要になってしまいますが、「Remap でできることは、ほぼ無限大になった」と言って良いかな、と思っています。
このファイル編集機能に関しては、「キーボード作者によっては、ユーザーにファームウェアのファイルを編集されることを望まないのでは?」という懸念がありました。そこで、X(旧: Twitter)にてアンケートをとりました。
自作キーボードキット作者の方々に質問です。販売しているキーボードと共に公開しているファームウェアのコードは、そのキーボードのユーザーにいじって欲しいですか? #自作キーボード
— Yoichiro Tanaka (@yoichiro) November 30, 2023
結果として 8 割以上の方々が「編集されても問題ない」と表明していただけましたので、リリースに踏み切りました。
12月19日 統計機能のリリース
ビルド機能をリリースした後に、「ビルド機能に対応するキーボードをどれにするか決めかねている」という声を聞きました。普段 Remap にてカスタマイズされている回数が多いキーボードから対応したい、という話でしたので、キーボード作者の方々が、各キーボードについて、
- Remap にてカスタマイズが開始された回数
- Remap からキーマップが書き込まれた回数
の統計を 90 日間見ることができる機能をリリースしました。
プライバシーに配慮して、一定のユーザー数から操作があった後に、グラフに回数が反映されるようになっています。
来年の Remap は?
今年は前半なかなか Remap の開発に向き合う時間がとれなかったですが、後半はかなり Remap を進化させることができたかな、と思っています。特に、ビルド機能は僕自身としても欲しかった機能ですし、今後の夢広がリングな Remap を考える上でも大事な機能だと考えています。
Remap が停滞する中で、Remap ではなく他の環境に移行を考えるキーボード作者からの声をいくつか目にしました。それは Remap の開発停滞が原因かもしれませんが、それだけでなく、Remap よりもユーザーが手軽にキーボードをカスタマイズできる範囲が広いから、という理由が大きいんじゃないかな、と考えています。
キーボードのソフトウェア的なカスタマイズは、ファームウェアとそれを操作する外部プログラムとの協調によって実現します。動的な挙動の変更は、Remap のような外部プログラムだけでなく、MCU、つまりマイコンに書き込まれるファームウェア側の対応もあって実現することです。つまり、手軽なカスタマイズは、ファームウェア側の対応をどうしていくか、がポイントとなります。
Remap のビルド機能は、ファームウェアのプログラムを変更することができる機能です。つまり、ファームウェア側の対応をも Remap が介入することができるようになったことを意味しています。
ここで、VIA プロトコルでサポートされていないけれど、QMK Firmware では提供されている機能を考えます。今までであれば、QMK Firmware 側のプログラムを書き換えて、その機能を利用できるようにする必要がありました。これは、ユーザーにプログラミングの知識を求めることであり、難易度は高いものでした。
しかし、Remap のビルド機能を利用することで、
- Remap がファームウェアのビルド時に「自動的にファームウェアのファイルに対して追記を行い」、ビルド結果をマイコンに書き込む。
- Remap にそのキーボードを接続したときは、Remap 固有の機能が有効になり、Remap の画面を操作するだけで、ファームウェア側の挙動が変わるようになる。
的なことを実現できる、かもしれません。例えば、OLED の表示内容を EEPROM で持てるとするならば、
- Remap がビルド時に「EEPROMからOLEDに表示を行う処理」と「RawHID にて OLED で表示したい情報を EEPROM に書き込む処理」を自動的に追記してファームウェアビルドを行う。
- Remap にて「OLED のロゴデザイナー画面」にて絵を描くと、キーボードの OLED にそれが動的に描かれる。
みたいなこともできてしまうかもしれません。もちろん、Tap Dance なども同様のことを想像できます。このような Remap 固有の動的カスタマイズ機能を提供できる可能性がありますし、その手前に「Remap の画面でポチポチすると、それに対応したプログラムを自動的に作って埋め込んでくれて、それでビルドできる」という機能も可能かなと考えています。
Remap が主体的に今後の機能拡張を考えることができるようになった点においては、今年の開発は大きかったかなと思っています。もっとキーボードを便利な道具にしていくために、できることをやっていきたいなと思ってます。
また、来年は「キーボード作者向けの機能」についても何か開発して提供していきたいな、と考えています。少し前に「どんな機能が欲しいですか?」と声を聞いたところ、以下のような要望をいただきました。
- VSCodeのような UI でファームウェアを書いてビルドまでしてくれる Web IDE。
- info.json をグラフィカルな UI で作ることができる機能。
- ビルドガイドの執筆を補佐してくれる機能。
- ビルドガイドをホスティングする機能。
- OLED や RGB Matrix など設定が複雑になりがちな機能の設定をサポートしてくれるテンプレート提供。
時間が許す限り、開発を進めていきたいと思っています。
皆さま、よいお年をお迎えください!