ErgoDox 購入からキーマップ作成まで

# <i class="fa fa-keyboard-o"></i> 目的
ErgoDox-EZ を購入しました。キーマップ作成からビルドまでの流れを忘れないよう記事にしました。

# <i class="fa fa-keyboard-o"></i> 導入してみて感想
　今この記事もErgoDox で書いていますが、慣れるまでに時間がかかりそうです。何気なく打っていた Alt + Tab や矢印キー、Ctrl + Alt + Del、Ctrl + Z、記号、すべてのキーを意識的に打つ必要があり、初めて HHK を使った時を超える違和感があります。
　あと自分が微妙にホームポジションを崩して打っていたことにも気付かされました。
　なぜ人はそうまでして ErgoDox に拘るのでしょうか？少なくとも買ってしまったからという要素があるのは否めません。とりあえず慣れるまでがんばります。

## <i class="fa fa-keyboard-o"></i> 購入
　以下の記事を大いに参考にして ErgoDox-EZ を購入しました。
[はじめてのErgoDox EZ購入ガイド - Qiita](http://qiita.com/moutend/items/dd3ac2b8cffd69809928)

## <i class="fa fa-keyboard-o"></i> キーマップのカスタマイズ
　キーマップカスタマイズできる2つのサイトがあり、最初は楽しいのですが、
[ErgoDox Keyboard Configurator - Massdrop](https://www.massdrop.com/configurator/ergodox)
[ErgoDox EZ Configurator](http://configure.ergodox-ez.com/keyboard_layouts/new)
　いずれも一部日本語キーに対応しておらず全角/半角キー押せない問題に行き着き、結局テキストで編集するのが楽という結論に至ります。Windows では「LALT(KC_ZKHK)」というキーを割り当ててあげるとIMEをトグル切替えできます。

## <i class="fa fa-keyboard-o"></i> ビルドまで
　以下を参考にしてビルドしました。Linux 環境です。
[ErgoDox EZのキーマップを変更する - Qiita](http://qiita.com/ReSTARTR/items/f84f8f3c4c51c876cb2f)

``` console
$ sudo -E apt-get install avr-libc
$ sudo -E apt-get install dfu-programmer
$ git clone https://github.com/qmk/qmk_firmware
```

ergodox ディレクトリで default キーマップをためしに make

```console
$ cd ./qmk_firmware/keyboards/ergodox/
$ make KEYMAP=default
$ ls -l qmk_firmware/.build
```

ergodox_ez_default.hex が出力されていることを確認。
次に、default キーマップをディレクトリごとコピー編集して自分のを作成、その後ビルドする。

``` console
$ cd keyboards/ergodox/
$ make KEYMAP=mykeymap
```

## <i class="fa fa-keyboard-o"></i> Ergodox にロード
　Teensy というツールを使います、省略。
[Teensy Loader app for Ubuntu Linux](https://www.pjrc.com/teensy/loader_linux.html)

## <i class="fa fa-keyboard-o"><i> キーマップ修正
　以下を見ながら微修正します。
[ErgoDoxのキーマップをいじる時に見るチートシート - Qiita](http://qiita.com/ReSTARTR/items/970354940f49c67fb9fd)

# <i class="fa fa-keyboard-o"></i> とりあえず自分用に完成したキーマップ
　なるべく一般的な英語キーボードに近づけてみました。まんなかのスペースはブラウジング用にいろいろ割り当てています。記号キーはどこに置くのがいいか悩んでます。

```keymap.c
/* Keymap 0: Basic layer
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * | Esc    |   1  |   2  |   3  |   4  |   5  |  BS  |           |Ctrl-W|   6  |   7  |   8  |   9  |   0  |   -    |
 * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
 * | Tab    |   Q  |   W  |   E  |   R  |   T  | Ctrl |           | Ctrl |   Y  |   U  |   I  |   O  |   P  |   BS   |
 * |--------+------+------+------+------+------|-PgDn |           |-PgUp |------+------+------+------+------+--------|
 * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|  Enter |
 * |--------+------+------+------+------+------| ALT-L|           | ALT-R|------+------+------+------+------+--------|
 * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   |LCtrl |      | CADel|Alt-全| LAlt |                                       | RAlt |   ~  |      | RWin  | RCtrl|
 *   `----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,-------------.
 *                                        | Home | End  |       | LEFT | RIGHT|
 *                                 ,------|------|------|       |------+--------+------.
 *                                 |      |      | PgUp |       | Up   |        |      |
 *                                 | Space| TG1  |------|       |------|  MO1   |Enter |
 *                                 |      |      | PgDn |       | Down |        |      |
 *                                 `--------------------'       `----------------------'
 */
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP(  // layer 0 : default
        // left hand
        KC_ESCAPE,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_BSPACE,
        KC_TAB,            KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   LCTL(KC_PGUP),
        KC_CAPSLOCK,       KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
        KC_LSHIFT,         KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   LALT(KC_LEFT),
        KC_LCTL           ,KC_NO,LALT(LCTL(KC_DEL)),LALT(KC_ZKHK), KC_LALT,
                                                       KC_HOME,  KC_END,
                                                                KC_PGUP,
                                              KC_SPACE,  TG(1), KC_PGDOWN,

        // right hand
             LCTL(KC_W), KC_6,   KC_7,  KC_8,   KC_9,   KC_0,             KC_MINUS,
             LCTL(KC_PGDOWN),    KC_Y,  KC_U,   KC_I,   KC_O,   KC_P,     KC_BSPACE,
                         KC_H,    KC_J,  KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_ENTER,
             LALT(KC_RIGHT),     KC_N,  KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSHIFT,
                                  KC_RALT, KC_TILD,     KC_NO,  KC_RGUI,   KC_RCTRL,
             KC_LEFT,        KC_RIGHT,
             KC_UP,
             KC_DOWN, MO(1) , KC_ENTER
    ),
/* Keymap 1: Symbol Layer
 *
 * ,---------------------------------------------------.           ,--------------------------------------------------.
 * |Version  |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
 * |---------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
 * |         |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
 * |---------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |         |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |   DEL  |
 * |---------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * |         |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
 * `---------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   | EPRM  |      |      |      |      |                                       |      |    . |   0  |   =  |      |
 *   `-----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,-------------.
 *                                        |      |      |       |      |      |
 *                                 ,------|------|------|       |------+------+------.
 *                                 |      |      |      |       |      |      |      |
 *                                 |      |      |------|       |------|      |      |
 *                                 |      |      |      |       |      |      |      |
 *                                 `--------------------'       `--------------------'
 */
// SYMBOLS
[SYMB] = KEYMAP(
       // left hand
       VRSN,   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
          EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
                                       KC_TRNS,KC_TRNS,
                                               KC_TRNS,
                               KC_TRNS,KC_TRNS,KC_TRNS,
       // right hand
       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_DEL,
       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
       KC_TRNS, KC_TRNS,
       KC_TRNS,
       KC_TRNS, KC_TRNS, KC_TRNS
),
```


## <i class="fa fa-external-link"></i> 参考にしました
[ErgoDox EZ カスタマイズ情報のまとめ - Okapies' Archive](http://okapies.hateblo.jp/entry/2016/05/15/164009)
[CIサービスだけでErgoDoxのファームウェアをビルドして公開する - YAMAGUCHI::weblog](http://ymotongpoo.hatenablog.com/entry/2016/04/24/232452)