開発環境セットアップ — Windows で AWS / Terraform / GitHub を回す
AWS アカウントが準備できたら、ローカルの開発環境を整えます。本シリーズはすべて Windows で構築しているので、Windows 環境固有のハマりポイントも先にまとめておきます。
使うツール一覧
| ツール | 用途 | インストール方法 |
|---|---|---|
| PowerShell | Windows 標準のシェル / スクリプト実行 | Windows に標準搭載(PowerShell 5.1) |
| Git for Windows (Git Bash) | Unix シェル相当 / git コマンド | git-scm.com からインストーラ |
| AWS CLI v2 | AWS API を CLI で呼ぶ | winget / msi インストーラ |
| Terraform | IaC ツール | winget / tfenv |
| Node.js | Lambda コードのローカル開発 | winget / Volta |
| gh CLI | GitHub をコマンドラインで操作 | winget |
Windows で開発を始めるなら、winget(Windows 標準のパッケージマネージャ)でほとんどがインストールできます。
winget での一括インストール
PowerShell を管理者権限で開いて、以下を順に実行します:
# AWS CLI v2
winget install --id Amazon.AWSCLI --accept-source-agreements --accept-package-agreements
# Terraform
winget install --id Hashicorp.Terraform --accept-source-agreements --accept-package-agreements
# Node.js (LTS)
winget install --id OpenJS.NodeJS.LTS --accept-source-agreements --accept-package-agreements
# GitHub CLI
winget install --id GitHub.cli --accept-source-agreements --accept-package-agreements
# Git for Windows (Git Bash 含む)
winget install --id Git.Git --accept-source-agreements --accept-package-agreements
各コマンドが「インストール完了」を返したら準備 OK。
PATH に反映されません。「コマンドが見つからない」エラーが出たら、まずターミナルを開き直す のが第一の対処法です。
動作確認
新しい PowerShell or Git Bash を開いて、各ツールのバージョンを確認します:
aws --version
# aws-cli/2.x.x
terraform version
# Terraform v1.x.x
node --version
# v20.x.x
gh --version
# gh version 2.x.x
git --version
# git version 2.x.x
すべて表示されれば OK です。
PowerShell vs Git Bash の使い分け
本シリーズでは、両方を使い分けます:
| シェル | 得意なこと | 苦手なこと |
|---|---|---|
| PowerShell | Windows ネイティブ操作 / .NET 連携 / 文字エンコード処理 | Unix シェル系のスクリプト互換性 |
| Git Bash | shell script (sh) / git / curl / Unix 流のパイプ処理 | Windows パス変換のクセ(後述) |
大体の作業は Git Bash で十分ですが、UTF-8 でファイルを書きたいとき や、Windows 特有の API を叩きたいとき は PowerShell に切り替えます。
Windows 特有のハマり①: Git Bash のパス変換
Git Bash は Unix パスっぽい引数を Windows パスに自動変換します。これが時々悪さをします:
# Git Bash で AWS CLI を叩くと…
aws logs tail /aws/lambda/my-function
# 中で以下に変換されてしまう
aws logs tail "C:/Program Files/Git/aws/lambda/my-function"
# → InvalidParameterException: log group name 不正
対処は、環境変数 MSYS_NO_PATHCONV=1 を立てるか、パスを //aws/... と二重スラッシュで始める:
# 方法 1: パス変換を一時無効化
export MSYS_NO_PATHCONV=1
aws logs tail /aws/lambda/my-function
# 方法 2: 二重スラッシュで自動変換を回避
aws logs tail //aws/lambda/my-function
Windows 特有のハマり②: 改行コードの自動変換
Git for Windows のデフォルト設定では、コミット時に LF→CRLF の自動変換が入ります。git commit 時にこんな警告が大量に出ます:
warning: in the working copy of 'frontend/index.html',
LF will be replaced by CRLF the next time Git touches it
無害ですが、気になる人は .gitattributes を設定するか、core.autocrlf を変更します:
# プロジェクト全体で LF を強制したい時
echo "* text=auto eol=lf" > .gitattributes
git add .gitattributes
Windows 特有のハマり③: PowerShell のエンコード
PowerShell 5.1(Windows 同梱)はデフォルト出力エンコーディングが UTF-16 LE (BOM 付き)。Set-Content や Out-File で書いたファイルが他ツールで読めない、という事故が起きます。
# BOM 付き UTF-8 になってしまう
$content | Set-Content -Path file.txt -Encoding utf8
# BOM 無し UTF-8 で書く(Terraform 設定ファイル等で必須)
$utf8NoBom = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText('file.txt', $content, $utf8NoBom)
本シリーズでも、~/AppData/Roaming/terraform.rc を PowerShell で書いたら BOM が混入し、Terraform が illegal char でパースエラーを出した事故がありました(記事 #6 で詳説)。
AWS プロファイルの設定
記事 #3 で作った admin-prod / admin-dev ユーザーのアクセスキーを、ローカルプロファイルに登録します:
aws configure --profile aws-prod
# Access Key ID: AKIA...
# Secret Access Key: ...
# Default region: ap-northeast-1
# Default output format: json
aws configure --profile aws-dev
# 同じ要領で
確認は必ずやります:
export AWS_PROFILE=aws-prod
aws sts get-caller-identity
Git の初期設定
git config がまだなら、user.name / user.email を設定:
git config --global user.name "your-name"
git config --global user.email "your-email@example.com"
git config --global init.defaultBranch main
email は GitHub に登録しているメアドに合わせます。GitHub で commit が「自分のもの」として表示されるかどうかに影響します。
gh CLI のログイン
GitHub の操作を CLI でやるための gh CLI に認証します:
gh auth login
# 対話的に聞かれる:
# ? Where do you use GitHub? → GitHub.com
# ? What is your preferred protocol? → HTTPS
# ? Authenticate Git? → Yes
# ? How would you like to authenticate? → Login with a web browser
# 8 桁コードが表示されるので https://github.com/login/device に貼る
ブラウザでの認証が完了したら、gh auth status で確認:
gh auth status
# ✓ Logged in to github.com account <username> (keyring)
VS Code(任意)
エディタは何でも良いですが、本シリーズでは VS Code を使っています。Terraform / HCL / Markdown / Lambda コードを 1 つのウィンドウで編集できる柔軟性が便利です。
入れた拡張機能:
HashiCorp.terraform— Terraform の構文ハイライト・補完amazonwebservices.aws-toolkit-vscode— AWS の Lambda / S3 を VS Code から確認esbenp.prettier-vscode— JavaScript / HTML / Markdown の自動整形ms-vscode.PowerShell— PowerShell スクリプトの補完
これで準備完了
ここまでで、Terraform を回し、AWS にリソースを作り、GitHub にコードを push する準備が全部整いました。
次の記事からは、いよいよ Terraform で AWS を構築する第一歩 です。最初の関門は 「Terraform の状態(state)をどこに置くか」。これが鶏卵問題で、初見では結構詰まります。
📚 用語集
- winget
- Windows 10/11 に標準搭載のパッケージマネージャ。
winget installでアプリを CLI からインストールできる。 - PowerShell
- Windows 標準のシェルとスクリプト言語。Bash と違い、オブジェクトをパイプで流せる設計。デフォルトはバージョン 5.1。
- Git Bash (MINGW64)
- Git for Windows に同梱される Unix 風シェル。
bash/curl/grepなど Unix コマンドが使える。 - PATH 環境変数
- OS が「どのフォルダにある実行ファイルを探すか」を定義する変数。新しいツールをインストールしても、ターミナルを開き直すまで反映されない。
- UTF-8 / UTF-16
- 文字エンコーディングの種類。Linux / Web は UTF-8、Windows は伝統的に UTF-16 が混じる。設定ファイルは UTF-8(できれば BOM 無し)が無難。
- BOM (Byte Order Mark)
- UTF-8 ファイルの先頭に付く 3 バイト(
EF BB BF)。Notepad++ や PowerShell 5.1 が勝手に付けることがある。HCL / YAML / JSON 等のパーサが嫌うので、Terraform 設定ファイルでは外す。 - MSYS_NO_PATHCONV
- Git Bash の「Unix パスを Windows パスに自動変換する」機能を無効化する環境変数。AWS CLI に
/aws/lambda/...形式のリソース名を渡すときに必要。 - core.autocrlf
- Git の改行コード自動変換設定。
true(Windows デフォルト)だと、commit 時に CRLF→LF、checkout 時に LF→CRLF に変換される。 - .gitattributes
- リポジトリ単位で改行コードや diff の挙動を指定するファイル。チームで Windows / Mac / Linux 混在時に重要。
- tfenv
- Terraform のバージョン切替ツール(rbenv / nvm の Terraform 版)。
.terraform-versionファイルでプロジェクトごとに固定できる。 - asdf
- 複数の言語・ツールのバージョンを一元管理するツール。
.tool-versionsで Terraform / Node.js / Python 等を同時に切替可能。 - Volta
- Node.js 専用のバージョンマネージャ。プロジェクト毎に Node のバージョンを固定できる。
- VS Code 拡張機能 (Extension)
- VS Code に機能を追加するプラグイン。Terraform / AWS / Prettier 等、開発に必要なものを入れる。
- ~/.aws/credentials, ~/.aws/config
- AWS CLI の認証情報・プロファイル設定が保存されるファイル。Windows では
C:\Users\<ユーザー>\.aws\配下。