はてなブログ自動投稿ツールキット
はてなブログへの記事作成から画像生成、投稿までを一気通貫で自動化するツールキットです。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 キー」を取る
これはログインパスワードとは別物の、自動投稿専用のカギです。
- はてなブログにログイン
- 右上のメニュー →「設定」
- 左メニューの一番下「詳細設定」を開く
- ページ下のほうにある「AtomPub」の欄を見る
- そこに表示されている「API キー」をコピー(後で使います)
同じ画面で、自分の はてな ID(例: yamada123)と、
ブログのドメイン(例: yamada123.hatenablog.com)も控えておきます。
ステップ4: 画像生成の鍵(Gemini)を取る
- https://aistudio.google.com/ を開いて Google でログイン
- 左上あたりの「Get API key」→「Create API key」
- 表示されたキーをコピー(無料枠で十分使えます)
ステップ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.sh | Gemini で画像を生成 |
.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.sh | AI っぽい定型表現を検出 |
.claude/skills/hatena-auto-poster/scripts/check-daily-limit.sh | 1日の投稿本数を制限 |
.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 image | Gemini が文章だけ返したケース。プロンプトに「画像を作って」と明示して再実行 |
jq が無い | brew install jq(Mac)。Linux は sudo apt install jq |
フォトライフが http=401 | HATENA_API_KEY が空/誤り。投稿用と同じ API キーを使います |
---
⚠️ 守ってほしいこと
- 1日1本まで … 一度に大量投稿はスパム判定の元。
check-daily-limit.shで制御しています - リンクは2〜3本 … 詰め込みすぎない
- 事実確認をする … 数字や制度は公式で確認。誤情報はサイトの信頼を下げます
.envを共有しない … API キーは他人に渡らないように
地道に、一つずつ。🐢