Google翻訳が賢くなったのでコミットコメントを書くときに英語に翻訳しやすくするVim設定をした

# はじめに
英語力が壊滅的なためにGitとかのコミットコメントを英語で書くのが苦痛で、自分用のリポジトリなんかは横着して日本語で書いてました。そんなところに、[Google翻訳が賢く](http://www.itmedia.co.jp/news/articles/1611/16/news085.html)なったってニュースが舞い込んできたので、今更ながら試してみたところ（たぶん）いい感じに翻訳してくれています。

以下は最近コミットしたコメントを翻訳したものです。

![image](https://qiita-image-store.s3.amazonaws.com/0/45372/1d21d42c-b6a3-10c2-02a5-02be0a9676a6.png "最近コミットしたときのコメントを翻訳させてみました。（その1）")

![image](https://qiita-image-store.s3.amazonaws.com/0/45372/bee9ca8e-8c93-43ae-e389-1f124f416558.png "最近コミットしたときのコメントを翻訳させてみました。（その2）")

私の場合、特に文法や前置詞の使い方に不安があったので、これくらい翻訳してくれていれば後は単語をより適切なものに差し替えたりするくらいは何とかできそうです。

後はこれを、コミットコメントを書くのに使っているVimからいい感じに使えるとよいです。

# 試したけど馴染まなかったこと
そんなわけで、VimからGoogle翻訳を使いやすくするためにプラグインを導入したのですが、手に馴染まなかったメモです。読まなくても問題ないです。

## その1 [googletranslate-vim](https://github.com/normful/googletranslate-vim)を試す
[mattnさんのオリジナル](https://github.com/mattn/googletranslate-vim)は、APIのバージョンが古かったり、依存している(と思われる)webapi-vimのAPIインタフェース変更に追随していなかったりと、そのままでは動かなかったので、forkしてその辺の修正をしてくれているnormfulさんのものを使ってみました。
`:<range>GoogleTranslate`ってすると、指定行の内容の翻訳結果を別バッファに表示してくれます。

ただ、これを使うと、Webで翻訳する場合と違う結果になってしまいます。APIの仕様でも変わったのかと原因を調べようとしたのですが、後述する別の方法で解決してしまいそのままです。

後、Google Cloud Platformのアカウントを作成してAPI keyを取得しないといけないのも地味にハードルが高いです。決済情報の登録も必要ですし。

## その2 [translategoogle.vim](https://github.com/daisuzu/translategoogle.vim)を試す
次に、translategoogle.vimを試してみました。[こちらの紹介記事](http://daisuzu.hatenablog.com/entry/2013/12/22/153834)の通り、Google翻訳用のバッファで入力した内容が随時翻訳されます。

こっちのプラグインはWebと同じ翻訳結果になってくれる（というかそもそも、APIじゃなくてWebの結果をパースしてるから当たり前な）ので、これを使えば捗りそうです。……って終わればよかったのですが、普段使いのPCの画面サイズが1366x768と貧弱なうえ、tmuxで縦に複数分割した状態で常用しているので、バッファがたくさん開くこのプラグインは手に馴染みませんでした。

# 最終的に…
## [translate-shell](https://github.com/soimort/translate-shell)を使うことにしました
ちょっと思考を変えて、シェルから使える何かはないかと探していたら、[translate-shell](https://github.com/soimort/translate-shell)というものを見つけました。

```shell-session
% trans 翻訳したい文字
翻訳したい文字
(Hon'yaku shitai moji)

Characters you want to translate

Translations of 翻訳したい文字
[ 日本語 -> English ]

翻訳したい文字
    Characters you want to translate, Character you want to translate
% trans -b 翻訳したい文字
Characters you want to translate
%
```

こんな感じで使えます。

後はこれをvimから使えるように設定したらばっちりですね、ってことで以下のようにしてみました。あまりバッファを開きたくないので、`:<range>!`を使って翻訳結果は直接差し替える方針です。

```vim:.vimrc
" translate-shellを使う
let s:trans_cmd = 'trans'
let s:trans_opt = '-b --no-ansi -e google'
exec 'command! -nargs=0 -range Trans <line1>,<line2>!' . s:trans_cmd . ' ' . s:trans_opt
nnoremap <silent> <F3> :Trans<CR>
```

翻訳したい行で<kbd>F3</kbd>を押すと、その行の内容が翻訳結果に差し変わってくれます。この例では私の環境でたまたま空いていた<kbd>F3</kbd>を使ってますが、好みのキーに割り当ててください。
また、`:'<,'>Trans`で選択した複数行の翻訳もできます。この`Trans`というコマンド名は上述のgoogletranslate-vimでも定義されているので、どちらも使用する場合は適宜コマンド名を変えてください。

これで、`git commit`してVimが起動したら、日本語でコメントを入力して<kbd>F3</kbd>を押して翻訳。内容が気に食わなかったら、いったんUndoして日本語を微調整して再度<kbd>F3</kbd>。満足いく内容になったら、`:wq`で保存＆終了。
そんな感じに使えるので非常に満足しています。

## [translate-shell](https://github.com/soimort/translate-shell)で嵌ったこと
### masterブランチは古い
translate-shellにおけるmasterブランチは過去の遺物のようです。
利用するならstableブランチ(安定板)か、developブランチ(開発版)を利用するのがよさそうです。

### プラグインマネージャとの連携はちょっと注意
shellで使うコマンドは極力[zplug](https://github.com/zplug/zplug)で導入するようにしているのですが、いつも通りに``zplug 'soimort/translate-shell', at:stable``ってしたところ、Vimから``trans``コマンドが使えませんでした。

これは、コマンドの登録にaliasを使っているためのようです。

```zsh:translate-shell.plugin.zsh
#!/usr/bin/env zsh
alias trans="$(dirname $0)/translate"
```

[`:!`のヘルプ](http://vim-jp.org/vimdoc-ja/various.html#:!)を見ると、

> Unix ではシェルを非対話型モードで起動します。対話型
> モードで起動したい場合 (aliasを使いたい場合など) は、
> 'shellcmdflag' に "-ic" を設定してください。

とあるので、デフォルトの設定ではaliasは使用できないようです。
ヘルプの通りにshellcmdflgを設定してもよかったのですが、translate-shellではmakeを使ってtransコマンドを作成することもできるので、``.zshrc``を以下のようにしてtransコマンドを作ってあげることにしました。

```zsh:.zshrc
zplug "soimort/translate-shell", \
    at:stable, as:command, use:"build/*", \
    hook-build:"make build &> /dev/null"
```

なお、プラグインマネージャを使っていない場合はtranslate-shell.plugin.zshの記述も関係ないので、普通に``sudo make install``で大丈夫だと思います。/usr/bin以外にインストールしたいなら``make PREFIX=/path/to/dir make install``ですね。

# 終わりに
英語力が圧倒的に足りない私ですが、新しいGoogle翻訳さんの力を使うことでそれなりの英語コメントによるコミットができるようになりました。（……たぶん。英語力が圧倒的に足りないので自分で検証できませんが）
ただ、<kbd>F3</kbd>を押すだけのお手軽翻訳に慣れると、ますます自分で英語を書かなくなりそうなのが残念の極みです。