
「流行りのClaude Codeを使うときは仮想環境とGitを使うべし」という先人の教えがあったので、venvとGitを使ってClaude Codeを使ってみました。まだまだはじめたばかりなので効率的な使い方ではないと思いますが、ユースケースの一つとして読んでいただけたらと思います。
こんにちは。wat(@watlablog)です。みんなClaude Codeを使っているのでこちらも入門してみます!
この記事のモチベーション
最近Python界隈ではたくさんの方がClaude Codeという生成AIを使ってコーディングをしています。筆者watもChatGPTには課金をして趣味のコーディングしていますが、Claude Codeにも興味が出てきました。
何と言ってもCLIに対応しているところが非常に魅力的です。CLI(Command Line Interface)が使えるということは、生成AIがターミナルを使えるということです。生成AIが自分で環境を整えたり、テストで発生したエラーを解消したり、バージョン管理までしてくれるという未来感満載の技術ですね。
実際にClaude Codeを使っている人に聞くと、これを使うなら最低限のGitコマンドは覚えておいた方が良いとのことでした。なぜならClaude CodeのようなCLIを使う生成AIにコードを書かせるということは、マネージャであるユーザーがその進捗を管理する必要があるからです。これまで避けてきたGitをついに覚える機会が来た…ということもこの記事を書くモチベーションになりました。
今回は初心者がClaude Codeを始めるのに必要なことの他に、Gitに関する操作方法も学びます。まだまだツッコミ所満載な内容だとは思いますが、あくまで筆者の備忘録ということでお許しください。
動作環境
この記事では以下のmacOS環境で作業しました。
Mac | OS | macOS Sonoma 14.5 |
---|---|---|
チップ | Apple M3 | |
CPU | 1.4[GHz] | |
メモリ | 16[GB] |
Claude Codeの始め方
Anthropicのアカウントを作成する
Claudeを利用するために、まずは以下の公式ページからAnthropicのアカウントを作成しましょう。Googleアカウントでも始められます。
・Anthropic:https://www.anthropic.com/
API Keyを取得する
Anthropic Consoleにアクセスし、 Get API Keysをクリックする。
・Anthropic Console:https://console.anthropic.com/dashboard
APIの使用料はクレジットで支払う仕様のようで、初回は5$分のクレジットを購入してみました。請求はANTHROPIC ANTHROPIC.COMから来ます。沢山使うようであればサブスクの方がコスパが良いと思います。

支払の設定が行われると、以下のウィンドウが表示されます。API Keyの名前を入力してCreate API Keyをクリックしましょう。

作成されたAPI Keyをコピーして保管します(他の人には教えないように)。
Node.jsをインストールする
Claude CodeはNode.js上で動作するCLIツールのため、Node.jsのインストールが必要です。
ターミナルを開き、Homebrewを使ってNode.jsをインストールします。
1 2 |
brew update brew install node |
Node.jsのバージョンを確認してインストールが正常にできているか確かめましょう。
1 |
node -v |
Claude Code CLIをインストールする
以下のコマンドを実行してClaude Code CLIをインストールします。
1 |
npm install -g @anthropic-ai/claude-code |
バージョンを確認します。2025年7月現在は1.0.43が表示されました。
1 2 |
claude --version >>1.0.43 (Claude Code) |
claudeにログインする
cdコマンドで任意のプロジェクトフォルダに移動したら、以下のコマンドでclaudeにログインします。
1 |
claude login |
コマンドが実行されると、ターミナルに次の表示がされます。まずはコードの表示モードを方向キーとエンターキーで選択します。

続いて今度はClaude Codeをサブスクで使うかAPIで使うかを選択する画面になります。今回はお試しで先ほど作成したAPIを使うので、2を選びましょう。

Webブラウザが立ち上がり、認証を求められます。認証したらターミナルの画面が変わるためエンターキーを押しましょう。
すると次の画面が表示されます。Claudeは間違うこともあること、プロンプトインジェクションのリスクに関する確認を読んだらエンターキーで次に行きます。

次の画面では推奨設定を選んでおきます。

続いてClaude Codeがファイルを読むことや、ファイル内のコードを実行することの許可を求める文章です。ここはYes, proceedを選択します。

ここまで完了するとプロンプトを打ち込める画面になります。 /initを打ってみましょう。

いくつかユーザーが承認する必要がありますが、最終的に CLAUDE.mdというMarkdownファイルが作成されれば、Claude Codeをターミナルから使う環境構築ができていると言えます。
VSCodeと連携する
次はVSCodeと連携してみます。VSCodeのExtensionsでClaude Codeと検索し、Claude Code for VSCodeをインストールしましょう。

VSCodeを再起動するとRun Claude Codeというアイコンが表示されるようになり、実行するとVSCode上でClaude Codeのプロンプト入力画面が表示されます。

IDE上で生成AIが使えるようになるのはめっちゃ良いですね!
Claude Codeのコマンド
/helpコマンドを実行することで、Claude Codeで使えるコマンド一覧を表示できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
Claude Code v1.0.48 Always review Claude's responses, especially when running code. Claude has read access to files in the current directory and can run commands and edit files with your permission. Usage Modes: • REPL: claude (interactive session) • Non-interactive: claude -p "question" Run claude -h for all command line options Common Tasks: • Ask questions about your codebase > How does foo.py work? • Edit files > Update bar.ts to... • Fix errors > cargo build • Run commands > /help • Run bash commands > !ls Interactive Mode Commands: /add-dir - Add a new working directory /bug - Submit feedback about Claude Code /clear - Clear conversation history and free up context /compact - Clear conversation history but keep a summary in context. Optional: /compact [instructions for summarization] /config - Open config panel /cost - Show the total cost and duration of the current session /doctor - Checks the health of your Claude Code installation /exit - Exit the REPL /export - Export the current conversation to a file or clipboard /help - Show help and available commands /hooks - Manage hook configurations for tool events /ide - Manage IDE integrations and show status /init - Initialize a new CLAUDE.md file with codebase documentation /install-github-app - Set up Claude GitHub Actions for a repository /login - Switch Anthropic accounts /logout - Sign out from your Anthropic account /mcp - Manage MCP servers /memory - Edit Claude memory files /migrate-installer - Migrate from global npm installation to local installation /model - Set the AI model for Claude Code /permissions - Manage allow & deny tool permission rules /pr-comments - Get comments from a GitHub pull request /release-notes - View release notes /resume - Resume a conversation /review - Review a pull request /status - Show Claude Code status including version, model, account, API connectivity, and tool statuses /terminal-setup - Install Shift+Enter key binding for newlines /upgrade - Upgrade to Max for higher rate limits and more Opus /vim - Toggle between Vim and Normal editing modes Learn more at: https://docs.anthropic.com/s/claude-code |
Claude Codeでプログラムを生成してみる
ここまで来たらClaude Codeを使ってVSCode上でプログラムを生成できるようになります。この記事の通りに進めている場合はすでにプロジェクトディレクトリに移動していると思うので、早速プロンプトに指示を書いてみましょう。
Hello Worldプログラムを生成する
VSCodeのClaude Codeプロンプト欄に「Hello Worldを表示させるPythonコードを生成してください。」と打って実行してみます。

すると右側にこれから生成しようとする hello.pyファイルの中身が表示され、承認を求められます。内容に納得したらYesを選択しましょう。

プロジェクトディレクトリに hello.pyが生成されました!

仮想環境下でClaude Codeを使う
Pythonのプログラムはプロジェクト毎に開発環境を隔離できる仮想環境下で作ることが推奨されています。初心者はvenvを使うのが良いと思い、WATLABブログでは以下の記事で仮想環境の作り方に触れています。まだvenvに慣れていない人はこちらの記事を参照してください。
・M3 Macでvenv/VSCodeによるPython環境を構築するときの備忘録
Claude Codeで仮想環境を使う場合も上記記事の内容と同様です。まずVSCodeを開く前に自分で仮想環境を作成し、仮想環境を activateした後に code .コマンドでVSCodeを開きます。その後Claude Codeを呼び出せば、Claude Codeで生成したコードを仮想環境下で実行できるようになります。
1 2 3 |
python3.12 -m venv envHello #3.12とenvHelloの部分は任意のバージョンと名称 source envHello/bin/activate code . |
GUIアプリを作ってみる(計算機アプリ)
Hello Worldを表示させるだけだとつまらないので、やや複雑なGUIアプリを作らせてみましょう。以下の画像は「PyQt5で計算機アプリを作ってくれ」という指示を雑に与えたものです。指示を受けたClaude Codeはまず計画を立てており、その計画通りに処理を進めていました。

Claude Codeが実際の環境でテストを行い、エラーに直面→原因を検討(ここではModuleNotFoundError)、対策(pip install)を提案してきました。一応仮想環境にinstallせよと指示を出したところ、しっかり仮想環境下で作業するようになりました。「Great!」とか言うのは人間っぽいですね!

こちらが出来上がった計算機アプリです。一瞬で作成できました。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QGridLayout, QPushButton, QLineEdit from PyQt5.QtCore import Qt from PyQt5.QtGui import QFont class Calculator(QWidget): def __init__(self): super().__init__() self.initUI() self.current_input = "" self.operator = "" self.operand = "" def initUI(self): self.setWindowTitle('計算機') self.setGeometry(300, 300, 300, 400) layout = QVBoxLayout() self.display = QLineEdit() self.display.setReadOnly(True) self.display.setAlignment(Qt.AlignRight) self.display.setFont(QFont('Arial', 16)) self.display.setStyleSheet("QLineEdit { background-color: white; border: 2px solid gray; padding: 10px; }") layout.addWidget(self.display) button_layout = QGridLayout() buttons = [ ('C', 0, 0), ('±', 0, 1), ('%', 0, 2), ('÷', 0, 3), ('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('×', 1, 3), ('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('-', 2, 3), ('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('+', 3, 3), ('0', 4, 0, 1, 2), ('.', 4, 2), ('=', 4, 3) ] for button_info in buttons: if len(button_info) == 3: text, row, col = button_info button = QPushButton(text) button.clicked.connect(lambda checked, t=text: self.on_button_click(t)) button.setFont(QFont('Arial', 14)) button.setMinimumHeight(60) button_layout.addWidget(button, row, col) else: text, row, col, row_span, col_span = button_info button = QPushButton(text) button.clicked.connect(lambda checked, t=text: self.on_button_click(t)) button.setFont(QFont('Arial', 14)) button.setMinimumHeight(60) button_layout.addWidget(button, row, col, row_span, col_span) layout.addLayout(button_layout) self.setLayout(layout) def on_button_click(self, text): if text.isdigit() or text == '.': self.current_input += text self.display.setText(self.current_input) elif text in ['+', '-', '×', '÷']: if self.current_input: self.operand = self.current_input self.operator = text self.current_input = "" elif text == '=': if self.current_input and self.operand and self.operator: try: result = self.calculate() self.display.setText(str(result)) self.current_input = str(result) self.operator = "" self.operand = "" except: self.display.setText("エラー") self.current_input = "" self.operator = "" self.operand = "" elif text == 'C': self.current_input = "" self.operator = "" self.operand = "" self.display.setText("") elif text == '±': if self.current_input: if self.current_input.startswith('-'): self.current_input = self.current_input[1:] else: self.current_input = '-' + self.current_input self.display.setText(self.current_input) elif text == '%': if self.current_input: try: result = float(self.current_input) / 100 self.current_input = str(result) self.display.setText(self.current_input) except: self.display.setText("エラー") self.current_input = "" def calculate(self): num1 = float(self.operand) num2 = float(self.current_input) if self.operator == '+': return num1 + num2 elif self.operator == '-': return num1 - num2 elif self.operator == '×': return num1 * num2 elif self.operator == '÷': if num2 == 0: raise ValueError("ゼロで割ることはできません") return num1 / num2 def main(): app = QApplication(sys.argv) calculator = Calculator() calculator.show() sys.exit(app.exec_()) if __name__ == '__main__': main() |
Gitを覚える
Claude Codeを使う時はGitも使おう
筆者watは趣味の個人開発がメインであるため、これまで何か難しそうなGitは避けてきました。しかし、Pyhackでその道のプロに聞いたところ「Gitを使わないと生きていけない」という人が多数。せっかく聞ける人が身近にいるので、自分も覚えてみることにしました。
またClaude Codeにコードを書かせる場合、Gitを使わないと履歴が残りません。Claude Codeにコードを書かせるということは、Claude Codeという部下を持ったプロジェクトマネージャになることと同義です。生成AIは指示が曖昧だととんでもないズルをすぐするようです。Gitマスターになってしっかりと管理しましょう。
※とはいえ、本記事の内容は初心者がローカルリポジトリを使って最初に覚えた内容に過ぎません。もっと大きなチームにおける開発やリモートリポジトリの活用で必要なコマンドについては述べませんのであしからず(きっとプロはもっと効率的にやっていると思います)。
Gitについて
Gitとは、2005年にLinuxの開発者であるリーナス・トーバルズによって開発された分散型バージョン管理システムです。プログラムを開発するときは、いつ・誰が・何を・なぜ変更したのかが重要です。Gitを使えばこれらの変更履歴を完全に記録し、後で元に戻すことが可能です。また、ブランチ機能を使って新機能開発やバグ修正を独立して行うことができ、後で統合できます。
先ほどまでのプロジェクトは一度忘れて、ここで白紙の作業ディレクトリを作成し、開発の流れを確認していきましょう。
Gitをインストールする
GitとGitHubは混同されやすいですが、今回使うのはGitの方です。まずは以下のコマンドでGitをインストールしましょう(macOSを前提としています)。
1 |
brew install git |
仮想環境をセットアップ
Gitを使う場合もまずは仮想環境を作成します。先ほどと重複しますが、以下のコマンドで仮想環境を作成・有効化しましょう。
1 2 |
python3.12 -m venv envTest source envTest/bin/activate |
Gitリポジトリの初期化と.gitignoreの作成
以下のコマンドでGitリポジトリを初期化します。このコマンドを実行することで .git/という隠しフォルダを作成し、Gitが必要とするすべてのメタデータと履歴情報を格納します。ただし、最初のコミットが行われるまでは実際の変更は記録されません。隠しファイルができたかどうかは、 ls -aと打ってみましょう。
1 |
git init |
仮想環境はバージョン管理する必要がないので、 .gitignoreを作成して仮想環境がコミットされないようにしましょう。
1 |
echo "envTest" >> .gitignore # envTestの部分は仮想環境名を入れる |
requirements.txtの作成
開発に必要なパッケージをインストールします。ここではサンプルとしてNumPyを pip installしておきます。
1 |
pip install numpy |
次のコマンドで依存パッケージをrequirements.txtに出力します。こうすることで、後で自分や他の開発者が pip install -r requirements.txtコマンドで依存パッケージを再現することが可能になります。
1 |
pip freeze > requirements.txt |
git addする
作成した requirements.txtと .gitignoreを git addします。 git addとは指定したファイルをGitの管理下に追加(ステージング)する操作のことです。この操作で次のコミット対象としています。 requirements.txtは前述の通り他の開発者も依存関係を再現できるようにするのに重要ですが、 .gitignoreもチーム全員が不要なファイル情報を共有できるのでリポジトリをクリーンに保つために重要です。
1 |
git add requirements.txt .gitignore |
git commitする
git addした内容を git commitしましょう。このコマンドでGitが変更履歴として内容をチェックポイントに記録します。コミットメッセージを「""」の中に記載することで、後で見た時に内容がわかるようにします。これはゲームで言うところのセーブポイントやソフトのundoポイントに相当します。
1 |
git commit -m "初期: 仮想環境と依存設定" |
git logでログを見てみる
git commitした内容を以下のコマンドを実行してみましょう。
1 |
git log |
このコマンドを実行すると、次のような出力がされます。ユーザー名とメールアドレスは今後のためにずっと使っていくものに変更しておいた方が良いと思います。
1 2 3 4 |
>>Author: wat <wat@wat-macbook.local> >>Date: Fri Jul 11 16:37:48 2025 +0900 >> >> 初期: 仮想環境と依存設定 |
グローバルで全リポジトリに設定を反映させるコマンドはこちらです。
1 2 |
git config --global user.name "あなたの名前" git config --global user.email "あなたのメール@example.com" |
ずっとデフォルトで使っていると、新しいPCにした時や別の環境からコミットしたときに別のユーザーと認識されることがあります。長い期間開発が必要なプロジェクトに参加している人はユーザーがユニークに特定できる有効なメールアドレスを設定しておくのが良いでしょう。
ファイルを変更・追加した場合
開発の流れを確認するために、細かいですが .pyファイルに何かコードを書いてコミットしてみましょう。ファイルを作成したら、次のコマンドを実行します。このコマンドを実行すると変更されたファイルがリストされます。
1 |
git status |
git statusで示されたファイルを git addして git commitします。
1 2 3 |
git add myapp.py git commit -m "新規Pythonファイル追加" git log --oneline |
ブランチを切る
新しい変更をかける時は以下のコマンドでブランチを切ります。
1 |
git branch <新しいブランチ名> |
このコマンドだけではまだmainを編集しています。次のコマンドでブランチを切り替えましょう。ちなみにmainもブランチなのでmainに切り替える時もこの git switchを使用します。
1 |
git switch <ブランチ名> |
今自分がどのブランチを操作しているかは次のコマンドで調べることができます。
1 |
git branch |
今回コマンドで作成したブランチのmainはmasterという名称になっていますが、GitHubで作成するとmainという名前になるそうです(マスターという単語があまりよろしくないとかなんとかの理由らしいです)。
現在編集しているブランチが何なのかはVSCode上でも確認可能です。GUIの左下にブランチ名が表示されているので確認してみましょう。

ブランチに関する代表的な操作は次のものがあります。
1 2 3 4 5 6 7 8 9 10 |
git branch <ブランチ名> # ブランチを作成する git switch <ブランチ名> # ブランチを切り替える git branch # ブランチのリストを確認する git branch -d <ブランチ名> # ブランチを削除する git stash # 変更された現在のブランチの状態を別の場所に退避 git stash -m <メッセージ> # stashをメッセージ付きで作成する git stash list # 作成されたstashの一覧を表示する git stash aplly # 退避したstashの内容を保持しつつ戻す git stash pop # 退避したstashの内容を削除して戻す git stash drop # 退避したstashの内容を削除する |
これらのコマンドはPyhack夏山合宿で@kashew_nutsさんにみっちり教えていただきました(ビール飲みながら)!ありがとうございます!
ただし、stash系のコマンドはお手軽に状態を退避することができるため気軽にやりがちですが、後で詳細を確認することが難しく非推奨派も結構いるとのことです。乱用は避けましょう。ただ、VSCodeでコード変更部分を表示させながらこれらのコマンドを打つと、リアルタイムに元に戻ったりする挙動を観察できるので練習してみると面白いです。
変更をマージする
ブランチで行った変更を git add、 git commitした後、mainに統合したい時はマージという操作を行います。一度状態をmainブランチに切り替え、次のコマンドを実行します。
1 |
git switch <master or main> |
変更前のコミットを確認する
開発を進めていくと、「あの時どうだっけな?」みたいな状況になることがあります。その時は以下のコマンドで当時のコミット状態を確認しましょう。コミットNo.は git logで調べます。
1 |
git checkout <コミットNo.> |
この操作をしてから git branchを実行すると、次のような表示になります。これはどのブランチにも属さないdetached HEADという状態です。もう一度最新の状態に戻りたい時は git switch masterを実行しましょう(するとこのdetached HEADも消えます)。
1 2 |
>>* (HEAD detached at ec62c75) >> master |
変更前のコミットで新しいブランチを作る
git checkout <コミットNo.>で古いコミットの状態を確認して、「やっぱりこの時からやり直すか」となった場合は、その状態を新しいブランチに作り直して作業を続けると良いです。detached HEADの状態を新しいブランチに変更します。
1 |
git switch -c <ブランチ名> |
この操作の後、 git branchでdetached HEADがなくなり新しいブランチが作成されたことを確認しましょう。このブランチで作業したり、変更をマージしたりする作業はさきほどと同様です。
Claude CodeでGitを使った開発をする
ここからいよいよClaude Codeに仮想環境venvとGitを活用したプログラミングをさせてみます。あくまで試行錯誤の模索段階なのでこの記事の内容が最善というわけではないです。個人的な備忘録として記載してみます。
仮想環境の作成とVSCodeの立ち上げ
くどいようですが、最初はユーザーの方で仮想環境を作成・ activateし、VSCodeを立ち上げます。
1 2 3 |
python3.12 -m venv venv source venv/bin/activate code . |
Claude Codeの呼び出しと初期化
VSCodeでClaude Codeアイコンをクリックして立ち上げ、次のコマンドで初期化します。
1 |
/init |
CLAUDE.mdの編集
自動生成されたCLAUDE.mdを編集します。具体的な実装指示がある場合は最後のArchitecture Notesに書きましょう。より詳細なプロンプトは別の.mdに書いておいた方が良いと思いますが、それは別の記事で扱います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# CLAUDE.md このファイルは、Claude Code(claude.ai/code)がこのリポジトリ内のコードを操作するときのガイドラインとなります。 ## Project Overview 本プロジェクトは********を目指します。 ## Project Structure - `env/` - Python仮想環境。常に仮想環境を使ってください。必要なライブラリは都度この仮想環境にpip installしてください。 - `.claude/` - Claude Codeの設定用ディレクトリ ## Development Environment ### Virtual Environment Setup - Virtual environment is located in `env/` - Activate with: `source env/bin/activate` (macOS/Linux) or `env\Scripts\activate` (Windows) - 現在はまだライブラリを入れていませんが、開発の途中で追加しても構いません。 - 作業はGitで履歴を管理してください。 ### Current State This is a greenfield project with: - No main application code yet - No dependencies beyond base Python environment - No test framework or build system configured ## Development Commands Since this is an early-stage project, standard development commands will need to be established as the project grows: - Install dependencies: `pip install -r requirements.txt` (once requirements.txt is created) - Run application: `python main.py` (once main.py is created) - Run tests: Command TBD based on chosen test framework ## Architecture Notes 本プロジェクトは以下の機能を実装することを目指します。 - ****** - ****** - ****** - ****** |
Claude Codeに具体的な指示を出す
VSCode上のClaud Codeに、「CLAUDE.mdを更新しました。内容を良く読みPythonコードを作成してください。」と打つだけで、それっぽいコードが生成されます。途中、gitコマンドを実行して良いかどうかを逐一聞いてきますが、先ほど学んだGitの使い方レベルでも結構理解できると思います。不明点は別の生成AI(ChatGPT等)に聞くとより理解が深まると思います。

まとめ
この記事では初めてClaude Codeを使う筆者watが、試行錯誤しながら進めた結果をまとめた備忘録記事です。Claude Codeを使うためにAnthropicアカウントを作成する方法から始め、各種インストールとGitの使い方もまとめました。この部分は色々ツッコミたくなる方が多いと思いますが、生暖かい目で見守っていてくれると助かります。
また、今回VSCodeにClaude Codeの拡張機能をインストールし、IDE上でコード生成できたことに感動しました。すでに5$分は使い切ってしまうところなのですぐにサブスクに移行することになるでしょう。
今流行りのClaude Codeを使ってみました!これがVibe Codingというのでしょうか!
Xでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!