14
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gemini CLIはコーディングだけじゃない!Google Cloud のお掃除を手伝ってもらってみた

Posted at

はじめに

Gemini CLI がリリースされて3ヵ月ほど経過しました。

様々な活用方法が出てきている中で、いつぞやから Google Cloud の Cloud Shell にも Gemini CLI が入っており、より Google Cloud 利用者は容易に利用することができるようになりました。
Google Cloud のドキュメントにもその旨記載されています。

Cloud Shell からであれば、gcloud コマンドも利用できることから、プロジェクト設定も、コンソールでアクセスしたプロジェクトがはじめからセットされているので、本当に gemini コマンド一発で Gemini CLI の対話モードが起動し、様々なことを行うことが可能です。

その点を少し活かして、「Gemini CLI ってコードを書くのを手伝ってくれるだけでしょ?」と思っている方に向けても、1つのユースケースとして見てもらえればと思います。

やったこと

Gemini CLIを活用して「Google Cloud プロジェクト内の不要リソース」の洗い出しを行ってみました。

準備

まず、こんな感じでやってほしいことをまとめたファイルを準備しました。

# やりたいこと
- Google CLoud プロジェクト の プロジェクトID の中で利用されていないリソースの洗い出し
- 対象のプロジェクトはすでにセットされています

# 利用されていない基準
- 1ヵ月の間、利用パケットが発生していない
- CPU、メモリリソースの利用率が低い
- 使っているの?と思われるもの

# 処理ステップ
- 選定できたリソースを一旦ファイルに情報出力してください
- ファイル出力時に以下の情報をいれてください
    - リソース名
    - 判断した基準
    - 判断するまでに何を調べてくれたか

こちらを Gemini CLI に読み込ませて、あとは自由に調査してもらいます。

Gemini CLIと共に調査開始

ここからは、実際にGemini CLIと対話しながら調査を進めていく様子をご紹介します。

※ちなみに Google Cloud ともプロジェクト ID 名をプロジェクト ID としても伝えていなかったときは、こんな感じでマスキング箇所にプロジェクトIDが入った状態で質問受けました。。そりゃそうか、、

スクリーンショット 2025-09-27 0.54.10.png

準備したファイルを読み込んでほしいとお願いし直したところ理解してもらえて Compute Engine からスタートです。

スクリーンショット 2025-09-27 0.55.48.png

Compute Engine

こんな感じで未使用のディスクを見つけてくれました。

スクリーンショット 2025-09-27 0.56.21.png

結果、2つのディスクが未使用であることが判明しました。幸先の良いスタートです。

続いて、停止しているVMインスタンスも確認します。各種利用率とインスタンス一覧を見てもらいました。

スクリーンショット 2025-09-27 0.56.49.png

調査結果としてこんな感じでまとめてくれました。マスキング箇所にはインスタンスが掲載されます。

スクリーンショット 2025-09-27 0.57.14.png

他のリソースもお願いしてみる

もしかしたら 「Billing ベースで」とか伝えたらよかったかもですが、私が明確にこのリソースとお願いしていなかったりしたので、他のもやってみて、とお願いしてみました。

スクリーンショット 2025-09-27 1.00.50.png

上記では、Cloud Load Balancing から始めていますが、これ以降、順々にリソースのチェックをしてくれました。
参考までに、記載した指示でどこまで提案して自動で見てくれようとしたか、記載します。実は不要リソースがそこまでないことはわかってたので、Pub/Sub まできて、試しとしては一端ここまでとしましたが、まだまだ提案してくれる感じではありました。

  • Cloud SQL
  • Cloud Storage
  • Cloud Run functions
  • BigQuery
  • Pub/Sub

Cloud Storage ではこんな感じで見てくれた

記載したリソースの中でも Cloud Storage は割とちゃんと見てくれてたので、どんなステップで見てくれたかご紹介します。

まずバケットのリストアップから、、、

スクリーンショット 2025-09-27 1.01.57.png

こんな感じでリストアップしてくれます。しかも人間的と言うか「test」ってついてるから、怪しくね?ってことで、testの文字列があるものを優先して見てくれました。

スクリーンショット 2025-09-27 1.02.31.png

test のつくものはいっぱいオブジェクトがあることが確認でき、その後どれからやるか、という質問を受けたので、

スクリーンショット 2025-09-27 1.03.38.png

バケットのサイズが大きいものからみてほしい、と依頼し、調査してもらいました。

スクリーンショット 2025-09-27 1.04.38.png

こんな感じでサイズととともにバケットのリストを提示してくれます。
また IP フィルタしているバケットがあり、取得できなかったことも教えてくれました。

スクリーンショット 2025-09-27 1.05.21.png

調査結果のまとめ

これらの結果をまとめてほしいなと思ったので、調査内容をまとめてほしい、と伝えまして、このようなアウトプットをもらいました。ここまでまとまってたら嬉しいかなと思いますし、また改善してほしければ指示を出して改善要望も出せそうです。

# プロジェクトID の未使用リソースレポート

このレポートは、`プロジェクト` GCPプロジェクト内で、指定された基準に基づいて未使用と思われるリソースを一覧表示します。

## 未アタッチのディスク

これらのディスクは実行中のどのVMインスタンスにもアタッチされておらず、削除対象の有力な候補です。

| リソース名                    | 判断基準        | 調査手順                                                                                               |
| ----------------------------- | --------------- | ------------------------------------------------------------------------------------------------------ |
| `リソース名1`       | 未アタッチのディスク | 1. `gcloud compute disks list --filter="-users:*"` を実行し、どのVMインスタンスにも関連付けられていないディスクを検出。 |
| `リソース名2` | 未アタッチのディスク | 1. `gcloud compute disks list --filter="-users:*"` を実行し、どのVMインスタンスにも関連付けられていないディスクを検出。 |

## 停止中のVMインスタンス

これらのVMインスタンスは `TERMINATED` 状態です。CPUやメモリの料金は発生しませんが、ブートディスクはストレージを消費し続け、コストが発生します。

| リソース名                | 判断基準        | 調査手順                                                                          |
| ------------------------- | --------------- | --------------------------------------------------------------------------------- |
| `リソース名1`            | 停止中のVM      | 1. `gcloud compute instances list` を実行し、すべてのVMインスタンスのステータスを取得。 |
| `リソース名2`     | 停止中のVM      | 1. `gcloud compute instances list` を実行し、すべてのVMインスタンスのステータスを取得。 |
| `リソース名3` | 停止中のVM      | 1. `gcloud compute instances list` を実行し、すべてのVMインスタンスのステータスを取得。 |

## 未使用のPub/Subトピック

これらのPub/Subトピックにはサブスクリプションがありません。つまり、これらのトピックに公開されたメッセージはどのコンシューマーにも配信されていません。これらは未使用である可能性が高いです。

| リソース名                               | 判断基準         | 調査手順                                                                                                                                    |
| ---------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `リソース名1`  | サブスクリプションなし | 1. `gcloud pubsub topics list` ですべてのトピックを一覧表示。<br>2. `gcloud pubsub subscriptions list` ですべてのサブスクリプションを一覧表示し、一致するものがないことを確認。 |
| `リソース名2` | サブスクリプションなし | 1. `gcloud pubsub topics list` ですべてのトピックを一覧表示。<br>2. `gcloud pubsub subscriptions list` ですべてのサブスクリプションを一覧表示し、一致するものがないことを確認。 |
| `リソース名3`      | サブスクリプションなし | 1. `gcloud pubsub topics list` ですべてのトピックを一覧表示。<br>2. `gcloud pubsub subscriptions list` ですべてのサブスクリプションを一覧表示し、一致するものがないことを確認。 |
| `リソース名4`            | サブスクリプションなし | 1. `gcloud pubsub topics list` ですべてのトピックを一覧表示。<br>2. `gcloud pubsub subscriptions list` ですべてのサブスクリプションを一覧表示し、一致するものがないことを確認。 |

## 未使用の可能性のあるCloud Storageバケット

以下のバケットには、長期間更新されていないデータが含まれています。

| リソース名     | サイズ     | 最終更新日   | 判断基準                       | 調査手順                                                                                                                                      |
| -------------- | ---------- | ------------ | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `リソース名1` | 131.37 MiB | 2025年1月24日 | 古いデータ(8ヶ月以上更新なし) | 1. `gsutil du -sh` ですべてのバケットとそのサイズを一覧表示。<br>2. `gsutil ls -lr` で内容を調査し、オブジェクトの最終更新日時を確認。 |

## 調査の概要

1.  **プロジェクト設定:** GCPプロジェクトが `プロジェクトID` であることを確認。
2.  **未アタッチのディスクの確認:** `gcloud compute disks list` を使用して、どのインスタンスにもアタッチされていないディスクを検出。
3.  **未使用のIPアドレスの確認:** `gcloud compute addresses list` を使用して、関連付けのない静的IPアドレスを検索(結果:なし)。
4.  **VMインスタンスのステータスの確認:** `gcloud compute instances list` を使用し、すべてのインスタンスが停止中であることを確認。
5.  **Cloud Storageの確認:** すべてのバケットとそのサイズを一覧表示。`リソース名` が大きく、古いデータを含んでいることを発見。1つのバケット(`エラーリソース名`)はアクセス不可。
6.  **Pub/Subの確認:** サブスクリプションのないトピックを4つ発見。
7.  **その他のサービスの確認:** Cloud Load Balancing, Cloud SQL, Cloud Functions, GKE, BigQueryについては、未使用のリソースは発見されず。

Gemini CLI はまるで調査の相棒のようだった

今回の一連の作業を通じて、Gemini CLIがプロジェクト内の調査であっても非常に有用だと感じました。メリットをまとめると以下のようになります。

  • 圧倒的なスピードと効率
    • gcloudgsutil のコマンドの構文をいちいち調べなくても、自然言語で指示するだけで適切なコマンドを実行してくれます。これにより、調査が驚くほどスピーディに進みました。
  • 思考を止めない対話形式
    • 「次は何を調べようか」今回は最初はリソース指示し、それ以降は自律的に行動してもらいましたが、決まったリソースなどを調べる場合、もう指示するファイルに記載しておくと、自動で進んじゃいそうですね。
  • レポート作成もやってもらえる
    • 調査結果をその場で整理し、レポートとして出力までしてくれるため、後から「あれ、どうだったっけ?」と見返す手間もないし、Gemini CLI 自身でちゃんんと網羅できているか、を確認させてもいいかなと思いました。
  • 新たな可能性
    • もうアイディア次第になってきますが、Gemini CLIは、コードを書くだけでなく、今回のようなクラウドインフラの棚卸しでも利用できたことから、今後も様々な場面のパートナーとして活躍してくれそうです。

おわりに

今回は、Gemini CLI を使って Google Cloud プロジェクトの不要リソースを洗い出す調査を行いました。対話形式でサクサク調査を進められるのもそうですが、個人的には誰かと会話して、順番に調査してもらっているのとほぼ同じ感覚でした。また、調査事項をまとめて依頼した場合についても、きっとそれも誰かに依頼しているのと同じで、まとめて結果がでてくるんだろうなと思いました。
これって本当すごいし、効率化でき過ぎると思いました。今後も様々な場面で活用していきたいと改めて思わされる内容でした。久しぶりの Qiita 投稿でした。よろしければ自分の環境でも調査してみてください。

14
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?