既存の自作キーボードを「Vial」に対応させてみた話

さて、最近は違うものばかり設計したりして自作キーボードもご無沙汰という感じですが、現在は終売としたTH60JPへのリクエストにVialには対応できないか?という旨のご意見をいただきました。

そもそもRemapなどは知ってたのですが、Vialを初耳というような状態でした。調べてみると最近の流行りというか新興宗教的なものらしいですw

Vialについて端的に説明すると、ほぼVIAと同じことがユーザー視点でより気軽にできるファームウェアの形です。VIAとの違いとしては、VIAではサーバー側がキーマップを持つ形となっており、サーバー側にデータがない場合は自分で逐一キーマップを読み込む必要があります。一方Vialはキーボード内にVIA用のキーマップを持つ形になっており、どんなキーボードでも対応ソフトで簡単に書き換えられるというのが違いです。

何も読み込まなくてもVialはVIAと同じことができる

実際にVIAやRemapというのは開発者側が登録の申請をする必要があり面倒である他、VIAはそもそも登録を全然受け付けてくれなかったりと良くない一面を持っていたことは確かです。その部分を取っ払ってくれるのがVialですね。このVIAで使うキーマップをファームウェア内に格納するので、ファームウェアサイズが肥大化してしまう点が欠点となります。ProMicroとかだと容量的に厳しそうなイメージですが、日本ではまだ珍しいSTM系のマイコンを使っていた私なら問題なく対応できそうです。

というわけでざっくりと現状ですが、TH60JPはQMK/VIAに対応したキーボードとして販売していたものになります。一応VIA v2からスタートして、VIA v3まで対応したファームウェアを公開していました。そして2年ほどいじる必要もなかったのでソースコードは放置していました。

この状態から新しい機能を足すとなると、時間がかかりそうなので、コメントで時間がかかると思いますと返信していましたが、思ったよりも移植は簡単でした。

簡単に作業の概要を説明すると、

  1. 既存のキーボードのファームウェアを最新のQMK firmwareでコンパイルできるコードに修正する
  2. Vialのレポジトリをclone & makeして使える状態にする
  3. 少しだけファイルを追加したりする

こんな感じでした。今までVIAに対応していないファームウェアだとKeyboad Layout Editor(KLE)を使って逐一レイアウトを作ったりする必要があるのですが、現状VIAに対応しているキーボードなら対応はかなり楽でした。正しくはVIA用のjsonファイルを持っていると楽なだけで、既存のキーボードでVIA用のjsonファイルがないとキーマップを自分で作る必要があり若干面倒です。

というわけで実際の対応作業について紹介です。

古いコードを最新のQMK firmwareでコンパイルできるように

こちらは最新のQMK firmwareでコンパイルできる環境なら不要です。

私の場合は以前からコードを触っていなかったのでエラーが出てコンパイルできないようになっていました。QMK firmwareは以前のコードが使えなくなるような破壊的な変更が度々行われるので注意が必要です。

私の場合はRGBバックライトの関係が引っ掛かったのと、LAYOUTマクロをヘッダー(.h)に書くなという注意が出ていました。Warningの項目は放っておいて大丈夫なので、ひとまずRGB周りだけ修正を行いコンパイルできることを確認しました。

ファームウェアが大きくなることが想定されるので、この段階でLTO_ENABLE=yesの項目は追加しておくのがよさそうです。

Vialの環境を作る

全ての手順は公式のドキュメントとして紹介されていますが、既存のキーボードについての話もあるので必要のない部分は端折っていきます。

ちなみに私のキーボードではロータリーエンコーダについては非対応なので、そこらへんは詳しくは知りません。ドキュメントを見る限り少し触る必要があるかもしれないですね。

さて、QMK環境以外にVial専用の環境を用意する必要があるので、公式の通りに、Vialをcloneしてmakeしていきます。

git clone https://github.com/vial-kb/vial-qmk.git
cd vial-qmk
make git-submodule

コンパイルが終わったらそのディレクトリでqmk doctorを実行して変なエラーが出ていなければOKです。Warningの表示は出ていたりしますが無視しても大丈夫です。

問題なければ次にvial用のファイルを作ります。

Vial専用のファイルを用意する

専用といっても非常に簡単なものです。キーボードごとにディレクトリがあり、keymapフォルダの中にVIAに対応するコードがある場合、keymapのフォルダからVIAのコードが入ったフォルダをコピーして「vial」という名前にしておきます。

公式ドキュメントによると、vialに対応をわかりやすくするためにこのフォルダの名前にせよとなっており、別の名前でもいいのかもしれませんが、何か判定などで使われても面倒なので、大人しくvialという名前にしておくのが無難です。

手順的の概要は、

  1. VIA用ファイルを同じvialフォルダに入れる
  2. rules.mkに追記する
  3. config.hを新規追加する

という流れになっています。ここからの操作は全てkeymap/vialのフォルダ内で行います。

vialフォルダの中にVIA用のjsonファイルをvial.jsonとして入れます。この段階で設定ファイルが正しいかを確認しておくのが良いと思います。確認はしなくても動きますが、動かないときに面倒なので確認がおすすめです。

確認方法はVialのデスクトップ用ソフトを入れて、File→Load dummy JSONからテストできます。ここでVIA v2のファイルを読み込んだら何事もなく読み込めたのでそのまま使っています。エラーが出る場合は公式ドキュメントとにらめっこしながら解決するしかありません。

Load dummy JSONを選ぶ

次にrules.mkにVIA_ENABLE=yesという項目があると思うのでその下に追記でVIAL_ENABLE=yesを追記します。

VIA_ENABLE=yes
VIAL_ENABLE=yes

最後にconfig.hというファイルを追加します。

vial-qmkのフォルダで

python3 util/vial_generate_keyboard_uid.py
実行すると以下のようなレスポンスが返ってくる
#define VIAL_KEYBOARD_UID {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX}

この#defineの文字列をconfigに追記します。

さらに、セキュリティのために使うロック用のキーを二つ設定します。QMKの中にはCOLとROWの概念があると思いますが、それに従った感じでコードを書きます。

#define VIAL_UNLOCK_COMBO_ROWS {4, 2}
#define VIAL_UNLOCK_COMBO_COLS {6, 14}

(ROW,COL)で(4,6)と(2,14)のキーを指定する場合上記のような感じです。若干書き方に疑問を覚えますが、こういうものだと思っておきましょう。

その結果出来上がったのが以下のようなファイルになります。

/* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#define VIAL_KEYBOARD_UID {0x47, 0x27, 0xBC, 0x22, 0x37, 0x51, 0xE3, 0x41}

#define VIAL_UNLOCK_COMBO_ROWS {4, 2}
#define VIAL_UNLOCK_COMBO_COLS {6, 14}

これらを全て一つフォルダ入れておくと最終的にはこんな感じですね。

vialフォルダはこのようなファイルになっていればOK

これだけのファイルがkeymap/vialフォルダにあってやっとVialに対応したファームウェアをコンパイルできます。

まずキーボードのプロジェクトのフォルダ(私ならth60jp)をvial-qmk/keyboards内に移動させます。普通のQMK firmwareではなく、vial-qmk/keyboardsフォルダであることに注意です。

そこにプロジェクトをコピーしたら、vial-qmkフォルダにcdしたうえで

make th60jp/rev1/f303:vial

のようにすればOKです。qmkではなく、makeであることに注意です。もちろん、これは私の場合のキーボードのコンパイルなので各自読み替えてビルドしてください。

これでできたコードをQMK Toolboxなどでキーボードに書きこんでVialでキーマップが変更できれば移植完了です。

まとめ

文字で書くとこんな感じですが、実際に手を動かすと結構簡単でこれが普及すればより手軽にキーマップを触れるようになるとおもうので普及してほしいですね。

移植もVIAが使えれば簡単なので、良いところだと思います。手軽と簡単は何においても正義ですからね。余談ですが、この記事もVialに対応させたTH60JPで書かせていただいています。

最近はキーボード関連を追いかけられていませんでしたが、対応してほしいとリクエストしていただいた方には知る機会をいただいて感謝しています。おかげで今後の選択肢も一つ増やすことができました。

Vialの使い心地はVIAとも変わらないですし、登録もいらないということからも、個人の開発勢的には非常に使い勝手もよく非常に助かっています。ぜひ今後もVial側も開発を続けていただいて、新しいメインの勢力になってもらいたいですね。私も新興宗教のVialが気に入りましたw

以上です。お読みいただきありがとうございました。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です