しばやん雑記

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

PHP と比較して覚える ASP.NET Web Pages (1)

こんばんは、普段は PHP ばっかり書いている男、しばやん(24 歳・独身)です。

いやー、Razor は最高に書きやすいですねー。ASP.NET のインフラ上に乗っているので覚えることが最小限で済むので素晴らしいですね。それに比べて PHP は(ry

今、ASP.NET には大きく分けて以下の 3 つの開発手法が用意されています。知らない人は覚えてください。

  • ASP.NET Web Forms
  • ASP.NET MVC
  • ASP.NET Web Pages

Web Forms は WinForm 開発をやってきた方には非常に使いやすいと思います。Web アプリですが、デスクトップアプリのようにイベントドリブンでの開発を行えるようになってます。

私は基本的に ASP.NET MVC を好んでいます。どれくらいかというと、開発入門を 24 回続けるぐらいは好きです。しかし MVC フレームワークは PHP を特にフレームワーク使わずに使ってきた方には非常に難しいものだと思います。考え方から学ぶのは非常に大変ですね。

しかし、MVC 3 で導入された Razor という記法を使って、PHP のように簡単に開発できる手法が導入されました。それが最後の ASP.NET Web Pages です。

PHP はテンプレートエンジンを使わない場合は HTML の中に タグを使って書いていきますね。Web Pages でも同様の方法を採用していて、HTML 中に C# のコードを埋め込んでいくのですが文法が非常に洗練されています。Razor 万歳。

テンプレート

PHP と Web Pages (Razor) を見比べてください。以下は全く同じ処理を行っています。

PHP では拡張子 php のファイルに書いていきますが、Web Pages では拡張子 .cshtml/.vbhtml のファイルに書いていきます。

PHP

<?php # 変数展開 ?>
<?php echo $hauhau; %>

<?php # 条件分岐 ?>
<?php if ($hoge > 0) { ?>
    <span>ほげほげ</span>
<?php } ?>

<?php # ループ処理 ?>
<?php for ($i = 0; $i < $length; $i++) { ?>
    <span><?php echo $i ?> 回目</span>
<?php } ?>

<?php # コードブロック ?>
<?php
    $foo = 10;
    $bar = "文字列";
?>

Web Pages

@* 変数展開 *@
@hauhau

@* 条件分岐 *@
@if (hoge > 0)
{
    <span>ほげほげ</span>
}

@* ループ処理 *@
@for (var i = 0; i < length; i++)
{
    <span>@i 回目</span>
}

@* コードブロック *@
@{
    var foo = 10;
    var bar = "文字列";
}

この時点でどちらが理解しやすいか、書きやすいかわかりますね。PHP だとテンプレートエンジンを使わないと正直使い物になりません。

PHP では XSS を引き起こしたりする危険なタグに関しては関数を呼び出して対策する必要がありますが、Web Pages だとデフォルトで HTML エンコードされて出力されるので安心です。

HTTP 絡み

PHP には $_GET/$_POST/$_FILES/$_SERVER といったスーパーグローバルな変数が用意されていますが、Web Pages にも同様のプロパティが用意されているので簡単に扱うことが出来ます。

特にファイルに関しては PHP では move_uploaded_file 関数でファイルをコピーしてからじゃないと使えないですが、Web Pages ではストリームとして提供されているので、別ディレクトリへの保存や直接読みだすことも簡単にできるようになっています。

PHP

$foo = $_GET["foo"];

$bar = $_POST["bar"];

$hauhau = $_FILES["hauhau"];

$ua = $_SERVER["HTTP_USER_AGENT"];

Web Pages

var foo = Request.QueryString["foo"];

var bar = Request.Form["bar"];

var hauhau = Request.Files["hauhau"];

var ua = Request.ServerVariables["HTTP_USER_AGENT"];

Request は HTTP リクエストをラップしたオブジェクトになっています。Request があるということは Response もちゃんとあります。

PHP

echo "ほげほげ";

Web Pages

Response.Write("ほげほげ");

PHP では echo をよく使いますが、Web Pages では Razor が優れているので Response.Write を直接利用することはまずありません。XSS の観点から見ると Web Pages のが安全だといえます。

非常に眠いので続きはまた今度で…。