はじめまして、株式会社ナレッジワークでSREをしているmadoです。
最近は社内においてAIを活用した開発・運用が非常に活発で、その中で良かった例を紹介します。
はじめに
一時的に必要だったコードが、使い終わったあともコードベースに残り続けてしまうことはよくあります。
チームのルールとして「不要になったら削除する」としていても、どうしても個人の頑張りに依存してしまい、結果としてコードベースが肥大化してしまいがちです。
ここではTerraformにおけるmovedブロックを例にして、Anthropicの Claude Code GitHub Actions を用いて不要になったコードを自動で定期的に検出し、削除するPull Requestを自動生成するGitHub ActionsのCIワークフローを紹介します。
課題
Terraformでリファクタリングを行う際に、以下のようにmovedブロックを使ってリソースの移動を安全に行うことがあります。
moved {
from = google_storage_bucket.a
to = google_storage_bucket.b
}
しかし、一時的に追加した使用済みのブロックを削除する場合に以下のような課題があります。
- mainブランチにマージした後に本番環境に反映されるまでラグがあり、削除タイミングを見落としがち。
- コメントや関連コードも一緒に削除しようとする場合、自前のスクリプトだと複雑になりがちで書いた人以外が保守するのが大変。
Claude Code GitHub Actionsによる解決策
Claude Code GitHub Actions を使うことで、自然言語でタスク内容を記述しPull Requestを生成するワークフローを簡単に実現できます。
以下の特徴があります。
- 自然言語のプロンプトでタスクを定義できるため、意図が明確で誰でも理解しやすく修正も容易。
- AIが修正や削除を直接行うことは不安がありますが、Pull Requestという形で人間のレビューを挟めるため導入が安心。
以下が実際のワークフローです。
name: create pull request for delete moved block
on:
workflow_dispatch:
schedule:
- cron: '0 0 1 * *'
jobs:
create-pr:
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: write
pull-requests: write
id-token: write
steps:
- name: checkout code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
with:
fetch-depth: 0
- id: fetch-token
name: fetch github app token
uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b
with:
app-id: ${{ secrets.GH_APP_AI_CODING_AGENT_APP_ID }}
private-key: ${{ secrets.GH_APP_AI_CODING_AGENT_PRIVATE_KEY }}
- name: create pull request for delete moved block
uses: anthropics/claude-code-action@fd2c17f101639b10696381c1fd85fa735239090a
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
github_token: ${{ steps.fetch-token.outputs.token }}
claude_args: |
--allowedTools Bash,Read,Write
prompt: |
# terraform movedブロックを削除したpull request作成
- movedブロックをTerraformコードから削除し、変更があった場合のみPull Requestを作成してください。
- 本番環境への反映を考慮し、追加・修正から30日以上経過したブロックのみを削除対象としてください。
- git blameで各ブロックの最終更新日時を確認してください。
- 周辺の関連するコメントも合わせて削除してください。
- 削除後のファイルに有効なソースコードがなくなった場合はファイルごと削除してください。
- 対象ファイルは **/*.tf です。
- Pull Requestの本文には変更内容・ファイルリスト・削除したブロックの数(1ヶ月以上前のもの)・スキップしたブロックの数(1ヶ月未満のもの)・その他有益な情報があれば含めてください。
- Pull Requestのレビュアーにはsreチームをアサインしてください。チームが存在しない場合は最も似た名前のチームをアサインしてください。
以下が実際に作成されたPull Requestになります。
プロンプトを調整することでより扱いやすいPull Requestが作成できると思います。
まとめと今後の展望
Claude Code GitHub Actions を用いることで、コードベースをよりクリーンに保つことができました。
AIを用いると厳密なコードを書かなくても柔軟に対応してくれるため、上手く使えばCIの実装・運用コストを大幅に下げてくれると思います。
AIを活用したCI運用の自動化には大きな可能性があり、今後もさまざまな応用を模索していきたいと思います。
KNOWLEDGE WORK Blog Sprint 、明日の執筆者は tapih さんです。
お楽しみに!
Views: 0