はじめに
.NETの最新情報を毎週投稿してくれるWeekRef.NET: 週刊 .NET
ですが、どうやらStatiq Web
+ GitHub Pages
を用いて構築されていることを知りました。
weekref.net
気になり調べたところ、C#コードを数行書くだけで、記事を.md
で書くといい感じにサイトを構築してくれることが分かりました。結構便利そうだったので、今回は紹介したいと思います。
Statiq Webの紹介
Statiq Web
はStatiq Frameworkを利用して構築されているC#の静的Webサイトジェネレーターです。
Statiq Web is a powerful static web site generation toolkit suitable for most use cases. It's built on top of Statiq Framework so you can always extend or customize it beyond those base capabilities as well.
// DeepL翻訳
Statiq Webは、ほとんどのユースケースに適した強力な静的Webサイト生成ツールキットです。 Statiq Frameworkの上に構築されているため、これらの基本機能を超えていつでも拡張またはカスタマイズできます。
ローカルで利用してみる
まずはローカルでサイトを作ってみましょう。
また.NET
がインストールされている前提で話をすすめていきます。ちなみにStatiq.Web
はnetcoreapp3.1
で作られているらしく、まあ今では.NET8
を利用するのが無難かなと思います。
プロジェクトテンプレートよりプロジェクトを作成する
コンソールアプリケーションをdotnet template
から作成します。
$ cd <プロジェクトを作成したいディレクトリパス> $ dotnet new console --name SampleSite -f net8.0
Visual Studio
やRider
からコンソールアプリケーションを作成するのでも全く問題ありません。
Statiq.Webをインストールする
NuGet
からStatiq.Web
をインストールします。
www.nuget.org
$ dotnet add package Statiq.Web --version 1.0.0-beta.60
Program.csを編集する
.NET 6
以降であれば最上位レベルのステートメント
が利用できるので、以下を書くだけで終わりです。
最上位レベルのステートメント - C# チュートリアル - C# | Microsoft Learn
return await Bootstrapper .Factory .CreateWeb(args) .RunAsync();
コンテンツを追加する
input
フォルダの中に.md
を作成することでコンテンツを追加できます。まずはindex.md
を作成します。
. └── SampleSite ├── Program.cs ├── SampleSite.csproj ├── bin ├── input │ └── index.md └── obj
↓ inputs/index.md
# はじめに これはStatiq.Webで構築されたサイトです。 以下のC#コードと.mdファイルだけで構築することができました。 ```csharp return await Bootstrapper .Factory .CreateWeb(args) .RunAsync(); ```
静的Webコンテンツを作成する
最後にProgram.cs
を実行して、output
フォルダにコンテンツを出力します。
$ dotnet run
output
の中身をどこかにホスティングすればOKというわけです。
. └── SampleSite ├── Program.cs ├── SampleSite.csproj ├── input │ └── index.md ├── output ├── index.html └── sitemap.xml
templateを設定する
見た目がそっけないので、テーマを適応して華やかにしてみます。CleanBlog
というテーマが公開されているのでそれを利用してみます。
公式ドキュメントではSubModule
を利用した方法が紹介されています。テーマをtheme
フォルダ以下に置くことで自動で適応されるみたいです。
$ git submodule add https://github.com/statiqdev/CleanBlog.git theme
実際にビルドを行って出力が変わったか試してみます。またM1 Macだとビルドできずx64でないと私の環境だと動作しなかったのでご注意ください。
$ dotnet run
またサブモジュールは嫌というのはあるのかなと思います(別にテーマの方に楽にPR送りたいとかもないですし)。そこでNuGet
より適応できるような仕組みを作ってくださっている方がいました。
GitHub - devlead/Devlead.Statiq: @devlead helpers for the static site generator Statiq
Devlead.Statiq
を利用するとNuGetより適応できます。
dotnet add package Devlead.Statiq --version 0.20.1
https://www.nuget.org/packages/Devlead.Statiq
コードを一部だけ変更します。
return await Bootstrapper .Factory .CreateDefault(args) .AddThemeFromUri(new Uri("https://github.com/statiqdev/CleanBlog/archive/ceb5055f3d0f7a330708494ed21eb469cde62ce2.zip")) .AddWeb() .RunAsync();
最後に
こまかい見た目等々はWeekRef.NETのGitHubを見るとよいかもしれません。
github.com