AWSプロジェクトのフォルダ整理で失敗しないために - Python仮想環境の落とし穴

AWS Basic
スポンサーリンク
スポンサーリンク

はじめに

AWSでの開発を進めていくと、ec2-testsam-api-projectmy-serverless-appなど、プロジェクトフォルダがユーザーディレクトリ直下に散らばってしまいませんか?

「そろそろ整理しないと...」と思ってフォルダを移動したら、Python環境が動かなくなって困ったという経験、私もありました。

この記事では、AWSプロジェクトを安全に整理する方法と、特にPythonの仮想環境(venv)で注意すべきポイントを実体験から解説します。


なぜフォルダを移動すると環境が壊れるのか

Python仮想環境の仕組み

Pythonの仮想環境(.venv)は、作成時の絶対パスを内部に保持しています。

作成時のパス: C:\Users\user1\aws-test
↓
.venv\pyvenv.cfg に絶対パスが記録される
↓
フォルダ移動: C:\my-aws\aws-test
↓
パスが一致せず、仮想環境が動かない!

実際に起きたエラー

フォルダをmy-aws配下に移動後、python test.pyを実行すると:

ModuleNotFoundError: No module named 'boto3'

仮想環境を有効化(.venv\Scripts\activate)しているのに、インストール済みのはずのモジュールが見つからない...これは仮想環境が古いパスを参照しているためでした。


正しいフォルダ整理の手順

ステップ1: VSCodeを完全に終了する

重要: フォルダを開いたままではファイルがロックされて移動できません。

1. VSCodeのウィンドウをすべて閉じる
2. タスクマネージャーで完全に終了していることを確認

ステップ2: フォルダを移動

C:\Users\user1\
  ├── aws-test
  ├── ec2-test
  ├── sam-api-project
  └── my-serverless-app

# 移動後の状態
C:\my-aws\
  ├── aws-test
  ├── ec2-test
  ├── sam-api-project
  └── my-serverless-app

ステップ3: 仮想環境を再作成

移動先で仮想環境を削除・再作成します。

cd C:\my-aws\aws-test

# 古い仮想環境を削除
rmdir /s /q .venv

# 新しい仮想環境を作成
python -m venv .venv

# 有効化
.venv\Scripts\activate

# 依存関係を再インストール
pip install boto3

ポイント: requirements.txtがあれば一括インストールできます。

pip install -r requirements.txt

SAMプロジェクトの場合の注意点

SAM(AWS Serverless Application Model)プロジェクトには追加の注意が必要です。

.aws-samフォルダも削除する

.aws-samはビルド成果物で、古いパスを含んでいる可能性があります。

cd C:\my-aws\my-serverless-app

# ビルド成果物を削除
rmdir /s /q .aws-sam
rmdir /s /q .venv

# 再ビルド
sam build

ローカル開発用の仮想環境は必須ではない

実は、SAM開発では必ずしもローカルに仮想環境を作る必要はありません

# コード編集
# ↓
# ビルド(依存関係は自動解決)
sam build

# デプロイ
sam deploy

sam buildsrc/requirements.txtから自動的に依存関係を.aws-sam/build/配下に構築するため、ローカルの.venvは不要です。

仮想環境が必要なケース:

  • VSCodeのコード補完(IntelliSense)を使いたい
  • ローカルでユニットテストを実行したい

コード補完が必要になったら、その時点で作成すればOKです。

python -m venv .venv
.venv\Scripts\activate
pip install -r src/requirements.txt

失敗しないための事前準備

移動前にチェックすべきこと

1. .gitフォルダの確認

# Gitリポジトリがあるか確認
cd プロジェクトフォルダ
git status

.gitフォルダごと移動すれば、Gitの履歴は維持されます。

2. 絶対パスの使用箇所を確認

以下のファイルに絶対パスが記述されていないか確認:

  • samconfig.toml
  • .vscode/settings.json
  • カスタムスクリプト

通常、SAMやCDKは相対パスベースなので問題ありませんが、念のため確認しましょう。

3. AWS設定への影響はなし

~/.aws/credentials~/.aws/configはユーザーホーム配下にあるため、プロジェクトフォルダの場所に依存しません。


まとめ

重要なポイント

Pythonの仮想環境は移動後に再作成が必要

  • .venvは絶対パスを内部に保持している
  • rmdirpython -m venvで再作成

SAMプロジェクトは.aws-samも削除して再ビルド

  • 古いビルド成果物にパスが含まれている可能性

ローカル開発用の.venvは必須ではない

  • sam buildが依存関係を自動解決
  • コード補完が必要な時だけ作成すればOK

VSCodeを完全に終了してから移動

  • ファイルロックを避ける

フォルダ整理の推奨手順

1. VSCode完全終了
2. フォルダ移動
3. .venv と .aws-sam を削除
4. 新しい場所で仮想環境を再作成(必要なら)
5. sam build で動作確認

この手順を守れば、安全にプロジェクトを整理できます。


関連記事

  • EC2セキュリティグループのIP制限で接続できない?真の送信元IPを特定する方法 - プロジェクト整理後、EC2にアクセスできなくなった時の対処法
EC2セキュリティグループのIP制限で接続できない?真の送信元IPを特定する確実な方法
はじめにEC2インスタンスを構築し、セキュリティグループで自分のIPアドレスに制限したのに、なぜかSSH接続もWebアクセスもできない。そんな経験はありませんか?実は、一般的なIP確認方法(curlや確認くん)で表示されるIPアドレスと、実...
  • CloudShellとローカル環境でのAWS開発 - 使い分けと注意点 - 整理したプロジェクトをCloudShellでも使う方法
CloudShellとローカル環境でのAWS開発 - 使い分けと注意点
はじめにAWS開発を始めると、「ローカルPC(VSCode)」と「CloudShell」、どちらで作業するのが良いのか迷いませんか?実は、それぞれに適した使い方があり、理解しないまま使うと思わぬトラブルに遭遇します。この記事では、両環境の違...

終わりに

AWSプロジェクトの整理は、開発を効率化する第一歩です。Python仮想環境の特性を理解していれば、躊躇せずに整理できるようになります。

この記事が、同じようにフォルダ整理で悩んでいる方の助けになれば嬉しいです。

コメント