Kindle向けの電子書籍を執筆していると、度々Kindleによる実機確認をしたいものです。Kindleによる実機確認は、MOBIファイルをKindleに転送するだけで、パーソナルドキュメントとして、すぐに閲覧できます。そして、転送方法は次の2種類が用意されています。
- Send to Kindle(主にメールの添付ファイルで送付)
- USB接続
この2つの中だと、私としては、ケーブルを接続しなくて済むSend to Kindleをよく利用していたのですが、段々、何度もメールを送信するのが億劫になってきてため、これを効率よく行なえる方法がないか調べたところ、便利な方法が見つかったので、紹介したいと思います。
最初、コマンドラインでメールを送信するスクリプトを作成しようと考えていたのですが、よく調べたところ、kindlemailという何とも目的にマッチしていそうなRuby Gemを発見したので、これを導入することにしました。
kindlemailの導入
それでは早速、kindlemailの導入方法を解説していきます。
kindlemailのインストール
kindlemailはGemパッケージとして提供されているため、gem install kindlemailを実行するだけでインストールできます。
$ gem install kindlemail
Fetching: thread_safe-0.3.4.gem (100%)
Successfully installed thread_safe-0.3.4
Fetching: minitest-5.4.2.gem (100%)
Successfully installed minitest-5.4.2
(中略)
Done installing documentation for activesupport, gmail-mailer, gmail_xoauth, i18n, kindlemail, mail, mime-types, minitest, oauth, polyglot, thread_safe, treetop, trollop, tzinfo after 40 seconds
14 gems installed
GmailのOAuthトークンを作成する
サードパーティのソフトウェアからGmailを利用してメールを送信する場合、OAuthトークンを取得する必要があります。
kindlemailのREADMEには、google-mail-xoauth-toolsというpythonスクリプトを利用する方法が紹介されていますので、これを利用してみたいと思います。
google-mail-xoauth-toolsのYou can download xoauth.pyのリンクからダウンロードして、ターミナルからxoauth.pyを実行します。--user引数には、あなたのメールアドレスを指定しましょう。
$ python xoauth.py --generate_oauth_token --user=learning.adult.entertainment@gmail.com
oauth_token_secret: xxxxxxxxxxxxxxxxxxxxxxxx
oauth_token: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
oauth_callback_confirmed: true
To authorize token, visit this url and follow the directions to generate a verification code:
https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
Enter verification code: ここに確認コードを入力
すると、To authorize token, visit this url and follow the directions to generate a verification code:という行が出力されますので、1度ターミナルでの作業を中断して、次の行に表示されているURL(https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyの部分)を開きます。

--user引数のメールアドレスに間違えがなく、あなたのGoogleアカウントに正しくログインされていれば、上記のページが表示されますので『アクセスを許可』のボタンを押して、アプリケーションを承認します。
無事に承認が完了すると、確認コード(zzzzzzzzzzzzzzzzzzzzzzzzの部分)が表示されます。

確認コードをコピーして、再びターミナルに戻りEnter verification code:の後ろに貼り付けて、エンターを実行します。
問題なく確認コードが入力されていれば、次のようにoauth_tokeとoauth_toke_secretが表示されます。
Enter verification code: zzzzzzzzzzzzzzzzzzzzzzzz
oauth_token: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
oauth_token_secret: bbbbbbbbbbbbbbbbbbbbbbbb
こちらのトークンは次のkindlemailのセットアップで利用するので、無くさないようにしましょう。
kindlemailのセットアップ
GmailのOAuthトークンを取得できたら、次はkindlemailのセットアップに移ります。こちらも全てターミナルでの作業になります。
まずは、kindlemail --setupコマンドを実行します。すると、まずはSend-to-Kindle Eメールアドレスの入力を求められますので、入力してエンターを実行します。
$ kindlemail --setup
kindlemail 0.2.8. Written by djhworld. https://github.com/djhworld/kindlemail
-------------------------------------------------------------------------------
kindlemail setup
This will overwrite any settings you have set previously
-------------------------------------------------------------------------------
Kindle address to set as your default address> ここにSend-to-Kindleのアドレスを入力
Send-to-Kindle Eメールアドレスを入力すると、続いてはOAuthトークンと秘密トークン、そしてあなたのメールアドレス(パーソナル・ドキュメントの承認済みEメールアドレス)を入力して、それぞれエンターを実行しましょう。
Kindle address to set as your default address> Send-to-Kindleのアドレス
Setting up kindle credentials...Complete!
-------------------------------------------------------------------------------
Gmail Authentication Settings
To get a valid anonymous token, use the instructions located here
http://code.google.com/p/google-mail-xoauth-tools/wiki/XoauthDotPyRunThrough
-------------------------------------------------------------------------------
OAUTH Token> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
OAUTH Token Secret> bbbbbbbbbbbbbbbbbbbbbbbb
Your gmail address> learning.adult.entartainment@gmail.com
Setting up email credentials...Complete!
kindlemail setup complete
kindlemail setup completeというテキストが表示されれば、セットアップ完了となるのですが、1点、このセットアップにはバグが存在するため、手動で修正する必要があります。
kindlemailの設定修正
早速、kindlemailを実行すると、次のようなエラーが表示されます。
$ kindlemail learning-fuzoku-sample.mobi
kindlemail 0.2.8. Written by djhworld. https://github.com/djhworld/kindlemail
Error occured: -
Error parsing /Users/akinomurasame/.kindlemail/.email_conf
kindlemail --setupの設定は、~/.kindlemail/ディレクトリ内にYAMLファイルとして保存されているのですが、~/.kindlemail/.email_confファイルに書かれている、最後に入力したあなたのメールアドレスのラベルの後ろのコロンが抜けているため、これを修正する必要があります。
email learning.adult.entartainment@gmail.com
email: learning.adult.entartainment@gmail.com
こちらは、PRが出ているのですが、まだ取り込まれていないようです。
さて、これでkindlemailの導入は完了が完了しました。
kindlemailを利用する
kindlemailの利用はとても簡単です。kinldemailコマンドに送りたいファイルを与えてあげるだけ、Kindleにファイルを送信してくれます。
$ kindlemail learning-fuzoku-sample.mobi
kindlemail 0.2.8. Written by djhworld. https://github.com/djhworld/kindlemail
Preparing learning-fuzoku-sample.mobi to be sent to learning.adult.entartainment@gmail.com
Adding attachment: /Users/akinomurasame/.kindlemail/.staging/b4474884a324c80933f265e6a0c9e123_988325.mobi (2584.3994 kb)
Sending message....sent!
learning-fuzoku-sample.mobi was successfully sent to Send-to-Kindleのアドレス
なお、kindlemailは送信したファイルを管理してくれています。
$ kindlemail --show-history
kindlemail 0.2.8. Written by djhworld. https://github.com/djhworld/kindlemail
*** History of files sent using kindlemail (use the -d option to clear the history) ***
Send-to-Kindleのアドレス
----------------------------------------------------------------------------------------------------
=> learning-fuzoku-sample.mobi was sent on Thu 06 Nov 15:04:37
----------------------------------------------------------------------------------------------------
このため、1度送信したものと同じ名前のファイルを送ろうとすると、エラーになります。そこで、同じ名前のファイルを送る場合は、--forceオプションを利用します。
$ kindlemail learning-fuzoku-sample.mobi
kindlemail 0.2.8. Written by djhworld. https://github.com/djhworld/kindlemail
This file was sent to Send-to-Kindleのアドレス on 2014-11-06 15:04:37 +0900
This file has already been sent to Send-to-Kindleのアドレス. Use the --force (-f) option if you want to resend it
(--forceオプションがないと失敗する)
$ kindlemail learning-fuzoku-sample.mobi -f
kindlemail 0.2.8. Written by djhworld. https://github.com/djhworld/kindlemail
Preparing learning-fuzoku-sample.mobi to be sent to Send-to-Kindleのアドレス
Adding attachment: /Users/akinomurasame/.kindlemail/.staging/b4474884a324c80933f265e6a0c9e123_124893.mobi (2584.3994 kb)
Sending message....sent!
learning-fuzoku-sample.mobi was successfully sent to Send-to-Kindleのアドレス
(--forceオプションを付けると無事に送信されます)
$ kindlemail --show-history
kindlemail 0.2.8. Written by djhworld. https://github.com/djhworld/kindlemail
*** History of files sent using kindlemail (use the -d option to clear the history) ***
Send-to-Kindleのアドレス
----------------------------------------------------------------------------------------------------
=> learning-fuzoku-sample.mobi was sent on Thu 06 Nov 15:12:21
----------------------------------------------------------------------------------------------------
(履歴が書き変わります)
まとめ
kindlemailを導入することで、コマンドラインから簡単にKindleへファイルを送ることができるようになり、実機確認がとても容易に行なえるようになりました。
私は、校正段階ではrakeコマンドを使って、Re:VIEWとkindlegenによってMOBIをビルドするのと同時に、kindleにファイルを送って、移動時間を使って実機確認を行なっていました。
こういったノウハウについても、引き続き紹介していきたいと思いますので、どうぞ宜しくお願いします。