Slackの家庭内日記をはてなブログに同期していく

夫婦で日記の習慣を始めたのは3年ほど前。簡単な記録でもつけておくと後で色々見返せて良いよね、と。

とはいえなかなか習慣をつけるのは難しいなと思って

  • ブログサービスは最も日付と関連づけて文書が保存されるし良い
  • しかしブログ投稿、となるとちょっと気合いが要る
  • SNS感覚で気軽に投稿できると良い
  • が、下手なSNS誤爆したりすると大変

といったものがあり、色々試行錯誤もした結果 家庭内Slackで日記用channelを作り、1日1投稿ずつ書き込む、という運用にしたのだった。

  • 誤爆の心配は少ない (少なくとも妻は家庭以外でSlackを使わないし)
  • 専用channelで投げていくだけなので他の話題と混ざったりもしない
  • 気軽に書けて編集なども簡単
  • 検索もそれなりにできて過去の記録を見返しやすい

ということで気に入っていた。

ところが90日以上前のものが見られなくなるということで移行を検討した。 べつに課金すれば良いだけではあるのだけど、せっかくならバックアップも兼ねて別のブログに同期しておいたら良いのでは、と。

ので、過去の日記投稿たちをSlackから取得してブログ記事として投稿していく、というものを作った。

なんとなく書きやすいのはPythonかな?と思ってPythonで。ライブラリも充実していて数十行程度でそれぞれのロジックが書けてラクだったので正解だったと思う。

APIでの取得と投稿

SlackのAPIからchannelの履歴を遡り取得していく。 text要素だけ取ると絵文字が :bow: などで表示されてしまうので rich_text_section から復元していってSlackに書かれた通りの文字列でとれるようにした。

同期先のブログははてなブログにした(自分が使っていて多少は勝手が分かるので)。自分と妻のアカウントだけが見られる限定公開にして、そこに AtomPubAPIで投稿していく。 updated を指定すれば日時を指定できるので過去のものも過去の日記として記録されていく。

同期をするタイミングは確定していないけど、複数回実行するし 一度投稿したものも編集する可能性はゼロではないので、既に記事があるものは PUT で更新、まだ無いものは POST で新規投稿する。が 投稿しようとしているものが既に記事あるかどうかを調べるのが難しく、ドキュメントには entry_id がepochと書いてあるけどそうでもない… まぁ投稿日時が一致するようにするから updated に使う日時と同じ epoch の記事が既にあるかどうかを調べれば良いか、ということでそうした。

はてなブログの制限

いざ過去の日記をどんどん記事として投稿していこうとしたら50日ぶんくらいで止まってしまった。 知らなかったけどどうやらはてなブログには「1日100件まで」という上限があるらしい…。 まぁ3年分なら毎日コツコツやっていけば 365 * 3 * 2人 = 2190件 だから約21日で終わるはず。ギリギリ8月中には。。

もっと急ぎで大量の記事を移したかったら インポートできる形式のファイル を作るとかすることになるんだろうか。

定期実行

過去のはボチボチやっていくとして、今後これから書くものをどうするか。 すっかり3年の習慣になっているので今からブログに全面移行するつもりもなくて、日記は今まで通りにSlackで書き続けて、定期的に直近の日記をブログに同期していけば良い、ということにした。

Cloud Functionsにdeployして Cloud Schedulerから定期実行して Pub/Sub経由で自動で定期実行してくれるように設定。これであとは勝手に同期されるようになってくれるはず。

書くときはSlackに書き続け、90日以上前のものは調べたり検索したりできなくなるけど そのときはブログの方で検索すればもっと昔まで遡ることができる、という運用。

まとめ

まだ完全に同期に成功しているわけではないけど、この運用でしばらくやってみる予定。そもそも家庭内の日記がどこまで続くか…という問題もあるけど。まぁ夫婦ともに3年くらい続いているわけだし しばらくは続くんじゃないかな? 子育てで大変な日々も数年後には笑って読み返せるといいな