日記アプリとして Day One を使い始めた。 それ以前も汎用的なノートアプリであるEvernoteとBearで日記をつけていたが、日記は日記に特化したアプリに任せたほうが良さそうだと考え、Day Oneへの移行を決めた。
そこで、過去の日記をDay Oneに取り込みたくなった。公式guideに案内がある。
画像を含めて取り込むには、Day One固有形式のJSONファイルと画像を含むZIPアーカイブが必要らしい。 ↑のdocsページでサンプルのzipをダウンロードできる。
開いてみると、結構に長いJSONが現れる。Day Oneは日記や画像に様々なメタ情報を付与できるようだ。 だが、自分がインポートしたいのは次の情報だけだ。
- 作成日時
- 日記の本文(テキスト)
- 添付画像
この最低限の情報だけを持つDay One のJSONを作ると、以下のようになる。
{ "metadata": { "version": "1.0" }, "entries": [ { "text": "# Test Journal\nThis is image.\n![](dayone-moment://2A69239A5B364348AC64FA7758C2151B)", "creationDate": "2024-01-05T03:02:50Z", "photos": [ { "type": "jpeg", "identifier": "2A69239A5B364348AC64FA7758C2151B", "md5": "0e2d16db35b89f9880ee5b3441659d54" } ] } ] }
まず作成日時。これは creationDate
フィールドに RFC3339 Zulu format(UTC time zone)で入れる。
次に日記の本文。これは text
フィールドにMarkdownがそのまま入る。
そして添付画像は photos
フィールド。ここは少し複雑なので表で解説する。
フィールド名 | 役割 |
---|---|
type |
画像ファイルの形式。 jpeg , png , gif など。 |
identifier |
任意のUUIDv4。Markdown内に埋め込む際に ![](dayone-moment://<identifier>) のように記述する。 |
md5 |
画像ファイルのmd5 hash。これと type を組み合わせた photos/<md5>.<type> がファイルの場所となる。 |
これで最低限のJSONの作り方がわかった。ファイル構造は次のようになる。
├── Journal.json └── photos └── 0e2d16db35b89f9880ee5b3441659d54.jpeg
実際に、この手法で作った Journal.json と photos をZIPに圧縮してDay One のImport > JSON Zip fileでうまく取り込めた🎉。
あとは他のアプリで書いた日記データを上のJSON形式に変換するスクリプトを書けば、データの引っ越しができる。 たとえばBearはTextBundleというMarkdown, JSON, 添付ファイルが一定の規則でまとまったZIPファイルで出力できるので、それを解析してDay OneのJSONに変換するコードを書けばよい。
こういった移行に備えて常に日記は(普及した形式の)テキストデータによるimport/exportに対応したアプリでつけておきたい。