BlueNoteをWriteFreelyのフォークにした
#WriteFreely #Fediverse #ActivityPub #サーバーいじり #ChatGPT #VibeCoding
経緯
これまで個人ブログとして WriteFreely を運用していたが、ActivityPub周りの不具合修正や、投稿URLを日時ベースにするカスタマイズなど、独自の変更が少しずつ増えてきた。
当初は本番環境への個別パッチとして扱っていたものの、今後のWriteFreely本家への追従や変更管理を考え、WriteFreely v0.17.2をベースとしたForkとして正式に管理することにした。
Forkの名前は BlueNote とした。
今日やったこと
回帰テストの追加
まず既存の独自変更について回帰テストを追加し、今後upstreamを更新してもBlueNote固有の動作を確認できるようにした。
現在のBlueNoteには、主に以下の変更が入っている。
- ISO 8601形式で出力される投稿日時のUTC化
- ActivityPub
Articleのsummaryをプレーンテキスト化 - 空のfollowers / following collectionでpaginationを正しく終了
- 日時ベースの投稿スラッグ
日時スラッグを設定可能に
これまで特定ブログ向けに実装していた日時ベースのスラッグ生成を汎用化した。
config.ini から以下のように設定できる。
[app]
datetime_slugs = true
datetime_slug_timezone = Asia/Tokyo
datetime_slugs で機能のON/OFFを切り替えられ、datetime_slug_timezone
にはIANA timezoneを指定できる。
日時には記事の保存された公開日時である Created
を使用する。既に生成済みのURLについては、後から公開日時やtimezone設定を変更しても勝手に変更しない。
プロジェクト文書の整理
README、CONTRIBUTING、SECURITY、AUTHORS、Issue / Pull Request templateなども確認した。
元々はWriteFreely本家の内容がそのまま残っていたため、BlueNoteが
WriteFreelyをベースとした非公式Fork
であることが分かるように整理した。
また、本家のCLAやFundingなど、BlueNoteにはそのまま適用できないものも削除・整理した。
BlueNote独自のバージョン管理
BlueNoteとWriteFreely本家のバージョンを分離して管理する仕組みも追加した。
現在は、
- BlueNote:
0.1.0 - WriteFreely base:
0.17.2
としている。
CLIでは次のように表示される。
BlueNote 0.1.0 (based on WriteFreely 0.17.2; commit 0f67085)
NodeInfoについては、Fediverse上での既存の互換性を考えてsoftware名は当面
writefreely のままとし、versionを
0.17.2+bluenote.0.1.0
としてForkであることを識別できるようにした。
Web画面のfooterにも BlueNote 0.1.0 とソースコードへのリンクを表示するようにした。
BlueNote 0.1.0を本番投入
ここまでの変更を本番サーバーでビルドし、実際に稼働中のブログへ投入した。
NodeInfoでも、
software.name = writefreely
software.version = 0.17.2+bluenote.0.1.0
となっていることを確認。
これで、これまで単なるWriteFreelyへのローカルパッチだったものが、ひとまず BlueNote 0.1.0 として動き始めた。
そしてサイドバーが消えた
......と、ここまで順調だったが、本番投入後にブログを確認するとサイドバーが消えていた。
調べてみると、サイドバーそのものを生成しているJavaScript、
/local/blue-note.js
は残っていた。JSONデータやCSSも無事だった。
しかし、以前の本番環境ではテンプレートへ手作業で追加していた、
<script src="/local/blue-note.js?v=12"></script>
という読み込み部分が、今回Gitで管理している新しいテンプレートへ更新したことで消えていた。
この一行を現行テンプレートへ戻してWriteFreelyを再起動し、無事復旧。
今後
今回のトラブルによって、本番環境にしか存在しないカスタマイズがまだ残っていることも分かった。
今後は、
- BlueNoteそのものに含める機能
- 自分のブログ固有のUIや設定
- 本番サーバー側の運用設定
を整理して、BlueNote本体とインスタンス固有カスタマイズを明確に分離して管理していきたい。
とりあえず今日は、WriteFreelyへのローカルパッチ群だったものを「BlueNote 0.1.0」という一つのForkとして整理し、本番で動かすところまで到達した。