1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

keychron b1 pro 英語配列キーボードのファームウェアを変更して、「英数・かな」キーを追加、Windows/Mac/iPadで同じ操作で日本語入力できるようにする

1
Last updated at Posted at 2025-09-26

以前より、iPadやiPhoneに接続できる軽量の英語配列のキーボードが欲しいと思っていました。しかしながら、iPadやiPhoneでは、macのように「英かな」や「karabiner」などのツールがないため、英語・日本語の切り替えが面倒なるので困っていました。また、日本語配列のキーボードには抵抗感がありました。

keychron b1 proを購入し、ファームウェアを更新することで、「英かな」や「karabiner」と同様の設定をキーボード側に設定することで、快適にキーボード入力できるようにします。macにおいては、「英かな」や「karabiner」での設定が不要になります。

また、keychron b1 proでは、macとwindowsの切り替え機能があったので、windows環境においてもmacと同様に日本語が入力できるようにします。つまり、右ALTキーをタップすると日本語入力モードになり、左ALTキーをタップすると英語入力モードになります。ALTキーを長押したり、ALTキーと他のキーを組み合わせて入力すると、本来のALTキーとして動作するようにします。

これによって、windows, mac, iPad, iPhoneのすべてで似たような感じにキーボードを使うことができ、指が絡まるような混乱はなくなります。

keychron b1 proとは

Keychron-B1-Pro-Ultra-Slim-Wireless-Keyboard-75-percent-layout-for-Mac-Windows-and-Android-ivory-white.jpg

keychron b1 proは、薄型・軽量のキーボードで、mac & windows対応、どこかしらApple Magic Keyboard (US)と似た感じのキーボードです。普段、Apple Magic Keyboardを使っていたとしても、違和感なく、移行できるのではないかと思います。

また、ZMK Firmwareに対応しており、ファームウェアを更新すれば、自作キーボードかのようにカスタマイズできます。

ファームウェアの更新方法

keychron b1 proは、keychron launcherというウェブ上でキーボードのカスタマイズができるツールを用意しています。しかしながら、キーを短くタップしたときと、キーを長押し・組み合わせて入力したときで、別々のキーの動作するような設定ができません。ファームウェアのソースを入手し、自分でビルドする必要があります。

ファームウェアのビルドについては、以下のホームページを参考にさせていただきました。

上記の記事においては、windows上のwsl環境でビルドしていたため、私もwindowsでビルドしましたが、macやlinuxにdockerを導入すれば、似たような感じでファームウェアがビルドできると思います。

WSLの導入

  1. 管理者権限でPowerShellを起動する
  2. PowerShellからwsl --installを投入する
  3. Windowsを再起動する

Ubuntuを導入

  1. PowerShellを起動する
  2. PowerShellからwsl --install -d Ubuntuを投入する
  3. アプリ一覧からUbuntuを選択して、Ubuntuを起動する
  4. 初めてUbuntuを起動した場合は、ユーザを作成するように促されるので、ユーザーを作成する

dockerのインストール

  1. Ubuntuのコマンドプロンプトからsudo apt update && sudo apt upgrade -yを投入し、Ubuntuを最新の状態にする
  2. Ubuntuのコマンドプロンプトからcurl -fsSL https://get.docker.com -o get-docker.shを投入し、dockerをインストールするスクリプトを入手する
  3. Ubuntuのコマンドプロンプトから./get-docker.shを投入し、dockerをインストールする
  4. Ubuntuのコマンドプロンプトからsudo usermod -aG docker $USERを投入し、ユーザをdockerグループに所属させる
  5. Ubuntuのコマンドプロンプトをいったん閉じて、再び開くことで、グループを反映させる
  6. Ubuntuのコマンドプロンプトからsudo systemctl enable --now dockerを投入し、dockerを起動する

devcontainerのインストール

  1. Ubuntuのコマンドプロンプトからsudo apt install npmを投入して、npmをインストールする
  2. Ubuntuのコマンドプロンプトからsudo npm install -g @devcontainers/cliを投入して、devcontainerをインストールする

zmkビルド環境の構築

  1. Ubuntuのコマンドプロンプトからgit clone -b keychron_bpro https://github.com/keychron/zmk.gitコマンドを投入し、ファームウェアのプログラムソースをクローンする
  2. Ubuntuのコマンドプロンプトからmkdir zmk-configとmkdir zmk-modulesを投入し、空のディレクトリを作成する
    ※zmk-configとzmk-modulesは、使わないのですが、ディレクトリが存在しないとビルドに失敗するようです
  3. Ubuntuのコマンドプロンプトからdocker volume create --driver local -o o=bind -o type=none -o device="/absolute/path/to/zmk-config/" zmk-configを投入し、zmk-configボリュームを作成する
    ※"/absolute/path/to/zmk-config/"は、先ほど作成した空のzmk-configディレクトリの絶対パスです
  4. Ubuntuのコマンドプロンプトからdocker volume create --driver local -o o=bind -o type=none -o device="/absolute/path/to/zmk-modules/" zmk-modulesを投入し、zmk-modulesボリュームを作成する
    ※"/absolute/path/to/zmk-modules/"は、先ほど作成した空のzmk-modulesディレクトリの絶対パスです
  5. Ubuntuのコマンドプロンプトからdevcontainer up --workspace-folder "/absolute/path/to/zmk"を投入して、devcontainerを作る
  6. Ubuntuのコマンドプロンプトからdocker psを投入して、先ほど作成したdevcontainerの名前を確認する
  7. Ubuntuのコマンドプロンプトから`docker exec -w /workspaces/zmk -it devcontainer-name /bin/bash'を投入して、docker内に入る
    ※ devcontainer-nameは、先ほど作成したdevcontainerの名前です
  8. ここを参考に、docker内のコマンドプロンプトで以下のコマンドを投入していく
    west init -l app/
    west update
    cd zephyr
    git config --global user.email "YOUR_EMAIL"
    git config --global user.name "YOUR NAME"
    git am ../0001-esb-nrf-fix.patch
    

ファームウェアプログラムの修正

keychronが公開しているファームウェアのプログラムソースには、誤りがあるそうです。
zmk/app/src/dfu/tdfu_prv.hの3行目を以下のように修正してください。
修正前

#include "..\version.h"

修正後

#include "../version.h"

※WindowsのNative環境でビルドするときは、修正前の状態でもコンパイルができるのかもしれません。

キーマップの更新

Hold-Tap Behaviorの機能を使って、右Commandキーを短くタップすると日本語入力モードになり、左Commandキーを短くタップすると英語入力モードになるように修正します。Commandキーを長押したり、Commandキーと他のキーを組み合わせて入力すると、本来のCommandキーとして動作するように修正します。

zmk/app/boards/shields/keychron/b1/us/keychron_b1_us.keymapファイルの204行目を以下のように修正します。
修正前

&uc LCMD

修正後

&mt LCMD LANG2

修正前

&uc RCMD

修正後

&mt RCMD LANG1

zmk/app/boards/shields/keychron/b1/us/keychron_b1_us.keymapファイルの229行目を以下のように修正します。
修正前

&kp LALT

修正後

&mt LALT LANG2

修正前

&kp RALT

修正後

&mt RALT LANG1

※LANG1とLANG2のキーは、Macの英数・かなのキーコードです。古いWindowsにおいてはLANG1とLANG2は無視され機能しませんが、最近のWindows 11では、Macと同様に、IMEのON/OFFとして動作するようです。いつ頃からそうなったのか、今後もそのように動作するのかわかりませんが、現在はうまく動作しているようです。

私は、ついでに&bootloaderのキー割当と、CapsLockとControlキーの入れ替えをしました。以下、私のkeymapの設定です。

	keymap {
    	compatible = "zmk,keymap";
        //mac
        default_layer {
        bindings = <
        //ESC       //f1                    //f2                    //f3                                //f4                    //f5                //f6            //f7            //f8                //f9        //f10       //f11               //f12               //DEL                                              
        &kp ESC     &kp C_BRIGHTNESS_DEC    &kp C_BRIGHTNESS_INC    &kp C_AC_DESKTOP_SHOW_ALL_WINDOWS   &kp  C_AC_MAC_LAUNCH    &kp C_AC_SEARCH     &kp C_AL_LOCK   &kp C_PREVIOUS  &kp C_PLAY_PAUSE    &kp C_NEXT  &kp C_MUTE  &kp C_VOLUME_DOWN   &kp C_VOLUME_UP     &kp DEL  
        &kp GRAVE   &kp N1                  &kp N2                  &kp N3                              &kp N4                  &kp N5              &kp N6          &kp N7          &kp N8              &kp N9      &kp N0      &kp MINUS           &kp EQUAL           &kp BSPC 
        &kp TAB     &kp Q                   &kp W                   &kp E                               &kp R                   &kp T               &kp Y           &kp U           &kp I               &kp O       &kp P       &kp LBKT            &kp RBKT            &kp BSLH      
        &kp LCTRL   &kp A                   &kp S                   &kp D                               &kp F                   &kp G               &kp H           &kp J           &kp K               &kp L       &kp SEMI    &kp SQT                                 &kp RET                                         
        &kp LSHFT   &kp Z                   &kp X                   &kp C                               &kp V                   &kp B               &kp N           &kp M           &kp COMMA           &kp DOT     &kp FSLH                                            &kp RSHFT 
        &kp CLCK    &uc LALT                &mt LCMD LANG2          &kp SPACE                                                                                                       &mt RCMD LANG1      &mo 1       &kp LEFT    &kp UP              &kp DOWN            &kp RIGHT   
        &mo 2       &out OUT_BLE            &out OUT_24G            &out OUT_CHG                        &out OUT_CHGD 
            >;
        };
        //mac
        layer_one  {
        bindings = < 
        &trans      &kp F1                  &kp F2                  &kp F3                              &kp F4                  &kp F5              &kp F6          &kp F7          &kp F8              &kp F9      &kp F10     &kp F11             &kp F12             &trans    
        &trans      &bt_pair_0 0 0          &bt_pair_1 0 0          &bt_pair_2 0 0                      &bt_pair_3 0 0          &trans              &trans          &trans          &trans              &trans      &trans      &trans              &kp C_AC_SEARCH     &trans      
        &trans      &trans                  &trans                  &trans                              &trans                  &trans              &trans          &trans          &kp INS             &trans      &trans      &trans              &trans              &uc LG(LS(N4))
        &trans      &trans                  &trans                  &trans                              &trans                  &trans              &trans          &trans          &trans              &trans      &trans      &trans                                  &trans                  
        &trans      &trans                  &trans                  &trans                              &trans                  &trans              &trans          &trans          &trans              &trans      &trans                                              &uc LC(LG(SPACE))
        &trans      &trans                  &trans                  &trans                                                                                                          &kp RCTRL           &trans      &kp HOME    &kp PG_UP           &kp PG_DN           &kp END  
        //
        &none       &none                   &none                   &none                               &none
            >;
        };
        //win
        layer_two {
 		bindings = <
        &kp ESC     &kp F1                  &kp F2                  &kp F3                              &kp F4                  &kp F5              &kp F6          &kp F7          &kp F8              &kp F9      &kp F10     &kp F11             &kp F12             &kp DEL     
        &kp GRAVE	&kp N1 	                &kp N2 	                &kp N3 	                            &kp N4 	                &kp N5 	            &kp N6 	        &kp N7 	        &kp N8 	            &kp N9      &kp N0      &kp MINUS           &kp EQUAL           &kp BSPC
        &kp TAB 	&kp Q 	                &kp W                   &kp E 	                            &kp R 	                &kp T               &kp Y 	        &kp U 	        &kp I 	            &kp O       &kp P 		&kp LBKT            &kp RBKT            &kp BSLH 	 	
        &kp LCTRL 	&kp A 	                &kp S 	                &kp D 	                            &kp F 	                &kp G 	            &kp H 	        &kp J 	        &kp K 	            &kp L       &kp SEMI 	&kp SQT                                 &kp RET
        &kp LSHFT   &kp Z 	                &kp X 	                &kp C 	                            &kp V 	                &kp B 	            &kp N 	        &kp M 	        &kp COMMA           &kp DOT     &kp FSLH                                            &kp RSHFT				
        &kp CLCK 	&kp LGUI                &mt LALT LANG2          &kp SPACE              		                                                                                    &mt RALT LANG1	    &mo 3       &kp LEFT    &kp UP              &kp DOWN            &kp RIGHT 	
        //
        &none       &out OUT_BLE            &out OUT_24G            &out OUT_CHG                        &out OUT_CHGD 
            >;
        };
        //win
        layer_three {
        bindings = < 
        //ESC       //f1                    //f2                    //f3                                //f4                    //f5                //f6            //f7            //f8                //f9        //f10       //f11               //f12               //DEL                                              
        &trans      &kp C_BRIGHTNESS_DEC    &kp C_BRIGHTNESS_INC    &uc LG(TAB)                         &uc LG(E)               &kp C_AC_SEARCH     &uc LG(L)       &kp C_PREVIOUS  &kp C_PLAY_PAUSE    &kp C_NEXT  &kp C_MUTE  &kp C_VOLUME_DOWN   &kp C_VOLUME_UP     &trans   
        &trans      &bt_pair_0 0 0          &bt_pair_1 0 0          &bt_pair_2 0 0                      &bt_pair_3 0 0          &trans              &trans          &trans          &trans              &trans      &trans      &bootloader         &kp C_AL_CALC       &trans          
        &trans      &trans                  &trans                  &trans                              &trans                  &trans              &trans          &trans          &kp INS             &trans      &trans      &trans              &trans              &uc LG(LS(S))      
        &trans      &trans                  &trans                  &trans                              &trans                  &trans              &trans          &trans          &trans              &trans      &trans      &trans                                  &trans  
        &trans      &trans                  &trans                  &trans                              &trans                  &trans              &trans          &trans          &trans              &trans      &trans                                              &uc LG(DOT) 
        &trans      &trans                  &trans                  &trans                                                                                                          &kp RCTRL           &trans      &kp HOME    &kp PG_UP           &kp PG_DN           &kp END    
        //
        &none       &none                   &none                   &none                               &none
            >;
        };
	};

ファームウェアのビルド

  1. docker内のコマンドプロンプトから、cd /workspaces/zmk/appコマンドを投入し、カレントディレクトリを移動する
  2. docker内のコマンドプロンプトから、west build -b keychron -p -- -DSHIELD=keychron_b1_usコマンドを投入し、ファームウェアをビルドする
  3. ビルドされたファームウェアが、zmk/app/build/zephyr/zmk.uf2という名前で保存されているか確認する

ファームウェアの更新

ここの下の方にある「How to manually flash the keyboard firmware」の記事を参考にウェアームウェアを更新します

  1. Keychron B1 proをWinに切り替えます。トグルをケーブルモードにスライドし、電源ケーブルをキーボードに接続します
  2. 「fn」+「-」ボタンを3秒間押し続けます。充電インジケータライトが青色に点灯し、点滅を始めます
  3. コンピュータがハードドライブ(NRF52BOOT)を認識します
  4. エクスプローラーなどから新しいファームウェア (zmk.uf2 ファイル) をハードドライブ ( NRF52BOOT ) にドラッグ&ドロップしてフラッシュを完了します
  5. しばらくお待ちください。キーボード ファームウェアのフラッシュが完了すると、ハード ドライブが自動的にポップアップします。

Windowsでの動作について

  • Windowsのキーボードレイアウトの設定は、「英語キーボード(101/102キー)」にしてください。「日本語キーボード(106/109キー)」にすると、記号などが正しく入力できません。
  • キーボードレイアウトを「英語キーボード(101/102キー)」に設定した場合、変換(INT4)や無変換(INT6)のキーが無視され機能しません。Macで使われている英数(LANG2)と、かな(LANG1)のキーコードは無視されず、IMEのON/OFFとして動作するようなので、キーマップを更新する際には、LANG1とLANG2を使ってください。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?