Claude 3.7 & RooCode でコーディングエージェントを試してみた
前説
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
また、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
に配置しています。
実行
タスクを実行すると、どのように進めるのかを説明してくれます。
途中で必要なライブラリがあれば、自動でインストールを行います。
さらに、インストールが失敗した場合でも、エラー内容を確認し、再試行してくれます。
実際に生成されたスクリプトが以下になります。
生成されたスクリプト
#!/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 ドルちょっと。
もう少し難易度の高い実装や複雑な要件でも、どこまで対応できるのか気になるところです。
Discussion