ジェイミー・ルービンの「毎日書いた量が自動的に記録される」スクリプトを導入する(1)

以下の記事をご覧になった方は多いかもしれません。

Evernoteと自動化を駆使してペーパーレスに執筆するSF作家、ジェイミー・ルービンの仕事術(ライフハッカー[日本版])

米国のEvernoteアンバサダー、ジェイミー・ルービンさんの執筆環境が紹介されています。
※ちなみに、この「HOW I WORK」シリーズは面白い記事が多いです。

私が注目したのは、以下の部分。

書き物にはすべて、「Google Docs」を使っています。シンプルかつ拡張性があるのが好きですね。自分で書いたGoogle App Script(GitHubにて入手可能)を使うことで、毎日書いた量が自動的に記録され、書いた内容はEvernoteに自動転送されます。ですから、いつ何を書いた(消した/変えた)のか、すべて正確に話すことができます。


「毎日書いた量が自動的に記録される」
「書いた内容はEvernoteに自動転送される」

面白そうな匂いがぷんぷん漂ってくるではありませんか。仕事手法の改善は、トラッキングが第一歩。Evernoteへの自動転送は、他のツールでも実行可能ですが、書いた量が自動的に記録されるのは独特ですし、ログとして面白いデータになりそうです。

どんなスクリプト?

というわけで、早速GitHubを覗いてみることに。

google-docs-writing-tracker(GitHub)

ざっくりとした理解ですが、

  • Googleドキュメントで文章を書くようにする
  • Googleスプレッドシートに日付+文字数のログが残る
  • 書いた文章は毎日Evernoteにメール送信される

という構成のようです。

Google&Evernoteアカウントがあれば、誰でも始められるでしょう。

環境作り

実装については、GitHubに丁寧な解説があるので、それを参照すれば問題ないと思いますが簡単にまとめておきましょう。

  • スプレッドシートの準備
  • フォルダ構成の準備
  • Google App Scriptの導入
  • スクリプトをコピペ
  • カスタマイズ
  • トリガーの設定

スプレッドシートの準備

まずは、ログを残すためのスプレッドシートです。

  1. 文字数のログを残すためのスプレッドシートを作成する
  2. 最初のタブを”Writing”にリネームする
  3. そのタブ内のA1を”Date”に(※)
  4. そのタブ内のB1を”Words”(※)
  5. そのスプレッドシートのURLから「file ID」を抜き出しておく

※A1&B1
screenshot

「file ID」は、そのスプレッドシートを開いたときのURLが

https://docs.google.com/spreadsheets/d/1FtcCkZWC5GFkQQeCkEft0FNyrDv25fm4f9YNexVBKS0/edit#gid=0

であれば、

1FtcCkZWC5GFkQQeCkEft0FNyrDv25fm4f9YNexVBKS0

の部分になります。これは後ほど、Google App Scriptを作成する際に使いますので、どこかにコピペでもしておくとよいでしょう。

フォルダ構成の準備

スプレッドシートが完成したら、Googleドライブ上にフォルダを作成しましょう。

まず、文章を保存しておくためのフォルダ「Sandbox」を作成し、さらにそのサブフォルダとして「Earlier」を作成します。それが出来たら、またルートに戻って、スクリプトファイルを保存しておく「Script」を作成しましょう。

screenshot

Google App Scriptの導入

では、本丸のGoogle App Scriptです。といっても、基本的にコピペするだけなので、気負わずにいきましょう。

もし、まだ一度も「Google App Script」を使われたことがないならば、最初にそれを導入する必要があります。

「作成」→「アプリを追加」→「”Script”で検索」すれば、見つけられるでしょう。

導入に成功すれば、「作成」メニューが次のようになっているはずです。

screenshot

スクリプトをコピペ

では、先ほど作成したScriptフォルダに、新しいスクリプトを作成しましょう。

「空のプロジェクト」を選択し、

screenshot

ファイルの名前は「WritingStats」にします。

screenshot

最初に開かれている画面は、「コード.gs」というファイルです。カタカナ感が落ち着かないので、「code.gs」とリネームしておきましょう。

screenshot

screenshot

で、そのcode.gsに、上のGitHubにある「writing_stats.gs」を丸々コピペします。これには後ほど手を入れますが、それは後回しにして、次に進みましょう。もう一つのコードを追加します。

「ファイル」→「新規作成」→「スクリプトファイル」を選択。

新しいファイル名は、「diff.gs」としてください。以下のようになるはずです。

screenshot

この新規作成されたdiff.gsに、GitHubにあるdiff.gsをコピペします。

これでスクリプトの準備は整いました。後はカスタマイズです。

カスタマイズ

最初にコピペした、code.gsをご覧ください。頭の部分に、設定変更箇所が記述されています。

設定する部分は、二カ所。

まず、

var en_add = “<EVERNOTE EMAIL ADDRESS>”

この<EVERNOTE EMAIL ADDRESS>に、Evernoteのメール送信用のアドレスを入力してください。

たとえば、

var en_add = “rashita.20140319@m.evernote.com”

みたいな感じになります。

もう一つが、

var QS_FILE = “<file id>”;

この<file id>に、先ほど見つけたスプレッドシートのfile IDを入力しましょう。

たとえば、

var QS_FILE = “1FtcCkZWC5GFkQQeCkEft0FNyrDv25fm4f9YNexVBKS0”;

となります。

これ以外に以下のような箇所がありますが、これはフォルダ構成を指定するものなので、上記の通りに作成してきたのなら変更しなくてもOKです。

var PREV_FOLDER = “Sandbox/Earlier”;
var SANDBOX = “Sandbox”;

これで、スクリプトの設定は終わりました。

あとは、トリガーの設定です。

トリガーの設定

上のようなスクリプトを作成しても、そのままでは実行されません。よく漫画なんかで、プログラマが「run」と打って、リターンキーをばしっと叩いてプログラムを作動させるシーンが出てきますが、「実行せよ」と言われない限り、プログラムは動かないのです。

で、上のスクリプトは定期的に(というか毎日)実行されるのが望ましいですね。一日一回、このスクリプトを自分で実行することもできるんですが、Google App Scriptでは、「このタイミングで勝手に実行してね」という設定が可能です。そういうのをトリガーと呼びます。

「WritingStats」はまだ表示された状態ですか?もし閉じてしまったのなら、もう一度開きましょう。

メニューにある「リソース」から「現在のプロジェクトのトリガー」を選択します。そして、新しいトリガーを追加。

そこで、「getDailyWordCount」を、「時間主導型」「日タイマー」「午後11〜午前0時」に設定してください。

screenshot

最後の時間は別に何時でも結構です。自分の中での「一日」の切り替え時間を選んでください。

これで、一日一回、code.gsに含まれている「getDailyWordCount」部分が自動的に実行されます。すると、書いた量が自動的に記録されたり、Evernoteに送信されたりするわけです。便利ですね。

あと、コードは忘れず保存(セーブ)しておきましょう。

さいごに

と、長らく書いてきましたが、これは前振りです。

上の設定をした後で、実際にGoogleドキュメントで文章を書いたのですが、なにやら上手くいきません。Evernoteへの送信は大丈夫なのですが、「一日に書いた量」がまったく合わないのです。とにかく、量が圧倒的に少ない。

う〜ん・・・、と悩んでいたところ、先ほどのライフハッカーさんの記事をもう一度見直すと理由が分かりました。

ここ219日、1日も書くことを欠かしていません。過去365日で書かなかった日はたったの2日! データによると、私の執筆ペースは20分で500ワード。1日の執筆時間は20分。子どもたちを寝かしつけたあとが多いようです。執筆量はどんどん増え、これを始めてからの1年間で、31万ワードに達しています。

31万ワード。すごい数字なんですが、単位に注目です。文字数じゃなくて、ワード数なんですよね。そういえば、英語圏ではワード数が文章量の目安になるのでした。

そう思ってスクリプトをじっと見てみると、単純に文字数を数えているのではなく、なにやら処理が施されています。

日本語で文章を書く場合は、やはり文字数のログが欲しいところ。というわけで、次回はそのためのカスタマイズです。

ジェイミー・ルービンの「毎日書いた量が自動的に記録される」スクリプトを導入する(2)

コメントを残す