1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

インフラエンジニアがKiroのスペックモードで仕様駆動開発に挑戦! ECS Farete上にMinecraftサーバを構築するAWS CDKを作成

Posted at

AWS Kiroの概要

生成AIのビジネス利用が本格化している昨今、アプリ開発ではエージェントコーディングが注目を集めています。エージェントコーディング環境のメジャーどころとしては

  • VSCode + GitHub Copilot
  • Continue (VSCode + Claude)
  • Cursor

などでしょうか。
2025年7月にはAWSからもKiroというIDEがリリースされました。
Kiroでは大きく分けて以下に示す2つのモードで開発を進めることができます。

SPECモード

仕様駆動型開発と呼ばれる方法で、要求定義 → 設計 → タスクへの落とし込み → 実際のコードの生成というステップを踏んで開発を進めるモードです。企業で開発を進める際のようにそれぞれのステップでドキュメントを作成しながら、段階的に詳細化を進めていきます。要求定義、設計時点では、Markdown形式で仕様がまとめられるため、より大規模なアプリをチームで開発する場合や、あとあと仕様を確認する際に重宝しそうです。

Vibeモード

エージェントと対話形式で即座にコード生成を始めるモードです。 一般的なエージェントコーディングはこちらの方法を指すことが多いと思われます。

事前準備

前提スキルセット

今回は、Kiroの最大の特徴であるSPECモードで遊んでみました。 開発、コーディングといっても、表題の通り、筆者は社会生活を始めて2-3年はプログラマをしていましたが、その後20年以上インフラエンジニアとしてサーバーやネットワークの設計・構築を担当しております。ここ5-6年はAWS案件で自治体や官公庁のシステム構築を担当しておりました(特にガバメントクラウド)。以下に筆者のスキルセットを箇条書きします。

  • AWS Certified Solution Aarchitect Professional
  • IaCの経験はあるが、CloudFormation(CFn)のみ。AWS CDKはUdemyで講座を受講しながらハンズオンした程度
  • GitHubActionsでのCI/CD、awspecやcfn-lintによる多少のテスト自動化は経験あり
  • 若い時数年はプログラマ経験あり(VB6(死語)、ASP(VBScript(死語))、JavaScript)
  • 運用ツールとして2-300ステップのLambda(Python)数本が作成できるレベル

検証環境

そんな筆者が、今回はSPECモードでAWS CDK(TypeScript)を生成して環境構築、加えてちょっとしたLambdaを生成したいと思います。 作業にあたって、事前に下記の環境は整えてあります。

  • node.js実行環境
  • AWS CDK、TypeScript環境(npm。入れてなくても処理の中でKiroが設定してくれます。)
  • AWS CLI(アカウント、シークレットキーの発行とconfigureの実行)
  • Docker Desktop(Dockerイメージのビルドのため)
  • Alexaスキル作成用のアカウント

ゴール

最終的な目標は以下の通りです。

  • ECS Fargete上にJava版のMinecraftサーバを構築(自宅から子供たちが接続して遊ぶ)
  • ワールドデータはEFS上に永続化
  • AWS料金を最小限に抑えるため、下記の構成を採用する
    • あくまで個人利用なので、冗長性は全く考慮しない
    • FargateのフロントにELB(NLB)を配置すると料金がかかるので、それは回避してECSタスクに直接パブリックIPを付与
    • 毎日23時にECSタスク数を0にするLambdaを作成(Event Bridgeから呼び出し)
    • 筆者が家にいない場合でも、子供が自分でECSタスクを起動・停止できるよう、Alexaスキルを作成

実践

ステップ1:要求を定義

では早速KiroのSPECモードを実行。 まずは、要求ドキュメント(requrirements.md)を生成します。 Kiroにプロンプトを投入していきます。

image-1.png

ほぼ、上記の最終目標を入力していくだけ、Kiroが要求ドキュメントを仕上げてくれます。

image-2.png

意図が伝わったようです。 この段階で、reurements.mdを見てみましょう。

image-3.png

プロンプトに投入した内容を、ユーザーストーリー(背景)と受け入れ要件(何が満たされれば目標達成なのか)にまとめられます。 記載が十分であれば次のステップ(設計)に進みます。 もう少し要件を足したい場合はプロンプトに続きを投入します。

image-4.png

ちょっと要求を追加します。
image-5.png

このような感じでやりとりを続けていき要求ドキュメントが仕上がったら、次は設計です。

ステップ2:設計

要求ドキュメントを設計に落としこんでいきます。

image-6.png

出来上がった設計書(design.md)を見てみましょう。

image-7.png

全体のアーキテクチャ図と、各コンポーネントの詳細が記載されています。 設計書をみて間違っていそうな箇所ややっぱり要件を追加したい場合は、それぞれプロンプトを投入して修正します。

image-8.png

Minecraftサーバのjarファイルの差し替えやmodの追加に際して、いちいちDockerイメージをビルドし直すのが面倒だったので、 タスク機同時にS3の所定のフォルダにあるものをダウンロードして起動する処理を追加しました。

ステップ3:タスク生成

設計内容は大丈夫そうなので、タスクの生成に移ります。

image-9.png

image-10.png

ステップ4:コード生成

いよいよAWS CDK、Lambdaなどのコード生成にとりかかります。
ステップ3で生成されたタスクを順番に実行していくことで実装を進めます。

image-11.png

npmの初期化、必要なパッケージのインストールなどもKiroが実行してくれます。 コマンド実行前には必ず確認が求められ、承認すると実際にコマンドが実行されます。

途中割愛しますが、CDKの生成が完了してSynthまで正常終了しました。

image-12.png

そのまま続行を指示すると、AWSへのデプロイも実行してくれます。

image-13.png

多少エラーなどが発生してもKiro自身が解決して取り除いてくれます。 このような流れで遂にECS上にMinecraftサーバを起動できました。

もちろん日次で実行するタスク停止Lambdaや、Alexaスキルも実装してくれます。

まとめ

いかがでしたでしょうか? 実際の仕事のように、プロジェクトメンバーに指示を出してレビューして実装、のような流れで動くものを作ることができました。 いきなりエンタープライズ向けのプロダクトやサービスを作れるレベルにはないと多いますが、 ちょっとしたツールの作成や思いついたアイデアのPoCには十分利用できそうです。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?