前書き
私たちの生きる時代、ブログは珍しくなく、むしろどこにでもあると言えます。初期の搜狐や新浪ブログから、かつて誰もが青春を記録したQQ空間、そして現在のVlogやPlogに至るまで、自分自身のブログを持つことは難しいことではないようです。しかし、ゼロから優れたブログシステムを構築するとなると、そう簡単ではありません。技術に詳しい方の中には、「単に記事のCRUDを行うだけだから、それほど複雑ではないのでは?」と言う人もいるかもしれません。しかし、本当にそうでしょうか。その背後には、さらに多くの奥深さが隠されており、それを解き明かすのを待っています。指折り数えてみると、私が自身のブログを構築してから11年が経ち、多くのプログラマーが自分でブログシステムを書くのを見てきましたが、規範や基準に従って設計された、機能が完全なブログはごくわずかです。本稿では、ブログシステム設計において私が蓄積してきた経験を共有し、あまり知られていないブログ技術を紹介することで、ブログを構築したい方々が優れたブログシステムを設計する方法をより深く理解する助けとなることを目指します。
目次
記事が長くなるため、本文は4回に分けて配信します。目次は以下の通りです。
- 「ブログ」の歴史
- 私のブログ物語
- ブログの読者は誰か?
- ブログ基本機能の設計ポイント
- 4.1 記事(Post)
- 4.2 コメント(Comment)
- 4.3 カテゴリ(Category)
- 4.4 タグ(Tag)
- 4.5 アーカイブ(Archive)
- 4.6 ページ(Page)
- 4.7 購読
- 4.8 バージョン管理
- 4.9 テーマとカスタマイズ
- 4.10 ユーザーと権限
- 4.11 プラグイン
- 4.12 画像と添付ファイルの処理
- 4.13 不適切な言葉のフィルタリングとコメント審査
- 4.14 静的化
- 4.15 通知システム
- ブログプロトコルまたは標準
- 5.1 RSS
- 5.2 ATOM
- 5.3 OPML
- 5.4 APML
- 5.5 FOAF
- 5.6 BlogML
- 5.7 Open Search
- 5.8 Pingback
- 5.9 Trackback
- 5.10 MetaWeblog
- 5.11 RSD
- 5.12 リーダービュー
- ブログシステム設計の知識ポイント
- 6.1 タイムゾーンは本当にすべてUTCで良いのか?
- 6.2 HTMLかMarkdownか
- 6.3 MVCかSPAか
- 6.4 セキュリティ
- おわりに
「ブログ」の歴史
ブログは当初BlogではなくWeblogと呼ばれていました。多くの人が驚くかもしれませんが、Web 2.0時代に誕生したのではなく、1997年にはすでに登場していました。ブログは初期のシングルユーザー(単独著者)から、徐々にマルチユーザー(チーム)へと発展し、ブログプラットフォームとなりました。そしてWeb 2.0時代がブログにソーシャル性を与え、読者がコメントや購読(RSS/ATOM)を行えるようにし、ブログ作者同士がつながり(FOAF)、記事を引用(Pingback)できるようになり、ブログは徐々に人気を博しました。
ブログシステムもそれぞれ特徴があり、PHPにはWordPress、.NETにはBlogEngineがあります。そして最終的にWordPressは事実上のブログシステム標準となり、CMS機能も併せ持ち、Microsoft公式の.NETチームのブログもWordPressで構築されています。

ブログを読むユーザーはブラウザの他に、RSS/Atomリーダーも使用します。iPadが登場した時代には、リーダーアプリが一世を風靡しました。購読しているブログに新しい記事が投稿されると、リーダーが自動的に取り込むため、読者は毎日手動で新着記事を確認する必要がありません。Microsoft 365のOutlookには今でもRSSリーダー機能が残っています。
ブログは今なお、自己表現、情報発信、コミュニティとの交流のための最も優れた手段の一つであり、たとえ微博(microblogging)が登場しても、ブログの人気が衰えることはありませんでした。つまり、ブログはインターネットにとって電子メールのようなもので、「老舗の味はさすが」という言葉の通り、ブログは文化の担い手として、時を経ても色褪せることなく輝き続けています。
私のブログ物語
私のブログプロジェクトは2003年にまで遡ります。その頃私は中学生で、余暇にASPとAccessを独学し、最初の個人サイトを構築しました。テーマはなんとハッキング技術でした(若気の至りで、非常にクールだと思っていました)。オリジナルや転載の技術記事だけでなく、一般的なソフトウェアツールのダウンロードなどのサービスも提供し、時には大学生のふりをしてASPの卒業設計を手伝い(何せ中学生だと言っても誰も信じない)、QコインやQQ秀などと交換していました(非常に時代を感じます…)。このシステムは2007年に高校2年生になるまで維持され、こんな感じでした:

大学受験後、ようやく自分の興味ある技術を学ぶ時間がたっぷりでき、親に「勉強しない」と責められる心配もなくなりました。その頃、ASP.NET(VB)を独学し、第2世代の個人サイトを構築しました。テーマはもはやハッキング技術ではなく、通常のコンピュータ技術の共有で、主にオリジナル技術記事(日記)を中心に、フォトアルバムやポッドキャストなどのSNS機能も開発し、2009年に公開しました。こんな感じで、2011年まで維持されました。

2012年に卒業後、エンジニア(プログラマー)になり、ソフトウェアのダウンロード、フォトアルバム、ポッドキャストなどのコーナーを維持する余裕がなくなったため、技術記事だけに絞り、大幅にサイトをリニューアルしました。こうしてブログの原型が出来上がりました。ブログ構築にあたっては、同じく.NETのBlogEngineプロジェクトを参考にしました。実は、国内のある著名な.NETブログプラットフォームも初期にはBlogEngineプロジェクトを使用しており、かつては「博易」という中国語版もありました。ただし、他人のプロジェクトを直接改造するのではなく、コードを理解した上で、異なる方法で自ら実装することを選びました。本稿でこれから紹介する多くの内容も、この時期の学習に由来します。

卒業から7年後、各技術が急速に発展し、.NET技術と他の主流技術との競争が激しくなっていることに気づきました。外資系企業で長く働いていた私は、主に.NET技術を使用していました。その時、決意して、余暇に.NET Coreでブログシステムを書き直し、Moongladeと名付け、GitHub(https://github.com/EdiWang/Moonglade)でオープンソース化しました。現在のブログアドレスはhttps://edi.wangです。内容は海外コミュニティ向けで、Microsoft Azureの海外サーバーにデプロイされています(国内からのアクセスは遅いかもしれません)。

中学生時代のASPの試作は別として、2009年から2020年までの11年間、私のブログコードは10年以上の.NETの発展過程を横断し、ASP.NET WebForm 2.0 VB.NET + Accessから、現在のASP.NET MVC Core、C# 8、Azure SQL Databaseに至り、さらにAzure App Service、Azure DNS、Azure DevOps、Azure Active Directory、Azure Blob、Azure CDN、Application Insightsなどの技術も統合しました。

ブログの読者は誰か?
ブログを設計する前に、まず自分の読者がどこから来るのかを明確にする必要があります。これを理解することで、ユーザーがどのように製品を使用するかを想像できるようになります。これこそが、本稿で紹介するブログの設計方法とポイントです。
11年間のブログ運営とデータ統計の経験から、一般的な技術ブログでは、トラフィックの95%以上は検索エンジンからであり、多くの場合、読者は必要な記事だけを閲覧し、固定読者や購読ユーザーの割合はごくわずかです。これは、技術ブログが共有する内容の多くが具体的な技術問題の解決策であるためです。技術者が技術問題に遭遇した際、まず検索エンジンで誰かが以前に遭遇して解決したかどうかを調べ、記事のコードをコピー&ペーストして自身のプロジェクトの問題を解決した後、ブログ作者の存在を忘れてしまうことがよくあります。本当に記事が一定のレベルにあると感じた読者だけが、ブログの他のコンテンツを見始めるのです。
つまり、ユーザーの入り口はほぼ検索エンジンであるため、優れたブログシステムは、単に文章を書くだけでなく、SEOやその他のマシン間・システム間のインタラクションに関わるブログプロトコルを十分に考慮する必要があり、SEOを常に意識することが本稿の重要なポイントでもあります。
本稿では、コードの設計や技術実装を教えるのではなく、ブログシステムの設計思想とポイントを教えます。技術面については、有名なWordPress、先駆者であるBlogEngine.NET、そして私のMoongladeがすでにオープンソース化されており、いつでも研究できます。
次回は【ブログ基本機能の設計ポイント】を紹介します
ご期待ください
