12
10

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 Copilot のカスタムAgentを4つ連携させてQiita記事生成を半自動化した話

12
Last updated at Posted at 2026-03-07

はじめに

「Qiita記事を書くたびにリサーチ・コード作成・レビューを全部自分でやるのが面倒。自動化できないか?」

そう思い立ったきっかけは、Azureコミュニティ YonaAZ でのやまぱんさん(@aktsmm)の発表でした。

非開発者向けGitHub Copilot入門! - docswell

この発表でCustom AgentとSkillの存在を知り、「これで自分のワークフローを自動化できる」と思って実装しました。トピックを伝えるだけで、リサーチ・コード作成・レビューまで4つのエージェントが連携して記事を仕上げてくれます。

書いた記事はGitHubにpushするだけでQiitaに自動公開される仕組みも整えたので、その全容を紹介します。

この記事でわかること

  • ✅ Custom Agent(.agent.md)とSkill(SKILL.md)の違いと使い分け
  • ✅ 複数エージェントを連携させる「コーディネーターパターン」
  • ✅ 実際に作ったQiita記事自動生成システムの構成
  • ✅ つまずきやすいポイントと注意点

VS Code Copilotカスタマイズの全体像

まず「何が作れるか」を整理します。4種類あります。

種類 ファイル名 役割 使い時
Custom Agent *.agent.md 専門ペルソナを持つAI 繰り返す専門タスク
Skill SKILL.md 手順書+スクリプトのセット 複雑な手順を再利用
Instructions *.instructions.md 常時適用のルール コーディング規約など
Prompt *.prompt.md 一回限りのタスク 決まったフォーマットで出力

一言で言うと:

  • 「常にこのルールで動いてほしい」→ Instructions
  • 「この役割のAIをいつでも呼び出したい」→ Agent
  • 「この手順をいつでも再実行したい」→ Skill
  • 「このフォーマットで一回出力してほしい」→ Prompt

Custom Agent(.agent.md)とは

.github/agents/
├── my-reviewer.agent.md   ← ワークスペーススコープ
└── my-coder.agent.md

VS Code 1.106以降の正式機能です(旧称 .chatmode.md から名称変更)。

最小構成

---
description: "セキュリティ観点のコードレビュー専門エージェント。Use for: セキュリティレビュー、脆弱性チェック、OWASP確認。"
tools: [read, search]
---

あなたはセキュリティエンジニアです。OWASPトップ10の観点でコードをレビューします。

フル構成(使えるプロパティ一覧)

---
name: セキュリティレビューアー          # 省略するとファイル名が使われる
description: "説明文"                  # 必須・エージェントピッカーに表示される
tools: [read, search, edit, execute]  # 使えるツールを制限
model: 'gpt-4o'                       # VS Codeのモデルピッカーに表示される識別子を指定
user-invocable: true                  # false = ピッカー非表示(サブエージェント専用にする場合)
disable-model-invocation: true        # true = 他エージェントからの自動呼び出しを禁止
agents: ['sub-agent-a']               # 使えるサブエージェントを限定(tools に agent も必要)
---

使えるtoolsの主な値

エイリアス できること
read ファイル読み取り
edit ファイル編集
search ワークスペース検索
execute ターミナルコマンド実行
web Webページ取得
agent サブエージェントの呼び出し
todo タスクリスト管理

⚠️ infer プロパティは deprecated:古い記事やサンプルで見かける infer: true/false は廃止されました。現在は user-invocabledisable-model-invocation の2つに分離されています。


Skill(SKILL.md)とは

.github/skills/
└── qiita-article/
    ├── SKILL.md              ← 必須・フォルダ名と name が一致すること
    ├── assets/
    │   └── article-template.md
    └── references/
        └── qiita-format.md

Skillは「手順書+関連ファイルのパッケージ」です。

---
name: qiita-article                   # フォルダ名と一致させる(必須)
description: 'Qiita記事を作成するスキル。Use for: 記事を書く、Qiita投稿、技術ブログ。'
argument-hint: '記事のトピックを入力'
---

# Qiita記事作成の手順

## 手順
1. トピックを確認する
2. [記事テンプレート](./assets/article-template.md) を使って構成を決める
...

AgentとSkillの使い分け

Agent Skill
呼び出し方 エージェントピッカーで選択 /スキル名 or 自動検出
持続性 セッション中ずっと同じペルソナ 必要なときだけ読み込み
付随するファイル なし スクリプト・テンプレートを同梱できる
オープンスタンダード なし あり(Claude・Copilot CLIでも使える)

実際に作ったシステム:Qiita記事自動生成

コーディネーターエージェントが3つの専門エージェントを指揮する構成です。

ユーザー
  ↓ トピックを伝える
qiita-writer(コーディネーター)
  ├─► qiita-researcher(リサーチ専門)
  ├─► qiita-coder(コード例作成専門)
  └─► qiita-reviewer(レビュー専門)
        ↓ 完成記事を
  Qiita-github/public/ に保存
        ↓ git push
  GitHub Actions
        ↓ 自動実行
  Qiitaに公開 🎉

ディレクトリ構成

quita-agent/
├── .github/
│   ├── agents/
│   │   ├── qiita-writer.agent.md     ← コーディネーター
│   │   ├── qiita-researcher.agent.md ← リサーチ専門
│   │   ├── qiita-coder.agent.md      ← コード作成専門
│   │   └── qiita-reviewer.agent.md   ← レビュー専門
│   └── skills/
│       └── qiita-article/
│           ├── SKILL.md
│           ├── assets/article-template.md
│           └── references/qiita-format.md
└── Qiita-github/                     ← 記事公開リポジトリ
    ├── public/                       ← 記事.mdを置く場所
    └── .github/workflows/publish.yml ← GitHub Actions

コーディネーターエージェント(qiita-writer)

---
description: "Qiita記事作成の総合エージェント。Use for: 記事を書く、Qiitaに投稿したい。"
tools: [read, edit, search, web, agent, todo]
---

あなたはQiita記事作成の総合プロデューサーです。

## 作業フロー
1. トピック確認
2. qiita-researcher に調査を依頼
3. 記事構成を作成
4. qiita-coder にコード例を依頼
5. 記事を執筆(#skill:qiita-article を参照)
6. qiita-reviewer にレビューを依頼
7. Qiita-github/public/<slug>.md に保存

専門エージェントの設計

専門エージェントは「コーディネーターから呼ばれる」だけでなく、「直接使いたい」場面もあるため user-invocable: true にしています。

---
description: "Qiita記事のリサーチ専門。技術背景・最新動向・参考リンクを調査する。"
tools: [web, search, read]
user-invocable: true    # ピッカーに表示 → 直接呼び出しもできる
---

コーディネーターからしか使わない完全サブエージェント専用にする場合は user-invocable: false にします。

---
description: "内部専用のリサーチエージェント。"
tools: [web, search, read]
user-invocable: false   # ピッカー非表示・サブエージェントとしてのみ呼び出し可
---

description が「発見の鍵」

コーディネーターがサブエージェントを呼び出す判断はdescription の文章で行われます。「このタスクにはどのエージェントを使うか」を決めるのがdescriptionです。

# ❌ 悪い例(どんな時に使うか不明)
description: "便利なエージェント"

# ✅ 良い例(トリガーワードが明確)
description: "Qiita記事のリサーチ専門。Use for: 技術トピックの調査、最新動向の調査、背景情報収集。"

つまずきポイント

① Skillのフォルダ名とnameを一致させる(必須)

.github/skills/qiita-article/   ← フォルダ名
                  └── SKILL.md
                       name: qiita-article  ← ここが一致しないと読み込まれない

② サブエージェントを使うには agent ツールも必要

# ❌ agentsだけ書いてもサブエージェントは使えない
tools: [read, edit]
agents: ['my-sub-agent']

# ✅ tools に agent も含める
tools: [read, edit, agent]
agents: ['my-sub-agent']

③ サブエージェントは会話履歴を引き継がない

サブエージェントは独立したコンテキストウィンドウで動くため、.instructions.md の内容や会話の流れは渡されません。タスクの指示は詳細に書いて渡す必要があります。


GitHub Actionsで自動公開する仕組み

Qiita CLIとGitHub Actionsを組み合わせると、pushするだけでQiitaに公開されます。

# Qiita-github/.github/workflows/publish.yml
# ※ このファイルは Qiita-github/ リポジトリ内に置く
name: Publish articles
on:
  push:
    branches: [main]
  workflow_dispatch:
permissions:
  contents: write
jobs:
  publish_articles:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: increments/qiita-cli/actions/publish@v1
        with:
          qiita-token: ${{ secrets.QIITA_TOKEN }}
          root: "."  # Qiita-github/ リポジトリのルートを指す

記事のフロントマター(Qiita CLI形式):

---
title: "記事タイトル"
tags:
  - タグ1
private: false
updated_at: ''
id: null          ← 初回はnull、公開後にQiita記事IDが自動で入る
---

使い方のデモ

VS Code のチャットでエージェントを選択して話しかけるだけです。

【Qiita Writerを選択】

「GitHub ActionsでCI/CDパイプラインを構築する方法について記事を書きたい。
 対象は中級者エンジニア。実際のyaml例を中心に。」

→ 自動でリサーチ・コード例作成・レビューが実行され、
  Qiita-github/public/github-actions-cicd-pipeline.md に記事が保存される

まとめ

  • Custom Agent.agent.md)は「専門ペルソナを持つAI」を定義する
  • SkillSKILL.md)は「手順書+ファイルのパッケージ」
  • コーディネーター+ワーカーのサブエージェントパターンで複雑タスクを自動化できる
  • descriptionの書き方が発見の鍵:トリガーワードを明確に書く
  • infer は deprecated → user-invocable / disable-model-invocation を使う
  • Qiita CLI + GitHub Actionsでpushするだけの公開フローが作れる

Agent/Skillを作っておくと、同じ作業を何度でも再現できるのが最大のメリットです。ぜひ自分のワークフローに合わせてカスタマイズしてみてください。

参考

12
10
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
12
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?