生成AIチャットボットでGoogle Cloudプロジェクト管理を自動化 #ai #llm #google #terraform #gitlab

はじめに

クリエーションライン株式会社では、数多くのGoogle Cloud (旧名:Google Cloud Platform (GCP))プロジェクトを運用しており、新規プロジェクトの作成や既存プロジェクトのメンバー管理が頻繁に発生します。これらの作業は従来、エンジニアが手動でTerraformファイルを編集し、GitLabでマージリクエストを作成するという煩雑なプロセスでした。

そこで、社内コミュニケーションツールSlackに常駐している生成AIチャットボット「玄米茶」にGoogle Cloudプロジェクト管理機能を追加し、自然言語でのやり取りを通じてインフラ運用を効率化しました。本記事では、その実装アプローチと技術的詳細について紹介します。

従来の課題と目標

これまで、Google Cloudプロジェクトの作成や、プロジェクトオーナーの変更などはエンジニアが手動で、社内GitLabレポジトリ内のTerraformファイルを編集したコミットのマージリクエストを作成し、社内Slackでレビューとマージを呼びかけていました。

この手順における課題は次の通りです。

  • 手作業で、社内GitLabレポジトリ内のTerraformファイルを編集してマージリクエスト作成
  • 手作業で、社内Slackでレビューとマージを担当グループに呼び掛け

「エンジニアであればマージリクエスト出すくらい簡単じゃない?」や「マージリクエスト作ったらメールで通知が行くのでは?」といった意見もあると思いますが、「オーナーを一人追加したいだけなのに手順が多すぎる」や「メールだと通知を見落としがち」などの意見がありました。そこで、

  • 自然言語による指示で、社内GitLabレポジトリ内のTerraformファイルを編集してマージリクエスト作成
  • 自動で、社内Slackでレビューとマージを担当グループに呼び掛け

のように、手作業に頼っていた部分を生成AIチャットボット「玄米茶」に担ってもらうことにしました。

アーキテクチャ

「玄米茶」はLangGraphベースのチャットボットで、LangChain Tool Callingにより、会話以外の機能を呼び出すことができます。Tool Callingについては過去記事「LangGraphのTool callingでOpenAI APIのFunction callingを試してみよう」をご覧ください。このTool Callingで、人間による入力からGoogle Cloudプロジェクトの編集を行う機能を呼び出します。

GitLabレポジトリからのファイルの取得・マージリクエストの作成などGitLabの操作は python-gitlab を用いてAPI経由で行い、Terraformファイルの編集は Claude Code SDK for Python を用いて生成AIに行わせます。このように確定的な作業は通常のプログラミングコードに行わせ、文字列置換やテンプレートでも可能かもしれませんが生成AIが得意な部分は任せる、といった役割を分担します。

Tool Callingのプロンプト

「Google CloudプロジェクトのTerraformファイルを編集し、マージリクエストを作成する」機能を呼び出すTool Callingのプロンプトは次のようになります。この処理はAzure OpenAIが担当します。

既存のGoogle Cloudプロジェクトを編集するツールです。
既存のGoogle Cloudプロジェクトのオーナー設定をTerraformファイルで更新し、
GitLabにコミットしてマージリクエストを作成します。
最初に差分プレビューを表示し、ユーザの承認後に実行します。
使用例:
- "オーナーをuser1@example.com、user2@example.comに更新して"
- "オーナーからuser3@example.comを削除して"
- "user4@example.comをオーナーに追加して"

Claude Codeのプロンプト

実際に「Google CloudプロジェクトのTerraformファイルを編集」するClaude Codeのプロンプトは次のようになります。この処理はAnthropic Claudeが担当します。

{file_path}でGoogle Cloudプロジェクト'{project_name}'の操作を実行してください。

プロジェクト名: {project_name}
ビリングアカウント: {billing_account}
操作: 既存プロジェクトのmoduleを編集
変更指示: {description}

指定されたプロジェクト名のmoduleを見つけて、適切に変更してください。
module名やプロジェクト名は変更しないでください。

重要: ファイル編集時は必ずファイル末尾に改行文字を付与してください。

プレースホルダ {project_name}{description} には、ユーザの入力とTool Callingのプロンプトで得られた変更指示が入ります。

GitLab API

gitlab-python を使えば GitLab API の操作はかなりお手軽です。本機能では、

  • GitLabレポジトリから特定の1ファイルの取得
  • GitLabレポジトリにブランチの作成
  • GitLabレポジトリにコミットをプッシュ
  • GitLabレポジトリのブランチ間の差分を取得
  • GitLabマージリクエストを作成

ということを行います。またマージリクエストの際は次のメッセージを付加します。

GCPプロジェクト '{project_name}' を編集します。

## 変更内容
- プロジェクト名: {project_name}
- ビリングアカウント: {billing_account}
- Terraformファイル: {file_path}
- 変更指示: {description}
- 操作: 既存moduleを更新

## 確認事項
- [ ] プロジェクト名が正しいことを確認
- [ ] ビリングアカウントが正しいことを確認
- [ ] 新しい権限設定が正しいことを確認

## 自動実行プロセス
1. このマージリクエストがマージされた後
2. GitLab CIでterraform applyが自動実行されます
3. 実際のGCPプロジェクトが自動的に更新されます

この変更により、GCPプロジェクトがTerraformで管理されます。

使用例

p**** というGoogle Cloudプロジェクトを作成し、オーナーを e**** k**** y**** t**** とする」という作業をやってみました。

このように、先に書いた自然言語文とほぼ同等の指示で、Google Cloudプロジェクトを作成するマージリクエストを作成できました。実際のマージリクエストも見てみましょう。

このようにマージリクエストの詳細やチェックリストまでついてきているので、マージ実施の際の確認も容易となっています。

また、管理用のSlackチャンネルに次のメッセージが別途送信されます。

メールより気づきやすい・見逃しにくい、といった感想が聞かれました。

まとめ

本稿では社内Slackに常駐する生成AIチャットボット「玄米茶」に追加された、自然言語による会話でGoogle Cloudプロジェクトを管理する機能を紹介しました。

技術的には、自然言語からTerraformコードを生成することで、インフラ管理の手間やハードルを大幅に下げることができたと評価しています。以前からSlackからインフラ管理を行う「ChatOps」という概念が存在していましたが、生成AIを導入することにより入力メッセージの柔軟性が飛躍的に向上したと思います。逆に言うと自由度が高くなるため、無関係な処理や危険な処理を行えないようにするためのガードレールの実装も必須であると考えます。

今回はマージリクエストを作成するところまでで、実際にGoogle Cloudプロジェクトを変更するところまでは踏み込んでいません。生成AIによる自動化は、利便性と安全性のバランスを取りつつ、進めていくべきだと考えています。

また、人間・生成AI(Azure OpenAI, Anthropic Claude)・API利用、とそれぞれの得意分野で役割分担しているところも、過度な自動化や新規技術の急激な導入ではなく、ゆるやかかつ効果の高いところからの実施という面でも効果的だと評価しています。

引き続き、生成AIとSlackを組み合わせ、人間の負担を軽減できる機能を考えていきたいと思います。

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA