Fusion360用キーボードの自作

## 背景
Fusion360という3D-CADソフトを、より便利に使う為にショートカットキーボードを作成しました。
作成に至った詳細やハードウエアについては、[別のブログ記事](https://shk-maker.hatenablog.jp/entry/2019/06/09/162618)に書いています。
こちらでは、QMK firmwareを使った全体の流れ、感じたポイント、キーマップ変更について書きました。

## QMK環境構築
主に[こちらのQiita記事](https://qiita.com/cactusman/items/ac41993d1682c6d8a12e)を参考にさせていただきました。
今回は、[monksoffunk（もんく）Zinc/Attack25販売中 (@monksoffunkJP) | Twitter](https://twitter.com/monksoffunkJP)さんのAttack25というキットを使用しました。

上記Qiita記事で紹介されていたQMK-firmware-master内には、このキーボードが入ってなかったので、作者さんの[ビルドガイド](http://www.sho-k.co.uk/tech/821.html)を参考にGitHubからダウンロードしました。
[ダウンロードリンク](https://github.com/monksoffunk/qmk_firmware/tree/attack25)
解凍したフォルダをC:/直下に保存します。それ以外の場所に保存した場合は以下の説明フォルダ名を読み替えて下さい。

前半部分は参考Qiita記事のとおり進めます。
ツール類のインストール以降から若干操作が異なります。
msys2画面にコマンド入力して、ディレクトリ移動します。（C:/直下に保存した場合）

```
cd /C/qmk_firmware-attack25
```
続けて次のとおりコマンド実行すると、インストールが開始されます。

```
./util/msys2_install.sh
```
やはり結構時間がかかります。時々求められるがままにエンター等を押しつつ、待ちます。
全て完了するとコマンド入力待ち状態に戻るので、一度msys2を終了します。

## ファームウェア作成、書き込み
とりあえず基板の動作確認をするために、作成済みのファームウェアをコンパイルし、Pro Microに書き込みたいと思います。
msys2を再度立ち上げて、さきほど同様にディレクトリ移動。

```
cd /C/qmk_firmware-attack25
```
[ビルドガイド](http://www.sho-k.co.uk/tech/821.html)に記載されている例を参考に、コンパイルしたいファームウェアに合わせてコマンド実行します。
今回はLED無し/キーマップdefaultで作成したいので、次のとおり実行します。

```
make attack25:default
```
ファームウェア作成に成功したら、次は書き込みです。
QMK toolboxを使われる方が多いようなのですが、自分の環境では成功しませんでした。
試しにmsys2でやると、あっさり成功しました。同じアプリ内でファームウェア作成して直ぐに書き込めるので、私はmsys2の方が便利なのではと思いました。
作業は、作成した時のコマンドに少し追加して実行するだけです。
Pro MicroをPCに接続したままで実行しても構いません。

```
make attack25:default:avrdude
```
「.」が連続して出てきたら、キーボードのリセットスイッチを押します。離すと赤いLEDが点灯し、書き込みが開始されます。
無事に書き込みが成功したら、キーを押してみる等して動作確認します。

## キーマップ変更
Attack25には初期から3種類のキーマップが用意されています。
（mac用は少し特殊なので、本記事ではWin版に限って説明）
C:/直下に保存した場合、次の場所に各キーマップ用のフォルダが格納されているので、参考にしたいものを選んでフォルダごとコピーペーストします。
> c:/qmk_firmware-attack25/keyboards/attack25/keymaps

コピーしたフォルダ名を分かりやすいものに変更します。私の場合は fusion001 にしてみました。
キーマップ変更して試し打ちすると、前のに戻したくなる場合もあるので、fusion002, fusion003 とコピペして履歴管理すると便利です。
私は各フォルダにキーマップを書いたエクセル方眼紙を入れました(笑)が、コード書き慣れてる方はコメントに残す等でも良いと思います。

フォルダ内にある、keymap.c をテキストエディタで開いて編集する事で、キーマップを変更できます。
Attack25の場合、次のような記述の行から閉じ括弧までが、キーマップ内容です。

```
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
```
初期のキーマップは全て、3つのレイヤーを切り替える設定になっており、その内1つのレイヤーはLEDの光らせ方を操作するレイヤーなので、今回は無視します。
具体的には次の2つのレイヤーの中身箇所（各5行）を編集します。

```
[_NUM] = LAYOUT_ortho_5x5( \
    /* 5行省略 */

[_FN] = LAYOUT_ortho_5x5( \
    /* 5行省略 */
```
各キーの指定方法は、[QMKの公式サイト](https://docs.qmk.fm/#/keycodes)を参考しました。
キーマップ変更方法について解説しているQiita記事も沢山ありましたが、やはり公式ドキュメントも確認した方が良さそうです。

## Fusion360用キーマップ案
色々と試した結果、キーマップは次の図のとおりにしました。
<img width="145" alt="keyboard-layout" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247233/9f59f6fc-5380-7a04-d43b-c07bdafcf11d.png">
図上側のテンキーと、図下側のFusion360ショートカット、2つのレイヤーを切り替えながら使う仕様です。
図の上と下で、位置も文字も同じキーは、レイヤー変更しても機能が変わらない固定キーです。

25キーのうち左上端と右上端は、一回チョン押し（タップ）と押しっ放し（長押し）で機能が変わるようにしました。
左上端のNumrock(Fn)キーを、タップするとNumrock切替、長押しでレイヤー切替。
右上端のEsc(Shift)キーを、タップするとEscキー、長押しでShiftキーになります。

Numrock(Fn)キーを押している間だけレイヤーが切り替わる仕様です。
そのままキーを押せばテンキーとして、Fnキーと同時押しするとFusion360ショートカットキーとして入力されます。
キーを押す毎にレイヤー切替する設定も可能でしたが、今どちらのレイヤーになっているか迷うので、同時押しの方が使いやすかったです。

Fusion360標準搭載ショートカットキーのうち、自分で使用頻度の高いものを載せています。
数パターン使ってみた結果コレに落ち着きました。コレよりもアレの方が良く使うよ、便利だよ！等、ご意見お待ちしてます。
スケッチ（赤枠）、モデリング（青枠）、スカルプト（緑枠）など、使用するシーンに合わせて、ショートカットキーを固めて配置したので覚えてしまえばブラインドタッチも可能かも（？）
このキーボードとマウスのみでFusion360の殆どの操作が出来るようになりました。快適♪
![IMG_20190609_134803.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247233/999a8d4d-7229-729e-26e0-f088d569456f.jpeg)


具体的なコード内容は以下のとおりです。
キレイに書けておらず読み難いと思いますが、御参考まで。

```
[_NUM] = LAYOUT_ortho_5x5( \
	LT(_FN, KC_NLCK), KC_PSLS, KC_PAST, KC_PPLS, LSFT_T(KC_ESC), \
	KC_P7, KC_P8, KC_P9, KC_PMNS, KC_LALT, \
	KC_P4, KC_P5, KC_P6, KC_PENT, KC_BSPC, \
	KC_P1, KC_P2, KC_P3, KC_UP, KC_TAB, \
	KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT ),\

[_FN] = LAYOUT_ortho_5x5( \
	XXXXXXX, KC_C, KC_R, KC_L, KC_TRNS, \
	KC_J, KC_M, KC_D, KC_T, KC_TRNS, \
	KC_Q, KC_E, KC_F, KC_H, KC_DEL, \
	LALT(KC_1), LALT(KC_2), LALT(KC_3), LALT(KC_N), LSFT(KC_N), \
	LCTL(KC_Z), LCTL(KC_C), LCTL(KC_V), KC_A, KC_S ), \
```

## 最後に
最後まで読んでいただき、ありがとうございました。

キーマップ変更は最初、想定通りに動かず苦戦しました。原因は私の英語の弱さ(汗)
公式ドキュメントでは長押しをpressとholdの2種類で表記されてますが、明確な使い分けは未だに理解できてません。

リンク先を参考させていただきました。改めて感謝いたします！
[Attack25ビルドガイド](http://www.sho-k.co.uk/tech/821.html)
[プログラマーではない人向けのQMK Firmware入門](https://qiita.com/cactusman/items/ac41993d1682c6d8a12e)
[QMK公式サイト キーコードリスト](https://docs.qmk.fm/#/keycodes)
[キーボードレイアウトエディター](http://www.keyboard-layout-editor.com/)

本記事の内容に間違いなどありましたら、指摘いただけると幸いです。