はじめに
AWS re:Invent 2025のワークショップで、次世代AIアシスタント「Kiro」を使ってブラウザベースの2Dプラットフォーマーゲーム「Super Kiro World」を開発しました。
この記事では、Kiroがどのようにゲーム開発をサポートしてくれたのか、そしてAIアシスタントと協働することで開発プロセスがどう変わるのかを、実際のプロジェクトを通じて詳しく紹介します。
この記事で分かること:
- Kiroの特徴と他のAIアシスタントとの違い
- Spec駆動開発による段階的なゲーム開発プロセス
- AIと協働する新しい開発体験
- 実装の詳細とテスト戦略
Kiroとは? - 開発者のためのAIパートナー
Kiroは、開発者向けに設計された次世代AIアシスタント兼IDEです。単なるコード補完ツールや質問応答システムではなく、プロジェクト全体を理解し、設計から実装、テストまで一貫してサポートする開発パートナーとして機能します。
他のAIアシスタントとの違い
従来のAIコーディングアシスタントは、主に以下のような機能を提供します:
- コード補完(次の行を予測)
- 単発の質問への回答
- コードスニペットの生成
しかし、Kiroはこれらを超えて、プロジェクト全体のライフサイクルをサポートします:
- 要件定義から設計、実装、テストまでの一貫したサポート
- プロジェクト固有のルールやコンテキストの理解
- 段階的な開発プロセスの管理
- 自動化されたワークフローの構築
Kiroの主な特徴
1. Spec(仕様)駆動開発 - 構造化されたアプローチ
Kiroの最大の特徴は、Spec駆動開発です。これは、複雑な機能を段階的に開発するための構造化されたアプローチです。
Specの構成要素:
- requirements.md: 何を作るか(要件定義)
- design.md: どう作るか(設計書)
- tasks.md: 実装タスクの管理
なぜSpec駆動開発が重要か:
従来のAIアシスタントとの対話では、「ゲームを作って」と言うと、一気にコードを生成しようとします。しかし、これには問題があります:
- 要件が曖昧なまま実装が始まる
- 設計の意図が不明確
- 後から変更が困難
- テスト戦略が考慮されない
Kiroのspec駆動開発では:
- 要件を明確化: 何を作るのか、どんな機能が必要かを文書化
- 設計を検討: アーキテクチャ、データ構造、エラーハンドリングを設計
- タスクに分解: 実装を小さなタスクに分割
- 段階的に実装: 各タスクを順番に実装し、テスト
- フィードバック: 各ステップで確認し、必要に応じて調整
これにより、常に動作するバージョンを維持しながら、段階的に機能を追加できます。
2. Steering(ステアリング)ルール - プロジェクト固有の知識
Steeringルールは、プロジェクト固有のルールやガイドラインを.kiro/steering/ディレクトリに保存する仕組みです。
Steeringルールの例:
.kiro/steering/
├── tech.md # 技術スタック、使用ライブラリ、コマンド
├── structure.md # プロジェクト構造、ファイル配置
├── product.md # 製品概要、ターゲットユーザー
├── game-style-guide.md # ビジュアルガイドライン、カラーパレット
└── app-building-rules.md # 開発ルール、哲学
Steeringルールの威力:
例えば、tech.mdに以下のように記述しておくと:
# Technology Stack
- Frontend: HTML5 Canvas, Vanilla JavaScript
- Backend: Python 3, Flask 3.0.0
- Game Constants: Gravity 0.5, Jump Power 12
Kiroは常にこれらの情報を考慮して提案を行います。「ジャンプ力を調整したい」と言えば、Kiroは自動的にJUMP_POWER = 12の定数を参照し、適切な値を提案します。
プロジェクトが大きくなるほど効果を発揮:
- 新しいメンバーがプロジェクトに参加しても、Steeringルールを読めばプロジェクトの方針が分かる
- Kiroは常にプロジェクトのルールに従った提案を行う
- チーム全体で一貫した開発スタイルを維持できる
3. コンテキスト理解 - プロジェクト全体を把握
Kiroは、チャット内で特殊な記法を使ってコンテキストを参照できます:
-
#File: 特定のファイルを参照 -
#Folder: フォルダ全体を参照 -
#Codebase: コードベース全体をスキャン -
#Problems: 現在のエラーや警告を確認 -
#Terminal: ターミナル出力を参照 -
#Git Diff: 変更差分を確認
実際の使用例:
「#File game.js のパーティクルシステムを最適化して」
→ Kiroはgame.jsの内容を理解した上で最適化を提案
「#Problems を見て、エラーを修正して」
→ Kiroは現在のエラーを確認し、修正方法を提案
「#Codebase で未使用の関数を探して」
→ Kiroはプロジェクト全体をスキャンして未使用コードを検出
これにより、Kiroは常にプロジェクトの最新状態を理解した上で提案を行います。
4. Agent Hooks(エージェントフック) - ワークフローの自動化
Agent Hooksは、特定のイベントが発生したときに自動的にKiroを実行する機能です。
Hooksの例:
- ファイル保存時: 自動的にテストを実行
- コミット前: リントとフォーマットを実行
- 翻訳ファイル更新時: 他の言語ファイルも自動更新
- 手動トリガー: ボタンクリックでREADMEの文法チェック
ゲーム開発での活用例:
// ファイル保存時に自動的にゲームをリロード
{
"trigger": "onFileSave",
"pattern": "game.js",
"action": "reload-browser"
}
これにより、開発ワークフローを自動化し、生産性を向上できます。
5. 自律モード - 開発スタイルに合わせた動作
Kiroは2つの動作モードを提供します:
- Autopilotモード: Kiroが自律的にファイルを変更し、実装を進める
- Supervisedモード: 各変更を確認してから適用する
使い分けの例:
- 新機能の実装: Autopilotモードで素早く実装
- 重要なリファクタリング: Supervisedモードで慎重に確認
- バグ修正: Supervisedモードで影響範囲を確認
Kiroの強み - なぜゲーム開発に適しているのか
1. 反復的な開発プロセスに最適
ゲーム開発は、プレイして、調整して、また実装するという反復プロセスです。Kiroのspec駆動開発は、この反復プロセスと相性が良いです:
- 基本的な動作を実装
- プレイしてフィードバック
- Kiroに改善を依頼
- 再度プレイして確認
2. 複雑な状態管理をサポート
ゲームは複雑な状態管理が必要です(プレイヤーの位置、速度、スコア、ライフ、ゲーム状態など)。Kiroは:
- 状態の依存関係を理解
- 状態遷移のバグを検出
- 適切なデータ構造を提案
3. パフォーマンスを考慮した実装
ゲームは60FPSを維持する必要があります。Kiroは:
- パフォーマンスボトルネックを特定
- 最適化手法を提案(オブジェクトプーリング、バッチレンダリングなど)
- メモリ管理を考慮した実装
4. 視覚的なフィードバックの実装
ゲームには視覚的なフィードバックが重要です。Kiroは:
- パーティクルシステムの設計と実装
- アニメーションの実装
- カラーパレットの提案(Steeringルールから)
5. テスト戦略の提案
ゲームのテストは難しいですが、Kiroは:
- プロパティベーステストの設計
- エッジケースの特定
- テストの自動化
プロジェクト概要:Super Kiro World
ゲームの特徴
Super Kiro Worldは、HTML5 CanvasとバニラJavaScriptで構築された2Dプラットフォーマーゲームです。
主な機能:
- スムーズな物理演算(重力0.5、ジャンプ力12)
- レスポンシブな操作(矢印キー/WASD + スペースキー)
- スクロールカメラがプレイヤーを追従
- 収集可能な紫色のオーブ(各10ポイント)
- ライフシステム(3ライフでスタート)
- レベルクリア機能(ゴールフラグに到達)
- ダークテーマとKiroブランドカラー(#790ECB)
技術スタック
フロントエンド
- HTML5 Canvas: ゲームレンダリング
- バニラJavaScript: ゲームロジックと物理演算
- CSS3: ダークテーマのUIスタイリング
バックエンド
- Python 3: ランタイム
- Flask 3.0.0: 静的ファイル配信用Webサーバー
開発環境
- Python venv: 依存関係の分離
- シェルスクリプト: セットアップと実行の自動化
プロジェクト構造
.
├── index.html # メインHTMLページ
├── game.js # ゲームロジック、物理演算、レンダリング
├── server.py # Flask静的ファイルサーバー
├── kiro-logo.png # プレイヤースプライト画像
├── requirements.txt # Python依存関係
├── setup.sh # 環境セットアップスクリプト
├── run.sh # ゲーム起動スクリプト
├── game.test.js # Jestテストファイル
├── package.json # Node.js依存関係
└── .kiro/
└── steering/ # Kiroステアリングルール
├── tech.md # 技術スタック定義
├── structure.md # プロジェクト構造
├── product.md # 製品概要
├── game-style-guide.md # ビジュアルスタイルガイド
└── app-building-rules.md # 開発ルール
実装の詳細
1. ゲームループとレンダリング
function gameLoop() {
// 背景描画
drawBackground();
// 更新処理
updatePlayer();
updateCamera();
ParticleSystem.update();
// 描画処理(Z順)
drawPlatforms();
drawCollectibles();
ParticleSystem.render(ctx, camera.x);
drawGoal();
drawPlayer();
requestAnimationFrame(gameLoop);
}
60FPSを目標に、requestAnimationFrameを使用してスムーズなゲームループを実現しています。
2. 物理演算システム
const GRAVITY = 0.5;
const JUMP_POWER = 12;
const MOVE_SPEED = 5;
const FRICTION = 0.8;
function updatePlayer() {
// 水平移動
if (keys.left) {
player.velocityX = -MOVE_SPEED;
} else if (keys.right) {
player.velocityX = MOVE_SPEED;
} else {
player.velocityX *= FRICTION;
}
// ジャンプ
if (keys.jump && player.isGrounded) {
player.velocityY = -JUMP_POWER;
player.isGrounded = false;
}
// 重力適用
player.velocityY += GRAVITY;
// 位置更新
player.x += player.velocityX;
player.y += player.velocityY;
}
シンプルながら直感的な物理演算で、プラットフォーマーゲームらしい操作感を実現しています。
3. パーティクルシステム
ゲームに視覚的なフィードバックを追加するため、高度なパーティクルシステムを実装しました:
class Particle {
constructor(x, y, velocityX, velocityY, life, color, size, hasGravity, hasRotation) {
this.x = x;
this.y = y;
this.velocityX = velocityX;
this.velocityY = velocityY;
this.life = life;
this.maxLife = life;
this.color = color;
this.size = size;
this.opacity = 1.0;
this.hasGravity = hasGravity;
this.hasRotation = hasRotation;
this.rotation = hasRotation ? Math.random() * Math.PI * 2 : 0;
this.rotationSpeed = hasRotation ? (Math.random() - 0.5) * 0.2 : 0;
}
}
パーティクルエフェクトの種類:
- トレイルパーティクル: プレイヤーの移動時に生成(2-3個/フレーム、30フレーム寿命)
- 爆発パーティクル: 壁との衝突時(8-12個、40フレーム寿命、重力あり)
- スパークルパーティクル: アイテム収集時(6-8個、25フレーム寿命、放射状パターン)
- 紙吹雪パーティクル: ハイスコア達成時(30-50個、120フレーム寿命、回転あり)
4. スコア永続化
localStorageを使用してハイスコアを保存:
const ScoreManager = {
STORAGE_KEY: 'superKiroHighScore',
loadHighScore() {
try {
const stored = localStorage.getItem(this.STORAGE_KEY);
return stored ? parseInt(stored, 10) : 0;
} catch (e) {
console.warn('localStorage unavailable:', e);
return 0;
}
},
saveHighScore(score) {
try {
localStorage.setItem(this.STORAGE_KEY, score.toString());
} catch (e) {
console.warn('Failed to save high score:', e);
}
}
};
5. カメラシステム
プレイヤーをスムーズに追従するカメラ:
const CAMERA_SMOOTHNESS = 0.1;
function updateCamera() {
// カメラはプレイヤーを水平方向に追従
camera.targetX = player.x - canvas.width / 3;
// カメラをレベル境界内に保持
if (camera.targetX < 0) camera.targetX = 0;
// スムーズなカメラ移動
camera.x += (camera.targetX - camera.x) * CAMERA_SMOOTHNESS;
}
テスト戦略
Jestとfast-checkを使用したプロパティベーステストを実装:
import fc from 'fast-check';
describe('ScoreManager Property-Based Tests', () => {
test('saveHighScore and loadHighScore are inverse operations', () => {
fc.assert(
fc.property(fc.integer({ min: 0, max: 1000000 }), (score) => {
ScoreManager.saveHighScore(score);
const loaded = ScoreManager.loadHighScore();
return loaded === score;
})
);
});
});
Kiroとの開発体験 - 実際のワークフロー
Phase 1: プロジェクトのセットアップとSteeringルール
ワークショップの最初に、Kiroと一緒にプロジェクトの基盤を作りました。
Steeringルールの作成
プロジェクトでは、以下の5つのステアリングルールを設定しました:
1. tech.md - 技術スタックの定義
# Technology Stack
- Frontend: HTML5 Canvas, Vanilla JavaScript
- Backend: Python 3, Flask 3.0.0
- Game Constants: Gravity 0.5, Jump Power 12, Move Speed 5
このファイルにより、Kiroは常に使用する技術スタックを理解し、適切なコードを生成します。
2. structure.md - プロジェクト構造
# Project Structure
- index.html: Main HTML page with canvas
- game.js: Complete game logic, physics, rendering
- server.py: Flask server for serving static files
ファイルの役割を明確にすることで、Kiroは適切なファイルに適切なコードを配置します。
3. product.md - 製品概要
# Product Overview
Super Kiro World is a browser-based 2D platformer game.
Design Philosophy: Start small, build smart.
製品のビジョンを共有することで、Kiroは機能の優先順位を理解します。
4. game-style-guide.md - ビジュアルガイドライン
# Visual Style
- Primary Color: #790ECB (Kiro Purple)
- Dark Theme: #0a0a0a background
- 60 FPS target
デザインガイドラインにより、Kiroは一貫したビジュアルスタイルを維持します。
5. app-building-rules.md - 開発ルール
# Development Rules
- Start with simplest version
- Ask clarifying questions
- Get feedback after each task
- Use Kiro-logo.png as player sprite
開発の進め方を定義することで、Kiroは適切なペースで開発を進めます。
Steeringルールの効果:
これらのルールを設定した後、Kiroとの対話が劇的に改善しました:
- 「プレイヤーの移動速度を調整して」→ Kiroは自動的に
MOVE_SPEED = 5を参照 - 「新しいパーティクルエフェクトを追加して」→ Kiroは自動的に
#790ECBを使用 - 「テストを追加して」→ Kiroはプロパティベーステストを提案(開発ルールに従って)
Phase 2: Spec駆動開発でゲーム機能を追加
基本的なゲームができた後、Kiroと一緒に「スコア永続化とビジュアルエフェクト」機能を追加しました。ここでSpec駆動開発の真価が発揮されました。
Step 1: 要件定義(requirements.md)
まず、Kiroに「ハイスコア機能とパーティクルエフェクトを追加したい」と伝えました。Kiroは以下のような要件定義を作成しました:
## 1. Score Persistence
1.1 Persist current score to localStorage on game end
1.2 Load high score from localStorage on game initialization
1.3 Update high score when current score exceeds it
1.4 Handle edge cases: missing data, corrupted data, storage unavailable
1.5 Display both current score and high score in UI
## 2. Trail Particles
2.1 Generate 2-3 particles behind player every frame during movement
2.2 Fade out trail particles over 30 frames
2.3 Remove particles when life expires
2.4 Trail works identically for grounded and airborne movement
## 3. Explosion Particles
3.1 Generate 8-12 particles at collision point
3.2 Emit particles in multiple directions (at least 4 angles)
3.3 Apply gravity to explosion particles
3.4 Remove particles when they fall below canvas
3.5 Use purple brand color (#790ECB)
## 4. Sparkle Particles
4.1 Generate 6-8 particles when collecting orb
4.2 Emit in radial pattern (360-degree coverage)
4.3 Implement twinkling opacity animation
4.4 Remove particles after 25 frames
4.5 Use bright colors: white, gold, cyan
## 5. Confetti Particles
5.1 Trigger when achieving new high score
5.2 Spawn from top of screen (y <= 50)
5.3 Apply gravity and rotation
5.4 Remove when falling below canvas
5.5 Use multiple colors including purple
要件定義の重要性:
この段階で、Kiroと一緒に要件を明確化することで:
- 実装すべき機能が明確になる
- エッジケースを事前に考慮できる
- 後から「これも必要だった」という事態を防げる
Step 2: 設計(design.md)
次に、Kiroは詳細な設計書を作成しました。ここがKiroの真骨頂です。
アーキテクチャ設計:
## Architecture
1. Score Persistence Module: localStorage integration
2. Particle System: Unified system for all effects
3. Effect Generators: Factory functions for each effect type
4. Enhanced Game Loop: Particle update and render
データ構造設計:
class Particle {
x, y: number // World position
velocityX, velocityY: number // Velocity
life, maxLife: number // Lifetime
color: string // CSS color
size: number // Particle size
opacity: number // Current opacity
rotation: number // For confetti
rotationSpeed: number // For confetti
}
Correctness Properties(正しさの性質):
Kiroの設計書で特に素晴らしいのは、Correctness Propertiesの定義です。これは、システムが正しく動作するための性質を形式的に定義したものです:
Property 1: Score persistence on game end
For any game session that ends, persisting the current score
should result in the stored value matching the current score.
Property 4: Trail generation during movement
For any player state where horizontal velocity is non-zero,
updating the game should generate trail particles.
Property 14: Confetti trigger on new high score
For any score update where the new score exceeds the previous
high score, the update should trigger confetti generation.
これらの性質は、後でプロパティベーステストとして実装されます。
パフォーマンス考慮:
## Performance Considerations
- Target: 60 FPS with up to 500 active particles
- Particle updates: < 2ms per frame
- Particle rendering: < 3ms per frame
- Optimization: Object pooling, batch rendering
Kiroは、最初からパフォーマンスを考慮した設計を提案します。
Step 3: タスク分解(tasks.md)
設計が完了すると、Kiroは実装を小さなタスクに分解しました:
- [x] 1. Implement score persistence system
- Create ScoreManager module
- Add loadHighScore() and saveHighScore()
- Handle edge cases
- Update UI
- [x] 1.1 Write property test for score persistence
- Property 1: Score persistence on game end
- [x] 2. Create particle system foundation
- Define Particle class
- Create ParticleSystem module
- Implement update() and render()
- Add particle limit (500 max)
- [x] 3. Implement trail and explosion effects
- Create createTrailParticles()
- Create createExplosionParticles()
- Integrate with game loop
- [x] 4. Implement sparkle effects
- Create createSparkleParticles()
- Implement twinkling animation
- [x] 5. Implement confetti effects
- Create createConfettiParticles()
- Integrate with high score system
タスク分解の利点:
- 各タスクが小さく、理解しやすい
- 進捗が可視化される(チェックボックス)
- 各タスクを個別にテストできる
- 問題が発生しても、どのタスクで起きたか特定しやすい
Step 4: 段階的な実装
Kiroは、各タスクを順番に実装していきました。重要なのは、各タスクの後にゲームをプレイして確認したことです。
実装の流れ:
-
タスク1: スコア永続化
- Kiroが
ScoreManagerモジュールを実装 - ゲームをプレイして、スコアが保存されることを確認
- 「ハイスコア達成時に何か視覚的なフィードバックが欲しい」とフィードバック
- → タスク5(紙吹雪エフェクト)の優先度を上げる
- Kiroが
-
タスク2: パーティクルシステムの基盤
- Kiroが
ParticleクラスとParticleSystemを実装 - まだ視覚的な変化はないが、基盤ができたことを確認
- Kiroが
-
タスク3: トレイルと爆発エフェクト
- Kiroがトレイルパーティクルを実装
- ゲームをプレイすると、プレイヤーの後ろに紫の軌跡が!
- 「壁にぶつかったときのエフェクトがかっこいい!」
- 「でも、パーティクルが多すぎて重くなってない?」とフィードバック
- → Kiroがパーティクル数を調整(2-3個/フレーム)
-
タスク4: スパークルエフェクト
- Kiroがアイテム収集時のキラキラエフェクトを実装
- 「白、金、シアンの明るい色で、収集が楽しくなった!」
-
タスク5: 紙吹雪エフェクト
- Kiroがハイスコア達成時の紙吹雪を実装
- ゲームをプレイして、ハイスコアを達成すると画面上から紙吹雪が!
- 「これは気持ちいい!」
段階的実装の利点:
- 常に動作するバージョンを維持
- 各機能を個別にテストできる
- フィードバックを即座に反映できる
- 問題が発生しても、前のタスクに戻れる
Step 5: テストの実装
Kiroは、各機能に対してプロパティベーステストを実装しました。
プロパティベーステストの例:
// Property 1: Score persistence on game end
test('saveHighScore and loadHighScore are inverse operations', () => {
fc.assert(
fc.property(fc.integer({ min: 0, max: 1000000 }), (score) => {
ScoreManager.saveHighScore(score);
const loaded = ScoreManager.loadHighScore();
return loaded === score;
})
);
});
// Property 14: Confetti trigger on new high score
test('confetti triggers when score exceeds high score', () => {
fc.assert(
fc.property(
fc.integer({ min: 0, max: 1000 }),
fc.integer({ min: 0, max: 1000 }),
(currentScore, highScore) => {
if (currentScore > highScore) {
// Should trigger confetti
return shouldTriggerConfetti(currentScore, highScore);
}
return true;
}
)
);
});
プロパティベーステストの利点:
- 100回以上のランダムな入力でテスト
- エッジケースを自動的に発見
- 設計書の「Correctness Properties」を直接検証
Phase 3: 最適化とポリッシュ
基本機能が完成した後、Kiroと一緒にパフォーマンス最適化を行いました。
最適化の例:
-
パーティクル数の制限
- 「パーティクルが多すぎるとFPSが下がる」
- → Kiroが最大500個の制限を実装
-
カメラのスムージング
- 「カメラの動きがカクカクする」
- → Kiroが
CAMERA_SMOOTHNESS = 0.1を調整
-
衝突判定の最適化
- 「プラットフォームが多いと重くなる」
- → Kiroが空間分割を提案(今回は不要と判断)
開発フローのまとめ
Kiroとの開発フローは、以下のようなサイクルでした:
1. 要件を明確化(Kiroと対話)
↓
2. 設計を検討(Kiroが設計書を作成)
↓
3. タスクに分解(Kiroがタスクリストを作成)
↓
4. 実装(Kiroが実装、私が確認)
↓
5. プレイしてフィードバック
↓
6. 調整(必要に応じて2に戻る)
↓
7. テスト(Kiroがテストを実装)
↓
8. 次の機能へ(1に戻る)
このサイクルにより、常に動作するバージョンを維持しながら、段階的に機能を追加できました。
実行方法
初回セットアップ
chmod +x setup.sh
./setup.sh
ゲームの起動
chmod +x run.sh
./run.sh
ブラウザでhttp://localhost:5000にアクセスしてプレイできます。
操作方法
- 左移動: 左矢印キーまたはA
- 右移動: 右矢印キーまたはD
- ジャンプ: スペースキー
- リスタート: R(ゲームオーバーまたはクリア時)
Kiroから学んだこと - AIとの協働開発の未来
1. AIアシスタントは「ツール」ではなく「パートナー」
従来のAIコーディングアシスタントは、「コードを生成するツール」でした。しかし、Kiroは開発プロセス全体をサポートするパートナーです。
従来のツール:
- 「この関数を書いて」→ コードを生成
- 「このバグを修正して」→ 修正コードを生成
- 単発の質問と回答
Kiroとの協働:
- 「ハイスコア機能を追加したい」→ 要件定義から設計、実装、テストまで一貫してサポート
- 「パフォーマンスが気になる」→ ボトルネックを特定し、最適化戦略を提案
- プロジェクト全体を理解した上での提案
実感したこと:
Kiroと開発していると、ペアプログラミングをしている感覚になります。Kiroは:
- 私の意図を理解しようとする
- 曖昧な要件を明確化するために質問する
- 設計の選択肢を提示し、トレードオフを説明する
- 実装後にテストを提案する
これは、単にコードを生成するツールとは全く異なる体験です。
2. Steeringルールの重要性 - プロジェクトの「記憶」
Steeringルールは、プロジェクトの「記憶」として機能します。
なぜ重要か:
従来のAIアシスタントは、毎回同じ質問をされます:
- 「どの技術スタックを使っていますか?」
- 「どのカラーパレットを使いますか?」
- 「どのファイルに実装しますか?」
しかし、Steeringルールを設定すると、Kiroは常にプロジェクトのコンテキストを理解しています。
実際の効果:
ワークショップの後半、私は単に「新しいパーティクルエフェクトを追加して」と言いました。Kiroは:
-
game-style-guide.mdから#790ECBを参照 -
tech.mdからGRAVITY = 0.5を参照 -
structure.mdからgame.jsに実装すべきと判断 -
app-building-rules.mdから60FPSを維持すべきと理解
これらすべてを、私が明示的に指示することなく、Kiroが自動的に考慮しました。
チーム開発での威力:
Steeringルールは、チーム開発でさらに威力を発揮します:
- 新しいメンバーがプロジェクトに参加しても、Steeringルールを読めば方針が分かる
- Kiroは常にチームのルールに従った提案を行う
- コードレビューで「なぜこの実装?」という質問が減る
3. Spec駆動開発 - 「Start Small, Build Smart」の実践
「Start Small, Build Smart」は、このプロジェクトの哲学でした。Kiroのspec駆動開発は、この哲学を実践するための最適な方法でした。
従来の開発:
「ゲームを作って」
↓
一気に全機能を実装
↓
動かない、バグだらけ
↓
どこが問題か分からない
↓
最初からやり直し
Spec駆動開発:
「ゲームを作りたい」
↓
要件を明確化(何を作るか)
↓
設計を検討(どう作るか)
↓
タスクに分解(小さなステップ)
↓
1つずつ実装・テスト
↓
常に動作するバージョンを維持
実感したこと:
ワークショップの2時間で、以下の機能を実装できました:
- 基本的なプラットフォーマーゲーム
- スコア永続化システム
- 4種類のパーティクルエフェクト
- プロパティベーステスト
これは、spec駆動開発により、常に動作するバージョンを維持しながら、段階的に機能を追加できたからです。
もし一気に全機能を実装しようとしていたら、2時間では完成しなかったでしょう。
4. プロパティベーステスト - 設計と実装の橋渡し
Kiroが提案したプロパティベーステストは、設計書の「Correctness Properties」を直接検証するものでした。
従来のテスト:
test('score is saved', () => {
saveScore(100);
expect(loadScore()).toBe(100);
});
これは、特定のケース(100点)しかテストしていません。
プロパティベーステスト:
test('score persistence', () => {
fc.assert(
fc.property(fc.integer({ min: 0, max: 1000000 }), (score) => {
saveScore(score);
return loadScore() === score;
})
);
});
これは、0から100万までのランダムな値で100回以上テストします。
実感したこと:
プロパティベーステストにより、以下のバグを発見できました:
- 負の値を保存したときの挙動
- 非常に大きな値(100万点以上)の処理
- localStorageが無効な環境での動作
これらは、従来のテストでは見逃していたでしょう。
5. パフォーマンスを最初から考慮 - 後から最適化しない
Kiroの設計書には、最初からパフォーマンス目標が記載されていました:
## Performance Considerations
- Target: 60 FPS with up to 500 active particles
- Particle updates: < 2ms per frame
- Particle rendering: < 3ms per frame
なぜ重要か:
ゲーム開発では、「後から最適化すればいい」という考えは危険です。パフォーマンス問題は、アーキテクチャの根本的な問題であることが多いからです。
Kiroは、最初から:
- パーティクル数の制限(500個)
- オブジェクトプーリングの提案
- バッチレンダリングの検討
これらを考慮した設計を提案しました。
実感したこと:
ワークショップの最後まで、60FPSを維持できました。これは、Kiroが最初からパフォーマンスを考慮した設計を提案したからです。
6. 視覚的なフィードバックの重要性 - ゲームを「楽しく」する
Kiroは、単に「動くゲーム」ではなく、「楽しいゲーム」を作ることを理解していました。
パーティクルエフェクトの提案:
私が「アイテムを収集したときに何か反応が欲しい」と言うと、Kiroは:
- スパークルパーティクル(キラキラ)を提案
- 放射状パターンで視覚的に美しい
- 白、金、シアンの明るい色で「収集した!」という達成感
- トゥインクル(点滅)アニメーションで動きを追加
これは、単に「パーティクルを表示する」以上の、ゲームデザインの理解です。
実感したこと:
パーティクルエフェクトを追加した後、ゲームが劇的に楽しくなりました:
- プレイヤーの後ろの軌跡で、動きが気持ちいい
- 壁にぶつかったときの爆発で、衝突が分かりやすい
- アイテム収集のキラキラで、達成感がある
- ハイスコア達成の紙吹雪で、祝福される
これらは、Kiroが「ゲームを楽しくする」ことを理解していたからこそ実現できました。
Kiroの可能性 - ゲーム開発を超えて
今回はゲーム開発でKiroを使いましたが、Kiroの能力はゲーム開発に限定されません。
Kiroが得意な開発領域
1. 複雑な状態管理が必要なアプリケーション
- リアルタイムチャットアプリ
- データビジュアライゼーション
- ワークフローエンジン
Kiroは状態の依存関係を理解し、適切なアーキテクチャを提案します。
2. パフォーマンスが重要なアプリケーション
- 大規模データ処理
- リアルタイムシステム
- モバイルアプリ
Kiroは最初からパフォーマンスを考慮した設計を提案します。
3. 段階的に成長するプロジェクト
- MVP(最小実行可能製品)から始めるスタートアップ
- レガシーシステムのモダナイゼーション
- 新機能の追加
Kiroのspec駆動開発は、段階的な開発に最適です。
4. チーム開発
- Steeringルールでチームの知識を共有
- Agent Hooksでワークフローを自動化
- 一貫したコーディングスタイルを維持
Kiroを使うべき場面
Kiroが特に効果的な場面:
- プロジェクトの初期段階(アーキテクチャ設計)
- 新機能の追加(要件定義から実装まで)
- リファクタリング(設計の見直し)
- パフォーマンス最適化(ボトルネックの特定)
- テスト戦略の策定(プロパティベーステスト)
従来のツールで十分な場面:
- 単純なコード補完
- 既知のパターンの実装
- ドキュメントの参照
Kiroを最大限活用するためのヒント
1. Steeringルールを充実させる
プロジェクトの初期段階で、以下のSteeringルールを作成しましょう:
- 技術スタック(使用ライブラリ、バージョン)
- プロジェクト構造(ファイル配置、命名規則)
- コーディング規約(スタイルガイド、ベストプラクティス)
- ビジネスルール(ドメイン知識、制約)
2. Specを活用する
複雑な機能を追加するときは、Specを作成しましょう:
- 要件を明確化する
- 設計を文書化する
- タスクに分解する
- 段階的に実装する
3. フィードバックを積極的に行う
Kiroは対話を通じて学習します:
- 実装後に必ずテストする
- 気になる点は遠慮なく伝える
- 代替案を求める
- 「なぜ?」と質問する
4. Agent Hooksで自動化する
繰り返し作業はAgent Hooksで自動化しましょう:
- ファイル保存時にテスト実行
- コミット前にリント実行
- デプロイ前にビルド確認
まとめ - AIとの協働開発の未来
AWS re:Invent 2025のワークショップで、KiroとともにSuper Kiro Worldを開発した経験は、AIアシスタントがいかに開発プロセスを変革できるかを示しています。
Kiroが変えたこと
1. 開発プロセス
- 要件定義から設計、実装、テストまで一貫したサポート
- 段階的な開発により、常に動作するバージョンを維持
- フィードバックループの高速化
2. コードの品質
- 最初からパフォーマンスを考慮した設計
- プロパティベーステストによる網羅的なテスト
- 一貫したコーディングスタイル
3. 開発体験
- ペアプログラミングのような協働感
- 技術的な課題に集中できる
- 創造性を発揮できる
2時間で実現できたこと
- 完全に動作するプラットフォーマーゲーム
- スムーズな物理演算とカメラシステム
- スコア永続化システム
- 4種類のパーティクルエフェクト(トレイル、爆発、スパークル、紙吹雪)
- プロパティベーステストによる品質保証
- 60FPSを維持するパフォーマンス
これは、Kiroの以下の機能により実現できました:
- Spec駆動開発: 構造化されたアプローチで段階的に開発
- Steeringルール: プロジェクト固有の知識を活用
- コンテキスト理解: プロジェクト全体を把握した提案
- パフォーマンス考慮: 最初から最適化を意識
AIとの協働開発の未来
Kiroとの開発体験を通じて、AIアシスタントは「ツール」から「パートナー」へと進化していることを実感しました。
従来のツール:
- コードを生成する
- 質問に答える
- 単発のタスクを実行する
Kiroというパートナー:
- プロジェクト全体を理解する
- 設計から実装まで一貫してサポートする
- フィードバックを受けて改善する
- 開発者の意図を理解しようとする
個人開発でも大活躍なので、会社でも導入して欲しいです、、
