これまで Umbraco で管理してた shibayan.jp を、もっと軽量で書きやすい Flat-file CMS である Grav に移行するために、Visual Studio Code と IIS Express で快適にローカルで確認できる環境を作ろうと思いました。
少し前まではこういう場合 WebMatrix を使っていましたが、公式サイトを久しぶりに見ると Visual Studio Code を全力でお勧めしていました。
手軽だったので少し寂しいですが、Visual Studio Code の方が機能豊富で使いやすいので仕方ないですね。
しかし Visual Studio Code でも IIS Express を使ってコード書けるようにしたいわけです。Grav については今回紹介しないですが、気が向けばインストール方法とか書くかもしれません。まずは環境を作ります。
PHP 7 をインストール
Web PI を使うと IIS Express 向けの各 PHP ランタイムをインストール出来るので、必要なランタイムを選んでインストールします。今回は PHP 7 の x86 版を選びました。
同時に WinCache が入りますが、自動で設定されるので特に気にする必要はないです。PHP 7 のインストールはたったこれだけで完了です。Web PI は便利ですね。
IIS Express 拡張をインストール
IIS Express - Visual Studio Marketplace
IIS Express 拡張をインストールすると、コマンドパレットから IIS Express の起動と終了が実行出来るようになります。IIS と入力すると候補が出てくるので簡単ですね。
まず Run Website を選ぶと、さらにメニューが続く形になっているので最初は戸惑いました。
これで IIS Express の Start と Stop が出来るようになりましたが、このままだと PHP アプリケーションが動かないので、FastCGI とハンドラーの設定を追加します。
applicationHost.config を修正
WebMatrix を使っていた場合にはドキュメント以下に IIS Express ディレクトリが作られて、そこに applicationHost.config が存在していますが この拡張は Application Server Mode で IIS Express を起動するので、設定場所が少し異なっています。
Application Server Mode については以下のブログにしか書いてない気がします。貴重な記事です。
Working with the Different IIS Express Modes and HTTPS | Microsoft Docs
とりあえず PHP 7 を動かすためには FastCGI の設定と php 拡張子に対するハンドラーの追加だけです。このあたりは PHP 公式サイトに情報が載っているので参考にして進めます。
PHP: Windows 上での PHP の手動インストール - Manual
PHP 7 for IIS Express は Program Files の IIS Express 以下にランタイムがインストールされるので、PHP のパスは読み替える必要があります。
Application Server Mode では IIS Express 以下の AppServer\applicationhost.config が使われるので、appcmd のパラメータでこの config を編集対象にします。管理者権限が必要なので少し注意です。
REM Clear current PHP handlers appcmd clear config /section:system.webServer/fastCGI /apphostconfig:"C:\Program Files (x86)\IIS Express\AppServer\applicationhost.config" appcmd set config /section:system.webServer/handlers /-[name='PHP_via_FastCGI'] /apphostconfig:"C:\Program Files (x86)\IIS Express\AppServer\applicationhost.config" REM Set up the PHP handler appcmd set config /section:system.webServer/fastCGI /+[fullPath='"C:\Program Files (x86)\IIS Express\PHP\v7.0\php-cgi.exe"'] /apphostconfig:"C:\Program Files (x86)\IIS Express\AppServer\applicationhost.config" appcmd set config /section:system.webServer/handlers /+[name='PHP_via_FastCGI',path='*.php',verb='*',modules='FastCgiModule',scriptProcessor='"C:\Program Files (x86)\IIS Express\PHP\v7.0\php-cgi.exe"',resourceType='Unspecified'] /apphostconfig:"C:\Program Files (x86)\IIS Express\AppServer\applicationhost.config" appcmd set config /section:system.webServer/handlers /accessPolicy:Read,Script /apphostconfig:"C:\Program Files (x86)\IIS Express\AppServer\applicationhost.config" REM Configure FastCGI Variables appcmd set config -section:system.webServer/fastCgi /+[fullPath='"C:\Program Files (x86)\IIS Express\PHP\v7.0\php-cgi.exe"'].instanceMaxRequests:10000 /apphostconfig:"C:\Program Files (x86)\IIS Express\AppServer\applicationhost.config" appcmd set config -section:system.webServer/fastCgi /+[fullPath='"C:\Program Files (x86)\IIS Express\PHP\v7.0\php-cgi.exe"'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000'] /apphostconfig:"C:\Program Files (x86)\IIS Express\AppServer\applicationhost.config" appcmd set config -section:system.webServer/fastCgi /+[fullPath='"C:\Program Files (x86)\IIS Express\PHP\v7.0\php-cgi.exe"'].environmentVariables.[name='PHPRC',value='"C:\Program Files (x86)\IIS Express\PHP\v7.0\php.ini"'] /apphostconfig:"C:\Program Files (x86)\IIS Express\AppServer\applicationhost.config"
実行すると PHP 7 の実行に必要な設定が書き込まれます。
今後のアップデートでカスタムの applicationHost.config を指定できるようになるかもしれないですが、今はこれしか方法が無いと思います。アップデートに期待したいところです。
IIS Express でサイトを起動
全ての設定が完了した後に、コマンドパレットから Start Website を実行すると IIS Express が起動されて、自動的にブラウザが立ち上がります。
ちゃんと PHP で書かれている Grav も実行できました。shibayan.jp は GitHub でファイルを管理して、Web App と連携してあるので git push すると数秒後に反映されるようになってます。
なので、自分のマシン上でどのように見えるのか、事前に確認しながら書ける環境が必要なのでした。