はてなブログの記事って、ブラウザのエディタで書いてそのまま公開、みたいな運用をずっとやってたんですよね。 ローカルにバックアップがないので、なんとなく不安があった。
調べてたら blogsync というツールを見つけて、「あ、これで解決するな」となりました。
blogsync とは
x-motemen/blogsync という Go 製の CLI ツールです。 はてなブログの AtomPub API を使って、記事をローカルの Markdown ファイルとして同期できます。
pull で記事を取得、push でローカルの変更をブログに反映、という双方向の操作ができます。
エンジニアがよく使う「Git で管理したい」という需要に応えてくれるツールです。
インストールと設定
Go がインストールされていれば go install で入ります。
go install github.com/x-motemen/blogsync@latest
設定ファイルは ~/.config/blogsync/config.yaml に置きます。
yatta47.hateblo.jp: username: yatta47 password: {AtomPub API キー} default: local_root: /path/to/blog
password には AtomPub API のキーを使います。はてなの「アカウント設定 > API キー」から取得できます。
はてなブログの「設定 > 詳細設定 > AtomPub」に表示されるのはエンドポイント URL です。
pull で記事を取得する
設定が済んだら pull を実行するだけです。
blogsync pull yatta47.hateblo.jp
local_root で指定したディレクトリに、こういう構造でファイルが作られます。
yatta47.hateblo.jp/
└── entry/
└── 2026/
└── 03/
└── 20/
└── 120000.md
ファイルのパスはエントリの URL に対応して決まります。上の例は permalink がデフォルトの日付形式の場合です。カスタム URL を設定した記事は異なるパスになります。 各ファイルにはタイトル、カテゴリ、公開日時などの frontmatter が付いています。
--- Title: 記事タイトル Date: 2026-03-20T12:00:00+09:00 URL: https://yatta47.hateblo.jp/entry/2026/03/20/120000 EditURL: https://blog.hatena.ne.jp/yatta47/yatta47.hateblo.jp/atom/entry/XXXXXXXX Draft: false --- 記事本文...
push でブログに反映する
ローカルで記事を編集したら push で反映できます。
blogsync push yatta47.hateblo.jp/entry/2026/03/20/120000.md
指定したファイルを 1 件ずつ API で更新するので、他の記事には触れません。
エディタで書いて git commit して push、という流れが作れます。
はてなの公式エクスポートとの違い
はてなブログには記事のエクスポート機能がありますが、blogsync とは性質が違います。
公式エクスポートは MT フォーマットで全記事を一括取得するもの。バックアップ目的には使えますが、ファイルが 1 本にまとまっていて差分管理には向いていません。
blogsync は記事ごとにファイルが分かれていて、双方向で同期できて、自動化もできる。継続的な管理フローとして使えるのが違いです。
GitHub Actions で自動化する
公式に HatenaBlog Workflows Boilerplate というテンプレートが用意されています。 push をトリガーに blogsync でデプロイするような GitHub Actions のワークフローが入っています。
テンプレートが用意されていますが、Secrets 設定や初回の pull & push など数ステップの初期作業はあります。
注意点
いくつか気になるところもあります。
画像ファイルの実体は取得できません。本文中の img タグや URL テキストは Markdown に残りますが、画像ファイルそのものは f.hatena.ne.jp に乗ったままです。
Source of Truth をどこにするか、決めておく必要があります。 ブラウザのエディタで直接編集してしまうと、ローカルと乖離します。「ローカルのファイルが正」と決めて、ブラウザエディタは読み取り専用にする運用が安全です。
API キーが設定ファイルに平文で入ります。
~/.config/blogsync/config.yaml の権限を絞るか、CI/CD で使う場合はシークレット経由で渡す必要があります。
chmod 600 ~/.config/blogsync/config.yaml
まとめ
blogsync を使うと、はてなブログの記事をローカルの Markdown ファイルとして Git 管理できます。 pull で取得、push で反映、GitHub Actions で自動化まで一気に組めます。
ブラウザエディタだけで管理していた記事を、コードと同じ感覚で扱えるようになるのが地味に便利でした。