私は如何にしてVitePressを愛するようになったか
1990年代個人Web文化
私がインターネットを利用し始めた1990年代は,Yahoo!やNetscape Navigatorが広く用いられていた時代でした。当時の個人サイトは,主としてHTMLの直書きによって構築され,カウンターや掲示板を備える形態が一般的でした。サイトの発見可能性は,人手による分類登録や各サイトに設置された「リンク集」に大きく依存していました。たとえば,「ばな~倶楽部」は,Woody-Rinn氏による200×40ピクセルのバナーリンク集として,事実上の標準的な形式を示していました。また,「サーファーズパラダイス」や「TINAMI」は,イラストサイトを中心とする登録型サーチエンジンとして機能していました。
この時代には,相互リンク文化が広く共有されており,ユーザーはサイト間のリンクをたどりながら新たな情報や作品に到達していました。個人サイトには,文章を主とするテキストサイトや,絵画・イラストを主とするイラストサイトなど,表現内容に応じた類型が存在しましたが,いずれも基本的には「作品」を掲示することを目的として公開されていました。その意味で,当時の個人サイトは,Webにおける主要な表現媒体であり,Web空間の中心的存在であったと整理できます。
検索エンジンの高度化とブログ普及がもたらしたWeb文化の転換
2000年代には,Web上の情報流通構造が大きく変化しました。まず,検索エンジンはディレクトリ型からクローラーによる自動収集型へ急速に移行し,AltaVista,Excite,Infoseek,Lycos,gooなどが広く利用されました。とりわけ,1998年に公開されたGoogleは,PageRankアルゴリズムによって検索精度の面で他の検索エンジンを大きく上回り,2000年代前半には事実上の標準的存在となりました。この変化に伴い,SEOという概念が成立し,Web上で発見されるための条件が,従来のリンク集や相互リンクへの参加から,検索アルゴリズムへの適応へと移行しました。個人サイト同士の相互リンクでは,交流範囲は基本的に当該個人の活動圏内に限定され,数百サイト規模でも大規模リンク集といえましたが,自動収集とアルゴリズム提示を前提とする検索環境では,利用者が接するサイト数は数十万規模へと拡大しました。
この時期には,個人サイトの運営形態も,Movable TypeやWordPressなどを用いたブログへ移行しました。RSSによる購読文化が発達した結果,更新頻度と検索最適化の重要性が高まり,投稿は強く時系列を意識したものとなりました。記事に公開日時が明記されることで,利用者は更新状況を容易に把握できるようになり,RSS上でも新着順に情報が提示されるため,より多くの読者に訴求するには更新頻度を上げる必要が生じました。さらに,新規記事はサイト内の分類ページの一部に置かれるのではなく,トップページ最上部に配置されることが一般化し,サイト構造そのものが時系列中心へ再編されたといえます。こうして,作品展示の場としての個人サイトは,継続的に情報を発信するメディアとして理解されるようになり,拙速であっても量産される情報の価値が相対的に高まったと考えられます。
ブログ間連携の試みとしては,2002年にMovable TypeがTrackbackを実装したことが挙げられます。Trackbackは,他のブログ記事に言及して自らの記事を執筆した際,その事実を相手側のブログへ自動通知する機能であり,個人サイト間の新たなリンク形成手段として期待されました。しかし,実際には無関係な宣伝目的のスパムトラックバックが横行し,運営者に手動削除の負担を強いるようになったため,この仕組みは急速に衰退しました。Trackbackを高く評価する紹介記事を読んだ記憶はあるものの,実際に体験する前に衰退したというのが,この技術の受容過程を示す個人的印象です。
以上の変化は,従来の個人サイト文化に対して,少なからぬ断絶感をもたらしました。個人的には,それまで形成されていた個人サイト同士のつながりが,突如として登場したWeblogによって置き換えられたように感じられました。Weblogを「ブログ」と略す語感への違和感,HTMLを直接記述する技術力のない利用者層の大量流入への反発,ならびに小さくコントラストの低い文字を用いた読みにくいデザインへの嫌悪感などから,当時は強い拒否感を抱いていました。この感情は主観的かつ感情的なものであり,何一つ一般化できる評価ではありませんが,当時のWeb文化の転換が,一部の既存利用者にとっては喪失として経験されたことを示すものではあります。
SNS時代における情報流通の変容と個人サイトの再評価
2010年代には,mixi,Facebook,Twitterに代表されるSNSが普及し,人々の発信と閲覧の中心は個人サイトやRSSからSNSへと移行しました。mixiでは「足あと」の獲得が強く意識され,運営がその偏重を問題視した時点では,すでにエンゲージメント志向から利用者が離れにくい状況が生じていたという認識です。また,mixiが「足あと」見直しによりエンゲージメントの可視性を相対的に弱めた結果,利用者の関心はmixi外部へ向かい,最終的に同サービスはゲームプラットフォーム化し,SNSとしては衰退しました。これに続いて普及したSNSでは,従来は専用RSSビューアーを通じて読まれていた情報がタイムライン上で消費されるようになりました。RSSに並んでいたのは,少なくとも執筆者自身が記事として成立すると認識できる一定量の内容でしたが,SNSでは必ずしも記事とは言えない短文が主流でした。Twitter等は当初は「マイクロブログ」とも呼ばれたものの,投稿者の多くは記事を書いている認識を持っていなかったように思えます。この形式は爆発的に受容されましたが,同時に,容易に投稿でき,しかも記事にまとめなくても反応を得られるため,丁寧に記事を書く動機は弱まりました。さらに,労力をかけて記事を書いても,先鋭化したSEOや業務的に大量生産される記事群の物量の前では十分な反応を得にくいことが明確となり,人々は記事を書くことをやめ,RSSフィードも更新されなくなって衰退しました。この変化は,2000年代までのプル型・ストック情報中心の時代から,2010年代以降のプッシュ型・フロー情報中心の時代への移行として整理できます。
情報量の増大に加え,見るべき情報を自ら選別したくない利用者が主流化したことで,アルゴリズミックタイムラインが成立しました。本来,SNSにおけるフォローとは,特定の人物の視点や思想を時間の流れとともに受け取る行為であり,時系列表示は「誰が,どのような連続性の中で語ったか」という文脈を保持していました。しかし,プラットフォーム主導でアルゴリズミックタイムラインが導入されると,表現者の人格や思想よりも,エンゲージメントを生む定型的な表現形式が優先されるようになりました。その結果,「本物らしさ」は希少性を失い,たとえば「インスタ映え」に象徴される視覚語彙の固定化が進み,成功フォーマットは模倣・量産可能な演出へと変質しました。これは自然発生的な文化変化というより,プラットフォーム設計によって加速された現象として理解できます。
同時に,発信の場はYouTube,Medium,Substack,Qiita,Zenn,noteなどのプラットフォームへと囲い込まれました。集客,配信,収益化が一体化した結果,可視性はアルゴリズムによって決定され,コンテンツは実質的にプラットフォームの資産として扱われるようになりました。また,SEO競争の激化によって個人サイトのトラフィックは大きく減少し,自身のドメインで書く理由は弱まったといえます。その一方で,一次情報のアーカイブとしての意義はむしろ高まりました。「今週の人気記事」や「旬の記事」のように直近の投稿を優遇するアルゴリズムは,記事をフロー情報化しますが,技術や思想は本来,長期的に蓄積されるべきストック情報です。この意味で,ストック情報を安定的に保持する場所としては,自身のドメインが依然として重要です。筆者は2010年代を通じてSNSに何十万件もの投稿を行ったものの,結果として何も残っていないことに愕然としました。この経験は,フロー型メディアに依存した発信の脆弱性を示すものと考えています。
近年では,Twitterの消失を一つの契機として,SNSとの付き合い方を見直す人々も一定数現れました。Fediverseの分散性は,「作品」を提示する場として機能することにより,創作意欲を損なわず,特定プラットフォームへの依存を高めすぎることなく,発表の場を個人へと戻す傾向を生んでいるようです。さらに,AIの普及により,情報探索はキーワード検索から対話型の一次情報提示へと変化しつつあります。要約や生成は一次情報と受け手との間を担っていたサーチエンジンなどの中間層の情報を吸収しつつある一方,現時点ではAIに対するSEOは確立されていないようです。個人サイトは,独自性,永続性,技術的自由度を備えた,一次情報とオリジナル性の源泉として,あらためて重要性を増しているといえます。
ドキュメンテーションシステムの検討とVitePress採用の判断
このような状況を踏まえ,SNS上で感情的に発信して何かを成し遂げた気分になる態度とは距離を置き,技術的な文章を継続的に蓄積・公開できる環境を整備する必要があると考えるに至りました。サイト全体はBlocs 6 for Macで構築するとして,技術文書の執筆・公開については,これとは独立したドキュメンテーションシステムを用いる方針としました。一応,Self-hostedなツールについてはDockerで一通り立ち上げ,個別に試用しました。
候補としては,まずMarkdown中心の構成が現実的でした。Markdownは事実上のデファクトスタンダードであり,軽量で学習コストが低く,周辺エコシステムも非常に豊富です。また,GitHub Pagesとの親和性も高く,静的サイトジェネレータと組み合わせやすい点に利点があります。静的サイトジェネレータは,コンテンツとテンプレートをビルド時に結合して静的HTMLを生成し,それを配信する方式であり,応答速度,スケーラビリティ,攻撃対象領域の縮小といった利点を持ちます。さらに,ReactやVueのコンポーネントを埋め込めるものもあり,拡張性も高いです。代表的なツールとしては,Docusaurus,MkDocs,Hugo,Jekyll,MDX,VitePressなどがあります。一方,AsciiDocはクロスリファレンスに対応し,書籍レベルの文書作成に適した出版品質を確保しやすい形式です。出版品質という観点ではVivliostyleも重要であり,CSS組版に基づく高品質な出力,とくに縦書き文書に強みがあります。個人的には,代表者の村上真雄氏が製作していたテキスト整形ツールXTRを長く主力のドキュメンテーションツールとして用いてきた経緯があり,その延長線上で高い信頼を寄せています。また,reStructuredTextはPython文化圏における中心的な記法であり,Sphinxを通じてPython公式ドキュメントや科学技術系プロジェクトで広く採用されています。ただし,MySTパーサーによるMarkdown対応も進んでおり,Pythonコミュニティ全体が現在もreStructuredTextを強く支持しているかどうかについては,やや判断が分かれる印象があります。
このほか,OutlineやBookStackのような動的ドキュメンテーションツールも候補となりました。Outlineについては,検討していた当時,認証手段がGoogleまたはMicrosoftに限定されており,それ以外の選択肢がなかったため,大規模プラットフォーム企業への依存を避けたいという志向に照らして採用対象になりませんでした。現在はマジックリンクメール認証にも対応しており,再検討の余地はあると思われます。BookStackは全体として非常に魅力的に見えましたが,BookStack自身のドキュメントがHugoで構築されており,BookStackを使っていなかった点は判断材料として印象に残りました。Self-hostedではない手段としては,Craft,Notion,Obsidianなどのノート作成ツールに備わるPublish機能もあります。これらは執筆体験に優れ,そのまま公開できる手軽さがあります。実際,私はCraft Plusユーザーであり,Obsidian CatalystおよびSync Plusのユーザーでもありますし,Blocsによる静的サイト生成と連携させることも可能です。また,個人サイトとは別の公開手段として,Medium,Substack,Qiita,Zenn,noteなどの配信プラットフォームもあります。これらは集客,配信,収益化の機能を内包しており,公開基盤としては有力です。実際,Qiitaに最初に書いた記事は26,000件を超える閲覧があり,意を決して執筆して公開した意義は十分にありましたし,別の記事も現在まで継続して読まれています。ただし,他者に読まれること自体は,自分にとって最重要の価値ではないという認識も明確になりました。
以上を踏まえると,自分に適しているのは,静的サイトジェネレータを基盤とし,拡張性が高く,かつ手軽に執筆できる構成であると判断しました。とくに,Rustで記述したコードをWebAssemblyとしてブラウザ上で動作させる内容の記事を書きたいという目的がありました。Rust自体を学びたかったことに加え,ブラウザ上で効率よく動作するWebアプリケーションを構築できる点に強い関心がありました。その目的に照らして検討すると,TypeScript,Vue,Viteについては十分な知識がないものの,VitePressが一歩抜きん出ているように見えました。VitePressは技術文書の作成・公開を主目的として設計された静的サイトジェネレータであり,Vue.js開発チームによるツールです。VuePressの後継的な位置づけにあり,より単純な構成と高速なビルドを志向して再設計されています。テーマカスタマイズにVueコンポーネントを直接利用できるため,フロントエンドの知識があれば柔軟な拡張が可能です。実際,日頃利用しているソフトウェアのドキュメントを確認すると,VitePressで構築されている例がしばしば見られましたし,VitePress自身のドキュメントもVitePressで作成されていました。この点は,BookStackの印象とは対照的でした。さらに,サイドバーの自動生成や,一まとまりの文書単位での整理といった機能も実用的に見えました。加えて,各ページやフォルダ単位でのPDF化についても,@media printの定義とPuppeteerのようなツールの併用により実現できそうであり,少なくとも現時点では大きな制約にはならないと考えました。(結局,印刷ボタンとページシェアボタンをつけました。)
以上の理由から,ドキュメンテーションシステムとしてVitePressを採用することにしました。
VitePress採用に関する所感
実際にVitePressを採用した結果,全体としては適切な選択であったと思います。一方で,本ツールは非常に活発に開発されているため,ドキュメントの整備が実装の進展に十分追随していない場面がしばしばありました。そのため,必要な情報が公式文書のみでは完結せず,GitHubのIssueを参照して解決策を探索する必要があり,調査には相応の労力を要しました。加えて,筆者自身がフロントエンド技術に十分習熟していなかったこともあり,問題解決の過程は,熱帯泥炭湿地林で植物をかき分けながら進むような感覚を伴うものでした。些細に見える作業であっても,一歩前進するまでに数日を要することがありました。

しかしながら,解決不能な問題に直面したわけではなく,総合的な使用感は良好でした。特に,開発モードにおけるプレビューの容易さ,生成物の品質の高さ,簡潔で必要十分な機能構成,および必要に応じた拡張可能性については,高く評価しています。以上を踏まえると,VitePressの採用判断は妥当であり,結果として満足度の高い選択であったといえます。