0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【第1回】macOSで始める .NET 9 × Docker × AWS Fargate開発環境構築完全ガイド

Last updated at Posted at 2025-10-14

概要

本シリーズでは、Apple Silicon搭載のmacOS上で .NET 9 Webアプリ を開発し、
最終的に AWS Fargate (Copilot) で公開するまでを実践します。

第1回では、ローカル開発環境の構築 にフォーカスし、
実際に遭遇したトラブルやMシリーズ特有の注意点を丁寧に説明します。

目次

1. 開発環境のゴール

最終的な構成イメージは次の通りです。

開発フェーズ(ローカル)
  ├─ macOS Mシリーズ + Docker + VS Code (.NET 9 WebApp)
  ├─ PostgreSQL (ローカルコンテナ)
  └─ GitHub (ソース管理)

デプロイフェーズ(クラウド)
  ├─ AWS Copilot → ECS Fargate
  └─ ALB経由でHTTP通信(第3回でHTTPS化)

2. Homebrew の入手とインストール

macOS の標準パッケージマネージャ。
以降のツール導入でも使用します。

インストール手順

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Apple Silicon 用パス設定:

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

確認:

brew -v
# Homebrew 4.x.x と表示されればOK

3. Xcode(本体)の入手とインストール

.NET 9 や Docker ビルド時のネイティブ依存ライブラリに必須です。
Command Line Tools ではなく Xcode 本体をインストールします。

入手方法

  • App Store から:

    1. App Store を開く
    2. 検索バーで「Xcode」
    3. 「入手」をクリック
  • Apple Developer公式 から:

インストール方法

  • App Store 版は「入手」で自動インストールされます。
  • dmg 版は /Applications にドラッグ&ドロップして配置。

初期セットアップ

初回起動時にライセンス同意と初期化が必要です。

sudo xcodebuild -license accept
sudo xcodebuild -runFirstLaunch
sudo xcode-select --switch /Applications/Xcode.app

確認:

xcode-select -p
# /Applications/Xcode.app/Contents/Developer が表示されればOK

4. .NET 9 SDK の入手とインストール

Microsoft 公式からダウンロードします。

インストール方法(Homebrew経由でも可)

brew install --cask dotnet-sdk

確認:

dotnet --info
# .NET SDK 9.x / OS: macOS ARM64 が表示されればOK

5. Docker Desktop の入手とインストール

Docker 環境を構築します。

インストール手順

  1. .dmg ファイルを開く
  2. 指示に従って /Applications にインストール
  3. 初回起動時に権限付与(パスワード入力あり)

確認:

docker version
docker compose version

出力例:

Client: Docker Desktop 4.33.x
Server: Docker Engine - Community

6. Git の準備とリポジトリ取得

Xcode インストール済みなら git は利用可能です(なければ brew install git)。

リポジトリ取得(重要: PostgreSQL関連ファイルを含む)

cd ~
git clone https://github.com/eyes9919/dotnet9-webapp.git
cd dotnet9-webapp

動作確認:

cd src/WebApp
dotnet build
dotnet run
# → http://localhost:8080 にアクセス

7. VS Code の入手インストールと推奨拡張機能

入手先

インストール方法

  1. ダウンロードした .zip または .dmg を展開
  2. /Applications に配置

推奨拡張機能

カテゴリ 拡張機能名 概要
C# C# Microsoft公式 .NET 9対応
C# C# Dev Kit プロジェクトナビゲーション強化
C# IntelliCode コーディング補完・推論
Docker Docker コンテナ管理
YAML YAML Copilot manifest編集
AWS AWS Toolkit Copilot操作補助
Git GitLens 履歴・差分解析
JSON JSON Tools 設定ファイル編集
Markdown Markdown All in One Qiita記事作成に便利

C# 拡張機能の入手方法

  1. VS Code を起動
  2. 左の「拡張機能」アイコンをクリック
  3. 検索バーに「C#」と入力
  4. 発行元が「Microsoft」となっているものをインストール
    • 拡張ID: ms-dotnettools.csharp

設定例 (settings.json)

{
  "dotnet.defaultSolution": "dotnet9-webapp.sln",
  "editor.formatOnSave": true,
  "files.autoSave": "onFocusChange",
  "yaml.format.enable": true
}

8. PostgreSQL コンテナの起動確認(リポジトリ取得後に実施)

必ずリポジトリを取得してから行ってください。
docker-compose.ymlDockerfile はリポジトリ内に存在します。

docker compose up -d db
docker ps

接続確認:

docker exec -it dotnet9-db psql -U appuser -d appdb

9. AWS CLI と Copilot CLI の入手とインストール

AWS CLI

Copilot CLI

10. Dockerfile / docker-compose.yml 詳解

docker-compose.yml

services:
  db:
    image: postgres:18
    container_name: postgres-db
    platform: linux/arm64   # Apple Silicon
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    ports:
      - "5432:5432"
    # 永続化(ボリュームでもホストフォルダでもOK)
    volumes:
      # - ./postgres-data:/var/lib/postgresql/data
      - postgres-data18:/var/lib/postgresql/data
      - ./pgconf/postgresql.conf:/etc/postgresql/postgresql.conf:ro
    command: ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"]
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB} -h 127.0.0.1 -p 5432"]
      interval: 5s
      timeout: 3s
      retries: 5

  web:
    build:
      context: ./src/WebApp
      dockerfile: Dockerfile
    container_name: dotnet9-webapp
    platform: linux/arm64
    depends_on:
      db:
        condition: service_healthy
    environment:
      # WebApp が Program.cs で読む接続文字列(←ここ超重要)
      # Host は "db"(サービス名)、プール/Keepalive は任意
      ConnectionStrings__Default: "Host=db;Port=5432;Database=${POSTGRES_DB};Username=${POSTGRES_USER};Password=${POSTGRES_PASSWORD};Pooling=true;Keepalive=30;"
      ASPNETCORE_ENVIRONMENT: "Container_Development"
    ports:
      - "9999:8080"   # ホスト5230 -> コンテナ8080(Kestrel)
    restart: unless-stopped
    # 必要に応じてアプリから DB へ初回マイグレーション実行(アプリ内の db.Database.Migrate() でOK)
    # ボリュームを使ってログやアップロードを出したい場合はここに volumes を追加

volumes:
  postgres-data18: {}

  • db: Postgres16、永続化・ヘルスチェック付。
  • web: .NET9 WebApp。Host=db に注意。

Dockerfile

# ===== build stage =====
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src

COPY WebApp.csproj ./
RUN dotnet nuget locals all --clear
RUN dotnet restore WebApp.csproj

COPY . ./
RUN dotnet publish WebApp.csproj -c Release -o /app/publish --no-restore

# ===== runtime stage =====
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
WORKDIR /app
ENV ASPNETCORE_URLS=http://0.0.0.0:8080
EXPOSE 8080
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "WebApp.dll"]
  • マルチステージ構成で軽量化
  • ASPNETCORE_URLS=http://0.0.0.0:8080 が必須
  • Apple Silicon 対応 (linux/arm64)

11. 次回予告

第2回では、
VS Code デバッガを使って WebApp × PostgreSQL の連携検証 を行い、
ブレークポイントを活用したローカル開発フローを構築します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?