初めての自作キーボード　ファームウェア編

##  はじめに
念願のKeyball39を購入・作成しました！
中学生以来の半田付けで苦労しましたが、なんとか正常に動くものができて一安心です。

Keyballシリーズは分割キーボードかつ、親指部分にトラックボールが設置されている腕の移動量を極限まで削ぎ落とした自作キーボードキットとのことです。
その中でも、私が今回作成したKeyball39は、名前の通りキー数が39しかないKeyballシリーズの中でも最もコンパクトなキーボードです。
> [Keyball39 白金ラボ](https://shirogane-lab.net/items/64b8f8693ee3fd0045280190)
肩にやさしい40%左右分離キーボードに、100%使い勝手の親指トラックボール搭載を目指した自作キットです。

キー数が少ないだけあって、キー配置が難しく、柔軟な設定をするにはキーボードに書き込むファームウェアを直接書き込む必要があります。
私は普段Webエンジニアをしており、パソコンには人並みに慣れていますが、自作キーボードの作成は初めてで、手探りでやったことがいくつもあったので備忘録をして記録を残します。


#### 備考
私は自宅に半田付けの設備などないため自作キーボード専門店の遊舎工房さんの工作室で作業を行い、Keyballのキットや必要なパーツも遊舎工房さんで購入しました。ショップの店員さんや工作室の担当の方がとても親切で様々な相談に乗ってくれるので、気になる方は是非一度行ってみてください！
> [遊舎工房](https://shop.yushakobo.jp/)
東京都台東区上野3-6-10 ユニオンビル１F


## ファームウェアの書き込み

キーボードのファームウェアにはQMK Firmwareを使用します。
QMKはオープンソースのキーボード向けファームウェアで、キー配列・キーマップなどの基本機能に加えてレイヤーやマクロなど様々な機能を操作できます。
キーマップを変更するだけなら「[Remap](https://remap-keys.app/)」でもできますが、トラックボールの挙動を変更したいならファームウェアを直接書き込む必要だありそうです。

## QMKのインストール

QMKを使ってファームウェアを書き換える場合は、ローカルにQMKの環境を構築する必要があります。
筆者の環境はmacなので、それ以外の場合は公式ドキュメントを参考にしてください。

QMKをインストールするにHomebrewを使用します。ローカルにHomebrewがインストールされていない場合は[こちら](https://brew.sh/)からインストールしてください。

 QMKをインストールするために以下のコマンドを実行してください。
 ```
 brew install qmk/qmk/qmk
 ```
 このコマンドは実行に数時間かかるので気長に待ちましょう。

 続いてQMKがインストールできたら赤トップを行います。
 ```
 qmk setup
 ```
いくつか質問がされますが、全て```y```で大丈夫です。


https://docs.qmk.fm/#/ja/newbs_getting_started

## QMK Firmwareを取得

 ファームウェアを取得します。
 このリポジトリを編集するので作業しやすい場所にクローンしてください。
 よく分からない人は```/Documents``` に移動してからコマンドを実行することをおすすめします。

```
git clone --recursive git@github.com:qmk/qmk_firmware.git
```

## Keyballのフォームウェアを取得

Keyballの公式のファームウェアを取得します。
QMK Firmwareと同じディレクトリでコマンドを実行してください。

```
git clone git@github.com:Yowkees/keyball.git
```

実行したら、KeyballファームウェアをQMK Firmwareに移動します。
```./keyball/qmk_firmware/keyboards/```内にあるkeyballフォルダを```./qmk_firmware/keybords```配下にコピーしてください。
コマンドで移動する場合は以下を実行してください。
```
mv ./keyball/qmk_firmware/keyboards/keyball/ ./qmk_firmware/keybords/
```

## ファームウェアのコンパイル

ファームウェアを編集する準備が完了しました。
試しに公式のファームウェアをコンパイルしてみましょう。
qmk_firmwareに移動してコンパイルのコマンドを実行します。
```
cd qmk_firmware
make SKIP_GIT=yes keyball/keyball39:via
```
コマンドを実行すると```./qmk_firmware/.build/```にkeyball_keyball39_via.〇〇が作成されているはずです。
この中の.hexファイルをキーボードに書き込むことでファームウェアを変更できます。

ちなみにmakeコマンドの```keyball/keyball39```は```./qmk_firmware/keyboards/```内のフォルダを指定していて、```via```は前部分で指定したフォルダ内のフォルダ名を指しています。
前者がキーボードの種類で後者がファームウェアのバージョン管理に使われているようです。

## ファームウェアの書き込み

ファームウェアを書き込む前に分離キーボードはTRRSケーブル(左右のキーボードを繋ぐ線)を外しておく必要があります。
(左右どちらにも同じファームウェアを書き込む必要はありません。書き込んだ方がもう一つのキーボードの設定も覚えます)

作成されたファームウェアを書き込むには[Pro Micro Web Updater](https://sekigon-gonnoc.github.io/promicro-web-updater/index.html)を使います。

まず「ファイルを選択」で先ほど作成した```keyball_keyball39_via.hex```を選択します。
この時、隠しフォルダの.buildは選択できないので、対象のファイルを適当な場所に移動しておいてください。
ファイルを選択できたら「flash」をクリックすると書き込むキーボードを選択します。
このタイミングでキーボードのリセットボタンを2回クリックします。

そうしたらキーボードの選択肢にkeyballが追加されるので選択してください。
少し待って```Verify OK```が表示されたら完了です。

## ファームウェアの編集

あとはファームウェアを自由に編集して行きましょう。
初めは公式のファームウェアをコピーして編集していくことをお勧めします。
フォームウェアの書き方はゆうさんの記事がわかりやすかったので是非参考にしてください。

https://note.com/yinouet1001/n/nc6d36cafd95b

### 注意事項
私は自作したフォームウェアを書き込む際に、なぜか[公式のフォームウェア](https://remap-keys.app/catalog/k895xiCpsM5zlYZCPTEN/firmware)を書き込んでからでないと変更が反映されませんでした(原因は未だに不明...)


__それでは皆さんも楽しいキーボードライフを！__


### 参考資料

https://note.com/yinouet1001/n/n54e6d3dc243a

https://www.youtube.com/watch?v=QC791UY_M6Y

https://www.youtube.com/watch?v=XyoEP3h4iB8&t=459s

[遊舎工房 QMKファームウェアの書き込み](https://yushakobo.zendesk.com/hc/ja/articles/1500011696701--QMK%E3%83%95%E3%82%A1%E3%83%BC%E3%83%A0%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF-Pro-Micro-Web-Updater%E5%88%A9%E7%94%A8)