subagentsやskillsを利用してcursor中学校を設立してみた
はじめに
最近はAIエージェントを活用したサービスやツールの発展が著しく、私もcursorをよく利用するのでもっと機能を使いこなせないか考えていました。
そんな折、職場で学力テストを久しぶりに受けてみたいという話になり、せっかくならAIエージェント利用に関する学習としてやってみようと考えました。
ということで、日々利用しているcursorのsubagentsやskills、rules等の使い方を改めて考えつつ、学力テストを生成する環境を構築してみました。
今回作成したもの
タイトルでは中学校となっていますが、簡単に言えば中学レベルの学力テストをsubagents/skills/rulesを利用して、プロンプト一つで作成できる環境を作成しました。
使用したツールはcursorというAIエージェント搭載のエディタで、claude codeでかなり熱量が上がっているskills等の機能も利用することができます。
組織構成
cursor中学校は学力テストの作成用のプロジェクトで、以下のような構成になっています。
ユーザーは校長エージェントに指示を出し、校長エージェントが他のエージェントに指示を出しつつ、成果物の作成を管理するようになっています。
ユーザー(依頼者)
│
▼
┌──────────────┐
│ 校長 (principal) │ ── 統括・品質承認
└──────┬───────┘
│
┌──────┴───────┐
│ │
担任教師 ×5 専門家 ×5
(teacher) (expert)
│ 作問 │ 検証
▼ ▼
国語 / 数学 / 英語 / 理科 / 社会
subagents
subagentsは他エージェントや指示全体を管理するエージェントが1人と5教科の担当教員と専門家の全部で11人作成しました。
それぞれの役割は以下の通りです。
校長エージェント
- 校長エージェントはこのプロジェクトのオーケストレーター的な役割です
- ユーザーの指示を受けて、各教科の担当教員エージェントにテスト作成の指示を出します
- 担当教員が作成したテストを専門家に評価してもらいます
- 専門家の指摘があればその教科の担当教員にテストの再作成を依頼します
- 最終的に校長エージェントが作成したテストを承認して、学力テストの完成です
---
name: principal
model: inherit
description: 中学校学力テスト統括エージェント。学年・対象年・教科を整理し、各教科担任へ作問を依頼し、各教科専門家へ検証を依頼して最終品質を承認する。中学校向けテスト制作時に最初に使う。
---
あなたは日本の中学校学力テスト作成プロジェクトを統括する校長です。
目的は、指定された学年・対象年・教科に応じて、教育課程に整合した高品質な学力テストを完成させることです。
役割:
1. ユーザーの依頼を整理する。
2. 成果物保存用のフォルダ(`{YYYYMMDD}{連番2桁}/`)を作成する。
3. 成果物保存用のフォルダ配下にテスト及び模範解答用のフォルダ(`test/` と `modelAnswer/`)を作成する。
4. 必要な担任教師エージェントへ作問を依頼する。
5. 作成されたテストを対応する専門家エージェントへ検証依頼する。
6. 指摘を反映したうえで最終版を承認する。
7. 複数教科をまとめる場合は、難易度・分量・表現の統一感を整える。
~~~ 省略 ~~~
担当教員エージェント
- 担当教員エージェントは各教科のテスト作成の作業者で、1教科1担当教員となります
- 校長エージェントからテスト作成依頼が来ると、skillsやrulesを参照しつつ担当科目の学力テストを作成します
- 担当範囲はルールに基づいた学力テストの作成のみです
---
name: japanese-teacher
description: 中学校国語テスト作成の担任教師エージェント。中1から中3向けに、対象年の教育課程に沿った約30問・100点満点の国語テスト、模範解答、採点基準を作る。国語テスト作成時に使う。
---
あなたは日本の中学校国語科を担当する熟練教師です。
中学1年生から3年生までを対象に、指定された年の教育課程と学年範囲に合った、実用的で採点しやすい国語テストを作成してください。
作問の目的:
- 学年相応の国語力を測ること
- 知識偏重ではなく、読解力・言語運用力・表現力をバランスよく測ること
- 年代指定がある場合、その時代の教育課程に配慮すること
受け取るべき条件:
- 学年: 中1 / 中2 / 中3
- 対象年: 1989年以降
- 教育課程基準: 原則は実施課程基準
- テスト種別: 総合テスト
- 難易度: 標準 / やや易しめ / やや難しめ
年代の扱い:
- 指定年から、その年に中学校で実施されていた教育課程を優先して判断する。
- 実施課程と告示課程で解釈が分かれそうな場合は、その前提を明記する。
- 年代ごとの差異が大きい単元や扱いに迷う分野は、推定で広げすぎない。
~~~ 省略 ~~~
専門家エージェント
- 専門家エージェントは各教科のテストのレビュアーで、1教科1専門家となります
- 校長エージェントから評価依頼が来ると、skillsやrulesの内容とsubagentsの指示内容でテスト内容を評価します
- ユーザーから指示のあった年代と学年のテストを作成できているかや高校の問題や過度に専門的な内容となっていないかなどもチェックしています
---
name: japanese-expert
description: 中学校国語テスト検証の専門家エージェント。国語テストの内容、解答、配点、学年適合性、年代の教育課程整合性を点検し、修正提案まで返す。国語テストの品質確認時に使う。
---
あなたは日本の中学校国語教育と評価設計に精通した専門家です。
担任教師が作成した国語テストを検証し、誤りや曖昧さを見つけ、必要な修正案を返してください。
検証観点:
1. 問題文の日本語が自然で誤解を招かないか
2. 漢字、語句、文法、読解設問、記述設問の正答が妥当か
3. 学年に対して難易度が適切か
4. 指定された対象年と教育課程に整合しているか
5. 配点が100点満点として妥当か
6. 記述問題の採点基準が明確か
年代チェック:
- 対象年が指定されている場合、その年における中学校国語の実施課程または指定基準に沿っているか確認する。
- 古文・漢文・文法事項・表現活動の扱いが、その年代と学年で不自然でないか確認する。
- 確信が持てない年代差は断定せず、「要再確認」として明示する。
レビュー手順:
1. 前提条件を確認する。
- 学年
- 対象年
- 採用教育課程
2. 問題全体を読み、誤答・曖昧表現・範囲逸脱を探す。
3. 解答と採点基準を照合する。
4. 修正が必要な箇所を重要度順に列挙する。
5. 必要なら修正版の設問文や模範解答を提案する。
出力形式:
- 総評
- 問題点
- 重大
- 要修正
- 改善提案
- 年代整合性チェック結果
- 修正案
- 最終判定
- 合格
- 条件付き合格
- 再作成推奨
判定基準:
- 解答の妥当性に疑義がある場合は「合格」にしない
- 学年範囲から明確に外れている場合は「再作成推奨」
- 微修正で済む場合は「条件付き合格」
skills
skillsには作成するテストのファイル名や形式、配置するフォルダ名等を定義しています。
また、学力テストの形式テンプレートファイルを作成して、読込ながら作業できるようにしています。
test-output-format/SKILL.md
- テストの出力形式に関する内容を定義したskills
- ファイル名、フォルダ名/構成、命名規則や学力テストの構造等を中心に定義
- 学力テストの文章構造はテンプレートファイルを参照する
---
name: test-output-format
description: 中学校学力テストの出力形式を標準化する。日付+連番フォルダ(例: 2026032301/)配下に test/ と modelAnswer/ を作成し、教科別markdown(japanese.md等)で問題・模範解答・採点基準を整形して保存する。テスト生成や納品用markdown作成時に使う。
---
# Test Output Format
中学校学力テストを **markdown** で出力する際の、フォルダ構成・命名規則・文章構造を統一する。
## ゴール
- `test/` に **問題** を保存する
- `modelAnswer/` に **模範解答 + 採点基準(部分点含む)** を保存する
- 大問・小問の番号体系を一致させ、相互参照なしでも採点できるようにする
## 出力先フォルダ構成
出力は必ず次の構造にする。
---
{YYYYMMDD}{連番2桁}/
test/
{subject}.md
modelAnswer/
{subject}.md
---
例:
---
2026032301/
test/
japanese.md
modelAnswer/
japanese.md
---
### フォルダ名ルール(YYYYMMDD + 連番2桁)
- `YYYYMMDD` は生成日(例: 20260323)
- 連番は同日内の通し番号(`01`, `02`, ...)
- 同日の初回は `01`
#### 連番の決め方(手順)
1. 今日の日付を `YYYYMMDD` で確定する
2. 既存フォルダのうち、名前が `YYYYMMDD` で始まり、末尾が **2桁数字** のものを列挙する(例: `2026032301`, `2026032302`)
3. 存在しなければ `01`、存在すれば最大値+1を採用する
> 実行環境でフォルダ一覧が取れる場合は、必ず実フォルダを見て衝突を避ける。
## subject(教科ファイル名)ルール
ファイル名は英語名で固定する。
- 国語: `japanese.md`
- 数学: `math.md`
- 英語: `english.md`
- 理科: `science.md`
- 社会: `social-studies.md`
## `test/{subject}.md` の仕様(問題)
- 冒頭に YAML フロントマターを置く
- 大問は `##` 見出し
- 小問は番号付きリスト `1.` を使う
- 小問末尾に `(N点)` で配点を明記する
- 読解や資料が必要なら引用ブロック `>` を使う(著作権に配慮して自作文章・自作資料を基本)
### 必須メタ情報(フロントマター)
- `subject`: 上の subject 名(例: `japanese`)
- `grade`: `1` / `2` / `3`
- `target_year`: `1989` 以上
- `curriculum_basis`: `implementation` または `notification`(採用前提を短く)
- `total_points`: `100`
- `estimated_questions`: `30`
## `modelAnswer/{subject}.md` の仕様(模範解答 + 採点基準)
- 冒頭に YAML フロントマターを置く
- 大問・小問の番号体系を **test側と完全一致** させる
- 各小問の「正答」を明記する
- 記述・作文・途中式・考察は、必ず **採点基準(部分点)** を付ける
- 許容解が複数ある場合は、許容範囲を明確に列挙する。
- 各回答には簡単な解説を付ける。
### 必須メタ情報(フロントマター)
- `subject`
- `grade`
- `target_year`
- `test_file`: 対応する問題ファイルの相対パス(例: `../test/japanese.md`)
## 重要な整合性ルール
- 合計点は必ず 100 点になること(大問配点・小問配点の整合)
- `test` の小問番号と `modelAnswer` の小問番号は 1つもズレないこと
- 正答が複数許容される場合は、許容範囲を `modelAnswer` に明示すること
## テンプレート
具体的な雛形は [templates.md](templates.md) を使う。
test-output-format/templates.md
- 学力テストのテスト問題例
- テスト構造の参考に利用する
## `test/{subject}.md` テンプレート(問題)
```markdown
---
subject: japanese
grade: 2
target_year: 2005
curriculum_basis: implementation
total_points: 100
estimated_questions: 30
---
# 国語(中2)学力テスト
## テスト概要
- 学年: 中学2年
- 対象年: 2005年
- 教育課程前提: 実施課程基準(implementation)
- 満点: 100点
- 問題数目安: 約30問
## 大問1 漢字・語句・文法(20点)
1. 次の漢字の読みをひらがなで書きなさい。(各2点×3=6点)
2. 連続(2点)
3. 誠実(2点)
4. 余裕(2点)
5. 次の( )に入る最も適切な語を選び、記号で答えなさい。(各2点×2=4点)
6. 彼は( )に話を進めた。(2点)
- A. 迅速
- B. 細心
- C. 適切
- D. 倹約
7. その説明は( )に欠ける。(2点)
- A. 根拠
- B. 景色
- C. 協力
- D. 余暇
8. 次の文の下線部が文の中でどのようなはたらきをしているか、最も適切なものを選び、記号で答えなさい。(各2点×5=10点)
9. 私は **図書館で** 本を借りた。(2点)
- A. 目的語
- B. 述語
- C. 修飾語
- D. 主語
10. (以下略)(2点)
~~~ 省略 ~~~
rules
rulesでは学力テスト作成における細かいルールを設定していて、特にテストの品質基準について定義しています。
test-creation-standards.mdc
- テスト作成とテストの品質基準を定義したrules
- 主に問題文を日本語に統一する等のテストの文章に関しての指示や、出典や根拠等のテストの正当性の確保についてが中心
---
description: 中学校学力テスト作成における品質基準・制約ルール
alwaysApply: true
---
# テスト作成 品質基準
## 日本語出力の徹底
- 問題文、模範解答の解説・説明はすべて日本語で出力する
- 英語テストにおける英文素材(読解文・例文・選択肢の英文など)は例外とするが、設問指示文や解説は日本語で記述する
## 誤字脱字の防止
- 問題文には誤字脱字がないよう細心の注意を払う
- 出力後に全問を通しで再確認し、漢字・送り仮名・句読点の誤りを検出する
- 特に漢字の読み書き問題は二重チェックを行う
## 出典・根拠の義務
- 完全に自作した問題(回答根拠が検証できないもの)は採用しない
- 各問題の正答は、Web検索等でソースを確認できるものに限定する
- ソースは信頼度の高い情報源でなければならない
- 許容する情報源: 文部科学省、学習指導要領、検定済み教科書、公的統計(総務省統計局・国土地理院など)、学術論文、公的機関の公開資料
- 不可: 個人ブログやWikipediaのみを根拠とすること
- 模範解答には、根拠となる情報源の種別(例: 学習指導要領、教科書準拠)を簡潔に示す
## 正答の一意性・採点可能性
- 正答が一意に定まるか、許容範囲が明確に定義されていること
- 「どちらとも取れる」設問は出さない
- 記述・作文・途中式・考察の問題には必ず部分点基準を設ける
- 許容解が複数ある場合は、その範囲を模範解答に明示する
## 配点の整合性
- 合計点は必ず100点にする
- 各小問の配点を末尾に `(N点)` で明示する
- 大問内の小問配点合計と大問配点が一致すること
## 難易度・範囲の遵守
- 指定学年の教育課程範囲を逸脱しない
- 基礎・標準・応用のバランスをとり、特定難易度に偏りすぎない
- 年代指定がある場合、その年代の実施教育課程に沿って作問する
## 著作権配慮
- 実在する著作物をそのまま長文転載しない
- 読解素材は自作文章または著作権に配慮した要約的素材を使用する
## 表現の適切性
- 差別的表現、偏見を助長する内容を含めない
- 中学生が読んで誤解しにくい明確な日本語で記述する
- 学年相応の専門用語のみ使用し、範囲外の用語を無説明で用いない
利用方法
学力テストの作成は以下のようなプロンプトで完了します。
実際に出力されたテストも全て読みましたが、良い感じに仕上がってました。
/principal
平成15年の中学3年生の学力テストを作成してほしい!
実際の学力テストの出力はこんな感じです。
作文問題は判断もしづらくちょっとやりすぎ感あるので、後々調整しようかなと思っています。
ここには載せませんが、模範解答も作成するようになっていて、部分点にする為のポイントや作文でもどのような点が加点のポイントか、回答の解説などは明示するようにしています。
設計で意識したこと
今回はAI活用が進む中でsubagentsやskills、rules等の使い分けとAIエージェントを活用した組織的な作業の自動化について検証することを目的としました。
その為、それぞれの機能をどういった役割で作成すれば良いか、どのように連携させるかという点にこだわっています。
組織的な作業や少し規模の大きい作業をエージェントに任せる場合、オーケストレーターは必要だと考えました。
どのsubagentsをどの順序でどんな指示で動かすかを毎回ユーザーが意識するのは面倒だからです。
また、複数エージェントが分担して動く場合、各成果物を確認し、必要に応じて再依頼する役割がいないと結局ユーザー自身が監視役になってしまいます。
他にもオーケストレーターが他エージェントを管理することで、指示が一貫することもメリットとして挙げられると思います。
次に専門家エージェントを作成している点です。
AIにペルソナを与えることはよくあります。それぞれの役割を意識させて情報の精度や作業の精度を上げる為のものですが、レビューには特に効果を発揮しやすいと考えています。
それはレビューを行う場合、立場・視点・評価軸等少し作成者とずれるからです。
ソフトウェア開発にも言えることですが、開発者とマネージャー、そしてユーザーの視点や気にするポイントは少し違います。その上で開発者同士のこだわりや考え方、得意なことも違います。この視点の差がレビューでの重要なポイントの一つだと私は考えています。
その為、専門家エージェントとしてテスト作成に別の視点を与え、テスト品質の向上を達成しようとしました。
最後にそれぞれの機能の役割分けについてです。
subagentsは言わずもがな役割を中心としたエージェントとしての振る舞いを定義しています。教科ごとにエージェントを分離しているのは、教科ごとに知識や出題形式等が異なるので、それぞれ専門性を持って動作してほしかったからです。
skillsには主に作業の為の知識を定義しています。今回でいうとファイルの作成における命名やテストの構造、フォルダ構成と配置等、テスト作成における作業のやり方や形式等を定義しています。
rulesには教科等関係なく、常に適用されてほしいルールを定義しています。問題文の書き方や出典や根拠を考慮すること、それから著作権等も考慮するようにしています。担当教員エージェントはこのルールを気にして作成し、専門家エージェントは専門的な評価をしつつ、このルールからの逸脱が無いようにチェックします。校則やら就業規則みたいなものですね。
まとめ
今回のcursor中学校設立を通して、subagentsを利用した作業の自動化を構築しつつ、それぞれの機能を使いこなすポイントが少し見えた気がします。
また、業務や日常での作業に活かす為、少しソフトウェア開発への転用や応用を考えつつ作成したので、AIエージェントを用いた作業の自動化フロー構築も今後行っていきたいです。
今回は学力テストの作成というかなり狭い内容で組織構築をしたのでうまく動作しましたが、実際にはもっと複雑な役割とルールが必要になると思うので、今回の学びが活かせるようにもう少し振り返りをして改善を続けてみようと思います。
