GitHub Actions から Qiita CLI 経由で 記事 を 投稿 ( 限定公開方 ) をしてみる
この記事自体も、GitHub 上で管理している Markdown ファイルをもとに作成しています。
2026.04.06 21:20前後更新 / 主に ymlファイル内容を改修修正。
qiita側で手動公開すると、workflowを実行するとgithub側が古いファイルとなるため、エラーにになるようです。
注意 / 追記(2026-04-07)
GitHub Actions でidを GitHub 側へ書き戻すには、workflow のcontents: writeだけでは不十分でした。
GitHub リポジトリ側でもSettings -> Actions -> General -> Workflow permissionsを Read and write permissions に変更しておく必要があります。
この設定が不足していると、idの書き戻しが行われず、同じ記事が新規投稿される場合があります。
また、Qiita 側で手動公開すると、GitHub 側の front matter と状態がずれ、次回更新時にエラーになるケースがありました。
本記事に掲載されている ymlファイルは改修・不具合修正済みですが、また何かしらの不具合があれば修正します。
GitHub Actions と Qiita CLI を使って、Qiita に記事を投稿する流れを試してみます。
今回は、いきなり公開するのではなく、まず限定共有記事として投稿し、内容確認後に手動で公開する運用を前提にしています。
また、後述の「免責」にも記載してますが、これは個人的に検証したメモに近いものです。
その点をご注意ください。また「ここが変だよ」「間違ってない?」などあればご教授ください。
手順
- qiita用リポジトリ作成
- Qiita からトークンを取得
- 取得したトークンをQiita用リポジトリ用のSecrets Action用に登録
- workflow/publish.yml を作成
- public/ ディレクトリに 記事を作成とコミット
- 記事をQiita側にプッシュする
1. qiita用リポジトリ作成
まず、Qiita 記事投稿用のリポジトリを作成します。
名前は自分で分かりやすいもので問題ありません。
Qiita 記事専用として分けておくと、管理しやすいと思います。
2. Qiita からトークンを取得
Qiita にログインし、次の手順でトークンを発行します。
- 自分のアイコンを開く
- 設定
- アプリケーション
- 新しくトークンを発行する
read_qiita と write_qiita にチェックを入れて、トークンを発行します。
発行されたトークンは、このあと GitHub 側に登録するため、一時的に安全な場所へ控えておきます。
3. 取得したトークンをQiita用リポジトリ用のSecrets Action用に登録
手順 1 で作成したリポジトリを開き、次の場所に移動します。
- Settings
- Secrets and variables
- Actions
そこで、新しい secret を追加します。
- Name: QIITA_TOKEN
- Secret: 手順 2 で発行したトークン
なお、一度登録した secret の値はあとから再表示できません。
名前は確認できますが、中身は見られないため注意してください。
4. workflow/publish.yml を作成
リポジトリ内に .github/workflows/publish.yml を作成し、以下の内容を記述します。
name: Publish articles to Qiita
on:
workflow_dispatch:
permissions:
contents: write
jobs:
publish_articles:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: "20"
cache: "npm"
- name: Show files
run: |
pwd
ls
ls public || true
- name: Install dependencies
run: npm ci
- name: Show Qiita CLI version
run: npx qiita version
- name: Publish articles
env:
QIITA_TOKEN: ${{ secrets.<GitHub-Secretsで登録したトークン名> }} # トークン名を設定
run: npx qiita publish --all
- name: Commit updated article metadata
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com" # メールアドレスを設定
if [ -n "$(git status --porcelain public)" ]; then
git add public
git commit -m "Update Qiita article metadata"
git push origin HEAD:${GITHUB_REF_NAME}
else
echo "No changes to commit"
fi
5. public/ ディレクトリに記事ファイルを作成してコミットする
リポジトリのルートに public/ ディレクトリを作成し、その中に記事ファイルを置きます。
ファイル名は、半角英数字・ハイフン・アンダースコアあたりで付けておくのが無難です。
日本語ファイル名は今回は試していません。
記事は Markdown 形式で作成し、先頭に以下のような front matter を書きます。
---
title: 記事タイトルを書きます
tags:
- Qiita
private: true
updated_at: null
id: null
organization_url_name: null
slide: false
ignorePublish: false
---
ここあら記事内容を書きます
その下に、記事本文を書いていきます。
記事ファイルを作成したら、Git にコミットして push します。
6. GitHub Actions から Qiita に投稿する
リポジトリを GitHub に push したあと、GitHub の Actions タブを開きます。
そこで対象の workflow を選び、Run workflow を実行します。
今回の例では private: true にしているため、Qiita には公開記事ではなく限定共有記事として投稿されます。
内容を確認したあとに、
-
Qiita の画面上で手動公開する( Qiita側が新しいファイルになるのでエラーになりました) -
あるいはprivate: false に変更して再度 publish する
といった流れにすると、安全に運用できます。
注意点
publish --all は対象記事をすべて見に行く
npx qiita publish --all は、public/ 配下の公開対象記事をまとめて確認します。
そのため、タグ未設定や front matter 不備のある記事が 1 本でも混ざっていると、workflow 全体が失敗することがあります。
作業途中の記事は、必要に応じて ignorePublish: true にしておくと安全です。
private: true は下書きではない
Qiita CLI における private: true は、下書きではなく限定共有記事です。
Qiita 側では「下書き」ではなく「公開限定記事」として扱われます。
GitHub Actions の実行には compute が使われる
GitHub Actions を実行すると、GitHub 側の compute を消費します。
少量の利用であれば大きな問題になりにくいですが、使い方によっては課金対象になる場合があります。
免責
本記事は、2026年4月時点で個人的に試した内容をメモとして整理したものです。
内容の正確性や完全性、継続的な再現性を保証するものではありません。
Qiita CLI、GitHub Actions、GitHub Codespaces、Qiita の各仕様や画面構成は、今後変更される可能性があります。
そのため、本記事の手順どおりに実施しても、同じ結果になるとは限りません。
また、本記事を参考にしたことによって発生した不具合、記事データの消失・削除、設定ミス、公開範囲の誤り、その他の損害について、筆者は責任を負いません。
GitHub Actions や Codespaces の利用状況によっては、GitHub 側で compute や storage の使用量が増え、課金が発生する可能性があります。
課金条件や利用状況については、ご自身で必ず確認してください。
実際に運用する際は、公開範囲、Secrets、トークン管理、課金設定、対象ファイルの内容を事前に十分確認した上で、自己責任で利用してください。