所要時間: 約45分 | 難易度: ★★★☆☆
この記事で作るもの
「外部API(OpenWeatherMap)から情報を取得し、Slackへ通知するPythonスクリプト」を、Claude CodeとCursorを組み合わせて開発します。 単にコードを書くだけではなく、Claude Codeにテストを実行させ、エラーがあれば自律修正させ、Cursorで全体像をレビューする「AIエージェント併用型ワークフロー」を構築します。
前提知識:
- ターミナル(Terminal/iTerm2等)の基本的な操作ができる
- Pythonの基礎的な文法を知っている
- Anthropic APIキー、Slack APIキーを準備できる(取得手順も解説します)
先に確認するスペック・料金
AIコーディングを本気でやるなら、ハードウェアとAPI予算に投資してください。 この記事の内容を快適に動かすには、Apple Silicon(M1/M2/M3/M4)搭載のMacで、メモリは32GB以上を強く推奨します。 16GBでも動きますが、Cursorを立ち上げつつブラウザでドキュメントを開き、裏でClaude Codeを走らせるとスワップが発生して思考の速度が落ちるからです。
私は自宅でRTX 4090を2枚挿したサーバーを運用していますが、Claude CodeのようなAPIベースのツールを使う際は、マシンのGPU性能よりも「ネットワークの安定性」と「APIの利用上限(Tier)」が重要になります。 AnthropicのAPIは「Tier 2(累計$50以上の支払い)」以上になっていないと、レート制限(Rate Limit)でClaude Codeが途中で止まるストレスに晒されます。
また、料金についてですが、Claude Codeは1回の自律タスクで数十円〜数百円のAPI費用を平気で消費します。 便利だからと放置すると、1日で数千円飛ぶこともあるため、後述するコスト制限の設定は必須です。 「月額$20のサブスク」で済むCursorとは、課金の性質が根本から違う点に注意してください。
なぜこの方法を選ぶのか
Cursorの「Composer」機能は非常に優秀ですが、あくまでエディタ上の編集に特化しています。 一方でAnthropicが公式に提供を開始した「Claude Code」は、ターミナルを支配下に置き、シェルコマンドを自由に実行できる「自律型エンジニア」です。
Cursorに「全体の設計とコードの微調整」を任せ、Claude Codeに「テストの実行、環境構築、エラーの自己解決」を任せるのが、現時点で最も開発速度が上がります。
Cursorだけでデバッグしようとすると、エラーが出るたびにログをコピペしてAIに渡す手間が発生しますが、Claude Codeなら勝手にpytestを叩いてエラーを読み取り、修正まで完結させます。
この「ターミナルとの密結合」こそが、私がCursor単体からこの併用スタイルへ移行した最大の理由です。
Step 1: 環境を整える
まずはClaude Codeを動かすためのNode.js環境を用意します。 Claude CodeはNode.js v18以上が必要ですが、互換性の問題を避けるために最新のLTS(Long Term Support)バージョンを推奨します。
# Node.jsのバージョン確認
node -v
# 18未満の場合は nvm 等でインストール
# Claude Codeのインストール(グローバル)
npm install -g @anthropic-ai/claude-code
# 正常にインストールされたか確認
claude --version
npm install -gを使うのは、どのプロジェクトディレクトリからでも即座にClaudeを呼び出せるようにするためです。
もしパーミッションエラーが出る場合は、sudoをつけるのではなく、Node.jsの管理にnvmやvoltaを使うことを検討してください。
⚠️ 落とし穴: Node.jsのバージョンが古いと、Claude Codeのインストール自体は成功しても、実行時に「AsyncLocalStorage…」といったエラーでクラッシュします。必ずnode -vで18以上であることを確認してください。また、Python環境を汚さないために、プロジェクトごとに仮想環境(venv)を作成するのが鉄則です。
Step 2: 基本の設定
Claude Codeを起動する前に、AnthropicのAPIキーを環境変数にセットします。 毎回入力するのは非効率なので、シェル(zshやbash)の設定ファイルに書き込みます。
# ~/.zshrc または ~/.bash_profile に追記
export ANTHROPIC_API_KEY='sk-ant-xxx...'
# 反映
source ~/.zshrc
次に、プロジェクトディレクトリを作成し、Claude Codeを初期化します。
mkdir ai-coding-test
cd ai-coding-test
# 仮想環境の作成
python -m venv .venv
source .venv/bin/activate
# Claude Codeの起動
claude
初回起動時に認証を求められます。指示に従ってブラウザでログインしてください。
起動したら、まずは/configコマンドを打って、コスト制限を設定しましょう。
# Claude Code内のプロンプトで
/config set max_tokens_per_session 50000
これは1セッションあたりの最大トークン数を制限する設定です。 「なぜこの値にするのか」というと、AIエージェントがループに陥った際、際限なくAPI費用を消費するのを防ぐためです。
Step 3: 動かしてみる
ここでは、簡単な天気取得スクリプトを作成させます。 Cursorでこのディレクトリを開いた状態で、Claude Codeのターミナルにこう指示を出してください。
「OpenWeatherMapから東京の天気を取得し、結果を表示するweather.pyを作成してください。requestsライブラリを使い、例外処理も入れてください。また、必要なライブラリをrequirements.txtに書き出し、インストールまで完了させてください。」
期待される出力
Thinking...
- Creating requirements.txt
- Running pip install -r requirements.txt
- Creating weather.py
Finished. I've created the script and installed the dependencies.
You can run it with `python weather.py`.
Claude Codeは、自らファイルを生成し、自らpip installを実行します。
これがCursorのComposerとの決定的な違いです。
Step 4: 実用レベルにする
次に、このスクリプトに「Slack通知機能」と「ユニットテスト」を追加し、自動でテストをパスさせます。 ここがClaude Codeの真骨頂です。
まず、Cursorでweather.pyを開き、AIが書いたコードを確認してください。
おそらく、APIキーが直書きされているか、プレースホルダーになっているはずです。
それを.envファイルから読み込むように指示します。
Claude Codeに以下のタスクを投げます。
# Claude Codeのプロンプト
SlackのWebHookURLを使って、天気の情報を通知する機能を追加して。
その後、pytestを使ってweather.pyのメインロジックをテストするtest_weather.pyを作成して。
最後に、テストを実行して、すべてパスするまでコードを修正して。
ここで使用する実用的なコードの雛形は以下のようになります。
# weather.py (AIによって生成・修正されるコードのイメージ)
import os
import requests
from dotenv import load_dotenv
load_dotenv()
def get_weather(city_name):
api_key = os.getenv("OPENWEATHER_API_KEY")
url = f"http://api.openweather.com/data/2.5/weather?q={city_name}&appid={api_key}&units=metric"
response = requests.get(url)
# 401エラー(キー不正)などのハンドリングを確実に行う
response.raise_for_status()
return response.json()
def send_slack(message):
webhook_url = os.getenv("SLACK_WEBHOOK_URL")
if not webhook_url:
return
payload = {"text": message}
requests.post(webhook_url, json=payload)
if __name__ == "__main__":
try:
data = get_weather("Tokyo")
msg = f"今日の東京の天気は {data['weather'][0]['description']} です。"
send_slack(msg)
print("Success")
except Exception as e:
print(f"Error: {e}")
Claude Codeは、pytestを実行し、「APIキーがないのでテストが落ちた」というログを見れば、「Mock(擬似データ)を使ってテストを書き直す」という判断まで自分で行います。
私たちがやることは、Cursorでその修正内容を眺め、「よし、いい筋だ」と承認(Enterキーを押す)するだけです。
よくあるトラブルと解決法
| エラー内容 | 原因 | 解決策 |
|---|---|---|
Rate limit reached | APIの支払い実績が少なくTierが低すぎる | $50以上チャージして数日待つか、使用間隔を空ける |
Command not found: claude | パスが通っていない | npm list -gで場所を確認し、PATHを通す |
Permission denied | ファイル書き込み権限がない | claude起動時に書き込み権限を確認、またはディレクトリの所有権を修正 |
次のステップ
Claude CodeとCursorの併用環境が整ったら、次は「既存の巨大なプロジェクトの解析」に挑戦してください。
claudeをプロジェクトのルートで起動し、「このプロジェクトのディレクトリ構造を分析して、README.mdを最新の状態に更新して」と頼んでみてください。
Cursorがコードの「点」と「線」を直すツールなら、Claude Codeは「面」でプロジェクトを捉えるツールです。
また、GitHub Actionsのワークフロー作成や、Dockerfileの作成など、OSのコマンドが絡む作業を積極的にClaude Codeへ振ってみることをお勧めします。 これらはCursorよりもClaude Codeの方が圧倒的に得意な領域です。 「AIにコードを書かせる」段階から、「AIに開発プロセスを回させる」段階へシフトしましょう。
よくある質問
Q1: Cursorの有料プランに入っているのに、さらにClaudeのAPI代を払う価値はありますか?
あります。Cursorの月額$20は「自分と一緒に考えてくれる相棒」への投資、Claude CodeのAPI代は「自分の代わりに手を動かして、テストまで回してくれる外注エンジニア」への投資です。1時間のデバッグ作業が100円のAPI代で終わるなら、エンジニアの時給を考えれば安すぎます。
Q2: Claude Codeが勝手にファイルを削除したりしませんか?
デフォルトでは、破壊的な変更を加える前に必ずユーザーの承認を求めてきます。/configで自動承認をオンにしない限り、勝手にコードが消えることはありません。CursorでGitの差分を常に表示しておけば、万が一の際もすぐにロールバックできます。
Q3: Python以外の言語でも同じように使えますか?
もちろんです。TypeScriptやGo、Rustなど、CLIツールが充実している言語ほど、Claude Codeの恩恵を受けられます。例えばRustなら、Claude Codeにcargo checkを回させながらコンパイルエラーを全自動で潰させるという、中毒性の高い開発体験が得られます。
📦 この記事に関連する商品(楽天メインで価格確認)
MacBook Pro M3 Max複数のAIツールを同時稼働させる開発環境には32GB以上のメモリが必須
※アフィリエイトリンクを含みます






