ZMK Studioで編集した後にkeymapを編集したら¥マークが正しく出力されない

2026/05/30

キーボード

今回もあまり需要がないかもしれないですが、Keymap EditorでZaruBallの設定をしている中で、KeyPressだと¥マークが出力できるのに、Hold-Tapだと¥マークが出力できない事象にハマってしまったため、備忘録として残しておきます。(原因についてそこまで詳細に確認できたわけではないのですが、どうやらZMK Studio特有のある仕様が関係している可能性が高そうだと推定しています。無事に解決はしたので、そのプロセスのメモとして残しておきます。)

¥マークを出力するための設定

あまりやる人がいないと思いますが、前回の記事で「PCの設定がJIS、キーボードのレイアウトがUS」の場合に、USキーボードに印字されている記号通りの出力をするように変更しました。

調べたところ、¥マークを出力するためには下記 INT1 もしくは INT3 というものを設定すればよさそうということが分かりました。

QMK Basic Keycodes
Basic Keycodesより抜粋

補足になりますが、日本語環境においては単体で押した時の出力(0x5C)は同じなので、今回のタップ時の設定としてはどちらでも同じと考え、今回は INT1 側を使用しました。

文字コード標準のASCIIには割り当てがないが、これを拡張した日本の半角文字コード標準のJIS X 0201では92番(16進数で5C)に(半角の)円マークが割り当てられている。これはオリジナルのASCIIや欧米のASCII拡張(ISO/IEC 8859系など)ではバックスラッシュ(「\」の半角文字)を意味する。

このため、日本語環境でASCIIコードのテキスト(文字)データを表示するとバックスラッシュが円マークに文字化けする問題が知られている。逆に、日本人が円マークのつもりで記述した記号が欧米の表示環境やフォントではバックスラッシュに化けることがある。

円マーク【¥】円記号より引用

ただ、SHIFTを同時に押した際の挙動が異なり、INT1+Shiftは「 _ (アンダースコア)」、INT3+Shiftは「 | (パイプ)」が出力されます。そのため、今後KeyPressなどで単体アサインして使う場合は、ご自身の用途に合わせて設定してください。

今回アサインするキー配置

デフォルト of ZaruBallの環境だと、下記のキーのところにバックスラッシュがいます。このままではJIS環境においてバックスラッシュ(¥マーク)にならないため、下記のキーのところにバックスラッシュを打てるようにキーの設定を変えていきます。

Hold-TapのTAP側をINT1にしてみる

先ほどのキー配置には「Hold-Tap」という挙動が採用されていました。これは、長押ししているときと短押し(タップ)しているときで、出力されるキーを変えるというものです。

前回同様、Keymap Editorを使ってキーの設定を変更していきます。

今回は「HoldしているとLayer2に遷移し、短押しだと¥マークが出る」ように変更したいので、下記のようにTAP側を INT1 に変更します。

これだけでいけると思っていましたが、なぜか正しい出力がされず、} が出力されてしまっていました。。。

デバッグのためにKeyPressのINT1をアサインしてみる

今回初めての対応だったため、そもそも INT1 で¥が出力されるかを確認するために、適当なキーに一番シンプルな「KeyPress」の INT1 をアサインしてみて動作を確認しました。

そうしたところ、問題なく¥が出力されたため、INT1 自体を正しく設定(認識)できれば問題ないことが分かりました。

keymap上になぜか修正内容が反映されていない

configフォルダの中に ZaruBall.keymap というファイルがあります。このファイルを更新することでキーアサインも変更できるので、keymapファイルの中身を見てみます。

なぜかkeymap上、今回の修正が反映されていないという状況になっており、それが原因で意図通りのビルドができていませんでした。原因は不明ですが、今思うともしかしたら私が間違ってKeymap Editorを複数開いてしまっており、どこかでロールバックしていたことに気が付かなかったのかもしれないです。

keymapが更新できていなかったため、直接keymapの中身を編集します。ベース環境から何もいじっていないと124行目付近に下記のような記述があると思います。(※私の環境では前回Morphの設定を追加しているため、別の行になっています。)

        base_layer {
            display-name = "Base";
            sensor-bindings = <&scroll_down_up>;
            bindings = <
&kp ESC    &kp N1      &kp N2  &kp N3    &kp N4     &kp N5                            &kp KP_N7     &kp KP_N8  &kp KP_N9   &kp KP_DIVIDE                 &kp NUMBER_6  &kp N7  &kp N8     &kp N9   &kp N0    &kp MINUS
&kp TAB    &kp Q       &kp W   &kp E     &kp R      &kp T                             &kp KP_N4     &kp KP_N5  &kp KP_N6   &kp KP_MULTIPLY               &kp Y         &kp U   &kp I      &kp O    &kp P     &kp EQUAL
&kp CAPS   &kp A       &kp S   &kp D     &kp F      &kp G               &kp INS       &kp KP_N1     &kp KP_N2  &kp KP_N3   &kp KP_MINUS       &kp LBKT   &kp H         &kp J   &kp K      &kp L    &kp SEMI  &kp SQT
&kp LSHFT  &kp Z       &kp X   &kp C     &kp V      &kp B               &kp GRAVE     &kp KP_ENTER  &kp KP_N0  &kp KP_DOT  &kp KP_PLUS        &kp RBKT   &kp N         &kp M   &kp COMMA  &kp DOT  &kp FSLH  &lt SCROLL BACKSLASH
&td0        &kp C_MUTE          &kp LWIN  &kp LCTRL  &SandS LSHFT SPACE  &mo SCROLL                                                                           &lt 3 RET  &kp BSPC                                           &td1
            >;
        };

これがベースレイヤーのキーアサインを定義している箇所です。詳しく確認すると、この中の bindings という箇所がキーのアサインを決めています。キーボードの左上から順にアサインしているみたいで、今回該当の箇所は &lt;lt SCROLL BACKSLASH&gt; となっているキーです。

これを下記のように変更します。

修正前: &lt;lt SCROLL BACKSLASH&gt;
修正後: &lt;lt 2 INT1&gt;

※この時は lt 2 としましたが、あとからコードを確認したところ、&lt;lt SCROLL INT1&gt; のほうが適切だったかもしれないです。理由としては、ファイルの先頭のほうで SCROLL2 とDefineされていたためです。結果としては同じですが、管理上は SCROLL のほうが良かったです。

keymapを変更したuf2ファイルを書き込んでも } が出力されてしまう

ここで謎の沼にハマってしまいます。。。なぜか修正したものをビルドして書き込んでも、修正が反映されませんでした。

私のヒューマンエラーを疑い、再度ビルドをし直したり色々したのですがダメでした。

どうしようもなかったため、ビルド時に出力されるリセット用のUF2ファイル(settings_reset)を書き込んだ上で、再度ビルドした本番ファームウェアを書き込んだところ、無事に意図通りの出力がされるようになりました。

(推定原因)ZMK Studioの設定が変に残っていた?

今まではZMK Studioでキーの変更をしていたのですが、公式ドキュメントのNoteに下記のような記述がありました。

Once using ZMK Studio to manage your keymap, any future changes made to the .keymap file for your keyboard will not be applied unless you perform a "Restore Stock Settings" action from the ZMK Studio UI.

Generally, if you intend to use ZMK Studio, then you should not make any further changes to the .keymap file (with the exception of adding new empty layers to then use within ZMK Studio).

ZMK Studio 公式ドキュメントより引用

この文章を翻訳すると、下記のような内容が書かれています。

ZMK Studioでキーマップを管理している場合、キーボードの .keymap ファイルに加えた変更は、ZMK StudioのUIから「初期設定に戻す(Restore Stock Settings)」操作を実行しない限り反映されません。

一般的に、ZMK Studioを使用する予定であれば、.keymap ファイルにはそれ以上の変更を加えないことをお勧めします(ただし、ZMK Studio内で使用する新しい空のレイヤーを追加する場合は除きます)。

他の設定は問題なく動いていたので気が付きませんでしたが、ZMK Studioで一度でも編集した場合は、「初期設定に戻す」操作をするかメモリをリセットしないと、keymapファイルをいくらいじっても変更が無視される仕様のようです。

なぜ今回のHOLD-TAPだけ変更が反映されず、ほかの設定変更は反映されたのかは完全には理解できていないですが、おそらくこのZMK Studioの仕様が原因でうまく設定が反映できず、リセットしたら反映できるようになったのだと推定しています。

まとめ

今回は、keymapの修正がうまく反映できない不具合が発生しました。

今回のHOLD-TAPだけ変更が反映されなかった詳細なトリガーまでは追いきれていませんが、リセットのUF2ファイルを書き込んだら症状が解消したため、やはり前回まで使用していたZMK Studioの設定データが変に残って干渉していた可能性が高いのでは、と推定しています。

皆様も、ZMK Studioを使った後にkeymapファイルを直接編集する場合は注意したほうがいいかもしれません。

自己紹介

はじめまして 社会人になってからバイクやプログラミングなどを始めました。 プログラミングや整備の記事を書いていますが、独学なので間違った情報が多いかもしれません。 間違っている情報や改善点がありましたらコメントしていただけると幸いです。

X(旧Twitter)

フォローお願いします!

ラベル

ブログ アーカイブ

QooQ