GitHub Copilotと一緒にTerraformを書いた体験談 初めてのインフラ構築

はじめまして、8月にARISEに入社したMarketing Solution Division, Service Design Unit所属の森です。

前職ではフロントエンジニアでしたが、案件を通じて自分の作ったアプリを動かせるインフラに興味をもちました。入社直後にARISE社内でプロジェクトが立ち上がり、インフラの枠が空いていたのでインフラ担当として参画させてもらいました。

社内プロジェクトではインフラ構築をAWSTerraformで行いますが、インフラ初心者の私にとってははじめて知ることばかりで右も左もわからない状態でした。

今回は、そんなインフラ初心者の私GitHub Copilotと一緒にインフラ構築した時の体験を話すことGitHub Copilotについて紹介していきたいと思います。

1. GitHub Copilotとは

詳しい紹介はこちらの記でされているので簡単に説明すると、GitHub CopilotとはGitHubが提供しているクラウド型AIツールで、プログラミングに特化したAIアシスタントサービスになります。

プログラミング特化のため、ソースコード内のコメントの内容からコードを書いてくれたり関数名等から処理を予測して書いてくれるなどかなり強力なツールになっています。

これから実際に私がインフラ構築をした際の体験を通して、GitHub Copilotを使うことで知見の浅い分野でも高速キャッチアップできることをお話していきたいと思います。

2. GitHub CopilotとAWSリソースを構築してみた体験談

背景

社内プロジェクトがはじまり、今までインフラに携わったことがない私にとってAWSTerraformは知らないことだらけだったのでGitHub Copilot導入前は

  • 各AWSリソースにどのような設定値があるのかわからずなかなか手が動かせない
  • ドキュメントを見ても自分のやりたいことを実現させる方法がわからず、調べものに時間がかかる
  • Terraformで設定するプロパティの意味をドキュメントだけでは理解しきれない

といった具合でなかなか作業が進まない状態でした。

それがGitHub Copilotを導入したことで、GitHub Copilotが教えてくれた情報を足掛かりに作業を進めることができるようになりました。

では実際にどうGitHub Copilotを活用したのかを、TerraformCognitoを構築した際の体験をお話ししようと思います。

体験談1 どうコードを書けばいいのか教えてくれる

Cognitoでユーザープールを作ろうとしたとき、そもそもどういう設定値があるのか知らなかったので手が動かない状態でした。Terraformの公式ドキュメントを見に行ったのですが、設定値が多すぎてまず最初に何を書けばいいのかが全くわからず苦戦していました。

そこでGitHub Copilotを使ってみると、コメントからCognitoのユーザープールを作りたいときの書き始め方を提案してくれました。

Tabキーを押すとそこからさらに必要と思われる設定値をどんどん提案してくれました。

また、Ctrl+EnterMac+VSCodeの場合)で複数の候補を提案してくれます。

このように、GitHub Copilotを使えばどうコードを書けばいいのか教えてくれるのでとりあえず手を動かすことができます0からコードを作るときに比べてGitHub Copilotが教えてくれたコードを足掛かりにできるので、知識や経験が浅くてもとりあえず作業を進めることができました。

体験談2 わからないところを教えてくれる

ある程度GitHub Copilotが提案してくれたコードを元に作業を進めていくと、今度は要件に沿って設定値を変更する必要が出てきます。

例えばgenerate_sercretの値がfalseになっていますが、これをtrueにするとどういう変化が起きるのかわかりません。Terraformのドキュメントでこの設定値の意味を調べると

generate_secret – (Optional) Should an application secret be generated.

と記載されており、これだけではいまいち設定を変更した際のイメージがつきません。

そこで、Copilot Chatgenerate_sercrettrueにした場合にどういった変化が発生するのかを聞いてみました。Copilot Chatはコードに関する質問をチャットベースでやりとりできるGitHub Copilotの機能の1つです。

これにより、generate_sercrettrueにするとアプリとCognitoが通信する際に秘密鍵を提供する処理が必要になることがわかりました。AWSの公式ドキュメントと照らし合わせても、秘密鍵を割り当てた場合はCognitoにリクエストする際にリクエスト本文にクライアントシークレットを含むハッシュが必要になることが説明されているためCopilot Chatの回答は正しいと確認できました。今回の要件ではそこまでセキュリティを強固にする必要はないため、generate_sercretfalseでいいと判断することができました。

GitHub Copilot導入前はCognitoの秘密鍵について調べ、秘密鍵が生成されることによりどういった変化が生じるのかを調査する必要がありました。しかし、Copilot Chatを使えば自分が今見ているコードを元に質問して回答を得ることができるので調べものの手間をかなり省くことができます。

3. 使ってみた感想

実際にGitHub Copilotを使ってみて、AIとペアプログラミングをしているかのようにコードを書けるのが非常によいと感じました。

一般的にペアプログラミングの利点は

  • 作業効率化
  • 知識を深める
  • ミスを減らし品質が向上する

があげられますが、一方で1つの作業を2人で実施するので実質コストが2倍になってしまう欠点があります。これがGitHub Copilotを使えば月2000円程度のコストでペアプロができる環境を用意することができます。

私のように知見が浅い分野で実際にGitHub Copilotを使い、AIとペアプロしているみたいだなと感じた部分は以下2点です。

  • 一緒にコードを書けるので手が止まらない(作業効率化)
  • 知見の浅い分野でも聞けば教えてくれるので調査の足掛かりを掴みやすい(作業効率化/知識を深める)

一緒にコードを書けるので手が止まらない

知見の浅い分野で0から処理を書く際、右も左もわからないのでなかなか手を動かせないと思います。やりたい処理は頭の中にあるけど、それをその言語でどう書けばいいのかわからず手が止まってしまいます。

GitHub Copilotはコメントや途中まで記述した内容をもとにどうコードを書けばいいのか提案してくれます。また、候補も複数出してくれるのでその中から自分が実現したいものに近しい結果を選び、必要に応じて部分的に修正すればいいので、0からコードを書くよりも作業の効率が向上します。

実際にCongitoのユーザープールをGitHub Copilotにコメントの要件に沿って作成するコードを書いてもらいました。指定した条件は以下の通りです。

  • ユーザプール名はtest-user-poolとすること
  • パスワードは8文字以上で大文字小文字数字記号を含む
  • ユーザーを新規に作成できるのは管理者のみ
  • カスタム属性として文字列のtestを保持している

このようにGitHub Copilotがコメントの条件を満たすユーザープールを生成できるコードを提案してくれました。

言葉では自分のやりたいことはわかるけれど、知見が浅いとそれをコードに落とし込むのが困難な場合があります。そんな時はコメントで実現したいことを言葉で書き、GitHub Copilotにコードを提案してもらうことでそのコードをもとに処理を追加したり、調べたりと先に進むことができます

知見の浅い分野で調査を進める足掛かりにできる

知見が浅い分野だと、こういう処理を書きたい!と思っても何を足掛かりにして調べていけばいいのかわからず見当違いな調べ方をして時間を無駄にしてしまう場合があります。

GitHub Copilotを使えば以下のような調査手順になります。

  1. どうすれば自分がやりたいことを実現できるかCopilot Chatに聞く
  2. Copilot Chatの結果をもとにドキュメント等を調べる
  3. ドキュメントを見てわからないところがあればさらにCopilot Chatに聞く

最初に自分やりたいことを実現する方法をCopilot Chatに聞くことで大枠の方針を決めることができます。その方針を元にドキュメント等を調べていくので、見当違いな調査に時間を奪われる可能性が低くなります。

以下は私がCognitoにカスタム属性を追加したいときにCopilot Chatに問い合わせた結果です。

Copilot Chatによると、schemaという属性を使うことでカスタム属性を追加できるようです。私が設定したいカスタム属性は

  • 数値型
  • 最大値100, 最小値0

という条件だったため、数値型のカスタム属性の最大最小値を設定する方法をCopilot Chatが教えてくれたschemaという情報をもとにTerraformの公式ドキュメンを調べました。

すると文字列型のカスタム属性に対して最大最小値を設定する方法は見つかりましたが、数値型に対して設定するプロパティが見つかりませんでした。

そこで、Copilot Chatに数字型のカスタム属性で最大最小値を設定する方法を追加で質問してみました。

するとCopilot Chatnumber_attibute_constraintsを使うと教えてくれました。この情報をもとにTerraformの公式ドキュメントを再度確認すると、確かにnumber_attibute_constraintsというプロパティがあり、私が見落としていたことに気づけました。

このように、Copilot Chatに質問することで自分のやりたいことを実現する方法をある程度足掛かりのある状態で調べることができるため調査の時間を削減することができます

Copilot Chatに聞く前はドキュメントを見てもいまいちschemaでカスタム属性を設定できるのかどうかわからず、他のサイトを調べたりしていました。Copilot Chatチャットベースでの会話で質問でき、その際に自分のコードを参照させることができるのでまるでAIとペアプログラミングしているような感じで作業をすることができます。

4. まとめ

GitHub Copilotを使うことで常にAIとペアプログラミングしながら作業を進めることができます。

その結果、ペアプログラミングの恩恵である

  • 作業効率化
  • 知識を深める

を享受することができるため、

  • 高速でキャッチアップが可能なのではじめての分野でも調べる時間を最小限にして作業を進めることができる
  • ペアプログラミングのようにCopilot Chatに不明な部分を質問することで知見を深めることができる

という効果を得られ、知見が浅い分野での参画であっても作業を効率的に進めることができます。

知見が深い分野であれば、GitHub Copliotと一緒に作業してコードを提案してもらうことでダブルチェック的な使い方をすることでペアプログラミングにおける品質向上の利点も享受できると思いました。

実際私はGitHub Copilotと協力しながらインフラ構築を実施したことにより、AWSの知見が以前よりも格段に深まりました。

ぜひ皆さんもGitHub Copilotを使って自分の興味ある分野への知見を深めていってください!

関連記事