0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeに「QiitaとGitHubの自動投稿連携を作って」と丸投げした制作記

0
Last updated at Posted at 2026-05-27

これは何

「Claude Code でのやり取りを Qiita 記事にして残したい」と思い立ち、その仕組みづくり自体を Claude Code に丸投げしてみた記録です。

最終的に 「ローカルで Markdown を編集して git push すると、GitHub Actions が Qiita へ自動投稿してくれる」 環境が完成しました。会話の流れをほぼそのまま、ハマった点も含めて残します。

環境: Windows 11 / PowerShell / Node.js v22 / Claude Code


Q1. 「Claude Codeのやり取りを記事化したい。どんな方法がある?」

最初はざっくり相談から。返ってきた選択肢は大きく3つ。

  • (A) GitHub で記事をバージョン管理 → Qiita へ自動投稿する仕組み
  • (B) 会話ログから記事の素材を半自動で抽出する仕組み
  • (C) とりあえず手動で1本書く

王道として勧められたのが Qiita 公式の「Qiita CLI」+ GitHub Actions の組み合わせ。記事を Markdown でリポジトリ管理しつつ、push で自動投稿できる。(A) を選択。


Q2. セットアップ開始

リポジトリ作成 & Qiita CLI 導入

mkdir qiita-articles; cd qiita-articles
git init
npm install @qiita/qiita-cli --save-dev
npx qiita init      # GitHub Actions 用の publish.yml などが生成される

npx qiita init で以下が自動生成された。

ファイル 役割
.github/workflows/publish.yml main/master への push で Qiita へ自動投稿する Actions
qiita.config.json Qiita CLI 設定
.gitignore node_modules 等を除外

Qiita トークン発行 & ログイン

Qiita → 設定 → アプリケーション → 個人用アクセストークン(スコープ read_qiita + write_qiita)を発行して、

npx qiita login   # トークンを貼り付け(対話入力)

npx qiita pullSuccessful! を返せば認証 OK。

💡 学び: トークン入力は対話形式。AIエージェントに代行させず、自分のターミナルで打つのが安全。


Q3. 記事の frontmatter を理解する

npx qiita new 記事名 で生成される .md の先頭はこうなっている。

---
title: 記事タイトル
tags:
  - ClaudeCode
private: true        # true = 限定共有(下書き運用)
updated_at: ''
id: null             # 投稿後に Qiita が自動採番して書き戻す
organization_url_name: null
ignorePublish: false # true でこの記事を投稿対象から除外
---

ポイントは id: null で push すると新規投稿され、ID が採番されてこのファイルに書き戻されること。以降は同じファイルを編集して push すれば「更新」になる。新規も更新も同じ操作で済むのが気持ちいい。


Q4. GitHub 連携でつまずいた3点

ここからが本番。実際にハマった所をそのまま残す。

つまずき① ghwinget も PATH に無い

gh auth status を打つと gh は認識されませんwinget も同様。
→ 実体を直接叩いて解決。

& "C:\Program Files\GitHub CLI\gh.exe" auth status

gh 自体はインストール済みだった(PATH が通っていなかっただけ)。

つまずき② push が workflow スコープ不足で拒否される

gh repo create ... --push したら、リポジトリは作られたのに push だけ拒否。

! [remote rejected] HEAD -> main
  (refusing to allow an OAuth App to create or update workflow
   `.github/workflows/publish.yml` without `workflow` scope)

.github/workflows/ 配下を push するには OAuth トークンに workflow スコープが要る、という GitHub のセキュリティ仕様。

gh auth refresh -h github.com -s workflow   # ブラウザ認証で1回追加

これで再 push が通った。

つまずき③ 最初の push 時は Secret 未登録で Actions が失敗する

push で発火した1回目の Actions は failure。理由は、その時点で QIITA_TOKEN の Secret をまだ登録していなかったから。

gh secret set QIITA_TOKEN --repo <owner>/qiita-articles  # トークンを貼る

Secret 登録後に手動で再実行したら success

gh workflow run "Publish articles" --repo <owner>/qiita-articles

💡 学び: 「push → Actions失敗」は順番の問題なだけ。Secret を入れてから workflow run で叩き直せば通る。


できあがった仕組み

ローカルで public/*.md を編集
   │ git push(main)
   ▼
GitHub リポジトリ(private)
   │ GitHub Actions「Publish articles」が自動発火
   ▼  ※ Secret: QIITA_TOKEN で Qiita 認証
Qiita に自動投稿 / 更新

そして実際に、この記事の元になったサンプル記事が Qiita 側に id 付きで登録され、git pull でローカルに ID が書き戻されることまで確認できた。サイクルが一周回った瞬間が地味に感動した。


今後の運用(これだけ)

cd qiita-articles
npx qiita new 記事名     # 新規(任意)
# public/ の .md を編集
git add .
git commit -m "記事更新"
git push                  # → 自動で Qiita に反映
  • private: true の記事は限定共有(下書き)。公開時に false に変えて push
  • トークンはチャットやコミットに貼らない。漏れたら失効 → 再発行

まとめ

  • Qiita CLI + GitHub Actions で「push したら Qiita に反映」が作れる
  • ハマりポイントは workflow スコープSecret 登録の順番の2つがほぼ全て
  • セットアップ自体を AI エージェントに任せても、トークン入力とブラウザ認証だけは自分でやるのが安全

この記事自体も、その仕組みを通して投稿されています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?