マサコの知らない自作キーボードの世界




![DlIFCA1UYAE5Iph.jpg](https://qiita-image-store.s3.amazonaws.com/0/261659/66bb68e8-1ebe-1cf8-9f84-0d72bea08644.jpeg)


# そのキーボード、本当に満足していますか？
「弘法筆を選ばす」で有名な空海は、`遍照発揮性霊集`にてこう述べています
>　良工は先づ其の刀を利し、能書家は必ず好筆を用う


一流のエンジニアの皆様におかれましては、もちろん一流のキーボードを使っていることでしょう。

### でもちょっと待ってください!
それは本当に最高のキーボードですか？
`HHKB?`
いいですね。間違いなくあなたは凄腕プログラマーでしょう。


しかし量産機である以上専用機にはかないません。[^1]
タイピングの質はコーディング速度に直結します

### 小指の負担がすごい
よく使う{}や*;が小指にあるのって、不便じゃありません？
TabもbackspaceもEnterも全部小指。
スペースキーとかあんなに長い必要ありません。半分にして代わりのキー置きたくないですか？
速度も精度も`中指>小指`なのはエクストリームタイピング競技者[^2]の間でとても良く知られています

### タイプライターはもう化石
今のキー配置は今から100年以上前
ジュラ紀に爆発的な進化を遂げた`タイプライター`が起源だと言われています。
キーが列ごとに少しずつズレているのもその名残。
~~タイプライターは原理的にそうせざるを得なかったからです。~~
有名なデマだそうです。gentaroさんご指摘ありがとうございました。
恐竜の時代はもう終わり。これからは自作キーボードの時代です

[^1]: 1stガンダムを見て、専用機の性能の良さに愕然とした。
[^2]: beatmaniaIIDXの事



# 自作キーボードのすゝめ

twitterとFGOが同時に出来る。
そう、自作キーボードならね。
![DlIMgZVU4AAhzGn (1).jpg](https://qiita-image-store.s3.amazonaws.com/0/261659/3b604afd-c43e-1a7f-8164-06e6144a8b01.jpeg)

## キーって入れ替えられる？
簡単に出来ます。
C言語を使ってカスタマイズしていきます。
ちょっとキーを入れ替えるだけなら、なんらかの言語経験者なら問題ないでしょう。
コンパイルや書き込みはコマンドラインで行うので
最低限の知識`cdでディレクトリ移動する`とか　は必要かもしれません

`真っ黒画面アレルギー` の方はごめんなさい。
ターミナルの背景色を変えたりして克服しましょう。


## キー数足りなくない？
普通のだって`Shift`を使い入力します。ああいう感じ。

`レイヤー`というのを設定でき、それごとにキーを割り当てています。
`RAISEキー`を押してる間は`RAISEレイヤー`になりキー配列が変化します
私は`デフォルトレイヤー`、`RAISEレイヤー`、`LOWERレイヤー`、`ADJUSTレイヤー`の4つを使っています
まあようするに、3種類くらいShiftキーがあると思えばいいです

## ピカピカうるさくない？
アルコール駆動開発には最高です。電気を消してDJ[^3]流せばそこは渋谷のDJクラブ。

近隣住民に怒られたらオフにしましょう。オフにするキーももちろんあります。
完全に不要ならLEDパーツをつけないというのもありです。1000円くらい材料費が浮きます

[^3]: ニコ生やYouTubeライブのアーカイブをよく聞いています。CLUBめうめうが最近のお気に入りです。VtuberのDJなんかも出て来始めてて最高ですね。
## いくらで作れる？
その気になれば1万以下で作れます。
私は工具を揃えたり、ちょっと高めのキーキャップを買ったりしたので20kくらいです

## 誰でも作れる？
いろんな方が作り方を載せているので、知識がなくてもググり力さえあれば作れると思います。
工具もハンダゴテや500円のテスターとかなので、5000円あれば揃うと思います


# ちょっと興味が出てきた。でもどうすればいいの？
まずはキットを選びましょう。売り切れの場合は再入荷を待ちましょう。
以下のキーボードは初心者にもおすすめだと思います。
今回は日本国内で通販できるキットを抜粋して紹介します。
### crkbd　
私が作った奴です。キー数が少なくとてもコンパクト
よく売り切れてる。
[crkbd公式サイト](https://booth.pm/ja/items/869375)

### helix pico
コンパクトさにこだわったキーボード。持ち運びとか便利そう。
既に何色か売り切れてる。
[helix pico公式サイト](https://yushakobo.jp/helixpico/)

### mint60
必要なものがすべて揃っているしおしゃれ、コミケで売り切れ。
マイコンも書き込み済のため、C言語わからなくてもイケる
予約受付中との事
[mint60 公式サイト](http://eucalyn.hatenadiary.jp/entry/about-mint60-01)

### Ergo42 Towel
横が一列多いため、`b`は両手にほしい　みたいな場合はこれ
機能性重視のため、LEDや液晶はつけれるか不明
前作が売り切れた
フルセットならキーキャップとキースイッチ以外ありマイコンも書き込み済
旧型のErgo42は売り切れた
とてもわかりやすい[ビルドログ](https://qiita.com/zk_phi/items/3180902a37fa73223020)(組み立て記事)
[Ergo42 Towel](https://tanoshii-life.booth.pm/items/952695)


# パーツを揃える。
各キットのページに必要なものが書いてあります。
言われたとおりに購入しましょう。
大抵は[遊舎工房](https://yushakobo.jp/) さんで買えますが
秋葉原で工具を揃えるついでに買ってもいいかもしれません。
キースイッチ、キーキャップ以外は千石電商や秋月電子、aitendoで大体揃います。
キースイッチやキーキャップは取り扱っている店が非常に少ないです
amazonやAliExpressなどの通販で買うか、ヨドバシに置いてあることを祈るかです。
AliExpressで注文しましたが届くのに１ヶ月かかると言われたので、アキバを探し回った結果、
ゲーミングキーボードとかマウスがやたら置いてある店に運良く2種類だけあったので買いました

# 電子工作
はんだ付けのお時間です。
キットの公式ページに大体載っていますが、
ビルドログもたくさん乗ってるので困ったらググりながら作りましょう。


# カスタマイズ例
ここから先はcrkbdのカスタマイズ~~自慢~~例です
他のキットでも大体同じなので参考になれば幸いです
[qmk_firmware](https://github.com/qmk/qmk_firmware)をForkして
`keyboards/crkbd/keymaps/default`の中をいろいろいじっていきます

# LEDを光らせる
キーが個別に光るLEDは難易度が高かったため、今回は裏側のLEDだけ実装しました。
アクリル板を透過していい感じに光ります。
![DlISDDUVsAYQsG7.jpg](https://qiita-image-store.s3.amazonaws.com/0/261659/ba8e3dd4-6ac5-f7bb-635e-171540f73e35.jpeg)


`crkbd`のデフォルトにはありませんでしたが、`qmk_firmware`のドキュメントを読むと
`スネークモード`や`クリスマスモード`などいかにも治安の悪そうなキーワードが。
もちろん使えるようにし、調子に乗ってオリジナルのキラキラパターンを実装したり。
かなりいろいろ遊べるところです。



# 液晶に絵を書いてみる
ここもかなり遊べるところであります。
デフォルトではレイヤー情報や入力したキー、ロゴが表示されます
ロゴではなく、やはり絵を表示したいものです。

ハードウェア自体が横32縦128、白黒2色だったため非常に苦戦しました。
しかもbmpとかの画像形式ではなく、16進数のデータを描画していく感じ。
[画像の実際のコード](https://github.com/qmk/qmk_firmware/blob/master/keyboards/crkbd/keymaps/default/glcdfont.c)
意味分からんと思うので、画像化するとこんな感じ

![ダウンロード.png](https://qiita-image-store.s3.amazonaws.com/0/261659/bc19110a-a634-ab59-1328-d0a055cf0a6c.png)

こんなんじゃあ作業が出来ないので友人が作ったコンバーターを改造し
pngから変換できるように。
[お絵描きツール](https://ginjake.github.io/glcdfont-tracer/)

灰色については、白と黒を高速で描画することでそれっぽく表現
```
□■□■　←→　■□■□
■□■□　←→　□■□■
□■□■　←→　■□■□
■□■□　←→　□■□■
```
↑こういう感じの絵を用意して切り替える
試行錯誤しながらめっちゃ頑張って書きました。この作業が一番大変だった。
![font9.png](https://qiita-image-store.s3.amazonaws.com/0/261659/8fa02358-e816-9161-1ced-bae1dd1c3575.png)
古のゲーム制作者の苦労が良く分かりました。


# 最終的に
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">完成しちまったついに <a href="https://t.co/CwHynpuCmE">pic.twitter.com/CwHynpuCmE</a></p>&mdash; 銀鮭 (@sirojake) <a href="https://twitter.com/sirojake/status/1030488290497941504?ref_src=twsrc%5Etfw">2018年8月17日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

firmwareのコードは[github](https://github.com/ginjake/qmk_firmware)にあります
`make crkbd:default:avrdude` で書き込むことができます
# 改善の余地がまだまだある
治安を悪くする余地がまだまだあります
・今回諦めてしまった表面用のchipLEDを実装してピカピカ
・キーキャップを青軸にしてカチャカチャなるようにする
・サウンドモジュール付きのキットにする

でも使っているマイコンの容量が32kb、現時点でもかなりきつい。
「どうやって最適化しようか」と日々悩んでおります
普段はweb系しかやっていないのですごく勉強になりますね。
コンパイル後の容量なんて気にした事ありませんでした。

マイコンを変えるという解決策がありますが、そっちも知見不足のため全然分かりません。
3Dプリンターを用いてキーキャップの自作とかもやってみたいところではあります。

最初は自作キーボードなんて作ってどうするの？なんて思いましたが
すっかり沼にハマってしまいました
2万で滅茶苦茶遊べるので本当におすすめです。

### 宣伝
 技術書典に出展いたします。
お30「riconken」でcrkbd(コルネキーボード)の本を出す予定です。
同じキーボードを複数人で作り、各々のカスタマイズ例や感想。
作り方なんかをまとめていく、というコンセプトです。
興味がある方、立ち寄っていただくとありがたいです。

### 謝辞
メンターとして指導してくれたりコンバーターを作ってくれた@zk_phiさん
ProMicroを壊して途方に暮れている中、2日で送ってくれた遊舎工房さん
本当にありがとうございました。

## 追記
「Tokyo Mechanical Keyboard Meetup Vol.5」にて

[hachi8free Myonさん](https://www.flickr.com/photos/147027606@N08/albums/72157670566462697)に写真を撮ってもらいました。
実物以上に綺麗に撮っていただき、ありがとうございます
![30406440418_96e6a00b47_k.jpg](https://qiita-image-store.s3.amazonaws.com/0/261659/1f452ebe-1dd7-ef9a-6504-a3fb8a54f5de.jpeg)
![44277179281_3ffd5d300f_k.jpg](https://qiita-image-store.s3.amazonaws.com/0/261659/33fda9fd-527e-8ee9-3ad7-635169b22a99.jpeg)

### 参考
弘憲寺　心の講話 http://blog.livedoor.jp/koukenjikokoro/archives/7075884.html
キーボードの文字配列はどうして「QWERTY」なのか？ https://gigazine.net/news/20160316-origin-of-qwerty/!