Zincで自作キーボードデビューしてみた

#自作キーボードデビューのきっかけ
TwitterでTLを眺めていると、なんかめちゃくちゃ可愛いキーボードを見つける。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">バックライト付けるとむちゃくちゃかわいくなる <a href="https://twitter.com/hashtag/GMKPaperwork?src=hash&amp;ref_src=twsrc%5Etfw">#GMKPaperwork</a> <a href="https://twitter.com/hashtag/Zinc?src=hash&amp;ref_src=twsrc%5Etfw">#Zinc</a> <a href="https://twitter.com/hashtag/%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89?src=hash&amp;ref_src=twsrc%5Etfw">#キーボード</a> <a href="https://t.co/Eizr72gaKE">pic.twitter.com/Eizr72gaKE</a></p>&mdash; モンクスオブファンク (@monksoffunkJP) <a href="https://twitter.com/monksoffunkJP/status/1156494422831325184?ref_src=twsrc%5Etfw">July 31, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


え、なんすか、Boothで売ってる？それください。

#筆者スペック
- 機械工学科出身(not電子電気系)
- 卒研でちょっとだけマイコン触ってた
- 仕事でも多少の電子工作したり
- でも表面実装部品のはんだ付けとかは無理
- 非ITエンジニア
- プログラミングはJavaScriptとかPythonはちょっと知ってる
- gitはほぼ初心者
- その辺歩いてる人よりは若干詳しいかな？レベル
- 自作キーボードは気になりつつも、グッと来る物がなくスルーしてた

#誰向けの記事か
- Zincが気になっている人
- Windows&日本語キーボード環境で自作キーボードデビューする人
- ZincでVIA Configurator使いたい人

#Zincについて
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/45cc47fe-59c5-ad0c-d03e-63610962621b.png">

Zincのコンセプト説明から引用すると
**ロースタッガードでありながら分割型で、なおかつオール1uキーのすっきりしたキーボード**
です。

自作キーボードと言えば分割型のイメージがある方もいると思いますが、
キーが碁盤目状に並んだ格子状配列(Column-StaggeredやOrtholinear)の物が流行りつつあり
普通のキーボード配列は斜め(Raw-Staggered)なので、格子状配列とのギャップに躓いてしまう人がいるそうです。
なので、キーが斜めに配列されているZincは初心者が自作キーボードデビューするのに向いているという事ですね。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/df0ef40d-702a-1b88-0e6e-4780bcdd9304.png">
あと、乳白色のアクリルプレートを採用しているのも珍しく、いい感じにほわっとバックライトが光る点も良いところ。
結構ギークみが強いキットが多い中、Zincはオシャレ！(筆者の主観です)

#キーキャップ選び
Zincで使うキーキャップを選ぶ時の注意点はキーが全て1uサイズである点です。
1つのキーキャップセットで必要なキーを網羅したい場合、全て1uで入っているか確認しておく必要があります。
(1uのEnterキーとかなかなか無いんですよね…。)

オール1uなキーキャップセットはマイノリティな上、イケてるキーキャップはGroup Buy(GB)と言う受注生産的な注文方法が多く、一期一会な物です。
しかし、気に入るキーキャップが手に入るまで待つのはつらい…
ので、私は遊舎工房さんやTALP KEYBOARDさんで取扱いのある[R2 XDA 40v2 Dye-sub keycaps](https://talpkeyboard.stores.jp/items/5b78e2f35496ff4c54001590)を選びました。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/73b772f8-b3f2-b0f1-29a9-84bc64cc3633.png">
ほんとはKAT Milkshakeとか、MDA ORTHO VoIDとか欲しかったんですが、これはこれでシンプルかつ挿し色もあって良いかなと。
ちなみに、1uなキーキャップセットを探すときは「ortholinear」「ortho」「all 1u」みたいな単語を入れて検索すると良いみたいです。

#キースイッチ選び
Cherry MX互換なスイッチを選びましょう。
キースイッチってメーカーが色々ありますが基本的にどれもCherry MX互換です。
赤軸、茶軸、青軸などなど色んな種類があるので、店頭で試してみたりキースイッチお試しセット的な物を先に購入して、気に入った物を選ぶとよいです。
今回はなんとなく赤軸、なんとなくGateronにしました。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/d299ab69-a699-321b-dd89-5eb18206fcff.png">
私はここで失敗したんですが、Zincは全体的に白いキーボードなのでキースイッチも白やクリアをベースにしたスイッチの方が全体的に色がまとまって良いかもしれません。
あと、他のキースイッチも試してみたい人はMill-Maxソケットと言うキースイッチを取り外し可能にする部品があるので、予め購入しておきましょう。(ソケット化、ホットスワップ化と言います)
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/0c92923e-6e3e-65c4-0ec3-7827f527ebed.png">
(1個40円ぐらいするけどな！！！)
ホットスワップ化しておくと、こんな感じでスポッとスイッチを引っこ抜けます。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/50ed381f-f5ed-f5f5-07ce-9851105959a6.png">

#TRRSケーブルとUSBケーブル
Zincは分割型のキーボードなのでキーボード同士をつなぐケーブルが必要で、それがTRRSケーブルです。
よくイヤホンなんかについてるジャックはTRSケーブルで線が三本、TRRSケーブルは四本です。
マイク付きイヤホンなんかはTRRSですね。要はオーディオ用のケーブルを流用出来ます。
(ちなみにZincはTRS/TRRSどちらを使っても大丈夫なように設計されています)
USBケーブルはUSB A⇔MicroBのよくあるやつです。
今回は[遊舎工房さんの自作ケーブルキット](https://yushakobo.jp/shop/self-made-cable/)を購入して自作しました。
買えば早いし確実ですが、このキットは好きな色を組み合わせて作れます。
おしゃれなキーボードにはおしゃれなケーブルが必要ですよね！
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/50278c47-c1f2-5174-83e8-550af83f63f2.png">
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/d44615ed-e825-eb4f-2d56-62637bac823f.png">
作り方は遊舎工房さんが以下に書かれているので、買う前に見ておくと難易度が想像できると思います。
https://github.com/yushakobo/self-made-trrs-cable
https://github.com/yushakobo/self-made-usb-cable
はんだ付けの経験があれば作れるかなとは思いますが、TRRSケーブルの方がはんだ付けの難易度が高いです。
作ってみて気を付けた方が良いなと思ったのは

- ケーブルスリーブの長さを調整する時にたるみがないようにちゃんとしごく
- はんだ付けする時のコネクタの向きがそのまま完成時の向きになるので、確認しながらやる
- USBケーブルの端子部の白い樹脂部品は半田ごての熱で溶けるので手早くやる

ってとこですかね。
TRRSケーブルとUSBケーブルを同じデザインで揃えられるので自作ケーブルキットはオススメです。
最近国内でケーブルを好きにカスタマイズして注文できるお店↓も始まったようなのでそっちも良いかもしれません。
https://exmecables.com/
※開店ほやほやでレビュー記事とかもないので、購入の際は自己責任で…

#Zincの組立て
ではZincを組み立てていきます　が
基本的なところは公式のビルドガイドやビルドログがいくつかあるので、そちらを参考に。

- [公式ビルドガイド](http://www.sho-k.co.uk/tech/735.html)
- [自作キーボードキット Zinc を組んだ](https://hdbx.hateblo.jp/entry/zinc)
- [Zincビルドログ　アクセントプレートがおしゃかわ！](https://karei-key.hatenablog.com/entry/2019/03/11/054033)

ここでは、上記の記事に載っていない部分や私が躓いた部分についてまとめます。

##MogeMicro対策
例によって2液のエポキシ系接着剤で固めました。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/24d58bd1-9cd6-6dc7-05a9-0f6b5c355d2f.png">
ただ、盛れば良いというわけではなくMicroB端子上面とコンスルーが取りつく位置には盛らないようにしましょう。
干渉しちゃうので削る事になります。
今ならわかる、ダメダメな盛りっぷり↓
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/25b945c7-5fb2-a252-e85e-a18f22f7d651.png">

##ProMicroにVIA対応ファームを焼く
ここが一番躓いたところです。
Windows10でファームウェアを焼く方法は以下の記事を参考にしたのですが、なかなかすんなり行かず焦りました。笑
[qmk_firmwareをWindows上でmakeする方法](https://qiita.com/marksard/items/f381caf3ca981f307f64)
記事の通りDebianをインストールしました。
以下、躓きポイントと対処方法

- **`sudo apt install git`でgitのインストールが出来ない**
    →`sudo apt upgrade`してからgitのインストールをしましょう

- **gitのインストール時、なんか聞かれる**
    →「容量これだけ使ってインストールするけどええか？」の確認だと思うのでそれっぽいメッセージならYを入力

- **`git clone`する指定先がわからない**
    →https://github.com/monksoffunk/qmk_firmware/tree/feature/zinc_via を指定するとmasterブランチをcloneしてしまうので
    　ブランチ名(`feature/zinc_via`)を指定してcloneしましょう↓
    　`git clone -b feature/zinc_via https://github.com/monksoffunk/qmk_firmware.git`
    　プルリクを指定する方法もあるらしい。
    　その内QMK FirmwareにZincの製作者さんのプルリクがmergeされればcloneするのはQMK Firmwareのmasterでいいと思います。

- **`git clone`で`error: chmod on hoge failed: Operation not permitted`ってエラーが出る**
    →NTFSフォーマットのストレージに保存しているファイルやフォルダで所有者や権限が変更できないというエラーのようです。
    　海外のフォーラムで解決方法を見つけました。
    　[How to solve Operation not permitted on cloning repository](https://askubuntu.com/questions/1115564/wsl-ubuntu-distro-how-to-solve-operation-not-permitted-on-cloning-repository)
    　`sudo umount /mnt/c`
    　`sudo mount -t drvfs C: /mnt/c -o metadata`
    　`/mnt/c`の部分はそれぞれの環境に合わせて適宜書き換えて下さい！

- **VIAファームウェアを指定してmakeする方法が分からない**
    →[readme_jp.md](https://github.com/monksoffunk/qmk_firmware/blob/feature/zinc_via/keyboards/zinc/keymaps/via/readme_jp.md)を読もう！`make zinc:via`でいいです。
    　(読まずに製作者さんに問い合わせてしまった)

hexファイルをmake出来たらQMK ToolboxでProMicroに書き込みましょう。

##ダイオードの実装
基板のバージョンがいくつかあり、私が購入したのは`rev.1d_tab`でした。
公式ビルドガイドでは`ProMicroの下部に位置するD7のみ上面`となっていますが
rev.1d_tabでは**全て裏面の実装でOK**です。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/4c2b5ada-044a-b71a-2581-e7dd79a9baca.png">

##LEDの実装
自作キーボードに於いて鬼門とされるのがLED実装ですが
Zincはタブ付きLED(SK6812MINI-E)に対応しているので、かなり楽(らしい)です。
LEDを取り付ける穴に裏からLEDを嵌め込む際、LEDの角が若干削れますが気にしないでいいです。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/f09609d3-1ce8-2d96-5301-6ae7e42a6338.png">
LEDに4つのタブが付いていますが、はんだ付けする際はまず全部のLEDでタブを一本だけはんだ付けして、
全部終わったら次のタブをはんだ付けして…という風に一本ずつやっていきます。
LEDは熱に弱いので一本はんだ付けする毎に冷却時間を設けてあげる事で熱によるダメージを抑えます。
このやり方で、初めてのLED実装でも一つの犠牲を出す事なくできました！
ファームを書き込んだProMicroを取り付けてUSBケーブルを挿すとLEDが点灯します。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/dc4d50b7-44ef-3616-6124-7c9d464d53f7.png">

##Mill-Maxソケットでのホットスワップ化
他のキーボードを買う予定がないので、Zincで色んなスイッチを試せるようにホットスワップ化します。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/f0bb9d6f-a2da-8c18-ebc1-b37761b2b773.png">
Gateronのスイッチでソケットを嵌めようとするとピンが曲がりそうになります。ちょっと斜めから入れる感じでスッと入ります。
ソケットが基板に密着するようにしっかりスイッチを嵌め込んでからはんだ付けしましょう。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/375eb0db-6ebe-81fe-1d43-04ba60322430.png">
ソケット内部にはんだが流入するとスイッチを外せなくなるので慎重に。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/35ce6be0-de5a-3921-2656-3493de3a44b8.png">
1個怪しい感じになりましたが、見なかったことに。まぁソケットを温めながらスイッチ引っ張れば抜けるでしょ(？)

#VIA Configurator
キーキャップも取り付けて、デフォルトのキーマップで動作するのを確認出来たら
VIA Configuratorで色々弄りましょう！
バックライトLEDの色がリアルタイムで変わるのが面白い。
詳しい使い方はサリチル酸さんの記事でどうぞ！
https://salicylic-acid3.hatenablog.com/entry/via-manual

##Adjレイヤーに0x5~で始まる謎のキーが割り当てられてる
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/0756afb7-694f-0ef5-3f2c-de6a2a2acfd3.png">
keymap.cを見るとZinc独自定義のキーが割り当てられてるようですが、うまくいってない？
無くてもいいので割り当てを外しました。
もう少しちゃんと追っかけてもいいんですが、とりあえず動いてるのでヨシ！

##LWinキーとLAltキーが入れ替わる
Win環境な人はなんかそういう仕様らしい。
気持ち悪いけど素直に入れ替えて配置しよう。

#キーマップはこんな感じになりました
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/bcc154be-fcb9-a177-0eb4-8fedc1496539.png">
パソコン側が日本語配列のキーボードなので、VIA Configurator上の表示と実際に入力される文字がちぐはぐになってしまいます。
特に括弧関係はマジでわけわかりません。誰だこんな仕様にした奴。
仕方ないのでどのキーを押すと何が入力されるかを自力で図にしました。(Googleスライドを使った)
マクロも2種類登録してみました。
・Lower+Win で「Ctrl+Alt+Del」Windowsのログインやタスクマネージャー用。
・Lower+V で「Ctrl+Alt+V→V→Enter」これはExcelで値のみ貼り付けをするショートカット。
マクロは便利そうだけどいまいちグッとくる活用方法が思いつかない～。
調べてたら「マクロで簡単パスワード入力！」みたいな記事を見かけたけど正気か？

#keymap.cをいじる
その名の通りキーマップを定義しているファイルです。
どうせVIA Configuratorでいじるのでデフォルトのままでいいんですが
LowerやRaiseを押している間だけバックライトの色を変えてみます。
実はデフォルトでそんな記述がありますが、Zincに最適化されていないので
以下のように書き換えます。

```c:keymap.c
// Light LEDs 0 to 48 in azure when keyboard layer 1 is active
const rgblight_segment_t PROGMEM lower_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    {0, 54, HSV_AZURE}
);
// Light LEDs 0 to 48 in orange when keyboard layer 2 is active
const rgblight_segment_t PROGMEM raise_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    {0, 54, HSV_ORANGE}
);

```
光らせるLEDの位置と色は`{0,48, hoge}`で良いと思って最初はそうしたんですが
最後の6つに反映されなかったので`{0,54, hoge}`としています。よくわからん。
使える色は[QMKの公式ドキュメント](https://beta.docs.qmk.fm/using-qmk/hardware-features/lighting/feature_rgblight#colors)に一覧があります。

なんか頑張ればいろんな事が出来るようですが(押下キー位置を起点にアニメーションするとか)
とりあえずサクッと出来たのはこの程度。

#自作キーボードで困ったときは
日本の自作キーボード好きが集まるDiscordサーバーがあります！
[Self-Made Keyboards in Japan Discord Server を開設した話](https://biacco42.hatenablog.com/entry/2017/11/17/093000)
どうしても分からない時は聞いてみると良いかも。問診室があります。
あと色んな情報も入ってくるので、眺めてるだけでも楽しい。

Zincを設計/頒布している25KEYSさんのDiscordもあります。
https://discord.com/invite/scD6N3V

#まだ沼の入口に過ぎない
とりあえず初めての自作キーボードが完成しました。
<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514873/5b92a656-c9a2-b5e1-ab0e-8e38c9fe53a4.png">
職場に持って行ったら非ITな職場なので「え、それなに…？」って反応が結構ありましたｗ

もっとおしゃれなキーキャップが欲しいし、静音なスイッチも気になる。
自作キーキャップにもチャレンジしてみたい。
この沼はなかなか深そうだぞ…！！