読者です 読者をやめる 読者になる 読者になる

しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

WebMatrix と FuelPHP を使って Web アプリ開発をしてみた

WebMatrix PHP

ちょっと前になるんですが、どうしても PHP での開発をしないといけなくなったので義務として WebMatrix と、めんたろ社長におすすめして貰った FuelPHP で開発することにしました。

FuelPHP » A simple, flexible, community driven PHP5.3 framework.

FuelPHP は PHP 5.3 以上で動作する、良い感じな MVC フレームワークです。開発スタイルは ASP.NET MVC やってたら割と親しみやすい感じかと思います。

で、早速 WebMatrix を使って開発環境を作ります。当然ながら PHP なので、PHP の空のサイトを選んでおきましょう。

f:id:shiba-yan:20130924223720p:plain

サイトの作成中に PHP が無い場合はインストールしてくれます。便利ですな。

FuelPHP のインストールは手動で行うしかないので、公式サイトから現時点での最新版である fuelphp-1.6.1.zip をダウンロードして展開します。

f:id:shiba-yan:20130924224419p:plain

docs は単なるドキュメントなので、それ以外を WebMatrix で作成したフォルダに全部コピーします。そして WebMatrix 上で F5 を押すとこんな感じになるはずです。

f:id:shiba-yan:20130924224610p:plain

何となくそれっぽくなりましたね。

この段階で実行してみると 403 エラーになります。ドキュメントルートに何もないから当然ですね。

f:id:shiba-yan:20130924224912p:plain

Apache などで動かす場合には public 以下をドキュメントルートにするのが一般的ですが、WebMatrix の場合は開いているフォルダがドキュメントルートになってしまうので、このままだと上手く動きません。

なので、IIS の URL リライトモジュールを使ってパスを書き換えてあげることにします。めんどくさい人は、以下の Web.config をコピペすれば良いと思います。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Redirect Static Resources" stopProcessing="true">
                    <match url="^(ico|assets|css|img|js)(.*)$" />
                    <action type="Rewrite" url="public/{R:1}{R:2}" appendQueryString="false" />
                </rule>
                <rule name="Rewrite Root" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="public/index.php?/{R:1}" appendQueryString="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

これを Web.config という名前でルートに保存して、もう一度実行するとエラーメッセージが変わります。

f:id:shiba-yan:20130924225606p:plain

何やら composer.phar update というコマンドを実行しろと言っていますね。composer.phar というのはよく分かっていないですが、 NuGet 的なものみたいです。

素直にコマンドを実行して、もう一度実行するとちゃんと FuelPHP のデフォルトページが表示されました。

f:id:shiba-yan:20130924230148p:plain

これで開発の準備は出来たので、あとは好きなようにコードを書くだけです。

中には外部からアクセス可能な場所にソースを置いていることが気になる人もいると思いますが、適切に ACL の設定を行いさえすれば問題ないですね。

これに関係して、ウェブマトリクスマンに WebMatrix 最終奥義というものを教えてもらったので、近々面白いことをしようかと思います。

WebMatrix 3 と iisnode の環境で WebSocket を有効にする方法

WebMatrix IIS Node.js Socket.IO WebSocket

WebMatrix 3 を使うと簡単に Node.js と Socket.IO の開発環境を作ることが出来ますが、Socket.IO で WebSocket を使おうとするとコネクションが途中でフリーズしてしまいます。

f:id:shiba-yan:20130725010424p:plain

本来なら 101 Switching Protocols で HTTP から WebSocket への切り替えになるのですが、Pending のまま応答がありません。

調べてみると、IIS 8.0 Express ではデフォルトで WebSocketModule が有効になっているので、iisnode の WebSocket と競合してしまっていたようです。

Tomek on Software: How to use WebSockets with node.js apps hosted in iisnode

なので、大人しく iisnode の人に従って、IIS に組み込まれている WebSocketModule を無効にする設定を Web.config へ追加します。

<system.webServer>
    <!-- IIS の WebSocketModule を無効にする -->
    <webSocket enabled="false" />
</system.webServer>

これで試してみると、今度は以下のようなエラーになってしまいました。

f:id:shiba-yan:20130725010824p:plain

どうやら Web.config では webSocket 要素での設定変更が許可されていないようです。

仕方ないので applicationhost.config を開いて、configSections 要素内にある webSocket の設定を以下のように修正します。

<!-- overrideModeDefault を Allow に変更する -->
<!--<section name="webSocket" overrideModeDefault="Deny" />-->
<section name="webSocket" overrideModeDefault="Allow" />

これで Web.config から webSocket の設定を変更出来るようになります。

そしてもう一度試してみると、今度はバッチリと 101 Switching Protocols で HTTP から WebSocket への切り替えが行われました。

f:id:shiba-yan:20130725011201p:plain

そういえば、WebMatrix 2 の時は iisnode のバージョンが古くて WebSocket に対応していませんでしたが、WebMatrix 3 で入ってくる iisnode は 0.2.4 だったので、WebSocket が使えるバージョンになっていました。

この手順でも WebSocket が使えない場合は、一度 iisnode を削除してから WebMatrix の Node.js テンプレートを選んで、インストールし直すのが良いかもしれません。

WebMatrix 2 正式版がやっとリリースされました

WebMatrix

結局ベータが出てから何か月かかってるんだという感じですが、ついに今朝正式版がリリースされたようです。

WebMatrix 2 is Released! + New Windows Azure Features - Windows Azure - Site Home - MSDN Blogs

Windows Azure チームのブログで紹介されるのも時代の流れですかね(何

ということらしいので、試してみたいですね。

f:id:shiba-yan:20120907084004p:plain

しかし、Web PI だと非常に残念なことになっているのでウェブマトリクスマンの活躍に期待したいです。