2
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?

【第5回】Cursor × SpecKitではじめる仕様駆動開発(実践編)~AIと仕様を育てながらTerraform開発して分かったこと~

2
Posted at

はじめに

これまでの4回で、

  • SpecKit の導入
  • Constitution
  • Specification
  • Plan
  • Tasks
  • Implement

まで一通り体験しました。

最終回となる今回は、

実際に使ってみて感じたこと

をまとめます。

正直に言うと、最初は

「AIにコードを書いてもらうためのツール」

くらいにしか思っていませんでした。

しかし、一連の開発を終えた今では、

SpecKit に対する印象は大きく変わりました。

今回完成したもの

今回最終的に完成したのは、

Terraform を使った AWS WAF の構成です。

構成としては

ディレクトリ構成
Terraform Backend
├── S3
└── DynamoDB
AWS WAF
├── WebACL
├── Managed Rules
├── CloudWatch Logs
└── Logging Configuration

さらに、

  • stg → Count
  • prd → Block

という環境差分まで Terraform で管理できるようになりました。

最初から完璧ではなかった

AIを使った開発というと、

「一度お願いしたら完成する」

というイメージを持つ方も多いと思います。

しかし、

実際はそうではありませんでした。

今回だけでも、

途中で何度も設計を見直しています。

例えば、

  • Terraform Backend が存在しない
  • ALBへのアタッチが不要になった
  • WAF の description 制約に引っかかった

など、

実際の開発らしい問題が発生しました。

Backend問題

一番最初にぶつかったのが

Terraform Backendでした。

最初の plan は

応答
BucketRegionError

で失敗しました。

原因は、

backend.tf が

backend.tf
example-terraform-state

というサンプル値だったからです。

最初は

「Terraform が間違っているのかな?」

と思いました。

しかし、

実際には

Backendそのものが存在していませんでした。

bootstrapという考え方

そこで AI が提案してくれたのが

bootstrap/

という構成でした。

Terraform 自身が利用する State を、

まず Terraform で作る。

そのためだけの

Bootstrap プロジェクトです。

最終的には

ディレクトリ構成
bootstrap/
└── tfstate-backend

を作成し、

  • S3
  • DynamoDB

だけを先に apply しました。

この考え方は、

これまで何度も Terraform を使ってきましたが、

あまり意識していませんでした。

要件変更も仕様から直す

途中で、

仕様変更もありました。

最初は

WebACL
↓
ALBへアタッチ

する設計でした。

しかし今回は

WebACLだけ作成したくなりました。

普通なら

Terraformだけ修正して終わりです。

しかし SpecKit では

Specification
↓
Plan
↓
Tasks
↓
Implement

の順番で修正します。

コードだけ直すのではなく、

設計そのものを更新する。

これが仕様駆動開発なんだと実感しました。

enable_associationという提案

面白かったのは、

Agent が

association を削除しなかったことです。

代わりに、

変数
enable_association

という変数を提案しました。

つまり、

hcl
enable_association = true

なら

ALBへアタッチ。

hcl
enable_association = false

なら

WebACLだけ作成。

将来のことまで考えた設計になっていました。

これは実務でもそのまま使えそうです。

AIは「調査」もしてくれる

実装中、

WAF の description でエラーになりました。

調べてみると、

WAFでは

全角括弧だけでなく

半角括弧も利用できませんでした。

Agentは

エラーメッセージを読み取り、

原因を調査し、

description を修正してくれました。

ただコードを書くだけではなく、

AWS の仕様まで調べて対応してくれるのは便利でした。

一番印象が変わったこと

今回一番印象が変わったのは、

AIへの指示です。

以前なら、

プロンプト
Terraformを書いてください

でした。

しかし今回は、

プロンプトフロー
仕様を作ってください
↓
設計してください
↓
タスクへ分解してください
↓
レビューしてください
↓
実装してください

という会話になりました。

AIを

コーディングツールではなく、

設計者やレビュアーとして使っている感覚です。

Cursor Agentとの付き合い方

今回学んだことがもう一つあります。

最初は、

私は

プロンプト
cdして
terraform initして
terraform planして...

と、

細かく指示しようとしていました。

しかし実際には、

プロンプト
stg環境でterraform planしてください

だけで十分でした。

Agent が

  • ディレクトリ移動
  • コマンド実行
  • エラー解析

まで判断してくれます。

つまり、

コマンドを教えるのではなく、

目的を伝える

方がうまくいきました。

SpecKitはどんな人に向いている?

実際に使ってみて、

特に向いていると感じたのは

  • Terraform
  • AWS
  • Kubernetes
  • アプリケーション開発

など、

設計が重要なプロジェクトです。

逆に、

数行のスクリプトを書くような用途では、

少しオーバースペックかもしれません。

今後使ってみたいもの

今回は

AWS WAFだけでした。

今後は

  • VPC
  • ECS
  • RDS
  • Network Firewall
  • GuardDuty

など、

より大きな構成でも試してみたいと思っています。

SpecKitの効果は、

システムが大きくなるほど実感できそうです。

シリーズを終えて

今回、

5回にわたって

Cursor × SpecKit を試してきました。

最初は

「AIにTerraformを書いてもらう」

くらいの認識でした。

しかし実際には、

AIと一緒に

  • 仕様を考え
  • 設計し
  • タスクへ分解し
  • レビューし
  • 実装する

という、

これまでとは全く違う開発体験になりました。

もちろん、

最終的な判断は人が行う必要があります。

それでも、

設計の壁打ち相手やレビュー担当として、

AIは非常に心強い存在でした。

おわりに

今回のシリーズでは、

実際の Terraform 開発を題材に、

SpecKit を使った仕様駆動開発を体験しました。

SpecKit は、

「AIにコードを書いてもらうためのツール」

ではありません。

「AIと一緒に開発を進めるためのフレームワーク」

だと感じています。

これから AI を活用した開発がさらに増えていくと思います。

その中で、

「まず仕様を書く」

という考え方は、

今後ますます重要になっていくのではないでしょうか。

もし SpecKit が気になっている方は、

ぜひ小さなプロジェクトから試してみてください。

きっと、これまでとは少し違う開発体験ができると思います。

最後まで読んでいただき、ありがとうございました。

2
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
2
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?