特集 - 自作キーボードの作り方(QMK Firmware編)

QMK Firmwareのビルド環境を作る

今回は一番有名なQMK Firmwareを動作させてみたいと思うので、QMK Firmwareをビルドする環境を作成します。
基本編と同じく、開発環境はWindows 11とします。

仮想マシンを作る(VMWare Workstation Playerの導入)

QMKのビルドは原則としてLinux環境でのみ可能です。
ですがLinuxを直接インストールしたPCの用意はちょっと難しいと思います。
そこで『仮想マシン』という、ざっくりいうとOSのエミュレーターにあたる仕組みを使って、Windows上でLinuxを動かします。

ここではVMWare社が無料提供している『VMWare Workstation Player』を使います。
(※無料なのは個人利用および非商用に限ります)
VMware公式のダウンロードページからインストーラーをダウンロードします。

ダウンロードしたファイルをダブルクリックして実行します。

基本的にはデフォルト設定のまま進めていけばOKです。

「インストール」をクリックするとインストールが始まります。

完了するまでしばらく待ちます。

「セットアップウィザードが完了しました」と表示されたら、VMWare Workstation Playerのインストールは完了です。

次に、新しい仮想マシンを作成します。
スタートメニューに「vm」と入力し、VMWare Workstation Playerを検索し、起動します。

インストール直後の初回起動では、VMWare Workstation Playerの使用目的を質問されます。
今回は趣味のキーボード制作用ということで「非営利目的でVMWare Workstation 17 Playerを無償で使用する」を選択し、「続行」をクリックします。

「完了」をクリックすると、VMWare Workstation Playerが起動します。

ホーム画面が表示されたら、「新規仮想マシンの作成」をクリックします。

仮想マシンへのOSのインストール方法を選択します。
まだインストールに必要なファイルを用意していないので、「後でOSをインストール」を選択し、「次へ」をクリックします。

仮想マシンで動かすOSの種類を選択します。
「ゲストOS」は「Linux」を、「バージョン」は「Ubuntu 64ビット」を選択します。

仮想マシンの名前を入力します。
起動して確認しなくても用途がわかる名前にしましょう。
日本語や空白文字も使えますが、仮想マシンを構成するファイルとフォルダの名前にもなるので、ファイル名として違和感のない名前にしておくとよいかもしれません。

「ディスク最大サイズ」を【80GB】に変更します。
いきなり80GBの巨大ファイルが作られるわけではなく、仮想マシンの中でファイルが増えると徐々にファイルサイズが増えていきます。
実は一度20GBのまま進めたら、QMKインストール中に容量不足になった上、後からディスクサイズを増やしたら起動しなくなりました…。
仮想マシンを動かしている最中に容量不足になるほうがずっと面倒なので、ディスク最大サイズはできる限り大きくしましょう。
入力が済んだら「次へ」をクリックします。

「仮想マシンを作成する準備完了」まできたら、「ハードウェアをカスタマイズ」をクリックします。

「メモリ」を選び、【4GB】→【8GB】に増やします。
マシンスペックに余裕があるならもっと多くてもいいです。

「プロセッサ」を選び、コア数を【2】→【4】に増やします。
これもマシンスペックに応じて調整してください。

「閉じる」をクリックし、元の画面に戻ります。

「完了」をクリックし、仮想マシンの作成します。

一覧に作成した仮想マシンが追加されていれば、仮想マシン作成は完了です。

仮想マシンにLinuxをインストールする(Ubuntu Desktopの導入)

Linuxには非常に多種多様なディストリビューション(派生品)がありますが、その中でもメジャーな『Ubuntu』をインストールします。
Ubuntu公式のダウンロードページで「Ubuntu Desktop 22.04.3 LTS」の欄の「ダウンロード」をクリックします。

インストールディスクのISOイメージのダウンロードが始まるので、ダウンロード完了するまで待ちます。
※DVDディスク相当で5GB弱あるので、ダウンロード時間に注意

ダウンロードしたISOイメージを、仮想マシンで読み込むように設定します。
仮想マシンを選択した状態で「仮想マシン設定の編集」をクリックします。

「CD/DVD(SATA)」を選択し、「起動時に接続」と「ISOイメージファイルを使用する」にチェックを入れます。
「参照」ボタンを押し、先程ダウンロードしたISOイメージを選択します。

「OK」をクリックして設定を反映します。

「仮想マシンの再生」をクリックし、仮想マシンを起動します。

しばらくするとUbuntuのインストーラーが立ち上がります。
(以降は仮想マシン上で動作する【Ubuntuのスクリーンショット】で解説します)

「Ubuntuをインストール」をクリックします。

キーボードレイアウトを選びます。
日本語環境で日本語キーボードを使っているのであれば「Japanese」を選択します。
(ただし筆者は英語キーボード派です)
「続ける」をクリックして次へ進みます。

デスクトップOSとして十分な機能が揃った状態にしたいので、「通常のインストール」を選択します。
「Ubuntuのインストール中にアップデートをダウンロードする」にチェックを入れておきます。
「続ける」をクリックして次へ進みます。

「インストールの種類」は、1つの仮想マシン(もしくは物理マシン)で単独OSだけインストールするか、複数OSを共存できるようにするかの設定です。
今回はUbuntu単独のインストールなので、「ディスクを削除してUbuntuをインストールする」を選択します。
「インストール」をクリックして次へ進みます。

「ディスクに変更を書き込みますか?」というダイアログが出るので、「続ける」をクリックします。

タイムゾーンを聞かれるので、「Tokyo」を選択します。
(デフォルトで選択されていると思います)
選択したら「続ける」をクリックして進みます。

Ubuntuのユーザー情報を入力します。
覚えやすい名前とパスワードなら何でもよいですが、Linuxにおけるファイルパスの扱いの都合上、「コンピューターの名前」と「ユーザー名」で使う英字は小文字だけにしたほうがよいでしょう。
後々ユーザーを増やした時に切り替えがしやすいように「ログイン時にパスワードを要求する」を選択しておきます。
入力したら「続ける」をクリックして進みます。

ファイルコピーが始まるので、しばらく待ちます。

インストールが完了したら、画面の指示に従って仮想マシンを再起動します。

下の画面になったらインストールディスクは不要なので、ISOイメージの読み込みを解除します。
右上のディスクアイコンを右クリックします。

「切断」をクリックします。

アイコンがグレーアウトしたら切断できたので、Enterキーを押します。
ちなみに、この画面になった時点で自動的に切断されている場合もありますが、その場合は上記の手順は不要です。

しばらくするとログイン画面に変わります。
インストール中に作成したユーザーを選択します。

パスワードを入力し、Enterキーを押してログインします。

デスクトップ画面が表示されたらログイン成功です。
ソフトウェアのアップデートを促されたら、「今すぐインストールする」をクリックしてアップデートしておきます。

アップデートが完了したら再起動を促されるので、仮想マシンを再起動します。

再起動すると、「Ubuntuへようこそ」いう画面が出てきます。
Googleなどのアカウントでのサインオンを促されますが、今回は不要なので右上の「スキップ」をクリックします。

Ubuntu Proへのアップグレードは不要なので「Skip for now」を選んで「次へ」をクリックします。

Ubuntuの改善支援のため情報送信するか聞かれます。
今回はQMKを使う以外のことを極力したくないので「いいえ、送信しません」を選んで「次へ」をクリックします。

位置情報も今回不要なので、未選択のまま「次へ」をクリックします。

「準備完了」まできたら「完了」をクリックします。

最後に、今後インストールディスクを読み込まないよう、仮想マシンの設定を変更します。
まず今動いている仮想マシンを終了するため、
右上の電源マーク → 電源オフ / ログアウト → 電源オフ
とクリックしていきます。

電源オフダイアログが表示されたら「電源オフ」をクリックし、即時に終了処理に進めます。

しばらくすると仮想マシンが終了し、ウィンドウが消えます。
VMware Workstation Playerを再び起動し、「仮想マシン設定の編集」をクリックします。

左のリストから「CD/DVD(SATA)」を選び、「起動時に接続」のチェックを外します。
これで起動時にインストールディスクを読み込まなくなります。
「OK」をクリックして設定を反映します。

これでLinux仮想マシンが出来ました。

QMK Firmwareのビルド環境を整える

QMK Firmwareのインストール

いよいよQMKのビルド環境を構築します。
仮想マシンを起動し、Ubuntuにログインします。

ログインしたら、左下の「アプリケーションを表示する」ボタンをクリックします。

「端末」アイコンをクリックし、端末(ターミナルとも呼ばれます)を起動します。

QMKをビルドするためには、Linuxに『Git』『Python』をインストールしておく必要があります。
これらをインストールするため、次のコマンドを入力します。
入力したらEnterキーを押してコマンドを実行します。(以降のコマンド入力もすべてEnterキーで実行してください)

sudo apt install -y git python3-pip

「sudo」はWindowsでいうところの「管理者で実行」にあたるコマンドなので、実行しようとするとパスワードを聞かれます。
その時ログインしているユーザーのパスワードを入力して、Enterキーを押します。
端末ではパスワードは入力しても表示されないので、打ち間違いに注意。

GitとPythonのインストールログが流れていくので、完了するまで待ちます。
途中、インストールを続行していいか質問された場合は「y」と入力してEnterを押し、インストールを続行してください。
(筆者環境では質問が出てきませんでした)

コマンド入力待ち状態になったら、インストール完了です。

次にQMKをインストールします。
QMKは先程インストールしたPythonの機能として作られているので、Pythonコマンドを使ってインストールします。

python3 -m pip install --user qmk

インストール完了を待ちます。

「Successfully installed …」と表示されたら、QMKのインストールは完了です。

QMK Firmwareの初期設定

まず「qmk」コマンドを使えるようにするため、以下のコマンドを実行します。
本来は不要な手順なのですが、2023年現在はUbuntu側のバグにより、この手順がないと「qmk」コマンドが使えません。

echo 'PATH="$HOME/.local/bin:$PATH"' >> $HOME/.bashrc && source $HOME/.bashrc

続いてQMKコマンドで初期設定を実行します。

qmk setup

「Could not find qmk_firmware!」と表示されるのは、まだQMKのソースコードがシステムのどこにもないからです。
「y」を入力して最新のソースコードを取得してもらいます。

QMKのソースコードの取得が完了するまで待ちます。

「Would you like to install dependencies?」は、QMKに必要な追加ファイルをインストールするかの確認です。
「y」を入力して、すべてインストールします。

追加インストールの完了を待ちます。

「QMK is ready to go」と表示されたら、QMKの初期設定は完了です。
ちなみにusb-libusb.cの196行目に警告(「warning: value computed is not used」)が出ていますが、これはプログラムの書き方がよくないというだけで、動作には影響しないので無視して構いません。

QMK Firmwareのビルドテスト

QMKに含まれる既存のキーボードをお試しでビルドして、正しく環境構築できたかテストします。
最近対応したRP2040用のファームウェアをビルドしてみましょう。
以下のコマンドを入力、実行します。

qmk compile -kb handwired/onekey/rp2040 -km default

ビルドが完了するまで待ちます。

すべての出力が[OK]で、エラー表示なしで終わればビルド成功です。

【余談】ファイルの管理はどうなるの?

Git管理に慣れた人は気になったかもしれませんが、QMKリポジトリの中に新しくファイルを作らないといけないので、QMKの更新をプルする際にエラーが出る可能性があります。(新たに追加されたキーボードと名前がかぶる可能性も)
これはQMKの問題点としてよく指摘されるのですが、方針を変える予定はなさそうです。

対策としては、自作したファイルをgitignoreでバージョン管理から外すか、リポジトリをフォークして自分専用にするかになります。
とりあえず今回は当面QMKをプルしないつもりで、そのままにしておきます。