Zenn
🌀

Claude 3.7 & RooCode でコーディングエージェントを試してみた

2025/03/03に公開
1

前説

X を眺めていると、「Cline」や「Claude 3.7」といったキーワードを含んだポストが頻繁に流れてきます。気になったので、話題のコーディングエージェントを実際に使って遊んでみました。その忘備録として、ここにまとめておきます。今回は「RooCode」と、Anthropic 社の「Claude 3.7」を利用して、簡単なスクリプトを実装してもらいました。

「Cline」ではなく「RooCode」を選んだ理由に特別な意味はありません。ただ、X でよく見かけたキーワードだったから、というだけです。「RooCode」は「Cline」をフォークした OSS らしいですね。

どちらも VSCode のプラグインとして提供されており、導入が簡単そうだったのも試してみた理由のひとつです。

環境の準備

Claude 3.7 は Amazon Bedrock から呼び出すことにしました。

日本リージョンではまだ利用できないため、米国リージョンで利用申請を行い、モデルアクセスをアクティブ化しました。

次に、VSCode に「RooCode」をインストールします。
マーケットプレイスで rooveterinaryinc.roo-cline という識別子のプラグインをインストールしてください。インストール後「RooCode」の Provider Settings で API Provider を「AWS Bedrock」に設定してください。

provider-settings
Provider Settings

また、AWS のクレデンシャルは適宜設定済みのものを使用し、"Use cross-region inference" のチェックも忘れずに行ってください。

RooCode へのタスク指示

Google Search Console API を利用し、インデックス登録されているページの一覧を取得するタスクを RooCode に依頼しました。以下の内容で指示を出してみました。

# タスク
現在、この実行環境では Python 3.13.1 が利用可能です。
以下の要件を満たす Python のスクリプトを作成してください。

# 要件
GoogleSearchConsoleAPI を使用して、Index 化さている URL の一覧を取得し、CSV ファイルに出力するスクリプトを作成してください。
出力する CSV ファイルのフォーマットは以下の通りです。また、作成した CSV ファイルの出力先は、output/ にしてください。

```
URL, Indexing Date
https://example.com/, 2022-01-01
https://example.com/page1, 2022-01-01
https://example.com/page2, 2022-01-01
```

GoogleSearchConsoleAPI を利用する際のクレデンシャル情報は、credentials/credential.json に存在するものを使用してください。
対象サイトの URL は、「https://hoge.fuga」です。

Google Search Console API を有効にしたサービスアカウントは、対象サイトの Search Console に追加済みです。また、そのサービスアカウントのクレデンシャルも発行済みで、credentials/credential.json に配置しています。

実行

タスクを実行すると、どのように進めるのかを説明してくれます。

実行結果1

実行結果2

途中で必要なライブラリがあれば、自動でインストールを行います。
さらに、インストールが失敗した場合でも、エラー内容を確認し、再試行してくれます。

実際に生成されたスクリプトが以下になります。

生成されたスクリプト
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Google Search Console APIを使用して、インデックス化されているURLの一覧を取得し、
CSVファイルに出力するスクリプト
"""

import os
import csv
import datetime
from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
from urllib.parse import urlparse

# 定数
SITE_URL = "https://hoge.fuga"
CREDENTIALS_FILE = "credentials/credential.json"
OUTPUT_DIR = "output"
OUTPUT_FILE = f"{OUTPUT_DIR}/indexed_urls_{datetime.datetime.now().strftime('%Y%m%d')}.csv"

def create_output_directory():
    """出力ディレクトリが存在しない場合は作成する"""
    if not os.path.exists(OUTPUT_DIR):
        os.makedirs(OUTPUT_DIR)
        print(f"ディレクトリを作成しました: {OUTPUT_DIR}")

def get_search_console_service():
    """Google Search Console APIのサービスを取得する"""
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        CREDENTIALS_FILE,
        scopes=['https://www.googleapis.com/auth/webmasters']
    )

    return build('webmasters', 'v3', credentials=credentials)

def get_indexed_urls(service, site_url):
    """インデックス化されているURLの一覧を取得する"""
    # 現在の日付から1ヶ月前の日付を取得
    end_date = datetime.datetime.now().strftime('%Y-%m-%d')
    start_date = (datetime.datetime.now() - datetime.timedelta(days=30)).strftime('%Y-%m-%d')

    # Search Analyticsクエリを実行
    request = {
        'startDate': start_date,
        'endDate': end_date,
        'dimensions': ['page'],
        'rowLimit': 5000  # 最大5000件取得
    }

    response = service.searchanalytics().query(siteUrl=site_url, body=request).execute()

    indexed_urls = []
    if 'rows' in response:
        for row in response['rows']:
            url = row['keys'][0]
            # インデックス日付は正確には取得できないため、最終確認日を使用
            indexed_date = end_date
            indexed_urls.append({'url': url, 'date': indexed_date})

    return indexed_urls

def write_to_csv(data, output_file):
    """データをCSVファイルに出力する"""
    with open(output_file, 'w', newline='', encoding='utf-8') as f:
        writer = csv.writer(f)
        writer.writerow(['URL', 'Indexing Date'])
        for item in data:
            writer.writerow([item['url'], item['date']])

    print(f"CSVファイルを出力しました: {output_file}")
    print(f"取得したURL数: {len(data)}")

def main():
    """メイン処理"""
    try:
        # 出力ディレクトリの作成
        create_output_directory()

        # Search Consoleサービスの取得
        service = get_search_console_service()

        # インデックス化されているURLの取得
        print(f"サイト {SITE_URL} のインデックス化されているURLを取得中...")
        indexed_urls = get_indexed_urls(service, SITE_URL)

        if not indexed_urls:
            print("インデックス化されているURLが見つかりませんでした。")
            return

        # CSVファイルに出力
        write_to_csv(indexed_urls, OUTPUT_FILE)

    except Exception as e:
        print(f"エラーが発生しました: {e}")

if __name__ == "__main__":
     main()

# インデックス日付は正確には取得できないため、最終確認日を使用

とあり、別にそのロジックは不要であれば消せばいいのに、タスク通りにちゃんと実装しようとしているあたり、健気ですね。

また、スクリプトの調整の指示を行ったとこと、以下のような diff も表示してくれました。

差分

便利ですね ...

感想

自分で実装すると 1 時間くらいはかかりそうなところを、ボタンをポチポチ押すだけで 1 分ほどで完成しました。何より、使い慣れた VSCode で手軽に導入できるのが良いポイントです。
また、API の利用コストも表示されるため、コストを意識しながら使えるのも便利でした。今回の実装でかかったコストは 1 ドルちょっと。

もう少し難易度の高い実装や複雑な要件でも、どこまで対応できるのか気になるところです。

1

Discussion

ログインするとコメントできます