Zennの既存記事をGitHub連携で管理しようとしてハマったこと
結論
GitHub連携して Claude Code から投稿するのがマジで楽。
ただし、 Zennエディタで作成した既存記事は、GitHub連携では上書きできない。
対処法は2つ:
- 新規記事として公開する(別のslugで)
- 既存記事を削除してから連携する
これを知らずに何度もデプロイエラーと戦った記録。
この記事について
Claude Code シリーズの番外編として、Zenn × GitHub連携でハマったことをまとめた。
つまずいたこと
1. 既存記事が上書きできない
やりたかったこと:
Zennエディタで書いた記事を、GitHub連携で管理したい。
やったこと:
既存記事のslugをファイル名にして、フロントマターに slug: xxx を追加してpush。
結果:
slug の重複エラー
原因:
Zennエディタで作成した記事と、GitHub連携で作成した記事は 別管理。
同じslugを使おうとすると重複扱いになる。
2. slugの仕組みを知らなかった
やりたかったこと:
わかりやすいファイル名(例:claude-code-tips.md)で管理したい。
やったこと:
フロントマターに slug: f2260aa9006dd3 を追加。
結果:
まだ重複エラー。
原因:
Zennでは ファイル名(拡張子除く)がslugになる。
フロントマターの slug: は無視される場合がある。
3. ファイル名を変えても解決しない
やりたかったこと:
ファイル名を新しいslugに変更して公開。
やったこと:
claude-code-tips.md → claude-code-tips-and-features.md にリネーム。
結果:
まだエラー。
原因:
既存記事(エディタ作成)が残っている限り、同じ内容の記事は重複扱い。
既存記事を削除してからpush する必要があった。
4. 投稿数の上限(レートリミット)
やりたかったこと:
複数の記事をまとめてpushして一気に公開。
やったこと:
3記事以上を同時にpush。
結果:
Zenn管理画面に以下のメッセージが表示された:
次の記事は一定時間以内の投稿数の上限に達したためデプロイされませんでした。しばらく時間をあけてお試しください。
原因:
Zennにはスパム対策として投稿数の上限(レートリミット)が設けられている。
公式情報:
- 具体的な制限数値は非公開(スパム対策のため)
- 利用規約第12条に基づき、「サーバーに負担をかける行為」として制限
- 2025年6月のガイドライン改定でAIスパム対策が強化
対処法:
- 焦ってリトライしない — 逆効果の可能性がある
- 24時間程度待つ — 多くの場合、翌日には解除される
- 改善しない場合はZennに問い合わせ
予防策:
- 複数記事の同時公開を避ける(1日1記事を目安に)
-
git force-pushではなく通常のgit pushを使用 - 細かい修正は1回のコミットにまとめてからpush
事前に確認すべきだったこと
| 確認事項 | 理由 |
|---|---|
| 既存記事の作成方法 | エディタ作成 vs GitHub連携で挙動が異なる |
| Zennのslug仕様 | ファイル名 = slug という仕様 |
| 上書きの可否 | エディタ作成記事はGitHub連携では上書き不可 |
| 投稿数の上限 | 複数記事の同時公開でレートリミットに引っかかる可能性 |
最終的な手順(成功パターン)
Step 1: Zenn CLI セットアップ
cd C:\Users\your-name\Documents\Projects\zenn-articles
# npm初期化
npm init -y
# Zenn CLIインストール
npm install zenn-cli
Step 2: Git 初期化
git init
Step 3: GitHub リポジトリ作成 & push
GitHub CLI を使う場合:
gh repo create zenn-articles --public --source=. --remote=origin --push
手動でやる場合:
- https://github.com/new でリポジトリ作成
- 以下を実行:
git remote add origin https://github.com/your-name/zenn-articles.git
git branch -M main
git add .
git commit -m "Initial commit"
git push -u origin main
Step 4: Zenn ダッシュボードで連携
- https://zenn.dev/dashboard/deploys にアクセス
- 「リポジトリを連携する」をクリック
- 先ほど作成したリポジトリを選択
- 「連携する」をクリック
Step 5: 既存記事がある場合は削除
重要: エディタで作成した既存記事をGitHub連携で管理したい場合、 Zennエディタ側の記事を削除 する。
- https://zenn.dev/dashboard にアクセス
- 対象記事の「...」メニュー → 「記事を削除」
Step 6: ファイル名をユニークに設定
articles/
my-first-article.md ← このファイル名がslugになる
another-article.md
注意:
- ファイル名は12〜50文字
- 半角英数字(a-z, 0-9)とハイフン(-)、アンダースコア(_)のみ
- わかりやすく、かつユニークな名前にする
Step 7: 公開
# published: true に変更してから
git add .
git commit -m "Publish articles"
git push
GitHub連携 + Claude Code の何が楽か
記事作成
> Zennの記事を書いて。タイトルは「〇〇」で。
→ ファイルが自動で作成される。
公開
> 公開して
→ published: true に変更 → git add → commit → push まで自動。
修正
> この部分、もう少しわかりやすく書き直して
→ 編集 → commit → push まで自動。
Zennエディタとの比較
| 操作 | Zennエディタ | GitHub連携 + Claude Code |
|---|---|---|
| 記事作成 | 手動で書く | 「書いて」で生成 |
| 公開 | ボタンクリック | 「公開して」で完了 |
| 修正 | 手動で編集 | 「直して」で完了 |
| バージョン管理 | なし | Git で履歴が残る |
| 複数記事の一括操作 | 1記事ずつ | まとめて操作可能 |
この記事自体も Claude Code で書いて push した。
学んだこと
| 学び | 詳細 |
|---|---|
| 別管理だった | Zennエディタで作成した記事とGitHub連携は別管理 |
| 今後の方針 | 新規記事はGitHub連携で管理すると楽 |
| slug仕様 | ファイル名 = slug という仕様を覚えておく |
| レートリミット | 複数記事の同時公開は避ける、エラー時は24時間待つ |
| 最強の組み合わせ | Claude Code + GitHub連携が最強の執筆環境 |
まとめ
- Zennエディタで作成した記事は、GitHub連携では 上書きできない
- 既存記事をGitHub管理したいなら、 エディタ側を削除してから 連携
- ファイル名 = slug なので、 わかりやすいユニークな名前 をつける
- 複数記事の同時公開でレートリミットに注意、エラー時は 24時間待つ
- Claude Code + GitHub連携 = 「書いて」「公開して」で完結する最強環境
今後の記事はすべてGitHub連携で管理する予定。
Discussion