WebMatrix + Markdown で手軽に更新できる(?)Webサイトを作る

執筆日時:

指定したフォルダに Markdown 形式のプレーンテキストを配置して、 http://sample.com/Hoge にアクセスしたら、 Hoge.txt がHTMLへ整形のうえ表示できる……なんてWebサイトがあったら、テキストファイルをぽいぽい書いていくだけでページを更新できて楽かなぁ、なんて思いませんかね。

ちょっとやってみたのだけど、それに近いことができたので、ちょっと晒してみる。その前に、必要な NuGet を入れておこう。

んで、 _Pages.cshtml_ に以下のコードを追加。

	@using System.IO

@{ // Layout = "_SiteLayout.cshtml"; レイアウトを使うならコメントアウト

// http://sample.com/Pages/Hoge のうち、Hoge を取得 string id = UrlData[0]; if (string.IsNullOrEmpty(id)) { id = "Home"; }

Page.Title = id; // IDをページタイトルにセット。レイアウトで使う

// サーバー上の /Pages/Hoge.txt をロード string path = Server.MapPath(string.Format("/Pages/{0}.txt", id));

if (!File.Exists(path)) // ファイルあらへん => 404を投げる { throw new HttpException(404, path + "is not found."); }

var content = File.ReadAllText(path);

// Markdown エンジン を用意 var markdown = new MarkdownDeep.Markdown() { ExtraMode = true, };

// HTML へ変換 var body = content; body = RazorEngine.Razor.Parse(body); // ※ body = markdown.Transform(body); }

@Html.Raw(body)

※ の部分を入れたお陰で、Markdown に埋め込んだ Razor コードが使える *1 。ただし、自分で作った Helper を追加したところ、呼び出すのは失敗。基本的なクラスなら使えるのだけど、あとから追加したのは RazorEngine に知らせてあげないといけないのかな? ちょっとそこまでは使い方がわからない。

ともあれ、これで http://sample.com/Pages/Hoge にアクセスしたら、 /Pages/Hoge.txt がHTMLとして表示される。_Pages_フォルダにテキストを追加していけば、ページをどんどん増やせる。

あんまりエラー処理していない *2 ので、実際に使う場合はもう少し手を加えなきゃいけないし、入力用のインターフェイスだってほしいかもしれない。「WebMatrix 2」は NuGet の導入も簡単になっているので、さっさと正式版におなりになっていただきたいものですね!

ほんとは Pages ってのも消したいのだけど、そこもわからなかった。 ASP.NET MVC3 ならば Routing をいじってって感じなのだけど、WebMatrix だとどうやればいいのかなぁ。

*1:たとえば、@DateTime.Now とか

*2:ファイル名として使えない文字が渡された場合など