XD60キットで親指シフトキーボードを作る（矢印キー付き）

![IMG_20210711_101748.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1750353/bcd9124f-2e30-f132-b2e9-5a5ef6701d58.jpeg)
## 筋金入りの親指シフターです
親指シフトキーボードに初めて出逢ったのは、1990年、職場で使用されていたOASYS。
資料をワープロでを作成しなければならなくなり、それまでの一太郎のノリでシフトキーを「押しながら」文字キーを打つと入力したい文字が出て来ない。四苦八苦していると、OASYSに精通した先輩から「同時に打つのよ」とアドバイスされ、目からウロコが落ちた。
その後、約１週間で親指シフトをマスターし、以来親指シフトとの付き合いは30年を超えた。
自作キーボード初心者の私を、このように念願の親指シフトキーボード完成まで導いてくれたのは、ひとえに[ikebesadao氏のガイダンス](https://qiita.com/sadaoikebe/items/c856c563a286c7f5b471)があったからで、私もギブ＆テイクで、少しでもこれから自作キーボードを始める方々の参考になるページを作りたいという思いから、このページ作成をしております。
もう一つの目的は、自分自身の備忘録としての記録を残したかったから。キーボードを自作してしばらくすると「あれ、どうやってやったっけ？」と完全に忘れてしまい、思い出すだけで、かなりの時間と労力を消費してしまう。
本稿ではXD60という優れた自作キーボードキットを使って、永遠の親指シフトキーボードを製作したプロセスを解説する。
なお、このページはかなりの部分、[@sadaoikebe](https://qiita.com/sadaoikebe/items/c856c563a286c7f5b471)様のページを手本に作成しております。

## 対象
親指シフト入力が至高の入力メソッドだと信じている人。
PCの操作に多少明るい。
ハンダゴテを多少使える（細かいハンダ付けは不要）

## 方針
基本的に世の中で手に入るものはどこからでも調達する。調達先は主にAliExpress。英語にアレルギーを持っていないほうがベター。
PC, Mac, iPhone, Androidに繋いですぐ親指シフトが使えることを目指す。

## 完成予想図
親指シフトキーボード製作の入門用としては、通販で入手可能なキットの中では、XD60 VER3.0が使いやすい。以下のようなキーボードを組み立てることができる。
![nicola_xd60.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1750353/f8f88ae6-9624-ee92-483e-1eef50faa7a8.png)

以下のような特徴を持つキーボードとなる。

- 日本語入力はNICOLA-A規格
    - ANSI配列をベースとした親指シフト配列の標準規格。
    - 右手小指の右側のキーに後退キーを割り当てている。

- 英数モードはANSI配列
    - 長期的に部品の入手が容易。
    - 親指シフトを使わない人でも普通の英語キーボードとして使うことができる。
    - Enter,右shiftなどが右手小指近くに配置されている。右手小指が楽。

- 60%キーボード
    - F1～F12などは、Fnキーとセットで打鍵する。HHKBのような思想のキーボード。
    - 先達の[sadaoikebe](https://qiita.com/sadaoikebe/items/c856c563a286c7f5b471)氏のキーボードは矢印キー無しだが、私個人としては、矢印キーが独立して存在しているほうが使いやすい。

## 予算
すべての部品をAliExpressで調達した。費用約17,000円。

## 通販サイト
・AliExpress
　基本的に英語だが、最近はかなり日本語化されてきている。ただし、私は英語を読んだほうがわかりやすいし、変な誤解も少ない。
　送料無料。
　多くの商品が普通郵便で送られてくるので、届くまで時間がかかる。航空便も選択できる商品もあるが、当然高価となる。

- 淘宝 (taobao)
    - 中国語。私は使ったことがないが、[sadaoikebe](https://qiita.com/sadaoikebe/items/c856c563a286c7f5b471)氏は中国語に精通しているためこちらの方を使っているらしい。
    - 品揃えはAliExpressよりも充実しているらしい。

## 買うものリスト
- 基板(PCB) XD60 Ver.3.0 
    - スイッチを読み取ってUSBの信号に変換する基板。
![IMG_20210702_193829.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1750353/8cb494e5-9f58-4007-8089-be02534597ce.jpeg)
上がPCB、下がプレート

    - __単品買い推奨。__ 私は初心者ということもあり商品リンクのサイトでスイッチ（Gateron 赤色スイッチ）付きのもの（Kit 10）を選択したが、スイッチは多くのメーカーやタイプがあり、自分に合うスイッチを選ぶのが自作キーボードの大きな要素だ。
    - この基板にはAmtel MEGA32U4というコントロールチップが搭載され、このキーボードの入力の制御を担っている。他の自作キーボードによっては、ProMicroと呼ばれるチップが搭載されていることが多いが、この基板ではProMicroではなくATmega32U4となる。このコントローラーの違いにより、後述するファームウェアの書き込み方法に違いが出てくる。
    ![IMG_20210702_194730.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1750353/527c099c-355e-1dca-c718-b32f20453cd4.jpeg)

- プレート Carbon Fiber Plate for XD60
    - キースイッチを決まった位置に固定する部品。
    - 親指キーを左右分割して実装する場合、XD60キットのプレートではダメ。この別売りプレートを買う。
    - 2.25uと2uの2種類があり、標準的な配列は2.25u。右シフトを詰めて矢印キーを導入する場合、2u版を選択しても良い。私の場合、矢印キーを実装したかったので、2u版を選択した。
- ケース
    - キーボードを収める箱。好きな色・材質・形状が選べる。
    - 中華の60%Keyboardキットはみんな共通のケースが使える。GH60用ケースは何でも使える。
    - XD60キット付属のプラスチックケースは$5程度のショボいものなので避けたほうが無難。

![IMG_20210702_193739.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1750353/80d31a05-f0b0-37d5-f526-3309aef74173.jpeg)
    - 私が最初に買ったケースはごく普通の白いケースであったが、完成後、しばらく使っているうちにPCB裏面にあるLEDをRGBで発光できることを知り、LEDが光るようになってから、半透明のアクリルケースに買い替えた。
- スタビライザー
    - シフトキーやスペースキーなど、幅広のキーに取り付ける部品。
    - PCB用スタビライザーと、プレート用スタビライザーの2種類があるけど、XD60ではPCB用を使う。
    - 上記の配列なら2uスタビライザー4つ、3uスタビライザー2つ必要。
- スイッチ
    - 上記の配列なら62個必要。
    - 打鍵感の違いで色分けされている。
    - ドイツのCherryや、中国のGateron、Kailhなどが人気。Outemuなど安価なスイッチもある。
    - 私は基板とセットで売っていたGateron 赤軸スイッチを選択したが、スイッチを押した感覚的には、２台目に購入したKailh ボックス赤色スイッチの方が好きだ。自分の感覚に合うスイッチに出逢えるには、色々と経験が必要と思う。
![IMG_20210702_193916.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1750353/beb36656-7804-e137-da39-277448c04048.jpeg)

- キーキャップ [Krepublic Cherry Profile Dye-sub Keycap Set Thick PBT](https://ja.aliexpress.com/item/32835265683.html?spm=a2g0o.order_detail.order_detail_item.3.4abe1691Tpq463&gatewayAdapt=glo2jpn)
    - XD60で親指シフトする場合、通常の60%キーボード用のセットに加え、追加で3u(キー3個分の幅)のスペースのキーキャップを2つ購入する必要がある。3uのスペースバーはFILCO Minilaというキーボードで採用されている。以下のものすべてを購入すると良いだろう。
    - Base（購入時価格/1,564）
    - Modifier（購入時価格/1,707）
    - MOD Pro（購入時価格/1,707）
    - Space Bar（購入時価格/1,403 x2）（3u親指キーが入っている。2セット必要）
    - 3uをセットと別で買う場合、色味が微妙に違ってしまう場合があるので注意。

![IMG_20210702_193800.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1750353/b659aad8-2314-10ba-c208-e1a3ad42c7ca.jpeg)

- USBケーブル(Type-C)
- ハンダゴテ、ハンダ
    - 細かい作業は不要なので、使ったことなくても挑戦してみても良いと思う。
    - XD60キットはダイオードやLEDがPCBに実装済みなので、ハンダ付けは比較的カンタンだが、他の自作キーボードキットでは、米粒くらいのダイオードをハンダ付けする必要もあるため、ハンダゴテをこれから購入する人には、温度調節ができるこれがおすすめ。
        - [白光(HAKKO) ダイヤル式温度制御はんだこて FX600-02](https://www.amazon.co.jp/gp/product/B006MQD7M4/ref=ppx_yo_dt_b_asin_title_o03_s00?ie=UTF8&psc=1)
        - [白光(HAKKO) こて台 FX-600/FX-601/PRESTO/DASH用 633-01](https://www.amazon.co.jp/gp/product/B000TGNWCS/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&th=1)

## 組み立て
- PCBが届いたらまずはUSBケーブルを挿して動作確認。スイッチのパターンをピンセットなどでショートさせてちゃんとキーが入力されるか確認。
- 部品実装面
![IMG_20210702_194704.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1750353/ad3586ef-1259-8f51-18b6-e603bccff8e7.jpeg)
- スタビライザー
![IMG_20210710_151658.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1750353/d9632cf4-a25e-9858-a42b-da738eef1f23.jpeg)
- スタビライザーを嵌め込む前に、スタビライザーにルブ（潤滑油）を塗っておくとカシャカシャ音が低減されるので推奨する。
- 2uスタビライザーをBackSpace, Enter, 左右Shiftにプチプチとはめ入れる。長いスペースバー用のスタビライザーは使用しない。
- 3uスタビライザーを左右の3uスペースバーのところに嵌め込む。
- プレートにスイッチを差し込み、スイッチの各ピンにPCBの対応する穴に刺す。すべてのピンが完全にPCBに刺さっているかを確認する。上から順にスイッチ⇒プレート⇒PCBの並びとなる。
- スイッチを通し終わったら、PCBの裏面（下面）からハンダ付けをする。

![IMG_20210702_221043.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1750353/09cf756a-e24d-c0bf-56a2-66b39c74b1bb.jpeg)
- ハンダ付けが終わり、キーキャップを付けているところ
- キーキャップを取り付ける前に、基板をケースにネジ止めする。6箇所。キャップが干渉するのでキャップを取り付ける前にネジ止めを行う。
- 組み立ててそのままでは、親指シフトキーボードとしては使えないが、キーを押してみて一通り反応するか確認。

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

いよいよ親指シフト化となる。

- ファームウェアをキーボードにロードするためのソフトウェア[QMK Toolbox](https://github.com/qmk/qmk_toolbox)をインストールする。
- [親指シフトを可能とするファームウェアはここ](https://github.com/kyoshiza/qmk_firmware/blob/master/keyboards/xiudi/xd60/keymaps/nicola/xiudi_xd60_rev3_nicola.hex)


![github.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1750353/7144a6bd-9939-6fcc-d4a2-a307714254a3.png)
    - 上のリンクを開いて、「Raw」ボタンを右クリックして、自分のPCのフォルダにダウンロード。
- 私が親指シフト、矢印キー付きキーボード用に修正したファームウェアをGithubに公開した。将来的にアップデートされる（したいと思う）。
- ファームウェアをキーボードに書き込む。
![QMKToolbox.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1750353/6d28db5d-761d-0f7e-d87c-fb076eeff440.png)

    - キーボード裏面のリセットボタンを押すことにより、書き込みモードになる。黄色い文字で、「DFU device connected」と表示される。この状態ではキーボードとしては使えず、ファームウェアを書き込む状態。
    - Openを押して先程自分のPCにダウンロードしたファイル（hex file）を指定して、「Flash」ボタンをクリックすると、書き込みが始まる。
    - 書き込み終了すれば親指シフトキーボードとして動作開始する。

## このファームウェアの使い方
QMK firmwareを使えば、自分好みの高度なカスタマイズが可能だが、上記のファームウェアを使う場合の使い方を以下に解説する。

このキーボード、見た目はANSI配列だけど、WindowsやIMEなどの設定は、JISキーボードとして設定している。また、親指シフトモードにしても、PCにはローマ字で送出される。すなわち、
- 従来からJISキーボードを使っている人は、ソフトウェアの設定変更はしなくて良い。
- 従来ANSI(US)キーボードを使っていた人は、IMEなどの設定を変更して、JISキーボードを使うように変更することが必要。
- 従来親指シフトキーボードを使っていた人は、配列変換などのドライバーソフトウェア（やまぶき等）をオフにする。また、IMEの設定などで、ローマ字入力を選択する必要がある。
コンバクトなキーボードなので、多くの機能はHHKB等と同様、Fnキー併用押しが必要となる。
![nicola_xd60_Fn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1750353/1498d257-62f9-0947-6797-68d212051f39.png)
Fnキーは左下と右下配置。Pgup, Pgdown, Home, End等は右下のFnキーを押しながら矢印キーを押すことによって片手のみで可能。
IMEのON・OFFはFn+親指右・親指左で操作する。これらのキーはそれぞれ変換・無変換に割り当てられている。


| 押下 | 出力 | 思想 |
|:-:|:-:|:-:|
| Fn+親指右  | 変換・親指シフト状態に遷移  | 純正親指シフトキーボードに近い使い勝手を想定  |
| Fn+親指左  | 無変換・英数状態に遷移  | 純正親指シフトキーボードに近い使い勝手を想定  | 
| Fn+ ←/↓/↑/→| Home /PgDn / PgUp /End| 矢印キーと同様の向き  |
| Fn+ HJKL  | ←↓↑→  | viに準じる  |
| Fn+ U / I  | PgDn / PgUp | J/K と同様の向き  |
| Fn+ Y / O  | Home / End  | H/L と同様の向き(テキスト編集の際)  |
| Fn+ BS  | Del  |   |
| Fn+ '  | Del  |   |
| Fn+ P  | Print Screen  |   |
| Fn+ ]  | Pause  |   |
| Fn+ 1～12  | F1～F12  | HHKBに準ずる  |


(注) Scroll Lockは誤入力防止のため削除してある

## ファームウェアのカスタマイズ方法

上記のデフォルトファームウェアからレイアウトを変更したい場合は、QMKファームウェアをカスタマイズすることができる。

[QMKのセットアップガイド](https://docs.qmk.fm/#/newbs_getting_started)通りに開発環境を導入する。Windows, Mac, LinuxのいずれかのOS上で動作可能。WindowsならばQMK SYSというソフトウェアをインストールするだけでよい。

- [リポジトリ](https://github.com/kyoshiza/qmk_firmware)のクローン
~~~diff_c
git clone --recurse-submodules https://github.com/kyoshiza/qmk_firmware.git
~~~

 - qmk_firmwareは基本的にGitHubの機能を使って各ユーザーのファームウェアのカスタマイズを管理する。GitHubのディレクトリ構造を見ると、多くの初期のユーザーが各自のカスタマイズをコミットしているが、現在では多分それよりも遥かにかなり多くのユーザーが、本番のGitHubの中のqmk_firmwareを直接コミットせず、qmk_firmwareを自分のGitHubにクローン（コピー）して公開するスタイルが主流となっているようだ。
 
- キーマップの書き換え
    -- keyboards/xiudi/xd60/keymaps/nicola/keymap.c を編集
    -- Fnキーの場所や、矢印キーの割り当てなどは好みに応じて変えたほうが良いだろう。
    -- RGB_で始まるキー割当は、Fnキーと同時押しによって、キーボード分割面の12個のLEDの発光モードを設定する。

![keymap_c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1750353/d28d573f-d8cf-5b55-fb2d-d688b4a8da84.png)

- ビルド
~~~diff_c
qmk compile -kb xiudi/xd60/rev3 -km nicola
~~~
- DFUで書き込み
ファームウェアを書き換えるには、上記と同じように、キーボードをDFU（書き換え可能な）状態で接続しておく。（キーボードの裏側にあるリセットスイッチを押す）
~~~diff_c
qmk flash -kb xiudi/xd60/rev3 -km nicola
~~~

## 付加機能　LEDの光らせ方
- この基板(PCB) guide68には、オプション機能として、LEDがキーボード分割面に12個ついており、RGB（フルカラー）の出力が可能となっている。現在は、親指シフトモードで緑色、英数モードで青色として、視認性を向上させている。（現在のところ、左側キーボードのみ色の変色が可能で、右側キーボードは反映されていません。）
- また、Fn+X等のキー押下により、LEDの発光方法を変更することができる。
詳細は、QMK Firmwareの[RGB Lighting](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_rgblight.md "RGB Lighting")を参照してください。


## 解決事項
- 私は元々、[@sadaoikebe](https://qiita.com/sadaoikebe/items/c856c563a286c7f5b471)様のページを参考にしてこのキーボードを製作したが、記号の入力が、キーキャップのアサインと実際に入力される記号とがどうしても合わないという事象が発生しており、今でも解決していない。例えば、シフトを押しながら「２」キーを押すと、キーキャップの表記は「@」のはずだが、「"」が入力されてしまう。
- 私の解決方法としては、Windows 10の設定⇒時刻と言語⇒言語⇒優先する言語（言語の追加）で英語（米語）をインストールし、日本語と英語とそれぞれのキーボードを使えるようにしたあと、通常の運用方法として、Alt+Shiftで日本語から英語にキーボードのモードを変えるという操作をしている。このAlt+ShiftがQMKで親指シフトモードに入るとき、出るときに登録できれば完璧なのだが、そのアサインの方法がわからない。私のQMKに関する知識が未熟なところ。
- 2024/1/8 上記不具合が完全に解消された。QMKのプログラムを修正することで、[ANSI (US)配列用のキーコードをJIS (JP)配列用キーコードに変換する](https://github.com/m47ch4n/qmk-translate-ansi-to-jis/blob/main/README.md"qmk-translate-ansi-to-jis")することが可能となり、実装し完全に英語キーボードの表記どおりに入力することができるようになった。

## トラブルが発生した場合
何か問題が発生したり、わからないことがあったりしたらquiitaもしくはfacebookで私に質問してください。
お使いの環境でうまく動かなかった場合などでも、報告いただければできる範囲で対処いたします。
質問してくださることによって、本稿の品質が上がり、親指シフト使いの将来の助けになります。

以上