本番環境がWindowsServer指定だが、社内の経験者が多いという理由でLaravelが選択されたプロジェクトの後任になり、
XAMPPからWindowsServer×IIS×SQLServer2022の環境構築をした際の備忘録です。
※あくまで備忘録であり、細かな設定については言及していません。
当時の案件の開発環境で最低限動作するセットアップ方法なので、環境に合わせて設定は見直す必要があります。
有効化していない場合こちらの記事を参考に
C:\vm_iso、C:\vm_shareのディレクトリを作成しておく(任意)
C:\vm_iso内にisoファイルを配置しておく
Windowsボタン押下→Hyper-Vで検索





| 項目 | 値 |
|---|---|
| IPアドレス | 192.168.200.1 |
| サブネットマスク | 255.255.255.0 |
| ゲートウェイ | (ブランク) |
| 優先DNS | (ブランク) |
| HTTPS経由のDNS | オフ |
| 代替DNS | (ブランク) |
| HTTPS経由のDNS | オフ |

画面右の「新規」>「仮想マシン」を選択

以下のように進める



作成されたVMの設定を開く

「ハードウェアの追加」から「ネットワークアダプター」を選択し「追加」ボタンを押下
仮想スイッチ: Default Switch
適用ボタンを押下

左のメニューの「管理」>「統合サービス」を選択し「ゲストサービス」にチェックを入れる
OKボタンを押下

Windows Server 2022 Standard (Desktop Experience)※XAMPPで開発したプログラムのソース一式をappとします。
IISのインストール
※仮想マシン内
http://localhost にアクセスして IISの初期ページが表示されるか確認役割と機能の追加
インストールの種類
サーバーの役割

Visual C++ Redistributable 2015-2022 をインストール vc_redist.x64.exe
URL Rewrite モジュールをインストール IIS URL Rewrite
IISマネージャー起動

「アプリケーションプール」を右クリック→「アプリケーションプールの追加」を選択。以下のように設定しOK

| 項目 | 値 |
|---|---|
| 名前 | app(任意の名前) |
| .Net CLRバージョン | マネージドコードなし |
| マネージドパイプラインモード | 統合 |

| 項目 | 値 |
|---|---|
| サイト名 | app.local |
| アプリケーションプール | app |
| 物理パス | C:\inetpub\wwwroot\app\public |
| バインド)種類 | http |
| バインド)IPアドレス | 未使用の IP アドレスすべて |
| バインド)ポート | 80 |
| バインド)ホスト名 | app.local |
VM内でIP確認:
ipconfig
> イーサネット アダプター イーサネット 2:
> 接続固有の DNS サフィックス . . . . .:
> リンクローカル IPv6 アドレス. . . . .: fe80::c1d1:7cf9:df61:89d1%7
> IPv4 アドレス . . . . . . . . . . . .: 192.168.56.102
> サブネット マスク . . . . . . . . . .: 255.255.255.0
> デフォルト ゲートウェイ . . . . . . .:C:\Windows\System32\drivers\etc\hostsに以下を追記
192.168.56.102 app.localPHP ZIP をダウンロード → C:\php82 に解凍
PHP 8.2
php.ini-production をコピーして php.ini を作成
php.ini の編集例
extension_dir = "C:\php82\ext"
extension=curl
extension=gd
extension=mbstring
extension=php_sqlsrv_82_nts_x64.dll
extension=php_pdo_sqlsrv_82_nts_x64.dll
extension=fileinfoMicrosoft PHP SQL Server ドライバを C:\php82\ext に配置
PHP Drivers for SQL Server
※zipを解凍して以下のファイルをC:\php82\extにコピーする
システム環境変数に C:\php82 を追加
IISマネージャー で PHP 8.2 を登録 (php-cgi.exe)


| 項目 | 値 |
|---|---|
| 要求パス | *.php |
| モジュール | FastCgiModule |
| 実行可能ファイル(オプション) | C:\php82\php-cgi.exe |
| 名前 | PHP_v8.2 (任意の名称で良い) |
FastCGIの設定

C:\php82\php-cgi.exePHPRC
既定のドキュメント追加
index.phpを追加しOK動作確認
C:\inetpub\wwwroot\index.php に以下を作成
<?php
echo phpinfo();ブラウザで http://localhost/index.php にアクセス
Composer をインストール (保存されるパスを環境変数設定用にメモしておく) Composer
PHP 実行パスを C:\php82\php.exe に設定
システム環境変数に Composer のパスを追加
バージョン確認
composer -V# バージョンチェック
nvm version
# インストール可能なnode.jsバージョン確認
nvm list available
# バージョン指定でインストール
nvm install 22.20.0
# インストール済みのnode.jsのバージョン確認
nvm list
# 使用するnode.jsのバージョン指定
nvm use 22.20.0node -v
npm -vSQL Server 2025 Developerをインストール ダウンロード
SSMSもインストール ダウンロード
SQL Server Management Studio (SSMS) を起動
接続したら「データベース」を右クリックして「新しいデータベース」を選択
サーバーインスタンス直下の「セキュリティ > ログイン」右クリック → 「新しいログイン」
IIS APPPOOL\app と入力(検索ボタンは押さない)IIS APPPOOL\ + アプリケーションプール名app)にチェックdb_owner(または必要な最低限の権限)を付与TCP/IP設定
「SQL Server2022構成マネージャー」 のアプリを起動するSQL Server ネットワークの構成を選択MSSQLSERVERのプロトコルを選択※TCP/IPが「有効」になっていない場合
クリックして開いたウィンドウのプロトコルタブで有効:いいえをはいに変更
IPアドレスタブを選択しIPアドレス127.0.0.1(localhost)の有効:いいえをはいに変更(ポート番号が1433じゃなかったらメモしておく)
※適用ボタンを押下すると再起動するまで云々言われるのでOKする
上記設定が終わったら画面左のメニューの SQL Serverのサービスをクリック
SQL Server (MSSQLSERVER)を右クリックして再起動を選択して再起動しておく
C:\mailhog, C:\mailhog\mailsC:\mailhog内に配置@echo off
cd /d C:\mailhog
start "" MailHog_windows_amd64.exe -storage=maildir -maildir-path=C:\mailhog\mails#!/bin/bash
./MailHog_windows_amd64.exe -storage=maildir -maildir-path=./mailsmailpit ダウンロード
※VMのホストに配置
mkdir /c/mailpit
mv download_path/mailpit.exe /c/mailpit/mailpit.exe#!/bin/bash
# Default values
DEFAULT_LISTEN_PORT=8025
DEFAULT_SMTP_PORT=1025
DEFAULT_DB_FILE=mailpit.db
# 引数があれば優先、なければ空
LISTEN_PORT=$1
SMTP_PORT=$2
DB_FILE=$3
# 対話入力(未指定時のみ)
if [ -z "$LISTEN_PORT" ]; then
read -p "Listen port [$DEFAULT_LISTEN_PORT]: " LISTEN_PORT
LISTEN_PORT=${LISTEN_PORT:-$DEFAULT_LISTEN_PORT}
fi
if [ -z "$SMTP_PORT" ]; then
read -p "SMTP port [$DEFAULT_SMTP_PORT]: " SMTP_PORT
SMTP_PORT=${SMTP_PORT:-$DEFAULT_SMTP_PORT}
fi
if [ -z "$DB_FILE" ]; then
read -p "Database file [$DEFAULT_DB_FILE]: " DB_FILE
DB_FILE=${DB_FILE:-$DEFAULT_DB_FILE}
fi
# DB ファイル作成
if [ ! -f "./$DB_FILE" ]; then
echo "Database file not found. Creating $DB_FILE..."
touch "./$DB_FILE"
fi
echo "Starting Mailpit..."
echo " UI : [::]:$LISTEN_PORT"
echo " SMTP : [::]:$SMTP_PORT"
echo " DB : ./$DB_FILE"
./mailpit.exe \
--listen "[::]:$LISTEN_PORT" \
--smtp "[::]:$SMTP_PORT" \
--database "./$DB_FILE"
echo "Press Enter to exit..."
readpwd
# > /c/mailpit
./start_mail.sh<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Laravel" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:0}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>storage/ と bootstrap/cache の書き込み権限を確認
.env.exampleから.envを作成
cd C:\inetpub\wwwroot
cp .env.example .envAPP_NAME=app
APP_URL=http://app.local
APP_TITLE="アプリタイトル"
DB_CONNECTION=sqlsrv
DB_HOST=localhost
DB_PORT=1433
DB_DATABASE=app
DB_USERNAME=
DB_PASSWORD=
MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=test@email.com
MAIL_FROM_NAME="${APP_NAME}"composer install
npm install
php artisan key:generate
php artisan storage:link
php artisan migrate
php artisan db:seed
php artisan optimize