開発環境セットアップ — Windows で AWS / Terraform / GitHub を回す

AWS アカウントが準備できたら、ローカルの開発環境を整えます。本シリーズはすべて Windows で構築しているので、Windows 環境固有のハマりポイントも先にまとめておきます。

使うツール一覧

ツール用途インストール方法
PowerShellWindows 標準のシェル / スクリプト実行Windows に標準搭載(PowerShell 5.1)
Git for Windows (Git Bash)Unix シェル相当 / git コマンドgit-scm.com からインストーラ
AWS CLI v2AWS API を CLI で呼ぶwinget / msi インストーラ
TerraformIaC ツールwinget / tfenv
Node.jsLambda コードのローカル開発winget / Volta
gh CLIGitHub をコマンドラインで操作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。

winget でインストールしたツールは、新しい PowerShell / Git Bash を開かないと 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 の使い分け

本シリーズでは、両方を使い分けます:

シェル得意なこと苦手なこと
PowerShellWindows ネイティブ操作 / .NET 連携 / 文字エンコード処理Unix シェル系のスクリプト互換性
Git Bashshell 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-ContentOut-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 つのウィンドウで編集できる柔軟性が便利です。

入れた拡張機能:

これで準備完了

ここまでで、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\ 配下。