/var/www/yatta47.log

/var/www/yatta47.log

やったのログ置場です。スクラップみたいな短編が多いかと。

blogsync ではてなブログの記事をローカルで Git 管理する方法

はてなブログの記事って、ブラウザのエディタで書いてそのまま公開、みたいな運用をずっとやってたんですよね。 ローカルにバックアップがないので、なんとなく不安があった。

調べてたら 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 で自動化まで一気に組めます。

ブラウザエディタだけで管理していた記事を、コードと同じ感覚で扱えるようになるのが地味に便利でした。

参考