スキップしてメイン コンテンツに移動

【Day 05】Gitリポジトリでインフラをコード化する(IaC)最初の第一歩

Day 05 アイキャッチ
▲ Day 05: Gitリポジトリでインフラをコード化する最初の一歩
🐳
皆さん、こんにちは! Docker/コンテナ実践講座の専任講師です。
前回はDockerの3大要素(Dockerfile・Image・Container)とライフサイクル、そしてC#オブジェクト指向との対比を学びました。
第5回目の本日は、モダン開発体制の核心である「インフラのコード化(Infrastructure as Code = IaC)」の第一歩として、DockerfileをGitリポジトリで管理・コミット・レビューする実践運用を徹底解説します!

① 導入・本日の達成目標

「サーバーの設定変更は、手順書(Excel/Word)を作って印刷し、管理者のハンコをもらって手動で実施する」
長年エンタープライズの現場で堅牢なシステムを支えてきたベテランエンジニアほど、これが「最も確実な運用」だと信じてきたはずです。

しかし、クラウドとコンテナが標準となった現代において、手動設定とドキュメント管理は「属人化」「設定漏れ」「環境ドリフト」の温床となっています。
本講義では、インフラ構成を「コード」としてGitリポジトリに同居させることで得られる劇的な開発効率と信頼性をマスターします。

  • 手動サーバー設定 vs IaC(インフラのコード化)の根本的な違いとメリットを理解する。
  • C#ソリューション(.sln)と同じリポジトリにDockerfileを同居させる理想的なディレクトリ構成を学ぶ。
  • プルリクエスト(PR)を通じたインフラレビューとチーム開発への3大恩恵(追跡・再現・即時巻き戻し)を習得する。

② 手動設定・Excel手順書からの脱却:なぜインフラをコード化するのか?

物理サーバーや従来の仮想マシン(VM)の時代は、サーバーの構築やミドルウェアのアップデートを行う際、以下のような手順を踏んでいました。

  1. 誰かが変更手順書(ExcelやWord)を作成する。
  2. サーバーにリモートデスクトップ(RDP)やSSHでログインする。
  3. GUIのウィザードをクリックしたり、コマンドを手動で打ち込んで設定を変更する。
  4. 手順書に実行日時と担当者印を記入して保管する。

一見几帳面に見えるこの運用には、構造的な3大欠陥が存在します。

手動管理とIaCの対比
▲ 【図解①】手動サーバー管理・Excel手順書 vs Dockerfile+Gitによるインフラコード化の対比
❌ 欠陥1: 手順書の形骸化(ドキュメントと実機の乖離)

緊急対応やちょっとしたパラメータ修正が手順書に反映されず、「手順書通りに構築しても動かないサーバー」が完成してしまう。

❌ 欠陥2: 属人化とブラックボックス化

「あのサーバーの設定はベテランの〇〇さんしか分からない」「どこを弄ったか誰も思い出せない」というリスクが常に付きまとう。

❌ 欠陥3: 変更の巻き戻し(ロールバック)が不可能

設定変更で不具合が起きた際、「元の状態にどうやって戻すか」の手順が確立されておらず、手戻り復旧に何時間も要する。

DockerとIaC(Infrastructure as Code)は、この問題を「設定手順をすべてテキストファイル(Dockerfile)に書き、Gitコミットで管理する」ことで完全に解決します。

③ C#ソリューション(.sln)とDockerfileの理想的な同居リポジトリ構成

C#/.NETプロジェクトにおいて、インフラ定義をどこに配置するべきでしょうか?
現代のベストプラクティスは、「C#のソリューションファイル(.sln)と同じGitリポジトリのルートにDockerfileを配置する」ことです。

C#コードとDockerfileの同居構造
▲ 【図解②】1つのGitリポジトリでC#コードとDockerfileを同居させるディレクトリ標準構成

以下に、実務で標準的に用いられる典型的なディレクトリツリーを示します。

MyCompany.OrderSystem/                  # Gitリポジトリのルート
├── MyCompany.OrderSystem.sln          # C# ソリューションファイル
├── Dockerfile                         # ★ インフラ設計図(Git管理)
├── .dockerignore                      # ★ ビルド除外設定(Git管理)
├── .gitignore                         # Git除外設定
├── README.md                          # プロジェクト説明書
└── src/
    ├── MyCompany.OrderSystem.WebApi/  # ASP.NET Core 8 Web API
    │   ├── Controllers/
    │   ├── Program.cs
    │   ├── appsettings.json
    │   └── MyCompany.OrderSystem.WebApi.csproj
    └── MyCompany.OrderSystem.Core/    # ドメインロジック / クラスライブラリ
        └── MyCompany.OrderSystem.Core.csproj

このようにアプリケーションコードとインフラ定義を同じリポジトリに同居させることで、「.NET 8から.NET 9へのSDKバージョンアップ」「新しいLinuxライブラリ(libgdiplusなど)の追加」を、C#コードの変更と全く同一のGitコミットとして記録できます。

④ プルリクエスト(PR)によるインフラ変更レビューとCI連携

インフラがコード化されたことで得られる最大の革命は、「インフラの変更をプルリクエスト(Pull Request = PR)でチーム全員が査読できるようになったこと」です。

PRによるインフラレビュー
▲ 【図解③】プルリクエスト(PR)を通じたインフラ変更のチーム査読とCI自動テストの流れ

PR運用がもたらす3つの進化

  • ① 変更差分(diff)の可視化: 「どの行が追加・削除されたか」が緑と赤のハイライトで一目瞭然。不要なパッケージの混入や設定ミスを事前に検知できます。
  • ② レビューコメントによるナレッジ共有: 「なぜこのパッケージが必要なのか?」「マルチステージビルドの順序が最適か?」といった議論がPRのコメントログとして永遠に残ります。
  • ③ CI(GitHub Actions等)による自動ビルド検証: PRが作成された瞬間に自動で docker build が走り、ビルドエラーのある壊れた設定がmainブランチに混入するのを100%水際で阻止します。

⑤ IaCがもたらすチーム開発の3大恩恵

インフラをGit管理に移行すると、開発チーム全体の開発生産性と心理的安全性が劇的に向上します。

チーム開発への3大恩恵
▲ 【図解④】IaCがもたらすチーム開発の3大恩恵(履歴追跡・100%再現・即座の巻き戻し)
3大恩恵 従来の現場(手動・手順書) IaC+Dockerの現場
① 履歴の完全追跡 「いつ誰がこのライブラリを入れたか」誰も知らず放置される git blame でコミット理由・PR・担当者が1秒で判明
② 環境の100%再現 新人の環境構築に2日〜3日かかり、先輩が付きっきり git clonedocker run で初日から1分で稼働
③ 即座の巻き戻し 環境障害時、手動で戻そうとして二次障害・パニック発生 git revert を叩くだけで前回の正常状態へ瞬時復旧

⑥ C# / .NET 現場での実践アプローチ

明日からチームで導入できる実務標準ファイルと、Git運用コマンドセットを確認しましょう。

[A] 実務必須:.dockerignore の標準設定例

Dockerfileと同じ場所に .dockerignore を置くことで、ホストPC上の重い不要ファイル(ビルド成果物やGit管理情報)がコンテナビルドコンテキストに転送されるのを防ぎ、ビルドを爆速化します。

# .dockerignore の実務標準テンプレート
**/.git
**/.vs
**/.vscode
**/bin
**/obj
**/*.user
**/*.suo
**/node_modules
Dockerfile*
README*
*.md

[B] インフラ変更時のGitワークフロー(PowerShell)

# 1. 最新のmainから作業用ブランチを作成
git checkout main
git pull origin main
git checkout -b feature/update-dotnet-sdk-8.0.400

# 2. Dockerfile をエディタで編集(例: .NET SDKのマイナー更新)
# 3. ローカルでビルドが通るか事前検証
docker build -t order-api:test .

# 4. 変更をステージングしてコミット(意図を明確に記録)
git add Dockerfile .dockerignore
git commit -m "build(docker): .NET 8.0 SDKベースイメージをセキュリティパッチ適用版へ更新"

# 5. リモートへプッシュしてPRを作成
git push origin feature/update-dotnet-sdk-8.0.400

[C] 4大AIエージェントへの指示プロンプト例

🤖 Antigravity / Claude Code への指示プロンプト:

「このC#ソリューションのルートに配置する本番運用向けの .dockerignore ファイルを作成してください。bin, obj, .vs などの不要なキャッシュやローカル設定ファイルがDockerビルドコンテキストに含まれないよう網羅的に指定してください。」

⚠️ 30年選手がハマりやすい現場の落とし穴

「稼働中のコンテナに入って手動で apt install / 設定変更してしまう罠」
物理サーバーの癖で、コンテナが動いた後に docker exec -it container_name /bin/bash でコンテナ内に入り、手動でパッケージをインストールしたり設定ファイルを直接書き換えてしまう人がいます。
これは「コード化されたインフラの破壊」であり、コンテナを再起動・再生成した瞬間に手動変更はすべて消滅します。
「変更は必ずDockerfileに記述し、Gitコミットを経て再ビルドする」という原則を徹底しましょう!

📌 本日のまとめ & 明日へのステップ
  • IaCの真髄: 手順書ではなく「Dockerfile」というコードでインフラを宣言し、Gitで全履歴を管理する。
  • リポジトリ同居: .sln と同じルートに Dockerfile.dockerignore を置き、アプリと環境を同時コミットする。
  • PRレビュー運用: インフラ変更もコードレビューを通し、差分確認とCI自動検証を行う。
  • チーム開発の恩恵: 誰が変更したかの完全追跡、新メンバーの即日稼働、障害時の瞬時巻き戻し(git revert)を実現。
次回【Day 06】予告:
『Dockerfileの基本構文(FROM / WORKDIR / COPY / RUN / CMD / ENTRYPOINT)』〜C#ビルドに必須の6大命令を完全マスター〜

コメント

このブログの人気の投稿

Perfume、2025年末で“コールドスリープ(活動休止)”へ──東京ドーム2daysの記録と、公式・各界・ファンの声

  1) 公式発表・基本情報 活動休止(コールドスリープ)を正式発表 2025年9月21日、公式サイト「 Perfumeより 」で、2026年から一度コールドスリープに入ると発表。再始動の意思(“新しいPerfume”として戻る)も明記。 Perfume Official Site 今後の運用告知(配信・上映など) 同21日付の「 今後のPerfumeに関して 」で、9/23(火・祝)東京ドーム公演の LIVESHIP全世界生配信 および 全国ディレイビューイング 決定を案内。特設サイトも併記。 Perfume Official Site +1 公式グッズ **「Perfume Calendar 2026」**発売決定(B2壁掛け/表紙+2カ月1枚×6枚+ポスター)。テーマは“フルーツ”。 Perfume Official Site 2) 東京ドーム2days(9/22・23)要点 公演タイトル: ZO/Z5 Anniversary “ネビュラロマンス” Episode TOKYO DOME 。日程・開場/開演・会場・物販等の実務情報は特設で公開。 Perfume Official Site 9/23公演を世界配信(LIVESHIP) /ディレイビューイング実施。 Perfume Official Site 海外向け報道(英語)も「 indefinite hiatus 」として広く配信。 The Times of India 国内英字メディアも速報。 朝日新聞 3) 現地レポ( メリ爺 )から見える空気 あなたの現地記録(9/24公開)を、ファクトと現場情景の両面で反映: 両日参戦 。22日は アリーナ 、23日は 1階席から俯瞰 。前日の発表を受け、開演前のザワつき→MC後に“いつもの一体感”へ。開演は22日 18:45 頃。オープニングは**P³ツアー東京ドーム(2020/2)**と同趣向で“回収”の演出。 メリ爺のゲーム万歳 MC所感 :解散ではなく前向きな休止で不安を和らげる内容。 かしゆか の涙、 のっち の気丈さ、 あ〜ちゃん の思い出語り──3人の結束と「 また戻る 」約束が強く刻まれた。 メリ爺のゲーム万歳 体感時間 : “3時間弱”級のボリューム ながら“過去一...

【Perfume】Perfume 3rd Tour 「JPN」さいたまスーパーアリーナに行って参りました~

Perfume 3rd Tour 「JPN」1月28日、29日の2daysで参戦して参りました。 ファンクラブ会員の選考抽選会に28日、29日の両日で申し込んでいたんですが、両方とも当選していたという嬉しい誤算。 仕事だぁ、なんだかんだと紆余曲折ありまして28日の参戦は危ぶまれていたのですが、なんとかかんとか28日は40分遅刻しながらも参戦、29日はフル参戦する事が出来ました(∩´∀`)∩

ニンテンドースイッチでオンラインゲームを遊ぶには?

モンスターハンターライズが発売になって、家族でモンハン楽しみたい人が増えたみたいですね。 某ブログの検索キーワードを調べると、モンハンを家族でやるにはどうしたらいいのか?を調べている人が沢山いるのがわかります。 ※これでも一部  家族で協力するにはSwitch2台、ソフトも2つ購入する必要があります。 1台のスイッチでは遊べませんし、ソフト1つでも遊べません。 でも、1台のスイッチで別々アカウントがあれば交代で遊ぶこともできますよ。セーブデータもしっかり分かれます。 Switchのオンラインゲームを家族で遊ぶ方法については以下の記事にまとめてますのでよろしければ参考にしてみてくださいね。 家族でモンスターハンターライズDL版のオンラインプレーを楽しむ方法