コマンドラインからテキストをジャーナリングできるjrnlというアプリを使用してDayOneのエントリーを読み書きする方法のメモ.

MacであればDayOneオフィシャルのコマンドラインツールが使用できるので,それ以外の端末からDayOneエントリーを操作したい人向けです.

jrnlのインストールと起動

$ sudo pip install jrnl
$ jrnl
Path to your journal file (leave blank for ~/journal.txt): 
Enter password for journal (leave blank for no encryption): 
[Compose Entry] 

初回起動時に保存先とパスワードを聞かれますが無入力で良いです.この設定は~/.jrnl_configにて変更が可能です.

DayOneのエントリーを統合する

~/.jrnl_configjournalsキーを以下のように変更.

"journals": {
    "default": "/path/to/Journal.dayone/"
}

Journal.dayoneはDayOneのエントリーを保存しているフォルダであり,DayOneの同期先によって異なります.例えばDropboxで同期している場合は/path/to/Dropbox/Apps/Day\ One/Journal.dayoneのようになります.

KeyError:'Time Zone'が出るとき

最新のバージョンのDayOneではすべての新規エントリーにタイムゾーンが付与される仕様になっていますが,古いエントリーにタイムゾーンの情報が付与されていないとき,それが原因でエラーが出ます.(jrnl1.4.2で確認.今後修正されるかも)

File "/usr/local/lib/python2.7/dist-packages/jrnl/Journal.py", line 316, in parse
timezone = pytz.timezone(dict_entry['Time Zone'])
KeyError: 'Time Zone'

jrnlを起動した際に上のようなエラーが出るときはsudo emacs /usr/local/lib/python2.7/dist-packages/jrnl/Journal.pyでエディタを開き,以下のように編集します.

def parse(self, filenames):
    """Instead of parsing a string into an entry, this method will take a list
    of filenames, interpret each as a plist file and create a new entry from that."""
    self.entries = []
    for filename in filenames:
        with open(filename, 'rb') as plist_entry:
            dict_entry = plistlib.readPlist(plist_entry)
            try:
                timezone = pytz.timezone(dict_entry['Time Zone'])
  -         except pytz.exceptions.UnknownTimeZoneError:
  +         except :
                timezone = pytz.timezone(util.get_local_timezone())

jrnl1.4.2でできること

  • 最近追加したエントリーを3件表示
      jrnl -n 3
  • すべてのエントリーのタイトルのみ表示
      jrnl -short
  • エントリーを追加
      jrnl
      [Compose Entry]
      # Enterで入力終了
  • 日時とタグを指定してエントリーを追加
      jrnl yesterday: 鳩のえさやり @公園

jrnl1.4.2でできないこと

  • 過去エントリーの編集,削除(jrnlを経由せずにJournal.dayoneフォルダー内の.doentryファイルを直接編集/削除は可能ですが,同期したMacやiPhoneで操作したほうが良いです.)
  • エントリーにメディア(画像,音声など)を追加する
  • エントリーの付与されたメディアを表示する