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?

GitHub Actions と Qiita CLI で記事を限定共有として投稿し、確認後に公開する

0
Last updated at Posted at 2026-04-07

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 permissionsRead and write permissions に変更しておく必要があります。
この設定が不足していると、id の書き戻しが行われず、同じ記事が新規投稿される場合があります。
また、Qiita 側で手動公開すると、GitHub 側の front matter と状態がずれ、次回更新時にエラーになるケースがありました。
本記事に掲載されている ymlファイルは改修・不具合修正済みですが、また何かしらの不具合があれば修正します。

GitHub Actions と Qiita CLI を使って、Qiita に記事を投稿する流れを試してみます。
今回は、いきなり公開するのではなく、まず限定共有記事として投稿し、内容確認後に手動で公開する運用を前提にしています。

また、後述の「免責」にも記載してますが、これは個人的に検証したメモに近いものです。
その点をご注意ください。また「ここが変だよ」「間違ってない?」などあればご教授ください。

手順

  1. qiita用リポジトリ作成
  2. Qiita からトークンを取得
  3. 取得したトークンをQiita用リポジトリ用のSecrets Action用に登録
  4. workflow/publish.yml を作成
  5. public/ ディレクトリに 記事を作成とコミット
  6. 記事を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、トークン管理、課金設定、対象ファイルの内容を事前に十分確認した上で、自己責任で利用してください。

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?