WebMatrix + Markdown で手軽に更新できる(?)Webサイトを作る
執筆日時:
指定したフォルダに Markdown 形式のプレーンテキストを配置して、 http://sample.com/Hoge にアクセスしたら、 Hoge.txt がHTMLへ整形のうえ表示できる……なんてWebサイトがあったら、テキストファイルをぽいぽい書いていくだけでページを更新できて楽かなぁ、なんて思いませんかね。
ちょっとやってみたのだけど、それに近いことができたので、ちょっと晒してみる。その前に、必要な NuGet を入れておこう。
- Markdown Deep (最近気に入っている Markdown パーサ。MVC3 向けのサンプルもある)
- Razor Engine (ちょっとあとで面白い機能を付けるために入れておく)
んで、 _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 だとどうやればいいのかなぁ。