弊家庭ではSlackを日記ツールとして使っていて、 #diary channelに夫婦1日1投稿ずつ3~4行程度で今日あったこと・子の成長記録・感想などを書く、というのを続けてるんすよね。SNS感覚で気楽に書けて編集も出来るし遡ったり検索したりしやすくて何気に便利だったんだけど 90日に制限されると…😔
— すぎゃーん💯 (@sugyan) July 19, 2022
夫婦で日記の習慣を始めたのは3年ほど前。簡単な記録でもつけておくと後で色々見返せて良いよね、と。
とはいえなかなか習慣をつけるのは難しいなと思って
といったものがあり、色々試行錯誤もした結果 家庭内Slackで日記用channelを作り、1日1投稿ずつ書き込む、という運用にしたのだった。
- 誤爆の心配は少ない (少なくとも妻は家庭以外でSlackを使わないし)
- 専用channelで投げていくだけなので他の話題と混ざったりもしない
- 気軽に書けて編集なども簡単
- 検索もそれなりにできて過去の記録を見返しやすい
ということで気に入っていた。
ところが90日以上前のものが見られなくなるということで移行を検討した。 べつに課金すれば良いだけではあるのだけど、せっかくならバックアップも兼ねて別のブログに同期しておいたら良いのでは、と。
ので、過去の日記投稿たちをSlackから取得してブログ記事として投稿していく、というものを作った。
なんとなく書きやすいのはPythonかな?と思ってPythonで。ライブラリも充実していて数十行程度でそれぞれのロジックが書けてラクだったので正解だったと思う。
APIでの取得と投稿
SlackのAPIからchannelの履歴を遡り取得していく。 text要素だけ取ると絵文字が :bow:
などで表示されてしまうので rich_text_section
から復元していってSlackに書かれた通りの文字列でとれるようにした。
同期先のブログははてなブログにした(自分が使っていて多少は勝手が分かるので)。自分と妻のアカウントだけが見られる限定公開にして、そこに AtomPub のAPIで投稿していく。 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年くらい続いているわけだし しばらくは続くんじゃないかな? 子育てで大変な日々も数年後には笑って読み返せるといいな