GitHub やQiita など、さまざまなサービスで使われている形式になってきた Markdown 。この便利(?)なものを ASP.NET でも使ってみようというのがこの記事の趣旨です。
CommonMark.NET
Markdown を処理するライブラリを探してみると、その一つとして CommonMark.NET が見つかります。この説明によると、フル .NET ライブラリにも関わらずネイティブライブラリのラッパーと同じくらい速く、さらに PCL や .NET Core の上でも動くそうです。これは Markdown で書くときには使わない手はないですよね。
ちなみに CommonMark とは、 Markdown に数ある方言を解決するために、その仕様化を目指したプロジェクトです。というわけで、正確には Markdown を使っている…というわけではないですが、大抵は問題なく使えるでしょう。
使い方
基本の使い方は簡単で、 using CommonMark;
と書いた状態で、 CommonMarkConverter.Convert
メソッドを使って変換します。他にも Parse
メソッドや ProcessStage
メソッドなどもありますが、自分の Markdown 拡張を作ったりしない分には使わないと思います。出力される HTML の形式を切り替えたいときは、 CommonMarkSettings.Default.Clone()
をして自分で設定していくことになります。
1 | var setting = CommonMarkSettings.Default; |
1 | <h1>Hello!</h1> |
ファイル(ストリーム)から読んで別ファイルに出力するというオーバーロードも存在します。
1 | using (var input = File.OpenRead("Hoge.md")) |
ASP.NET Core と絡めたサンプル
ライブラリの紹介が終わったところで、いよいよ ASP.NET Core で使ってみます。全体のソースコードはこちらから
まずは ASP.NET Core プロジェクトを作成し、 ‘project.json’ に依存関係を書き加えます。 Microsoft.AspNetCore.StaticFiles
と CommonMark.NET
を追加しました。
テンプレートとして、下のような簡単なものを用意しました。 ‘style.css’ は別途用意しています。
15 | const string ContentTemplate = @" |
処理コードの中では、用意している CommonMark と同じ名前のリクエストがあれば、それを HTML に変換して表示しています。 CommonMark の実際の処理は CommonMarkConverter.Convert
メソッドだけです。
37 | var contnetDir = env.ContentRootFileProvider.GetDirectoryContents(@"content"); |
このプロジェクトを実行すると、次のようなページが表示されます。元の CommonMark ファイル
まとめ
Markdown を処理するためのライブラリである CommonMark.NET を紹介し、それを ASP.NET で利用してみました。
データベースやブラウザエディタを含めてプロジェクトを作れば、 Markdown の CMS っぽいのを構築できるかもしれません。