はてなブログとblogsyncの歴史
ヘンリーでVP of Engineeringを務めるSongmuです。このエントリーは株式会社ヘンリー Advent Calendar 2023 、11日目の記事です。
はてなブログとblogsync
はてなブログにはAtomPub APIという、はてなブログをAPIで操作できる機能があります。これは実は結構古くからある機能で、2013年にリリースされています。当時のはてなインターン生によるもので、moznionさん、krrrrさんが担当されたようです。歴史を感じますね。
そのAtomPub APIを利用し、はてなブログを管理するためのCLIツールとして、当時はてな社のチーフエンジニアで現CTOのmotemenさんが「個人で」開発したGo製のOSSがblogsyncです。これは2014年にリリースされています。社員が自社サービスのユーザーであり、社員が趣味の個人開発でそのサービス利用のための便利ツールを作るという流れは、はてならしくて好きです。
blogsyncのメンテナ引き継ぎ
このblogsync、2015年にコミット権を付けてもらい、私Songmuが実質メインで細々とメンテナンスを続けています。以下のスクリーンショットがその様子です。ちなみに、同様にmotemenさんから私がメンテナンスを引き継いだ他のGo製のOSSにghqがあります。
ちなみに、blogsync
は当初、はてなブログに限らない多くのブログサービスのコンテンツをローカル管理することを目論んでおり、その命名になったと聞きました。はてなブログはあくまで最初の対応サービスという位置づけということです。結果として、今ははてなブログにフォーカスするツールになりましたが、このあたりはmotemenさんらしい壮大な思惑を感じます。ghqが実はGit以外の数多くのVCSに対応しているように。
私がblogsyncに手を入れ始めた経緯としては、当時携わっていたMackerelというサービスのドキュメント類をはてなブログでホストしていたため、それらをバージョン管理したかったからというのが理由の一つにあったと記憶しています。
そのあたりの話はMackerelドキュメントをGitHubで管理して、はてなブログでホストする ~ Mackerelの場合という2015年の記事に書かれています。ドキュメント管理のためのGitHubリポジトリは当初はprivateリポジトリのみでしたが、その後、公開リポジトリも作られて現在に至ります。
blogsyncのメンテナンスは、2018年に、blogsync v0.9.1をリリースしました というエントリを書いており、ここである程度一段落していました。
完全自動化への道と公式ワークフロー
blogsyncは便利で、多くの企業のエンジニアブログでもご利用いただいています。しかし、ブログ記事の公開、更新を含めたリリース作業には手元でのコマンド作業などの手作業が必要になることが多く、GitHub上での完全自動化には、もう一息な部分がありました。実際各社が事例を出してはくれていたものの、かなり頑張って複雑なワークフローを組まれているという実情がありました。2019年にGitHub Actionsがリリースされ、より自動化への機運は高まっていました。
そしてついに今年、はてなブログ開発チームから、はてなブログ運営をGitHub上で行なうためのテンプレートリポジトリが公開されました。これは内部的にblogsyncが利用されています。このリポジトリに組み込まれているワークフロー利用することで、はてなブログコンテンツのバージョン管理と、運用自動化が捗るようになりました。これは、はてなブログ本体とblogsync両方に細かい機能改善が入ることで実現可能になったものです。
とは言え、blogsync側の機能不足が起因で、ワークフロー側にかなり頑張った実装を強いている部分があります。これを個人的に申し訳なく感じ、それが改めてblogsyncのメンテナンスに意欲を出す契機にもなりました。結果的に、今年はこれまでになく最もblogsyncに手を入れた年になりました。
今年の更新
今年の大きな変更をざっと書き出してみると以下のようなものがありました。ここでは個別の説明は省きますのでリポジトリを参照下さい。別途解説エントリを書くかも知れません。
- 設定へowner指定を可能にし、複数人のブログ運営への対応
- GitHub Actions化
- 固定ページ対応
- 設定ファイル内の相対パスの扱いを仕様変更し、曖昧だった仕様を確定
- 下書きのPreviewURLの自動取得
- ローカルのmdファイルの最終更新日時をmtimeだけではなくgit上の最終更新時刻も考慮するように
- fetchサブコマンドによる個別エントリのリフレッシュ
- エントリーファイルの下書き時の配置位置が固定されるように
- テストコードの拡充
ちなみに、issue番号やblogsyncのバージョンの今年一年での変遷は以下のとおりです。急成長が伺えます。
- issue番号: 57 -> 150
- バージョン: v0.12.2 -> v0.20.1
blogsyncの今後
blogsync側でもGitHub上でのコンテンツ管理をやりやすくするワークフロー機能を開発したいと考えています。それを、はてなブログオフィシャルのワークフローにバックポートするような形にできればと考えています。このあたりは、今年からはてなブログ開発チームとのMTGやコミュニケーションを必要に応じて随時実施することになりましたので、協調しながら進める予定です。
また、はてなブログは日本のサービスですし、blogsyncのissueやpull requestは日本語でも構いません。私も今年から場合によっては無理せず日本語を使うようになりました。日本の開発者にとってとっつきやすくなったと思いますので、貢献もお待ちしています。
https://github.com/x-motemen/blogsync
はてな社からの寄付
はてな社からの正式なアナウンスはまだされておらず、フライングとなりますが、この度、これらのblogsyncへの貢献に対して、GitHub Sponsorsではてな社から寄付をいただきました。この記載については許可をいただいており、後日はてな社からもアナウンスがあると聞いています。(ちなみに、私は以前はてな社の社員でしたが2019年に退職しています。)
とてもありがたいお話で、これを励みにして引き続きOSS貢献を続けていきます。GitHub Sponsorsやghq handbookへの寄付は随時受け付けています。少額で構いませんので是非ご検討下さい。
- https://github.com/sponsors/Songmu
- https://zenn.dev/songmu/books/ghq-handbook
- https://leanpub.com/ghq-handbook
ブログと歴史
当ブログは、はてなブログではないのですが、私のサブブログは、はてなブログでホストしています。また、私が所属しているヘンリーのエンジニアブログも、はてなブログです。これらの運用ではblogsyncを使っているので、特にヘンリーのエンジニアブログについては解説エントリを書きたいと思っています。また、ヘンリー社では絶賛エンジニアを採用しており、僕と一緒にエンジニアブログを書いてくれる人を募集しています。
さて、このエントリを書くにあたって、過去の経緯を調べ直しましたが、blogsyncをメンテナンスし始めてから10年近く経っていることに驚き、そして、それらにまつわるの過去の歴史が、はてなブログ上で数多くホストされ、残存していることに更に驚きました。
改めてブログは良いものだと思うと同時に、コンテンツ残存のために、はてな社が企業努力されていることに、敬意を表したいです。
Happy Blogging!