PR

【最小構成】Go言語(Golang)でAgent Skillsを試す!|Gemini CLI × Google Antigravity

5. AI

こんにちは。Tomoyuki(@tomoyuki65)です。

これからはAI駆動開発が主軸になっていくのは避けられないため、適宜AI関連のキャッチアップが必要ですが、Gemini CLIやGoogle Antigravityにおいても「Agent Skills」が使えるようになったので試してみました。

※「Agent Skills」は、元々Claude Codeの開発元であるAnthropic社が大きく打ち出して標準化した仕組みで、エージェントに対して再利用可能な能力(スキル)を持たせるような仕組みのことです。

どういうことができるのかを知りたい方は、ぜひ参考にしてみて下さい。

 

関連記事

Gemini CLIの使い方【バイブコーディングの始め方】
こんにちは。Tomoyuki(@tomoyuki65)です。最近になってバイブコーディング(Vibe Coding)なるものが話題になり、これから間違いなくエンジニアの必須ツール・必須スキルになることは避けて通れません。そんなバイブコーディ...
Google製のAIエディタ「Google Antigravity」の使い方
こんにちは。Tomoyuki(@tomoyuki65)です。最近は生成AIのモデルだけではなく、それらを利用したAIエディタについても様々なものが出てきていて、非常に競争が激しい感じですが、ようやくGoogle製のAIエディタとして「Goo...

 

【最小構成】Go言語(Golang)でAgent Skillsを試す!|Gemini CLI × Google Antigravity

まずはGo言語(Golang)の開発環境を構築します。この記事ではDockerを使って環境構築するため、もしまだDocker環境を使えない場合は事前にDockerを使えるように準備して下さい。

では以下のコマンドを実行し、各種ファイルを作成します。

$ mkdir go-skills && cd go-skills
$ mkdir -p docker/local/go && touch docker/local/go/Dockerfile
$ mkdir src && touch src/main.go
$ touch compose.yml

 

次に作成したファイルをそれぞれ以下のように記述します。

・「docker/local/go/Dockerfile」

FROM golang:1.25.6-alpine3.23

WORKDIR /go/src

COPY ./src .

# go.modがあれば依存関係をインストール
RUN if [ -f ./go.mod ]; then \
  go install ./...; \
fi

# 開発用のライブラリをインストール
RUN go install honnef.co/go/tools/cmd/staticcheck@latest

EXPOSE 8080

 

・「src/main.go」

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello World !!")
}

 

・「compose.yml」

services:
  app:
    container_name: go-app
    build:
      context: .
      dockerfile: ./docker/local/go/Dockerfile
    volumes:
      - ./src:/go/src
    ports:
      - "8080:8080"

 

次に以下のコマンドを実行し、Dockerコンテナをビルドします。

$ docker compose build --no-cache

 

次に以下のコマンドを実行し、Goの初期化をします。

$ docker compose run --rm app go mod init go-skills

 

次に以下のコマンドを実行し、「staticcheck」による静的コード解析チェックで警告やエラーがでないことを確認します。

$ docker compose run --rm app staticcheck ./...

 

次に以下のコマンドを実行し、Goのメインファイルを実行して試します。

$ docker compose run --rm app go run ./main.go

 

コマンド実行後、「Hello World !!」が出力されればOKです。

 

Gemini CLI用に二つのスキルを作成する

次に以下のコマンドを実行し、Gemini CLI用の二つのスキルを作成します。

$ mkdir -p .gemini/skills/go-staticcheck && touch .gemini/skills/go-staticcheck/SKILL.md
$ mkdir -p .gemini/skills/go-lowercase/script
$ touch .gemini/skills/go-lowercase/SKILL.md .gemini/skills/go-lowercase/script/lowercase.go

※今回の例では、staticcheckを使って静的コード解析をするスキルを「go-staticcheck」、対象の文字列を小文字化するスキルを「go-lowercase」として作ります。

 

次に作成したファイルをそれぞれ以下のように記述します。

・「.gemini/skills/go-staticcheck/SKILL.md」

---
name: go-staticcheck
description: Go言語のコードに対して、lint・静的コード解析を行う。staticcheckを実行し、警告やエラーを検出して修正案を提示する。
---

# go-staticcheck


## Go言語のコードに対してフォーマット修正する
docker composeのコマンド`docker compose run --rm app go fmt ./...`を実行し、Go言語のコードに対してフォーマット修正をする。


## staticcheckを実行して問題を収集する
docker composeのコマンド`docker compose run --rm app staticcheck ./...`を実行し、検出された全ての警告・エラーを収集する。


## 収集した問題を詳細に整理する
収集した問題について、以下について詳細に整理する:

- 対象ファイル名
- 行番号
- エラーコード(例: SA4006)
- エラーメッセージ原文
- 問題のわかりやすい説明
- なぜ修正すべきか
- 具体的な修正案
- 必要に応じて修正後のコード例


## 整理した問題を重要度順に並べ替える
整理した問題を以下の優先順位で並べ替えて整理する:

1. バグの可能性が高いもの
2. パフォーマンス劣化の可能性が高いもの
3. 保守性の問題があるもの


## 出力形式
整理した問題について、対象ファイル名の単位でグループ化して出力する。


## 問題がない場合の出力
問題が存在しない場合は、以下のみを出力する:

「staticcheckによる問題は検出されませんでした。」

※今回はDockerでGo言語の環境構築をしているため、docker composeコマンドを使って実行します。合わせて静的コード解析前に「go fmt」を使ってフォーマット修正もするようにしています。

 

・「.gemini/skills/go-lowercase/script/lowercase.go」

package main

import (
    "fmt"
    "os"
    "strings"
)

func main() {
    // 引数チェック(渡せる文字列は一つのみ)
    if len(os.Args) != 2 {
        fmt.Println("Usage: go run lowercase.go <text>")
        return
    }

    // 文字列の取得
    input := os.Args[1]

    // 小文字化
    output := strings.ToLower(input)

    // 出力
    fmt.Println(output)
}

※os.Argsの一つ目の要素が対象のスクリプト名(ファイル名)になるため、スクリプトに文字列を渡すと「os.Args[1]」に格納されます。

 

・「.gemini/skills/go-lowercase/SKILL.md」

---
name: go-lowercase
description: 入力された文字列をGoスクリプトで小文字化して返す。
---

# go-lowercase


## 文字列を小文字化する
対象の文字列をGoのスクリプト`script/lowercase.go`を使って実行し、小文字化して返す。
スクリプトの実行にはdocker composeのコマンド`docker compose run --rm -v "$(pwd):/ws" -w /ws app go run`を使用し、スクリプトに渡す文字列は''で囲んで渡します。

※スクリプト「script/lowercase.go」を実行するにはDockerコンテナ内にコードを置く必要があるため、docker composeのオプションを駆使したコマンド「docker compose run –rm -v “$(pwd):/ws” -w /ws app go run」で実行するようにしています。(「-v “$(pwd):/ws”」の部分でルートディレクトリの全てをDockerコンテナ内のディレクトリ「/ws」にマウントし、「-w /ws」の部分でワークディレクトリを指定)

 

Gemini CLIで静的コード解析をするスキル「go-staticcheck」を試す

次にGemini CLIから上記で作成した静的コード解析をするスキル「go-staticcheck」を試しますが、事前にファイル「src/main.go」を以下のように修正してエラーがでるようにしておきます。

・「src/main.go」

package main

import (
    "fmt"
"os"
)

func main() {
var name string
    fmt.Println("Hello World !!")
}

 

次に以下のコマンドを実行し、Gemini CLIを起動します。

$ gemini

 

Gemini CLI起動後、信頼するフォルダについて聞かれるので「1. Trust folder (go-skills)」を選択します。

 

選択後、以下のように入力欄が表示されます。

 

次にコマンド「/skills list」を実行すると、スキル一覧を確認できます。

 

次に明示的にスキル名を指定する形の命令として「go-staticcheckでコードをチェックして」を入力して実行すると、スキルを使って処理するか聞かれるので、「1. Allow once」(一度だけ許可)を選択します。

※今回はあえて明示的にスキル名を指定していますが、命令内容がスキルに定義したdescriptionの内容にマッチしていれば自動で使われたりします。

 

次にスキルで定義したコマンドを実行してよいか聞かれるので、「1. Allow once」(一度だけ許可)を選択します。

 

実行後、以下のようにチェック結果が表示されればOKです。

 

Gemini CLIで対象の文字列を小文字化するスキル「go-lowercase」を試す

次にGemini CLIから上記で作成した対象の文字列を小文字化するスキル「go-lowercase」試してみます。

Gemini CLIで「文字列「HELLO WORLD !!」をgo-lowercaseを使って処理してから出力して」を入力して実行すると、スキルを使って処理するか聞かれるので、「1. Allow once」(一度だけ許可)を選択します。

 

次にスキルに定義した内容をもとに作成したコマンドを実行してよいか聞かれるので、「1. Allow once」(一度だけ許可)を選択します。

 

コマンド実行後、以下のように小文字で「hello world !!」が出力されればOKです。」

 

Google Antigravityでも二つのスキルを試す

次にGoogle Antigravityでも二つのスキルを試してみます。

まずはGoogle Antigravityで対象のディレクトリを開き、「はい。作成者を信頼します」を選択してフォルダを信頼します。

 

これでGoogle Antigravityで対象のディレクトリを開けました。

 

次にGoogle Antigravityでは「.agent」ディレクトリを使うため、上記で作成したディレクトリ名「.gemini」を「.agent」に修正します。

 

ディレクトリ名を「.agent」に修正すればOKです。

また、今回の例では速さを重視してモデルの設定に「Fast」、「Gemini 3 Flash」を使います。

 

次に入力欄に「利用可能なスキル一覧を教えて」を入力して実行し、スキル一覧を確認します。

 

次に先ほどと同様に「go-staticcheckでコードをチェックして」を入力して実行し、コマンドを実行するか聞かれるので「Run」をクリックします。

 

次に再度コマンドを実行するか聞かれるので「Run」をクリックします。

 

実行後、以下のようにチェック結果が表示されればOKです。

 

次に先ほどと同様に「文字列「HELLO WORLD !!」をgo-lowercaseを使って処理してから出力して」を入力して実行し、コマンドを実行するか聞かれるので「Run」をクリックします。

 

実行後、以下のように小文字で「hello world !!」が出力されればOKです。」

 

スポンサーリンク

最後に

今回はGo言語(Golang)およびGemini CLIとGoogle Antigravityを使ってAgent Skillsを試してみました。

スキルを定義するファイル「SKILL.md」の書き方の自由度が高く(どういう処理をどの順番でやるのかなどをまとめる必要がある。また文字数が多すぎたらファイル分割も必要になる。)、スキルに応じて適切に記述する必要があるので、その点が難しいなと思いました。

ただ上手くスキルを定義できればローカル環境で使えるコマンドも駆使して様々な処理をさせられるので、その点は非常に便利です。

これからAgent Skillsを試してみたい方は、ぜひ参考にしてみて下さい。

 

Agent Skillsは便利なため、SNSやインターネットで公開されているスキルもありますが、悪意のあるコードや意図しない処理が含まれている可能性があります。他人が作ったスキルを安易に使うのは危険なので避けましょう。

 

この記事を書いた人
Tomoyuki

SE→ブロガーを経て、現在はSoftware Engineer(Web/Gopher)をしています!

Tomoyukiをフォローする
5. AI
スポンサーリンク
Tomoyukiをフォローする

コメント

タイトルとURLをコピーしました