自作キーボードに入門した話

## はじめに

初めまして！

みなさんは今どのようなキーボードを使っているでしょうか？私が今現在使用しているのは、エンジニアとして初案件に入る際に購入した[Keychron K2 Pro（US配列）](https://keychron.co.jp/products/keychron-k2-pro-qmk-via-wireless-custom-mechanical-keyboard-us-ansi-layout)です。

![IMG_3199.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1585457/d1868f63-70a7-c039-5a37-41c2f00361e6.jpeg)

タイプ感、ビジュアルともにとても気に入っているキーボードなのですが、自分の巻肩気味の姿勢のせいか肩こりが爆発しそうになってきたので、新たにキーボードを探し始めました。市販のキーボードでも良かったのですが、せっかくなので以前より気になっていた自作キーボードに手を出してみました。

ただ、使える時間とお金が限られているので、今回はメルカリで中古品を入手し自分用にカスタマイズすることにしました。（←自作キーボードに入門したと言えるのかは別）

## 今回購入したキーボード

今回購入したキーボードは、omkbdさん作のErgoDash（以下、ErgoDash）で、5×7のカラムスタッガード配列の左右分離型キーボードです。
[ErgoDash - Yushakobo - 遊舎工房](https://shop.yushakobo.jp/products/ergodash)

カラムスタッガードは配列とは、キーボードのキーの配置が縦方向（列＝カラム）にスタッガード（ズレている）している配列のことです。

普段よく目にするキーボードは横方向（行＝ロウ）にズレているためロウスタッガード配列と呼ばれています。

下が実際の写真です。

![Photo 3159.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1585457/52d8c068-253f-8143-6961-7e767d6226c9.jpeg)

### ErgoDashを選んだ理由

- 左右分割式であること
    - キーボードを入力する際の姿勢を改善し肩こりを少しでも良くするという今回の目的からするとマストです。
- 60%キーボードであること
    - キー数としては40%で大丈夫かとも思ったのですが、レイヤー操作に慣れることができなかった場合の保険として60%キーボードにしました。
    - 今はkeyball44のキー配置を参考に40%で使用していますが、業務に支障が出たときは60%で使用したいと思います。
- 予算内であること
    - 結局はこれにつきます。今回はキーキャップ付きでかなり安く入手することができました。

## セッティング

### ファームウェアの準備

それではまず、ファームウェアの準備からしていきます。
こちらに関しては、先達の詳しい記事があるのでそちらを参考にしていただけると良いかと思います。

私は以下の記事を参考にさせていただきました。

https://eng.shibuya24.info/entry/qmk-firmware-build-for-mac

:::note info
Remap(VIA)への対応

ErgoDashは初期状態では、Remap(VIA)に対応していません。
Remapを用いてキーマップの変更をしたい場合は、以下の記事を参考にしてください。
:::

https://ydk.vc/using-ergodash-remap/


### ビルド

上の記事を参考に、ファームウェアおよび設定ファイルの準備ができたら実際にビルドします。

qmkコマンドを使用する場合、以下のコマンドをターミナルで実行すればビルドできます。

```sh
#qmk_firmwareへ移動
$ cd qmk_firmware

#ビルドコマンド
$ qmk compile -kb キーボード名 -km キーマップ名

#ErgoDashの場合
$ qmk compile -kb omkbd/ergodash/rev1 -km 作成したキーマップフォルダ名
```

ただ今回、ビルドする際に躓いたポイント何箇所かありました。そちらは後日別の記事で投稿する予定です。

### キーボードへの書き込み

それでは先ほどビルドしたファームウェアをキーボードに書き込んでいきます。
今回は、下の記事を参考に[Pro Micro Web Updater](https://sekigon-gonnoc.github.io/promicro-web-updater/index.html)を使用する方法にしました。

書き込みに使う`.hex`ファイルは先ほどコンパイルした際に生成されたコピーを使いましょう。

https://salicylic-acid3.hatenablog.com/entry/qmk-toolbox

## キーマップ

これでキーボードを使用する準備はできました。あとは煮るなり焼くなり、好きにカスタマイズしていきます！

最後に私のキーマップを少し紹介させていただければと思います。

Layer0
![Capture-2024-06-12-165952.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1585457/fd2d26dd-6200-be1d-1a41-3b063be7d088.png)

Layer1
![Capture-2024-06-12-170010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1585457/748c4b5f-5e69-1dbe-824a-459fa42f8e64.png)

Layer2
![Capture-2024-06-12-170032.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1585457/5d1143b4-655f-92cf-f788-b20ac029b690.png)

Layer3
![Capture-2024-06-12-170044.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1585457/56fcf673-d15a-dae4-f8bf-ac5e522a786c.png)

以上が私のキーマップとなっています。こだわりとしては

- 矢印キーが右手のみで入力できる
    - 個人開発でvimを使用しているため、矢印キーはvimの配列を参考にしました。また、レイヤー切り替えを右手親指に配置しているため、右手のみでの入力が可能です。
- 英語切り替えを `j` に配置
    - 英語への切り替えを `j` に配置することで、vim使用時に日本語でのインサートモードからノーマルモードに戻る際、`;` 長押し→ `j` で英語に戻り、 `jj` でノーマルモードへという操作が可能になります。（`Esc` を `jj` に変更しています）
- 使用するキーを40%キーに限定
    - 将来的にkeyball44への乗り換えを検討しているため、今のうちからkeyball44のキー配置に慣れておこうという魂胆です。

気になった時にはすぐにキーを変更するようにしているので、数ヶ月後には変わっているとは思いますが、ひとまずこのキーマップで慣れていこうと思います。

今回キーマップを考える上で以下の記事を参考にさせていただきました。

https://note.com/ltksk/n/nf84d64da36f8

https://kbigwheel.hateblo.jp/entry/my-keymap

### テンティング

テンティングとは、キーボードに傾斜をつけることです。これにより自然な姿勢でキーボードを打つことができます。

方法としてはいろいろあり、一番見た目がよく安定感もありそうなのがカメラの雲台を使用する方法です。しかし、この方法の一番のデメリットとしては導入コストがかなりかかることです。

ですので今回はこちらのノートPCスタンドを使用しました。

https://www.amazon.co.jp/gp/product/B09P416GCX/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&psc=1

実際につけてみた写真はこちらです。

![IMG_3200.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1585457/a77bdbf5-41ca-d6d9-a5a0-3fa0ff39a2fb.jpeg)

少し見えづらいですが、キーボードを支えている黒いものが今回使用しているノートPCスタンドです。角度は20°ほどとなっています。

テンティングの感想としては、使用する前より手首がだいぶ楽になりました。ただ慣れてくるともう少し角度をつけてもいいかなと思いました。60°位にすればかなり自然な形で手首を置けそうです。

また今回の方法としては、商品にもよるとは思うのですがもう少し足が広いものにしておけばよかったと思いました。というのも、ErgoDashは親指の部分が少し出ている形状をしています。なので今回購入したスタンドだと親指のキーを入力する際に少しガタついてしまうからです。

また、スタンドの高さが固定になってしまうのも今はいいのですが、使用しているうちに不満が出てきてしまうポイントかなと思いました。

将来keyball44を作成したときにはより自由に角度を変更できる雲台を使用してみようかと思っています。

## あとがき

今回は、自作(?)キーボードに入門した話をさせていただきました。
私も今回初めて自作キーボードを触りましたが、知れば知るほど楽しい世界です。この記事を読んで少しでも、自作キーボードに興味を持っていただけたら嬉しいです。

また、おすすめのキーボードや皆さんこだわりのキーマップがありましたら、コメントで教えて頂ければと思います。

最後に参考にさせていただいた先達の方々に敬意を表します。
ここまで読んでいただいてありがとうございました。

> この記事はErgoDashで書きました

## 参考サイト

- [自作キーボード初心者がfirmware書き込みで躓いたこと集 #自作キーボード - Qiita](https://qiita.com/hokita222/items/a5567d955923125b93ed)
- [Macで自作キーボードの開発環境を整える方法【QMK Firmware】 - ゲームエンジニアの雑記ブログ](https://eng.shibuya24.info/entry/qmk-firmware-build-for-mac)
- [QMK Firmwareビルド環境構築 #自作キーボード - Qiita](https://qiita.com/msrx9/items/60c41e7866182eec0768)
- [gccversion Error 127 · Issue #4120 · qmk/qmk_firmware](https://github.com/qmk/qmk_firmware/issues/4120)
- [REMAP（VIA）で「ErgoDash」のキーマップを変更できるようにする | U7D05 BAR](https://ydk.vc/using-ergodash-remap/)
- [（初心者編）自作キーボードにファームウェアを書き込む - 自作キーボード温泉街の歩き方](https://salicylic-acid3.hatenablog.com/entry/qmk-toolbox)
- [keyball44のキーマップをやりこんでいる｜LTKSK](https://note.com/ltksk/n/nf84d64da36f8)
- [Universal Keymapシリーズ① 多彩な自作キーボードを使う上でのキーマップの問題 - kbigwheelのプログラミング・ソフトウェア技術系ブログ](https://kbigwheel.hateblo.jp/entry/my-keymap)