セルフホスト型サービス
EdiWang/Moonglade avatar
EdiWang/Moonglade

Moonglade:Azure 向けのセルフホスト C# ブログプラットフォーム

このプロジェクトは「Blog system of runs on Microsoft Azure. Azure Blob Storage (Recommended) Create an Azure Blob Storage container with appropriate permissions: Enable CDN in admin settings for faster image delivery.」を基盤として、実践的に使えるオープンソース実装を提供し、再利用可能なツールチェーンと統合手段を備えています。

スター 538フォーク 139C#GPL-3.0

ひと目でわかる

これは何?
Moonglade リポジトリについて README が記述する内容を整理:デプロイ、開発、設定、プロトコル、GPL-3.0 ライセンス。
誰に向いている?
Azure上でC#とASP.NETのブログ機能を自社運用したいチームには、構成を読む入口になります。別クラウドや完全なローカル運用を前提にする場合は、Azure SQL、Blob Storage、認証の置換範囲が先に問題になります。
商用利用できる?
条件付きでできます。GPL-3.0 はコピーレフトのライセンスで、これを含むソフトウェアを配布する場合、そのソフトウェアのソースコードを同じライセンスで公開する必要があります。配布せず社内で使うだけなら、この義務は生じません。
今もメンテナンスされている?
されています。最後のコミットは 2 日前です。
何の言語で書かれている?
主に C# です(GitHub の言語統計による)。

回答はプロジェクトの GitHub データ(最終同期:2026年9月14日)と当サイトの分析に基づくもので、法的助言ではありません。

オープンソース詳細解説

Azure を想定したブログプラットフォーム

Moonglade は C# と ASP.NET Core で書かれたセルフホスト型ブログプラットフォームです。README は開発者向けの個人ブログと位置づけ、推奨デプロイ先は Microsoft Azure ですが、他のクラウドプロバイダーやオンプレミスでも動作するとしています。システムは公開の閲覧体験と認証付き管理ポータルを分けています。README が扱う主要機能は、投稿、下書き、予約公開、ページ、カテゴリ、タグ、モデレーション付きコメント、Webmention、ビュー数、テーマ、ウィジェット、データのインポートとエクスポートです。リポジトリのメタデータは言語を C# とし、プロジェクトの説明は Microsoft Azure 上で動作するとしています。

ソリューション構成とプロジェクトの分割

メインのソリューションファイルは src/Moonglade.slnx です。README はコードベースを、Web ホストプロジェクト(Moonglade.Web)、ブログのコマンドとクエリを担うフィーチャープロジェクト、EF Core を使うデータプロジェクト、SQL Server と PostgreSQL のプロバイダープロジェクト、設定プロジェクト、認証、バックグラウンドサービス、そして画像ストレージ、メール、IndexNow、モデレーション、Webmention、シンジケーション、テーマ、ウィジェット、ミドルウェアのためのサポートプロジェクトに分けています。テストプロジェクトは src/Tests の下にあり、本番プロジェクトと対応しています。README は行数やモジュール依存グラフを示していないため、これらはソースコードから確認する必要があります。

デプロイの経路

README は master ではなく常に Release ブランチからデプロイするよう推奨しています。Azure については wiki の自動デプロイスクリプトを紹介し、最小限の Azure リソースで10分以内に開始できるとしていますが、実際の手順は wiki にあり README にはありません。ローカルテストでは、docker compose up -d が Docker デプロイの開始方法として示されています。また、Web サーバーで HTTPS と HTTP/2 を有効にすべきとしています。制限が1つ明記されています:このシステムを中国本土のユーザーに提供したり、中国法または適用される規制で禁止されたコンテンツを公開したりしてはなりません。

開発環境とデータベース設定

README が挙げるツールは Visual Studio 2026、または VS Code に .NET 10.0 SDK を組み合わせたもので、データベースは SQL Server 2025、LocalDB、PostgreSQL から選びます。接続文字列は appsettings.json の ConnectionStrings:MoongladeDatabase で設定し、ConnectionStrings:DatabaseProvider を SqlServer か PostgreSql に変更してプロバイダーを選びます。README に示されたビルドと実行のコマンドは、Moonglade.Web プロジェクトに対する dotnet restore、dotnet build、dotnet run です。ローカル既定値はブログが https://localhost:10210、管理画面が /admin、ユーザー名 admin、パスワード admin123 で、初回サインイン時に TOTP を登録します。

認証とコメント防御

認証は既定でローカルアカウントと TOTP 検証を使い、Microsoft Entra ID にも対応しています。README はセットアップ後のローカルサインインを2段階と説明しています:最初にユーザー名とパスワード、次に認証アプリのコードです。ローカルサインインのレート制限はクライアント IP とアカウントコンテキストの組み合わせで行われ、appsettings.json に固定ウィンドウの設定ブロックがあります。コメント送信は IP と投稿 ID で制限され、別のガードが隠しハニーポットフィールド、最小経過時間、フォームの最大経過時間チェックを追加します。README はコメントモデレーションがローカルで実行され、リモートのモデレーション API を呼ばないと明記しています。

ストレージ、メール、バックグラウンド処理

画像ストレージは Azure Blob Storage、S3 互換オブジェクトストレージ、ローカルファイルシステムをサポートし、ImageStorage 設定セクションで選択します。S3 互換オプションは AWS S3、Cloudflare R2、MinIO、Backblaze B2、DigitalOcean Spaces、Alibaba Cloud OSS、Tencent Cloud COS を対象としています。新着コメント、返信、Webmention のメール通知はデータベースのキューに入り、プロセス内の送信ボックスワーカーが配信します。プロバイダーは Azure Communication Services または SMTP です。README は配信が at-least-once であり、アプリ停止後の再試行で重複通知が送られることがあると警告しています。Webmention の ping や IndexNow 通知などのバックグラウンド処理は CannonService を通じて実行されます。これはプロセス内キューで、満杯のときは新しい処理を拒否してログに記録します。

プロトコル、ヘルスチェック、ライセンス

README はサポートするプロトコルとエンドポイントを列挙しています:RSS は /rss、Atom は /atom、OPML は /opml、Open Search は /opensearch、FOAF は /foaf.xml、Webmention は /webmention です。Reader View、u-card、IndexNow、Dublin Core はエンドポイントなしでサポートとされ、RSD、MetaWeblog、Pingback は非推奨とされています。受信 Webmention のソース URL は公開 HTTP/HTTPS アドレスである必要があり、プライベート、ループバック、リンクローカル、ドキュメント、予約、その他の特殊用途アドレス帯は取得前に拒否されます。生存確認エンドポイントは GET /health で、プロセスのみをチェックします。GET /health/ready はデータベース接続も確認します。リポジトリは GPL-3.0 でライセンスされており、ライセンス条文はソフトウェアの複製、配布、変更の自由を認め、このフリーソフトウェアには保証がないと述べています。サポートの約束やセキュリティ保証については何も確立していません。

Moongladeを採用候補に置くなら、Azure依存を先に棚卸しします。READMEに記載されたApp Service、Azure SQL、Blob Storage、Application Insightsなどの構成は、同じサービスを用意できる環境では導入手順を短くします。一方、ローカル開発や別クラウドへ移す場合は、接続文字列、ストレージ、認証、メール送信の代替を個別に確認しなければなりません。READMEの機能一覧は構成要素の存在を示しますが、負荷条件や復旧時間は示していません。

初回確認ではリポジトリのREADMEにある.NET SDK、データベース初期化、appsettingsの設定、Migrationと起動コマンドを同じ版で実行します。管理画面、投稿、画像保存、検索、コメント、認証を分けて動かし、Azure外へ切り替えた部分のログと失敗時の挙動を記録します。MITライセンスの利用条件はLICENSEで確認できますが、クラウド料金、運用監視、更新作業はライセンスからは判断できません。

編集部の結論

Azure上でC#とASP.NETのブログ機能を自社運用したいチームには、構成を読む入口になります。別クラウドや完全なローカル運用を前提にする場合は、Azure SQL、Blob Storage、認証の置換範囲が先に問題になります。Migration、画像保存、認証を同じ版で確認し、READMEにないSLAを想定しないでください。

公式情報源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
コミュニティノート

コミュニティノート