
Kiro University Challenge の Lessons 1〜4をクリアしてみた
はじめに
Kiro の使い方を 1 週間で学ぶオンラインチャレンジ、Kiro University Challenge が 2026年9月21日から10月5日にかけて開催されています。
Kiro の機能をレッスン形式で実践し、成果物を GitHub リポジトリとして提出するとクレジットが獲得できます。最大獲得クレジットは 5,250 で、Kiro Pro Max($100/月・5,000 クレジット)を上回るクレジットです。
今回は、AWS What's New の RSS をもとに通知を行うツールを Kiro で作成することにして、オンラインチャレンジの Lessons 1〜4に取り組みました。記事執筆時点で公開されていた Lessons 1-4(Spec・Steering・Hooks・PBT)を、Kiro CLI 中心に進めた結果を紹介します。
Kiro University Challenge とは
参加費は無料で、レッスンごとにクレジットが配分されます。
| 対象 | クレジット |
|---|---|
| Lessons 1-3 | 各 250(最大 750) |
| Lessons 4-5 | 各 500(最大 1,000) |
| Lessons 6-7 | 各 1,000(最大 2,000) |
| 全 7 必須レッスンの完走特典 | 1,000 |
| Bonus Lesson 1(有料プランのみ) | 250 |
| Bonus Lesson 2 | 250 |
| 最大合計 | 5,250 |
詳細は公式の AWS ブログを参照してください。
エントリー準備
参加条件は公式ページの Terms に記載されています。日本は除外地域に含まれていないため、以下の条件を満たせばエントリーできます。
- 18 歳以上
- Kiro アカウントを持っていること
- X または LinkedIn のアカウントを持っていること
- 参加に使う GitHub アカウントが作成から 3 か月以上経過していること
- 1 人 1 エントリー、個人参加(チーム参加は不可)
- 除外地域に居住していないこと(日本は除外地域に含まれません)
- AWS の従業員とその同居家族・世帯構成員は対象外
提出物の要件は次のとおりです。最初の commit は所定の時刻以降である必要があるため、チャレンジ開始後にリポジトリを作成し、最初の commit を行うのが確実です。
- 公開 GitHub リポジトリ(最初の commit が 9/21 9:00 PT 以降)
- .kiro フォルダを含める
- 30 秒〜3 分のデモ動画
- X または LinkedIn に #KiroUniversity #BuildWithKiro で公開投稿
- エントリーフォームから提出(9/25 開始、10/5 23:59 PT 締切)
リポジトリは gh CLI で作りました。公開必須なので --public を指定します。
gh repo create kiro-university-challenge-2026 \
--public \
--description "AWS What's New Notifier — built for Kiro University Challenge 2026 (Lessons 1-4)"
今回作ったリポジトリはこちらです。以降の Spec・Steering・Hooks の実物はここに置いてあります。
Lesson 1: Spec-driven development
Spec は実装前に要件を文書化し、Kiro が参照して実装を進めるための仕様書です。要件は EARS 記法で書きます。トリガー条件を WHEN、システムの振る舞いを THE SYSTEM SHALL で表す形式で、条件と振る舞いが 1 対 1 に対応するため、実装とテストの両方の根拠にできます。日本語・英語どちらでも書けます。
今回は AWS What's New の RSS を取得源として Spec を書きました。RSS の取得、分類、フィルタリング、SNS 通知、dry run の要件をまとめています。全文はリポジトリを参照してください。
今回は日本語で書いた要件を Kiro に英訳させて反映しています。フィルタリング部分の抜粋です。
日本語で書いた要件:
除外カテゴリのルールに一致するアイテムは、スキップしてその理由をログに記録する
すべてのフィルタールールを通過したアイテムは、要約・通知の対象としてマークする
Kiro が英訳した結果:
WHEN an item matches an exclude_categories rule
THE SYSTEM SHALL skip the item and record the exclusion reason in the run log
WHEN an item passes all filter rules
THE SYSTEM SHALL mark it as eligible for summarization and notification

Lesson 2: Steering documents
Steering は、プロジェクト全体に適用したいコーディング規約を Kiro に常時読ませておくためのファイルです。Spec が「何を作るか」、Steering が「どう書くか」を担当します。
.kiro/steering/python-style.md に Python の規約を置きました。英語で書いています。良い例と悪い例を併記すると、生成されるコードを規約に沿わせやすくなります。全文はリポジトリを参照してください。
型ヒントのルールを日本語で書いた内容:
すべての関数に型ヒントを付ける。戻り値が None の場合も `-> None` を明示する。
# Good
def fetch_rss(url: str, timeout: int = 30) -> str:
...
# Bad
def fetch_rss(url, timeout=30):
...
Kiro が英訳した結果:
Add type hints to every function. Always annotate `-> None` explicitly when a function returns nothing.
# Good
def fetch_rss(url: str, timeout: int = 30) -> str:
...
# Bad
def fetch_rss(url, timeout=30):
...
Lesson 3: Hooks
Hooks はファイル操作などのイベントを契機にコマンドを実行する仕組みです。.kiro/hooks/hooks.json に PostFileSave を 2 つ設定しました。matcher は正規表現で、設定ファイルの保存時にはスキーマ検証、src/ 配下の Python ファイルの保存時にはテストを実行します。
{
"version": "v1",
"hooks": [
{
"name": "Validate filter config on save",
"trigger": "PostFileSave",
"matcher": "config/filter_config\\.yaml$",
"action": {
"type": "command",
"command": "python3 -c \"\nimport yaml, sys\ntry:\n with open('config/filter_config.yaml') as f:\n cfg = yaml.safe_load(f)\n required = ['exclude_categories', 'exclude_keywords', 'region_expansion', 'sns']\n missing = [k for k in required if k not in cfg]\n if missing:\n print(f'ERROR: filter_config.yaml missing keys: {missing}', file=sys.stderr)\n sys.exit(1)\n print('OK: filter_config.yaml is valid')\nexcept yaml.YAMLError as e:\n print(f'ERROR: YAML parse error: {e}', file=sys.stderr)\n sys.exit(1)\n\""
}
},
{
"name": "Run tests on src/ save",
"trigger": "PostFileSave",
"matcher": "src/.*\\.py$",
"action": {
"type": "command",
"command": "python3 -m pytest tests/ -q --tb=short 2>&1 | tail -20"
}
}
]
}

Lesson 4: Property-based testing
Property-based testing(PBT)は、個別の入力と期待値を並べる例ベースのテストとは異なり、入力を自動生成して「どの入力でも成り立つ性質」を検証します。フィルタリングのように入力の組み合わせが多い処理では、想定していなかった入力の組み合わせも自動で試せます。
このレッスンは Kiro IDE でのみ実行できます。CLI で作業していたリポジトリを IDE で開き、Lesson 1 で書いた Spec を指定して PBT テストの生成を依頼しました。
生成されたテストを実行した結果です。
tests/test_filter_properties.py::test_excluded_category_always_fails PASSED [ 20%]
tests/test_filter_properties.py::test_excluded_keyword_in_title_always_fails PASSED [ 40%]
tests/test_filter_properties.py::test_no_exclusion_always_passes PASSED [ 60%]
tests/test_filter_properties.py::test_region_expansion_disabled_passes_region_announcements PASSED [ 80%]
tests/test_filter_properties.py::test_region_expansion_enabled_excludes_non_allow_region PASSED [100%]
5 passed in 0.32s

最終課題に向けて
Lessons 1-4 を終えた時点の .kiro/ は次の構成です。この構成で、提出要件である .kiro フォルダを用意できます。
.kiro/
├── hooks/
│ └── hooks.json
├── specs/
│ └── filter-and-notify.md
└── steering/
└── python-style.md
.kiro/ を含めてリポジトリへプッシュすれば、リポジトリ側の準備は完了です。残る提出物はデモ動画と SNS 投稿です。Lessons 5-7 は 9/23〜9/24 に公開予定のため、公開後に対応予定です。
エントリーフォームは記事執筆時点(9/23)ではまだ受付を開始しておらず、9/25 に受付開始予定と案内されています。
まとめ
Kiro の Spec・Steering・Hooks・PBT を実践しながら学べる、実践的なオンラインチャレンジです。
必須レッスン 1〜7 は無料プランで完走できるとされています。Kiro を試すきっかけとして活用してみてください。
Kiro を普段の開発で使っている場合でも、追加の環境構築はほぼ不要で参加でき、普段あまり使っていない機能に触れる機会にもなりそうです。
課題の提出締切は 10 月 6 日 15:59(日本時間)です。応募条件を満たす GitHub アカウントや X アカウントをお持ちなら、ぜひ参加してみてください。







