環境
AWS EC2にkiro-cliをインストールして使っていきます。
kiroとは
AWSが作ったAI開発支援ツール。
Amazon Qなどと絡めると話が紛らわしいので、また別の機会にまとめられたらと思います。
kiro-cliのインストール
インストールスクリプトをダウンロードしてきます。
$ curl --proto '=https' --tlsv1.2 -sSf 'https://desktop-release.q.us-east-1.amazonaws.com/latest/kirocli-x86_64-linux.zip' -o 'kirocli.zip'
$ unzip kirocli.zip
Archive: kirocli.zip
creating: kirocli/
creating: kirocli/bin/
inflating: kirocli/bin/q
inflating: kirocli/bin/kiro-cli-term
inflating: kirocli/bin/qchat
inflating: kirocli/bin/kiro-cli
inflating: kirocli/bin/kiro-cli-chat
inflating: kirocli/install.sh
inflating: kirocli/README
inflating: kirocli/BUILD-INFO
設定を色々聞かれます。
今回はAWS Builder IDでログインしていきます。
$ ./kirocli/install.sh
✔ Do you want kiro-cli to modify your shell config (you will have to manually do this otherwise)? · Yes
✔ Select login method · Use for Free with Builder ID
Confirm the following code in the browser
Code: <USER_CODE>
Open this URL: https://view.awsapps.com/start/#/device?user_code=<USER_CODE>
Device authorized
Logged in successfully
$ kiro-cli --version
kiro-cli 1.28.1
URLを開くとBuilder IDのログインを求められます。
ログインして続行します。
kiroのアクセスを許可するとCLI側も承認されます。
kiroにコード生成させてみる
今回はAWS上にS3バケットを作成するTerraformを生成させてみます。
モデルはAutoにしています。
$ kiro-cli
⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢀⣴⣶⣶⣦⡀⠀⠀⠀⢀⣴⣶⣦⣄⡀⠀⠀⢀⣴⣶⣶⣦⡀⠀⠀⢀⣴⣶⣶⣶⣶⣶⣶⣶⣶⣶⣦⣄⡀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣶⣶⣶⣶⣶⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢰⣿⠋⠁⠈⠙⣿⡆⠀⢀⣾⡿⠁⠀⠈⢻⡆⢰⣿⠋⠁⠈⠙⣿⡆⢰⣿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠻⣦⠀⠀⠀⠀⣴⡿⠟⠋⠁⠀⠀⠀⠈⠙⠻⢿⣦⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⣿⣇⣴⡿⠋⠀⠀⠀⢀⣼⠇⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⢠⣤⣤⣤⣤⣄⠀⠀⠀⠀⣿⡆⠀⠀⣼⡟⠀⠀⠀⠀⣀⣀⣀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⣿⡿⠋⠀⠀⠀⢀⣾⡿⠁⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⢸⣿⠉⠉⠉⣿⡇⠀⠀⠀⣿⡇⠀⣼⡟⠀⠀⠀⣰⡿⠟⠛⠻⢿⣆⠀⠀⠀⢻⣧⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⠙⠁⠀⠀⢀⣼⡟⠁⠀⠀⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⢸⣿⣶⣶⡶⠋⠀⠀⠀⠀⣿⠇⢰⣿⠀⠀⠀⢰⣿⠀⠀⠀⠀⠀⣿⡆⠀⠀⠀⣿⡆
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠹⣷⡀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣼⠟⠀⢸⣿⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⣿⡇
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⠀⣠⡀⠀⠀⠹⣷⡄⠀⠀⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⠀⣤⣄⠀⠀⠀⠀⠹⣿⡅⠀⠀⠸⣿⠀⠀⠀⠸⣿⠀⠀⠀⠀⠀⣿⠇⠀⠀⠀⣿⠇
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⣾⡟⣷⡀⠀⠀⠘⣿⣆⠀⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⠀⣿⡟⣷⡀⠀⠀⠀⠘⣿⣆⠀⠀⢻⣧⠀⠀⠀⠹⣷⣦⣤⣤⣾⠏⠀⠀⠀⣼⡟
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⣿⡇⠹⣷⡀⠀⠀⠈⢻⡇⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⠀⣿⡇⠹⣷⡀⠀⠀⠀⠈⢻⡇⠀⠀⢻⣧⠀⠀⠀⠀⠉⠉⠉⠀⠀⠀⠀⣼⡟
⠀⠀⠀⠀⠀⠀⠀ ⠸⣿⣄⡀⢀⣠⣿⠇⠀⠙⣷⡀⠀⢀⣼⠇⠀⠸⣿⣄⡀⢀⣠⣿⠇⠸⣿⣄⡀⢀⣠⣿⠇⠀⠙⣷⡀⠀⠀⢀⣼⠇⠀⠀⠀⠻⣷⣦⣄⡀⠀⠀⠀⢀⣠⣴⣾⠟
⠀⠀⠀⠀⠀⠀⠀ ⠀⠈⠻⠿⠿⠟⠁⠀⠀⠀⠈⠻⠿⠿⠟⠁⠀⠀⠈⠻⠿⠿⠟⠁⠀⠀⠈⠻⠿⠿⠟⠁⠀⠀⠀⠈⠻⠿⠿⠟⠁⠀⠀⠀⠀⠀⠈⠙⠻⠿⠿⠿⠿⠟⠋⠁
Jump into building with Kiro:
1. Ask a question or describe a task
2. Use /context add <file> to provide Kiro with additional info
3. Connect to external tools with by using /mcp
Use /help for more information and happy coding!
Model: auto (/model to change) | Plan: KIRO FREE (/usage for more detail)
3% > S3バケットを東京リージョンに作成するTerraformが欲しい
> hcl
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_s3_bucket" "this" {
bucket = "my-bucket-name"
}
バケット名は一意である必要があるので my-bucket-name を適宜変更してください。
▸ Credits: 0.03 ~ Time: 3s
5% > 冗長構成を追加
> S3はリージョン内で自動的に冗長化されているため、追加設定は不要です。
ただし、よくある「冗長構成」の意図として以下が考えられます:
- クロスリージョンレプリケーション(別リージョンへの複製)
- バージョニング(オブジェクトの世代管理)
どちらを想定していますか?
▸ Credits: 0.04 ~ Time: 4s
5% > バージョニングを追加
> hcl
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_s3_bucket" "this" {
bucket = "my-bucket-name"
}
resource "aws_s3_bucket_versioning" "this" {
bucket = aws_s3_bucket.this.id
versioning_configuration {
status = "Enabled"
}
}
▸ Credits: 0.03 ~ Time: 2s
5% > 仕様書をMarkdown方式で出力して
> # S3バケット仕様書
## 概要
東京リージョンにバージョニング有効のS3バケットを作成する。
## リソース構成
| リソース | 説明 |
|---|---|
| aws_s3_bucket | S3バケット本体 |
| aws_s3_bucket_versioning | バージョニング設定 |
## 設定値
| 項目 | 値 |
|---|---|
| リージョン | ap-northeast-1(東京) |
| バケット名 | my-bucket-name |
| バージョニング | Enabled |
## Terraformコード
hcl
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_s3_bucket" "this" {
bucket = "my-bucket-name"
}
resource "aws_s3_bucket_versioning" "this" {
bucket = aws_s3_bucket.this.id
versioning_configuration {
status = "Enabled"
}
}
## 備考
- バケット名はグローバルで一意である必要があります
- S3はリージョン内で自動的に冗長化されます
- バージョニングを有効にすると、オブジェクトの上書き・削除時に旧バージョンが保持されます
▸ Credits: 0.06 ~ Time: 5s
5% >
気になる箇所
実際にTerraformを動かしてみてはいないですが、AIの出力を机上レビューで指摘箇所をまとめてみました。
- 「S3を冗長構成にする」というひっかけの問いにも対応可能だが、冗長構成とバックアップの違いを正しく理解していないまま利用すると、本質を把握しないままコードを書いてしまうことになりそう
5% > 冗長構成を追加
> S3はリージョン内で自動的に冗長化されているため、追加設定は不要です。
ただし、よくある「冗長構成」の意図として以下が考えられます:
- クロスリージョンレプリケーション(別リージョンへの複製)
- バージョニング(オブジェクトの世代管理)
どちらを想定していますか?
- 良きに計らって、タグ付けはやってくれない。
AWSリソースのタグ付けは大事ですね。
Terraformのサンプルコードには記載されているようです。
- パブリックアクセスを明示的に禁止していない。
デフォルトで大丈夫でも、明示的に書けと言われるパターンも多いので気になりました。
- リソース名が全部thisになっているのは何となくダサい。
この短さならthisでも正解ではあるが、やはり名前はきちんと付けたい。
まとめ
AIが生成したコードは意外とあっている感じがするのですが、やはり気になる点はあります。
むしろ、正しそうに見えるコードなのでこれからは的確な指摘ができないと困る時代になっていく印象を受けました。
明示的にAIに指示すれば指摘した箇所も修正してくれるようですが、そこまで言わなくてはいけない、という状態のようです。
今度は本格的な要件を定義してコード生成させてみたいなと思います。


