投稿する

はてなブログ自動投稿ツールキット

はてなブログへの記事作成から画像生成、投稿までを一気通貫で自動化するツールキットです。Gemini APIを活用したアイキャッチ画像の生成や、はてなフォトライフへの直接アップロードに対応しており、外部ストレージを使わずにリッチな記事を公開できます。 特定のテーマに沿った長文執筆に加え、AI特有の定型表現を検出する検閲機能や、1日の投稿本数制限、過去記事との重複チェック機能を備えています。単なる自動投稿にとどまらず、質を担保した記事を継続的に投入することで、自サイトへの自然な被リンク獲得とドメインパワーの向上を支援します。 Claude Codeなどのエージェントから「記事を書いて投稿して」と指示を出すだけで、ファクトチェックからセルフレビューまでを自律的に実行する、エンジニアのサイト運営に最適な構成です。
zip未取得

はてなブログ自動投稿ツールキット 🐢

はてなブログに AI で記事と画像を作って自動投稿し、本文から自分のサイトへリンクを張って、

サイトの検索評価(ドメインパワー)を地道に育てるためのツールキットです。

  • ✅ 記事の下書きから アイキャッチ画像・図解の生成 まで一気通貫
  • ✅ 画像は はてなフォトライフ(はてな公式の画像置き場)に直接アップ。外部サービス不要
  • ✅ 「AI っぽい文章」チェック・1日1本制限・重複チェックで 質と安全を担保
  • ✅ Claude Code に「記事書いて投稿して」と頼むだけでも、コマンドを手で打っても使える
被リンクの大原則: リンクを張るためだけの薄い記事は逆効果です。
「読んで役に立つ記事」を書いて、その中で自然にリンクするのがコツです。

---

📋 はじめに用意するもの

必要なもの説明取得先
パソコンMac か Linux。Windows は WSL か Git Bash—
はてなブログ無料で作れますhttps://hatenablog.com/
Google アカウント画像生成(Gemini)の鍵を取るのに使うhttps://aistudio.google.com/
Mac なら最初から使えるはずですが、jq というツールだけ追加が必要な場合があります(手順は後述)。

---

🚀 セットアップ(順番にやれば10〜15分)

ステップ1: ファイルを置く

この zip を好きな場所に展開します。例えば書類フォルダに置くなら、ターミナルで:

cd ~/Documents/hatena-auto-poster
「ターミナル」は Mac の場合、Launchpad で「ターミナル」と検索すると出てきます。
以降のコマンドは、すべてこのフォルダの中で実行します。

ステップ2: 必要な道具が入っているか確認

下のコマンドをそのままコピーして実行してください:

for cmd in bash curl python3 jq base64; do
  command -v $cmd >/dev/null && echo "✅ $cmd" || echo "❌ $cmd が無い";
done

❌ jq が無い と出たら、次で入れます(Mac の場合):

# Homebrew が無ければ先に https://brew.sh/ja/ の1行をコピーして実行
brew install jq

ステップ3: はてなブログの「API キー」を取る

これはログインパスワードとは別物の、自動投稿専用のカギです。

  1. はてなブログにログイン
  2. 右上のメニュー →「設定」
  3. 左メニューの一番下「詳細設定」を開く
  4. ページ下のほうにある「AtomPub」の欄を見る
  5. そこに表示されている「API キー」をコピー(後で使います)

同じ画面で、自分の はてな ID(例: yamada123)と、

ブログのドメイン(例: yamada123.hatenablog.com)も控えておきます。

ステップ4: 画像生成の鍵(Gemini)を取る

  1. https://aistudio.google.com/ を開いて Google でログイン
  2. 左上あたりの「Get API key」→「Create API key」
  3. 表示されたキーをコピー(無料枠で十分使えます)

ステップ5: 設定ファイル(.env)を作る

サンプルをコピーして、自分の値に書き換えます:

cp .env.example .env

.env をテキストエディタ(メモ帳でも可)で開いて、4か所を埋めます:

HATENA_ID=yamada123
HATENA_BLOG_HOST=yamada123.hatenablog.com
HATENA_API_KEY=(ステップ3でコピーしたキー)
GEMINI_API_KEY=(ステップ4でコピーしたキー)
⚠️ .env には大事なカギが入ります。人に見せない・GitHub に上げないでください
(このフォルダの .gitignore で自動的に除外されるようにしてあります)。

ステップ6: 動作テスト

まず、本番に投稿せずに各機能が動くか確かめます。

# .env を読み込む(このターミナルを開くたびに最初に1回)
set -a; source .env; set +a

# (A) 画像が生成できるか
bash .claude/skills/hatena-auto-poster/scripts/gen-image-gemini.sh "横長16:9のテスト画像。青空と猫。" /tmp/test.png

# (B) フォトライフに上げられるか(--dry-run は実際には上げません)
bash .claude/skills/hatena-auto-poster/scripts/upload-fotolife.sh --dry-run /tmp/test.png

# 問題なければ、実際に1枚上げてみる
bash .claude/skills/hatena-auto-poster/scripts/upload-fotolife.sh /tmp/test.png "接続テスト"

最後のコマンドで [f:id:...:image] のような文字列と画像 URL が表示されれば成功です 🎉

---

✍️ 使い方

方法A: Claude Code に任せる(おすすめ)

このフォルダ(または .claude/ を組み込んだ自分のプロジェクト)を Claude Code で開き、次のように頼みます:

「hatena-auto-poster で、〇〇というテーマのはてなブログ記事を書いて、画像も付けて下書き投稿して」

.claude/skills/ に置いてあるので Claude が自動でスキルを認識し、

手順(テーマ確認 → 執筆 → 画像生成 → セルフレビュー → 投稿)を実行します。

**使う前に .claude/agents/hatena-auto-poster.md を開いて、「書き手の人格」「テーマ」「自サイトURL」を

自分用に書き換えてください**(ここがあなた専用の設定になります)。

方法B: 手で1本投稿する

set -a; source .env; set +a

# 1. 今日まだ投稿していないか確認
bash .claude/skills/hatena-auto-poster/scripts/check-daily-limit.sh 1

# 2. テーマが過去記事と被っていないか確認
bash .claude/skills/hatena-auto-poster/scripts/check-dup.sh "東京 子育て 給付金"

# 3. 本文を書く(Markdown)
BODY="$(mktemp)".md
cat > "$BODY" <<'EOF'
こんにちは、編集部の田中です。

東京で子育てをするなら知っておきたい給付について…
(本文。自分のサイトへのリンクを2〜3本、自然に入れる)
[詳しくはこちら](https://example.com/your-page)
EOF

# 4. アイキャッチを作ってフォトライフへ
IMG=$(bash .claude/skills/hatena-auto-poster/scripts/gen-image-gemini.sh "横長16:9のアイキャッチ。テーマ『東京の子育て支援』。明るいフラットイラスト。" /tmp/eye.png)
SYNTAX=$(bash .claude/skills/hatena-auto-poster/scripts/upload-fotolife.sh "$IMG" "東京の子育て支援" | cut -f1)

# 5. 画像を本文の先頭に差し込む
printf '%s\n\n%s' "$SYNTAX" "$(cat "$BODY")" > "$BODY"

# 6. AI 臭チェック
bash .claude/skills/hatena-auto-poster/scripts/lint-anti-ai.sh "$BODY"

# 7. 投稿(まずは下書き --draft yes で確認 → よければ no で公開)
URL=$(bash .claude/skills/hatena-auto-poster/scripts/post-hatena.sh --title "東京の子育て支援2026" --body-file "$BODY" --category "子育て" --draft yes)
echo "下書きURL: $URL"

# 8. 記録(本数制限・重複チェック用)
bash .claude/skills/hatena-auto-poster/scripts/record-post.sh "東京の子育て支援2026" "東京 子育て 給付金" "$URL"

---

🧩 中身の説明

このパッケージは Claude Code の標準フォルダ構成になっています。
既にある自分のプロジェクトに組み込むときは、.claude/agents/ と .claude/skills/ の中身を
自分のプロジェクトの .claude/ にコピーするだけです。
ファイル役割
README.mdこの説明書
.env.example設定のひな形(コピーして .env を作る)
.claude/agents/hatena-auto-poster.mdエージェント定義(人格・テーマ・自サイトを書き換えて使う)
.claude/skills/hatena-auto-poster/SKILL.md記事を1本仕上げるまでの手順書
.claude/skills/hatena-auto-poster/scripts/gen-image-gemini.shGemini で画像を生成
.claude/skills/hatena-auto-poster/scripts/upload-fotolife.sh画像をはてなフォトライフへアップ(WSSE 認証)
.claude/skills/hatena-auto-poster/scripts/post-hatena.sh記事を投稿(AtomPub・失敗時3回リトライ)
.claude/skills/hatena-auto-poster/scripts/lint-anti-ai.shAI っぽい定型表現を検出
.claude/skills/hatena-auto-poster/scripts/check-daily-limit.sh1日の投稿本数を制限
.claude/skills/hatena-auto-poster/scripts/check-dup.sh過去記事とのテーマ重複を検出
.claude/skills/hatena-auto-poster/scripts/record-post.sh投稿履歴を data/posts.log に記録

---

❓ 困ったとき

症状原因と対処
HATENA_API_KEY が未設定ですset -a; source .env; set +a を先に実行したか確認
投稿が http=401 で失敗API キーが違う/ログインパスワードを入れている。ステップ3で正しい「API キー」をコピー
投稿が http=404 で失敗HATENA_ID か HATENA_BLOG_HOST の打ち間違い
画像が not a valid imageGemini が文章だけ返したケース。プロンプトに「画像を作って」と明示して再実行
jq が無いbrew install jq(Mac)。Linux は sudo apt install jq
フォトライフが http=401HATENA_API_KEY が空/誤り。投稿用と同じ API キーを使います

---

⚠️ 守ってほしいこと

  • 1日1本まで … 一度に大量投稿はスパム判定の元。check-daily-limit.sh で制御しています
  • リンクは2〜3本 … 詰め込みすぎない
  • 事実確認をする … 数字や制度は公式で確認。誤情報はサイトの信頼を下げます
  • .env を共有しない … API キーは他人に渡らないように

地道に、一つずつ。🐢