アニメ撮影でErgoDox EZ使ってみた

この記事は[AfterEffects Advent Calendar 2016](http://qiita.com/advent-calendar/2016/aftereffects)の4日目の記事です

##二足の草鞋
アニメ撮影の会社でAfterEffectsのスクリプトやプラグイン、あとはPythonでツールを作ったりしています。

以前はバリバリとAfterEffectsでアニメ撮影をしていたのですが、いまはプログラミングをメインの業務にしていることもあって、普段使いのキーボードをHHKBというプログラミングなどに向いたキーボードにしていました。
ただし全くアニメの撮影をしないというわけでもなく、忙しいときなどは撮影の手伝いをすることもあります。

HHKB自体はとてもいいものなのですが、これをアニメ撮影で使うとなると事情が変わってきます。
アニメの撮影はタイムシートと呼ばれる絵の番号のタイミングを記入してある紙をデータとして入力する過程があり、それにはテンキーがあるほうがなにかと便利なので、テンキーの無いHHKBにはこの点において不便を感じていました。
別途外付けのテンキーを使用してみたこともあるのですが、使用時に接続したりするのが面倒だったりして、結局HHKBの数字キーをトボトボと入力していました。
REALFORCEならテンキーがあるタイプがあるのですが、フルキーボードじゃないほうが好みなのと、AfterEffects使用時にはペンタブレットを使用するということもあり、キーボードとペンタブレットの配置という問題もありました。

|   コーディング時   |    AfterEffects時  |
|:-----------------:|:------------------:|
|![](https://qiita-image-store.s3.amazonaws.com/0/149913/6a729c89-e281-9190-9668-2feaee75c8ca.png)|![](https://qiita-image-store.s3.amazonaws.com/0/149913/311329e2-91cd-36d3-b10a-f5ac5506b5b9.png)|
|AfterEffects時の配置だと一段低くちょっと遠いので位置を変えている。もしくはペンタブレットを外してしまう。|コーディング時の配置ではペンタブが使えないので再配置。シート入力はどちらにしてもつらい。|
マウス派、ペンタブ派などいろいろあると思いますが、AfterEffectsでペンタブレットを使用している方は概ね上記右図のようなレイアウトになるのではないでしょうか。
また、効率化などでLogicool® G13 Advanced GameboardやRazer Tartarus Chromaなどの左手デバイスを使用している方もいるかと思います。

アニメの撮影にも対応でき、プログラミングも問題なく、ペンタブも使用できるという特殊な環境を構築するのにあれこれ調べたりしているうちに、**ErgoDox**というセパレートタイプのキーボードがあるということを知ります。

##ErgoDoxとは
セパレートタイプのキーボードで、こういった記事からエンジニア界隈に広まっていったようです。
[Community Blog - 握力王 vs 日本男児 ヘルシーすぎるプログラマ対談（Part1）](
http://www.oreilly.co.jp/community/blog/2016/02/helthy-programmers-talk-training-part1.html)
[Community Blog - 握力王 vs 日本男児 ヘルシーすぎるプログラマ対談（Part2）](http://www.oreilly.co.jp/community/blog/2016/03/helthy-programmers-talk-training-part2.html)
[漢(オトコ)のコンピュータ道- キーボードを新しくした話（ErgoDox）](http://nippondanji.blogspot.jp/2016/01/ergodox.html)

本来、パーツを用意して自分で組み立てるものなのですが、完成品としてErgoDox EZというものがあります。
[ErgoDox EZ](https://ergodox-ez.com/)



買う気は満々でしたが、ツイッターのフォロワーの人で買った人がいたので、実際に触らせてもらってから購入しました。
その方曰く、Logicool® G13 Advanced GameboardやRazer Tartarus Chromaのような左手デバイスを導入しても、新規コンポジション作成などでコンポ名を入力するのに結局キーボードに手を置き換える必要があるので、キーマップを変えることのできるErgoDox EZにしてみたということでした。

なるほどそれは一理あるのと、触った感じもよかったので、その後注文して1週間くらいで到着。
アニメを作ってる側がアニメっぽくなった気がします。
![ergodox2_00001.png](https://qiita-image-store.s3.amazonaws.com/0/149913/2eab4a91-615d-d2d2-7161-fb5e93ec90cd.png)
リストレストが付いてくるのですが撮り忘れました

|   ErgoDox EZ   |    HHKB  |
|:-----------------:|:------------------:|
|![](https://qiita-image-store.s3.amazonaws.com/0/149913/138d3e6c-d41f-9571-ea2e-c5f7009e1e29.png)|![](https://qiita-image-store.s3.amazonaws.com/0/149913/57520fd1-86af-1f88-b890-e85512b84697.png)|
|配置が自由。ただし机は結構占有される|テンキーがないのでちょっと窮屈か|

##USキーボードでAfterEffects日本語版を使用する
HHKBでもそうだったのですが、USキーボードを使用しています。ErgoDoxも基本USキーボードなのでAfterEffects日本語版を使用する際に、ショートカットキーが一部違うので修正します。
基本的には以下の違いだけのようですので、ショートカットキーの設定ファイルを書き換えればいいかと思います。

|日本語版AEのキー|英語版AEのキー|
|:--|:--|
|@|`|
|^|=|

ショートカットキーの設定ファイルをカスタマイズしていないのであれば、一度英語版で起動して生成されたショートカットキーの設定ファイルをリネームして使ったほうが楽かもしれません。

##自分がAfterEffectsでよく使うショートカットキー
|キー|内容|
|:---|:---|
|U|キーフレームまたはエクスプレッションが設定されているプロパティのみを表示|
|P|「位置」プロパティのみを表示|
|T|「不透明度」プロパティのみを表示|
|S|「スケール」プロパティのみを表示|
|M|「マスクパス」プロパティのみを表示|
|E|「エフェクト」プロパティグループのみを表示|
|V|選択ツールにする|
|G|ペンツールにする|
|Space|押下している間手のひらツールになる|
|PageDown|1 フレーム先に進む(Ctrl+Rightでも可)|
|PageUp|1 フレーム前に戻る(Ctrl+Leftでも可)|
|,|ビューをズームアウト|
|.|ビューをズームイン|
|Alt+/|ビューにコンポジションをフィットさせる(Shift+/だと100%を超えてフィットする)|
|Alt+[|選択したレイヤーのインポイントを現在の時間にトリム|
|Alt+]|選択したレイヤーのアウトポイントを現在の時間にトリム|
|Numpad 0|RAMプレビュー(CS6なので)|

キーをカスタマイズできるので右手で使用するキーを左にアサインしてみます。
ErgoDox EZがオンラインでキーマップを変更できるサイトを用意しているので、手っ取り早く試すにはおすすめです。
[ErgoDox EZ Configurator](http://configure.ergodox-ez.com/keyboard_layouts/new)

また、キーを変更する他にもキーレイアウト全体を変更できるレイヤーという機能もあります。
上記サイトを見るとわかるのですが、レイヤー1には数字のキーマップが付いていて、レイヤー0から切り替えて使用することが可能です。


というわけで適当に左につっこんでアサインしてみました。
![map1.png](https://qiita-image-store.s3.amazonaws.com/0/149913/3b37606f-b520-5bc0-4a11-9cdb0ba7966d.png)

U,Pを左手に。左手部分の右上の0はテンキーの0です。
親指部分にはPageUp,PageDownもあるのでコマ送りもできます。

ここには載せていませんが、レイヤー1の数字キーをテンキーの数字にして配置も変えています。

最初は戸惑いますが、慣れるとなかなか便利。左親指でフレームの送りや拡大などができるようになりました。
いっそのこと数字はテンキーを使用するようにすれば左上段の1-5もつぶせるかと思いますが、さすがにプログラミング時に問題があるので、普段使いのプログラミングをメインに、AfterEffects用に別途レイヤーを作ったほうがよさそうなので、AfterEffects用のレイヤーを作ってみることにします。



実はこのオンラインキーマップのカスタマイズはカスタマイズできるキーの内容に制限があります。
そしてその制限無くカスタマイズするには、キーマップのファイルをCで書いてコンパイルするという過程が必要になります
マクロを書く程度ですのでC言語をバリバリ書ける必要はありません。

ということで仮にキーマップファイルを書いてみました。
レイヤー3をAfterEffectsショートカットレイヤーとして、左手はそのままに。
右手にはショートカットキーを使用できるようにキーの組み合わせを配置してみました。
空白部分はレイヤー切り替え前のキーをそのまま使用できるようになっています。



```c
/* AE
 * ,-----------------------------------------------------------------------------------------------.
 * | Ctrl+N | Ctrl+Y | Ctrl+Alt+Shift+L | Ctrl+Alt+Shift+C | Ctrl+Alt+Shift+Y | Ctrl+Alt+Y |       |
 * |--------+--------+------------------+------------------+------------------+------------+-------|
 * |        |        |                  |                  |                  |    Alt+[   | Alt+] |
 * |        |--------+------------------+------------------+------------------+------------+-------|
 * |--------|        |                  |                  |                  |      [     |   ]   |
 * |        |--------+------------------+------------------+------------------+------------+-------|
 * |        |        |                  |                  |                  |            |       |
 * `--------+--------+------------------+------------------+------------------+------------+-------'
 *          |        |                  |                  |                  |            |
 *          `------------------------------------------------------------------------------'
 *  ,---------------.
 *  |      |        |
 *  |------+--------+------.
 *  |      |        |      |
 *  |------|        |      |
 *  |      |        |      |
 *  `----------------------'
 */
    LCTL(KC_N), LCTL(KC_Y), MEH(KC_L), MEH(KC_C), MEH(KC_Y), ALTG(KC_Y),        KC_TRNS,
    KC_TRNS,    KC_TRNS,    KC_TRNS,   KC_TRNS,   KC_TRNS,   LALT(KC_LBRACKET), LALT(KC_RBRACKET),
                KC_TRNS,    KC_TRNS,   KC_TRNS,   KC_TRNS,   KC_LBRACKET,       KC_RBRACKET,
    KC_TRNS,    KC_TRNS,    KC_TRNS,   KC_TRNS,   KC_TRNS,   KC_TRNS,           KC_TRNS,
                KC_TRNS,    KC_TRNS,   KC_TRNS,   KC_TRNS,   KC_TRNS,
    KC_TRNS,    KC_TRNS,
    KC_TRNS,
    KC_TRNS,    KC_TRNS,    KC_TRNS
),
```

これでレイヤー3にすれば、右側の上部で新規コンポジション、新規平面、新規カメラなどを1クリックで呼ぶことができます。

CS6には、新規調整レイヤーにショートカットキーがないので、スクリプトを実行して作成するようにします。

```js:addAdjustmentLayer.jsx
(function(){
    
    var target = app.project.activeItem;
    
    if(!target){
        return;
    }

    if(!(target instanceof CompItem)){
        return;
    }
    
    var adjustmentLayer = target.layers.addSolid([1,1,1],
                                                 'adjustment layer',
                                                 target.width,
                                                 target.height,
                                                 target.pixelAspect);
    adjustmentLayer.adjustmentLayer = true;
    
}());
```

AfterEffectsのスクリプトメニューにはショートカットキーを割り当てることができるので、CCと同じショートカットキー(Ctrl+Alt+Y)を割り当てます。

```text
"ExecuteScriptMenuItem01" = "()"
```
```text
"ExecuteScriptMenuItem01" = "(Ctrl+Alt+Y)"
```

|割り当て前|割り当て後|
|:---|:---|
|![](https://qiita-image-store.s3.amazonaws.com/0/149913/3d80608b-ffcf-8700-b409-565e867020d2.png)|![](https://qiita-image-store.s3.amazonaws.com/0/149913/0e1c37e4-0ca3-8137-5a2f-0556a341a3cd.png)|

これでCS6でも新規調整レイヤーのショートカットが使えるようになりました。

##ErgoDox EZ使ってみた感想
便利ですが、キーのアサインを覚えていないといけないのでカスタムのしすぎもそれはそれで問題がおこりそう。
プログラムを書く分には問題なく使用できるのでその点は大丈夫。
どちらにしても慣れの問題が大きいかと思います。
あとは姿勢を楽に保てるのはなかないい感じです。
メカニカルキーボードをこれまで使用してこなかったので、打鍵音が意外に大きいのはちょっと気になる。
まだ使い始めたばかりなので、キーマップをこねくりまわしていくと感じも変わってくるかも。
AfterEffectsで効率的に作業するのを考えるなら、ft-toolbarのようなランチャーパネルのほうがやはりいいかなと思います。

もしくはFX Consoleのような感じで、エフェクト適用以外のものも実行できるプラグインを作るしかないのかもしれません。

##まとめ
基本的にエルゴノミクスキーボードの部類ですので、キーボードを使用していて肩こりなどに悩まされている方にはおすすめかと思いますし、エンジニアの方の使用も問題ないと思います。
AfterEffectsでのErgoDox EZの使用感も特に問題ないのですが、他の要素(キーマップのコンパイル、価格)のほうが問題ありそうなので、一般的におすすめするものではないかと思いますが、**ErgoDoxかっこいい**のでおすすめしておきます。
また、ハードウェアではなく、ソフトウェア側でキーを変更したりできるものもあるので、そちらを使用してみるのもいいかもしれません。

明日のAfterEffects Advent Calendar 2016は[shutosg](http://qiita.com/shutosg)さんの「音楽同期をサポートする簡易スクリプトの紹介」です。

###資料
キーボード
[ErgoDox](https://www.ergodox.io)
[ErgoDox EZ](https://ergodox-ez.com)
[Happy Hacking Keyboard](http://www.pfu.fujitsu.com/hhkeyboard)
[REALFORCE](http://www.topre.co.jp/products/elec/keyboards)

拡張デバイス
[Logicool® G13 Advanced Gameboard](https://gaming.logicool.co.jp/ja-jp/product/g13-advanced-gameboard)
[Razer Tartarus Chroma](http://www.razerzone.com/jp-jp/gaming-keyboards-keypads/razer-tartarus)
[Palette(Palette Gear)](https://palettegear.com/after_effects)
[プログラマブルテンキー](https://www.sanwa.co.jp/product/syohin.asp?code=NT-19UH2BK)

キーカスタマイズソフト
[keyhac](https://sites.google.com/site/craftware/keyhac-ja)
[AutoHotKey](http://ahkscript.org) (windows)
[Keyboard Maestro](https://www.keyboardmaestro.com/main) (mac)