WSL+dockerでZMKのローカルビルド環境を構築する

2024/12/02

うんちくが要らないかたは環境構築の章まで飛ばしてください。

 

自作キーボードのファームウェアを作る際、何をベースにしていますか?

多くの場合、最初はqmk_firmwareだと思います。

qmk_firmwareはC言語で簡単に開発でき、国内外ともに歴史も情報も多いため、初心者でも比較的とっつきやすいです。(※1)
しかし、qmkは無線に対応したキーボードは作りづらく、ケーブルから解放されたい人は別の手段を検討する必要があります。

(※1)qmkは破壊的な変更をするので、アップデートしたら「何もしてないのにこわれた!」となることも多いですがw

 

さて、今回はワイヤレスファーストと謳っている、ZMK_firmwareを用いて無線キーボードのファームウェアを作るための環境構築を行っていきましょう。

 

ZMK_firmwareとは

ZMK_firmwareはZephyrRTOSをベースとしたワイヤレスキーボード用のファームウェアです。

近年はstar数もかなり伸びており、自作キーボード界隈でもZMK_firmwareを採用したキーボードが増えています。

ソフトウェアライセンスはMITなので、qmkとは違い、ソースコードの開示義務がないことも大きな特徴です。

開発言語はCですが、Linuxライクな構造をしており、コア部分に手を入れる場合はDeviceTreeやKconfigの知識も必要になります。

 

環境構築

この記事ではWSL + DockerでさくっとZMK firmwareのビルド環境を整えます。

Dockerを使うと面倒なツールのインストールをしなくていいし、ホスト環境(といってもWSLですが)も汚さずに済むのでオススメです。

前提環境

以下を前提環境としています。

 

ざっくりと以下の手順で環境構築を行います。

1.WSL上にDocker Engineをインストール
2.zmkの用意
3.zmk環境の初期化
4.任意のキーボードを試しにビルド

 

1.WSL上にDocker Engineをインストール

私は宗教上の理由でDockerDesktopを使えないのでWSL上にDocker Engineをインストールします。

以下のページに沿ってインストールしてください。

 

2.zmkの用意

WSL上でzmk_firmwareをクローンしてvscodeで開くところまでやります。

場所は拘りが無ければhome以下で良いです。

git clone https://github.com/zmkfirmware/zmk.git
cd zmk
code .

これでvscodeが立ち上がるはずです。

 

3.zmk環境の初期化

vscodeが立ち上がったら、画面右下に以下の画面が出るはずですので肯定してください。

画面が出ない場合は拡張機能が足りないのでインストールしましょう。

うっかり消しちゃった場合は左下のWSL:Ubuntu-24.04となっているところをクリックして、コンテナーで再度開くを押します。

初回はDockerコンテナのビルドが走るのでしばらく時間がかかります。

コンテナのビルドが終わったら早速ターミナルを開いてソースのビルドのための初期化作業を行います。

west init -l app/
cd app
west update

これだけです。

westというのはZephyrRTOSで使われる管理ツールです。

west updateコマンドでzmk firmwareに必要なライブラリを取得します。

 

4.任意のキーボードを試しにビルド

appディレクトリにて、例えば以下のコマンドでビルドできます。

west build -d build/hummingbird -b seeeduino_xiao_ble -- -DSHIELD=hummingbird

ビルド成果物は`app/build/hummingbird`の中に生成されます。

今回だとseeeduino_xiao_bleボードを指定しているので、`app/build/hummingbird/zephyr/zmk.uf2`ファイルがマイコンに書き込める最終的な成果物です。

より詳細な説明は公式のドキュメントを参照ください。