見出し画像

【AWS】 AI搭載IDE Kiroチュートリアルやってみた - Specs編 - |1日1ハンズオン Day 25

こんにちは、ぽめら です。
本記事は1日1ハンズオン企画、第25回です!
引き続きKiroのチュートリアルをおこなっていきます。今回はKiroの特徴的な機能のひとつSpec駆動開発に触れるSpecs編です🚀



1.はじめに

引き続き、AI搭載IDEのKiroに触れていきます!

題材はKiro公式ドキュメント。
"Spirit of Kiro"というゲームで予め用意されているバグの修正を通じてKiroの使い方を学ぶハンズオンです。

前回は、既存コードのブラッシュアップであるリファクタリングでKiroを活用する方法に触れました。今回は、既存機能の修正・改修ではなく、Spec駆動での新機能の開発にチャレンジします!
(実際に機能を実装する流れになるので、感覚的には盛り沢山でした💫)

ちなみに本編として進めたいチュートリアルは下記。

・Using specificiations for complex work

では、さっそく進めていきたいと思います。レッツハンズオン!


2.Kiroチュートリアル - Specs編 -

Specsの機能は、Kiroドキュメントを読み始めた際に一度触れました。

今回実際の機能に触れるにあたり、改めて整理したいと思います。

  • Specsについて
    👉要件定義〜実装までをおこなうKiroの特徴的な機能のひとつ。
    👉機能の主要な構成要素は requirements/design/tasksの3ドキュメント。

  • Spec駆動開発(Spec-Driven Development: SDD)
    👉KiroのSpecsのようなAI機能を用いて、仕様の整理・作成〜実装をおこなう開発手法のこと。仕様駆動開発ともいう。

こんな感じですかね🧐

※ 詳細は公式ドキュメントを確認してください!

新機能の開発となれば"どうやって実装するか"はもちろん、その仕様にあたる"どんな機能か"を明文化して定義することが重要です。(実際の開発現場でも、最も時間と労力がかかる部分…)

これまでもKiro主体で機能改修をおこなってきたわけですが、大雑把な依頼から仕様をまとめるところにも手を伸ばした機能がSpecsです!


今回は下記の流れで進めていきます。

  • 問題点の確認

  • Kiroに欲しい機能の仕様作成を依頼する

  • 要件をチェックする(👉requirements.md)

  • 設計をチェックする(👉design.md)

  • taskをチェックする(👉tasks.md)

  • taskを実行する

要件定義〜実装まで1機能を実装する流れですね。
実装するのは"パスワードを忘れた場合の再設定機能"

ただ作るだけでなく、既存システムに新機能を実装するということは他機能との整合性も考慮する必要があります。これをひとりでおこなうのは大変🫠
これがどうなるのか…!

2-1.問題点の確認

まずは現状の確認からおこないます。
現在のログイン画面です。新規登録のボタンはありますが、パスワードを忘れた場合の再設定ボタンはありません。
今回はそんなパスワードを忘れた場合の再設定ボタンを実装していきます。

現在のログイン画面

必要そうな機能を整理すると下記の通り。
メールアドレスの認証自体はCognitoが使用されているため、認証以外のメールアドレス受付とパスワードリセット機能が主です。

  • メールアドレス検証の実装

    • フロントエンドのコンポーネント

    • バックエンドのサーバールートと Cognito 連携

  • パスワードリセットの実装

    • フロントエンドの画面

    • バックエンドのサーバールートと Cognito 連携

この要素はチュートリアルで説明してくれている内容の和訳です😀

2-2.Kiroに欲しい機能の仕様作成を依頼する

というわけで、早速Kiro先生に仕様書の作成をお願いします。

I need a specification for email verification and password reset

メール認証とパスワードリセットの仕様が欲しい

わりとざっくり…。

でもKiro先生は動き出してくれます。
Spec機能をスタートするか聞かれるので「Yes」。

Spec、始める? 👉 YES
既存のSpecドキュメントがないか確認してくれている
要件定義書(requirements,md)が作成された


2-3.要件をチェックする(👉requirements.md)

今回は英語で依頼したのでそのまま英語で出力されています(プロンプトで日本語でアウトプットにもできる)。

作成されたrequirements.md(一部)

実際に作成されたrequirements.mdの中身を確認すると、ユーザーストーリーと受け入れ条件がちゃんとまとめられていました😱

ユーザーストーリーはその機能が求められている背景や動機、受け入れ条件はユーザーストーリーを実現するためのステップにあたります。

チャット欄で要約もあり。

要約
次はどうする?というサジェストアクションも提示してくれる

今回は要件として問題なさそうなので、設計に移ってもらいます。

チュートリアルでは"LGTM"と打てば次に進めると書いていました。

"何の略語だろ?👀"と思ったら、"Looks Good To Me(私的にはOK)"という意味だそうです。なるほどなー!

というわけで"LGTM"。

一応"いい感じって認識で合ってる?"と聞いてくれた

👉Move strftime design phase(設計に進む)で設計書作成!

design.mdが作成された


2-4.設計をチェックする(👉design.md)

できあがったdesign.mdをチェックしていきます。
関係するコンポーネント等をまとめてくれたアーキテクチャ図も書いてくれるのか…イメージしやすくて助かりますね!😭

アーキテクチャ図

※ 目のマークがついたボタンをクリックしてプレビューを表示すると、テキストがレンダリングされた状態のドキュメントを確認できます。

タブ右側、目のマークがついたボタンをクリック
こんな感じでレンダリングされたものを確認できる

設計書で言えば"基本設計"にあたる部分。
問題なさそうなのでTask作成に進みましょう!

👉Move strftime implementation plan で実装計画作成!

tasks.mdが作成された


2-5.taskをチェックする(👉tasks.md)

できあがったtasks.mdをチェックしていきます。

tasks.md

requirements.mdとの相関も記載されている…!
うれしいことにテストもTask listに込み込まれています。

テストは各種機能の実装の後に配置されているけれど、.kiro/steering/直下にspecs.md というファイルを作成し、「always write tests first before writing code(必ずテストを先に書く)」といった指示を Kiro に与えるとTDD(テスト駆動開発 Test-Driven Development)も可能になるそうです🤖

今回は一旦これで進めてみましょう!

👉Finalize task list でTask確定!

Finalize task listをクリック
Specsが揃った!


2-7.taskを実行する

ここまでで実装の準備は整いました。
あとはTask listに従って実行するだけ!

あとは実行していく

<Taskの実行方法>
「⚡️Start task」をクリックする または チャットでKiroに依頼する だけ!
ただし、"依存関係の問題もあるから1番から順番に実行してね"と記載あり。

というわけで「⚡️Start task」をクリック。

「⚡️Start task」をクリックしてみた
Kiroチャット欄で処理スタート
View Changesをクリックすると修正内容をライブで見れる
ライブ修正風景

タスク実行完了!

Taskが完了するとこのように表示される

※ Task 実行中、都度コマンドラインの操作について許諾を求められたり、確認コマンドを投げている影響でExitコマンド(q)を入力しないと止まってしまうので完全に手放しはNG。チェックしながら進めましょう👀

たまにこのように確認コマンドから抜ける必要や、失敗時の再実行が必要
というかエラーが発生している時点で要チェック

チャット欄でタスク指示も可能。

チャット欄でタスク実行を依頼した様子

実行はこんな感じ!
本当にクリック or Kiroと対話 するだけで実装できちゃいました…。

ちなみに計 10 Task あったけど、記事上での実装は一旦ここまでにします。
(実行+記録にそれなりに時間がかかってしまうため😭)

というわけで、今回想定していたチュートリアル「Using specificiations for complex work」は終了です!


おまけ(Specs振り返りメモ)

流れを辿るだけでも精一杯だったので未来の自分のための振り返りメモ✍️

<Specs機能まとめ>
Kiroに依頼するだけで、要件定義、基本設計、詳細設計、実装を一連の流れで実現してくれる。

<Specsを支える主要な3要素>
① requirements.md : 要件定義書
② design.md   : 基本設計書
③ tasks.md     : 詳細設計書

👉 最終的に tasks.md に記載された内容で実装までKiroに依頼可能
 (スペック駆動開発)


3.まとめ

今回は Kiro チュートリアルで、Specs機能にチャレンジしました。

正直な感想ですが…

想像以上にすごい、Kiro!

という印象。

もちろんこの感想は、"コードやプログラム、構成について全く知識がなくても指先一つ、全部自動でこなせるKiroってすごい!!"という手放しでのすごさを表現したわけではありません。

やはりある程度のプログラミング知識は必要です。しかし、ある程度は内省的に解決 or 解決策の模索をしてくれる点で、すごさを感じました。

具体的にすごさを感じたのは下記のような場面です。


  • 複雑でも要件、設計、ToDoをポン出し
    👉
    おそらくある程度の開発寄りの言語化は必要だと思いますが、"〜〜する機能作って"で要件・設計・ToDoの大枠を一発出力してくれるのは純粋にすごさを感じました。

  • エラーの内省能力
    👉
    エラーにハマった時、AIの挙動としては ①堂々巡り か ②意味不明な行動になる のどちらかになる印象。実際にTask 2でそれに近しい状態が起こったものの、"エラー解消のためにエラーを切り分けてみます"という動作をして解消していました。"こんな動きできるのか!"と驚きました。


特に「エラーの内省能力」については、人間がよくやる動きだと思います。でも「エラーログを見て、意味が分からなければググって、考えられる解消方法を考えて、実行してみて…」ってめちゃくちゃ時間かかりますよね。

その動きをKiroがしていて、実際に解決していたのはびっくりです!
とはいえ、"その解消内容がベストプラクティスか否か問題"も存在するので、むしろ人間側に求められるリテラシーがかなり上がった印象も…🫥


上記の印象から、確かに"スペック駆動開発"として騒がれるわけだわ、と納得した次第です。同時に、使いこなすためには訓練も必要そうだなーと。
Steeringもだけど、Specsもなかなか奥が深い⛰️

まあ、いずれにせよ触って慣れていくことが重要ですね!!!

というわけで、今日はここまで!

ではまた明日👋


4.参考リンク

・AWS Kiro紹介ページ

・Kiro公式サイト

・Kiro公式はじめの一歩的なドキュメント

・Specs編チュートリアルドキュメント

・Spec詳細


いいなと思ったら応援しよう!