Fuzoku実践入門ブログ

Amazon で好評発売中の『Fuzoku実践入門』に関するエピソードなどを紹介するブログです。

kidlemailを使ってコマンドラインからKindleへファイルを送る

Kindle向けの電子書籍を執筆していると、度々Kindleによる実機確認をしたいものです。Kindleによる実機確認は、MOBIファイルをKindleに転送するだけで、パーソナルドキュメントとして、すぐに閲覧できます。そして、転送方法は次の2種類が用意されています。

  • Send to Kindle(主にメールの添付ファイルで送付)
  • USB接続

この2つの中だと、私としては、ケーブルを接続しなくて済むSend to Kindleをよく利用していたのですが、段々、何度もメールを送信するのが億劫になってきてため、これを効率よく行なえる方法がないか調べたところ、便利な方法が見つかったので、紹介したいと思います。

コマンドラインCLI)で使える kindlemail

最初、コマンドラインでメールを送信するスクリプトを作成しようと考えていたのですが、よく調べたところ、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-toolsYou 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の部分)を開きます。

Google OAuth認証承認ページ

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

無事に承認が完了すると、確認コード(zzzzzzzzzzzzzzzzzzzzzzzzの部分)が表示されます。

Googleアカウント確認コードページ

確認コードをコピーして、再びターミナルに戻り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の後ろのコロンが抜けている

# 修正後
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にファイルを送って、移動時間を使って実機確認を行なっていました。

こういったノウハウについても、引き続き紹介していきたいと思いますので、どうぞ宜しくお願いします。