【パート2】AIによるパラメータシートから単体テスト仕様書を自動生成
パラメータシートを元に単体テスト仕様書をAIに自動生成させるプロンプトと、その活用法を解説します。
Table of contents
author: kuribo-
はじめに
インフラチームのkuribo-です。
こちらの記事は、AIを活用してインフラ設計・テストのドキュメント作成を効率化する試みの 【単体テスト仕様書作成編】 です。
>>前の記事: 【パート1】AIと一緒にGoogle Cloudのパラメータシート(詳細設計書)を作ってみた
前回作成したパラメータシートを元に、インフラが設計通りに構築されているかを確認するための単体テスト仕様書の作成をAIに依頼しました。
ここでも、AIの能力を最大限に引き出すプロンプトが鍵となります。
AIへの依頼(プロンプト)の工夫
ここでも、パート1の成果物をインプットとして活用し、具体的な指示を与えることが重要です。
- インプットの指定: パラメータシートを作成した同じセッションで「先ほど作成したパラメータシートを元に」と明確に伝えることで、文脈を維持し、一貫性のあるドキュメントを生成させます。もし違うセッションで行う場合は、前のセッションで指示した内容を要約して吐き出させた上で次のセッションで指示をすると良いです。
- テスト内容とフォーマットの具体化:「設定されているパラメータを確認する」というテストの目的と、「CSV形式」「各リソース毎にテストをまとめる」といった具体的なフォーマットを指示します。
- 実行可能な操作手順の要求: テスト項目に「gcloudコマンド」を含めるよう依頼するのが最大のポイントです。これにより、テスト実施者がコピー&ペーストするだけで確認作業を行える、非常に実用的な仕様書が出来上がります。
これらのポイントを踏まえ、最終的に以下のようなプロンプトで依頼しました。
先ほど作成したパラメータシート(記入例)を元に、単体テスト仕様書を作成してください。
テストでは、各リソースに設定されているパラメータが正しいかを確認します。
以下のフォーマットとルールに従って作成してください。
# フォーマットとルール
- カラムは「No」「テスト概要」「テスト時の操作」「テスト期待結果」とすること(実施者・実施日の欄は不要です)。
- ファイル形式は、カンマ区切りの**CSV形式**とすること。
- 各リソース毎にテストをまとめること。
- 「テスト時の操作」には、確認に使う`gcloud`コマンドを記載すること。
- 「テスト時の操作」の項目には、必ず**『以下コマンドを実行し、パラメータが正しく設定されていることを確認する。』**という説明文を先頭に追記すること。
- 「テスト期待結果」の項目には、必ず**『コマンドを実行した結果、以下の結果となっていること。』**という説明文を先頭に追記すること。
生成された成果物と所感
このプロンプトにより、パラメータシートの全項目に対応するテストケースが、確認用のgcloudコマンドと期待結果付きで自動生成されました。
人が行う作業は「コマンドをコピペして実行し、結果を目視確認するだけ」というレベルまで自動化されており、テスト準備にかかる工数を劇的に削減できます。
生成された成果物は以下です。(毎回同じ内容が出力されるわけではないので、今回はあくまで例です)
"No","テスト概要","テスト時の操作","テスト期待結果"
"1","VPC","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud compute networks describe vpc-prod --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: vpc-prod
- routingConfig:
- routingMode: REGIONAL"
"2","サブネット (Web)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud compute networks subnets describe subnet-prod-web-an1 --region=asia-northeast1 --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: subnet-prod-web-an1
- ipCidrRange: 10.0.1.0/24
- region: https://www.googleapis.com/compute/v1/projects/my-web-system-prod-12345/regions/asia-northeast1
- privateIpGoogleAccess: true"
"3","サブネット (DB)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud compute networks subnets describe subnet-prod-db-an1 --region=asia-northeast1 --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: subnet-prod-db-an1
- ipCidrRange: 10.0.2.0/24
- region: https://www.googleapis.com/compute/v1/projects/my-web-system-prod-12345/regions/asia-northeast1
- privateIpGoogleAccess: true"
"4","ファイアウォールルール (HTTP/HTTPS許可)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud compute firewall-rules describe fw-allow-http-https --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: fw-allow-http-https
- direction: INGRESS
- priority: 1000
- allowed:
- IPProtocol: tcp
ports: [ '80', '443' ]
- sourceRanges: [ '0.0.0.0/0' ]
- targetTags: [ 'web-server' ]"
"5","ファイアウォールルール (IAPからのSSH許可)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud compute firewall-rules describe fw-allow-ssh-from-iap --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: fw-allow-ssh-from-iap
- direction: INGRESS
- priority: 1000
- allowed:
- IPProtocol: tcp
ports: [ '22' ]
- sourceRanges: [ '35.235.240.0/20' ]
- targetTags: [ 'web-server', 'ap-server' ]"
"6","ファイアウォールルール (WebからAPへの通信許可)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud compute firewall-rules describe fw-allow-internal-web-to-ap --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: fw-allow-internal-web-to-ap
- direction: INGRESS
- priority: 1000
- allowed:
- IPProtocol: tcp
ports: [ '8080' ]
- sourceTags: [ 'web-server' ]
- targetTags: [ 'ap-server' ]"
"7","ファイアウォールルール (APからDBへの通信許可)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud compute firewall-rules describe fw-allow-internal-ap-to-db --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: fw-allow-internal-ap-to-db
- direction: INGRESS
- priority: 1000
- allowed:
- IPProtocol: tcp
ports: [ '3306' ]
- sourceTags: [ 'ap-server' ]
- targetTags: [ 'db-server' ]"
"8","ロードバランサ (グローバルIP)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud compute addresses describe ip-prod-web --global --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: ip-prod-web
- address: 34.XXX.XXX.XXX"
"9","ロードバランサ (バックエンドサービス)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud compute backend-services describe bs-prod-web --global --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: bs-prod-web
- backends:
- group: .../regions/asia-northeast1/instanceGroups/mig-prod-web
- healthChecks:
- .../healthChecks/hc-prod-web
- enableCDN: true"
"10","ロードバランサ (ヘルスチェック)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud compute health-checks describe hc-prod-web --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: hc-prod-web
- type: HTTP
- httpHealthCheck:
- port: 80
- requestPath: /health_check
- checkIntervalSec: 5
- timeoutSec: 5
- healthyThreshold: 2
- unhealthyThreshold: 2"
"11","インスタンステンプレート (Web)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud compute instance-templates describe it-prod-web-v1 --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: it-prod-web-v1
- properties:
- machineType: e2-medium
- disks:
- boot: true
initializeParams:
- diskSizeGb: 20
- sourceImage: .../images/debian-11-bullseye-v2023...
- tags:
- items: [ 'web-server' ]"
"12","インスタンステンプレート (AP)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud compute instance-templates describe it-prod-ap-v1 --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: it-prod-ap-v1
- properties:
- machineType: e2-medium
- disks:
- boot: true
initializeParams:
- diskSizeGb: 20
- sourceImage: .../images/debian-11-bullseye-v2023...
- tags:
- items: [ 'ap-server' ]"
"13","マネージドインスタンスグループ (Web)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud compute instance-groups managed describe mig-prod-web --region=asia-northeast1 --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: mig-prod-web
- instanceTemplate: .../instanceTemplates/it-prod-web-v1
- distributionPolicy:
- zones:
- zone: asia-northeast1-a
- zone: asia-northeast1-c
- autoscaler:
- ...
- autoscalingPolicy:
- minNumReplicas: 2
- maxNumReplicas: 10
- cpuUtilization:
- utilizationTarget: 0.6"
"14","マネージドインスタンスグループ (AP)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud compute instance-groups managed describe mig-prod-ap --region=asia-northeast1 --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: mig-prod-ap
- instanceTemplate: .../instanceTemplates/it-prod-ap-v1
- distributionPolicy:
- zones:
- zone: asia-northeast1-a
- zone: asia-northeast1-c
- autoscaler:
- ...
- autoscalingPolicy:
- minNumReplicas: 2
- maxNumReplicas: 10
- cpuUtilization:
- utilizationTarget: 0.6"
"15","Cloud SQL for MySQL","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud sql instances describe mysql-prod-master --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: mysql-prod-master
- databaseVersion: MYSQL_8_0
- region: asia-northeast1
- settings:
- tier: db-n1-standard-2
- dataDiskSizeGb: 100
- dataDiskType: PD_SSD
- availabilityType: REGIONAL
- ipConfiguration:
- privateNetwork: .../networks/vpc-prod
- backupConfiguration:
- enabled: true"
"16","Cloud Storage","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud storage buckets describe gs://my-web-system-prod-static-files --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: my-web-system-prod-static-files
- location: ASIA
- storageClass: STANDARD
- iamConfiguration:
- uniformBucketLevelAccess:
- enabled: true
- lifecycle:
- rule:
- action: { type: SetStorageClass, storageClass: ARCHIVE }
- condition: { age: 365 }"
"17","Cloud DNS (Aレコード)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud dns record-sets describe www.example.com. --type=A --zone=example-com-zone --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: www.example.com.
- type: A
- ttl: 300
- rrdatas: [ '34.XXX.XXX.XXX' ]"
"18","Cloud DNS (CNAMEレコード)","以下コマンドを実行し、パラメータが正しく設定されていることを確認する。
gcloud dns record-sets describe static.example.com. --type=CNAME --zone=example-com-zone --project=my-web-system-prod-12345
","コマンドを実行した結果、以下の結果となっていること。
- name: static.example.com.
- type: CNAME
- ttl: 300
- rrdatas: [ 'c.storage.googleapis.com.' ]"
対話によるブラッシュアップ
最初はTSV形式で依頼したのですが、スプレッドシートでうまく取り込めなかったため、「CSV形式に変更して」と依頼したところ、すぐさま完璧なCSV形式で再生成してくれました。
また、テスト時の操作・テスト期待結果の項目に固定文言を入れなかった場合、gcloudコマンドと、特定の項目の結果内容しかなかったためわかりづらいテストケースとなってしまいました。
今回は最終的なプロンプトを掲載していますが、一度で完璧なものを求めず対話を通じてアウトプットを修正・改善していくプロセスも重要だと感じました。
なお、今回は監視項目などが入っていないですが、これらも対話によってパラメータシートに追加することで単体テストケース作成まで対応が可能です。
おわりに
今回2パートにわたる検証で、AIを「優秀なクラウドインフラエンジニア」として活用することで、インフラ設計からテストに至るドキュメント作成プロセスを大幅に効率化できることが分かりました。
- たたき台作成の圧倒的なスピード
- プロンプトの工夫によるアウトプットの質の向上
- gcloudコマンドなどの具体的な手順を含めることによる実用性の向上
もちろん、最終的なレビューや判断は人間が行う必要がありますが、AIは私たちの作業を加速させてくれる強力なパートナーになり得ます。
この記事が、皆さんの日々の業務にAIアシスタントを取り入れるきっかけになれば幸いです。
※本記事は、ジーアイクラウド株式会社の見解を述べたものであり、必要な調査・検討は行っているものの必ずしもその正確性や真実性を保証するものではありません。
※リンクを利用する際には、必ず出典がGIC dryaki-blogであることを明記してください。
リンクの利用によりトラブルが発生した場合、リンクを設置した方ご自身の責任で対応してください。
ジーアイクラウド株式会社はユーザーによるリンクの利用につき、如何なる責任を負うものではありません。