--- title: "美しいパーマリンクの条件" date: 2021-07-24T08:34:00+09:00 draft: false tags: ["tech","essay"] --- 昨今、URLの形式にこだわる必要性は徐々に失われつつある。このことは、主要ブラウザがURLの詳細を隠蔽する外観に変化してきているところからもうかがえる。もはや大抵のエンドユーザにとってURLは意識外の存在であり、若干のリテラシーを持つユーザにとっても、せいぜいリンク先がSSLに対応しているか否か、あからさまにフィッシング然とした奇妙なURLでないか、などが判別できれば十分――といった程度の代物に過ぎない。 とすると、いつかエンドユーザの視界からURLが完全に消え去る日がやってくるのかもしれない。人目に触れない内部的な値として隠匿され、もっと可読性の高い他のリッチテキストに取って代わられる未来は大いに考えられる。しかし、あくまでURLがインターネット上のリソースを参照する機能を担う以上、われわれWebサイトを運用する人間はその永続性が最大限保たれるように努めなければならない。 どんな経路であれ、この記事にたどり着いた諸君らも同じ立場の人間と推察される。つまり、エンドユーザの目から遠ざけられはじめているURL――パーマリンクの形式に今なお気を払うべき人々だ。そんな諸君らに、今から僕は僕なりの美学を説く。 なお、当ブログは静的サイトジェネレータのHugoで実装されているゆえ、後に示される設定例も当該の仕様に則る形をとる。 ## 美しいパーマリンクの条件 美しいパーマリンクとは、 **・永続的** **・論理的** **・端的** である。 **パーマリンクは永続的でなければならない。** 10年後も有効なURLを実現するためには、Webサイトの運用開始時点で予め命名規則を確立させておく必要がある。言うまでもなくリンク切れはWebサイトの信頼性を低下させる。 **パーマリンクは論理的でなければならない。** 一つのURLが指し示すリソースは必ず一つだけである。したがって、パーマリンクは常に一意かつ重複しにくい形式で設定されなければならない。 **パーマリンクは端的でなければならない。** OGPでリンク先の概要を表示できる今時分、URLそのものに過剰な情報を詰め込むやり方は得策とは言いがたい。美しいパーマリンクは画面の表示領域を無駄に圧迫しない。 基本条件が明示されたところで以下に禁則事項を記す。 ## カテゴリやタグを含めてはならない もし諸君らがパーマリンクにカテゴリやタグを含めているなら、**即刻これを取り除かなければならない。** URLの一部に「food」や「animal」といった語句を入れたところで、閲覧者にしてみれば情報の粒度が粗すぎてほとんど役に立たない。結果、いたずらにURLを冗長にしてしまうばかりか、**一度設置したカテゴリやタグを延々と保守し続けなければならないという、** 強烈な縛りを自ら背負う羽目になる。 人間の感覚は日々変わりゆくもので、たとえば当初は「technology」という名称を適当と考えても、後で「tech」に縮めるべきだった、と思い直すことは儘ありえる。あるいは、粗めに「science」と名称を付けたが、やはり後で「math」と「physics」に細分化したくなった、なんて事例も枚挙に暇がない。 いずれの場合も、名称をパーマリンクに含めていたら都度リダイレクトの手間が発生する。記事数が10や20のうちはそんなに面倒でもないが、100や200にもなればいよいよ管理が追いつかなくなってくる。**リダイレクトの理想的な数は0である。** このことは各自胸に刻んでおくべし。 ## 重複可能性を作ってはならない 一意でないパーマリンクは邪悪である。より厳密には、**一意でなくなる可能性の高いパーマリンクが後に邪悪さをもたらす。** たとえば`https://example.com/year/month/day/`という形式のパーマリンクがあるとする。これは邪悪さを孕む典型例にあたる。 なぜならパーマリンクの末端が`/day/`で完結しているため、一日に複数の記事を投稿した途端に重複してしまうからだ。管理者の更新頻度が極めて緩慢だとしても今後のことは判らない。ひとたび例外を許せば命名規則の一貫性は永久に失われる。少なくとも、人力で簡単に重複できてしまうような設定は極力除外しなければならない。 ## 冗長すぎてはならない 記事ごとに管理者が具体的なタイトルを設けるのは、確実に一意のページを作成する上では最良の手段と言える。`https://example.com/unkoburiburi-wasshoiwasshoi/`のような形式は一般に優れたパーマリンクと評価できる。 反面、あまり凝るとURLが不必要に長くなりすぎてしまう。長くなればなるほど端的さは失われ、スペルミスを生むリスクも高まる。むろん、スペルミスの代償は被リンクの喪失かリダイレクトで支払う他ない。 同時に、記事数が増えるにつれて簡潔かつ強力なタイトルを設けられる余地は減っていく。管理者のネーミングセンスが有効に発揮される限りにおいて、このやり方は当人の美学を最大限に活用できるが、現実問題としてはクオリティの維持に懸念が残る。 10年ほど前まではパーマリンクに埋めこんだジョークをきちんと読んでくれるエンドユーザも少なくなかったが、今日にそういった余興が通用するかは甚だ疑問である。 ## 美しいパーマリンクの具体例 以上の事項を踏まえ、美しいパーマリンクの具体例を挙げる。記述はHugoの設定例に倣う。 **■秒まで時刻ベース** `/:year/:month/:day/:15:04:05/` 手前味噌で恐縮だが、この例は僕のお気に入りでもある。**秒まで時刻ベースのパーマリンクは西暦が廃止されない限り、確実に永続性が保証されるからだ。** わずか一秒の間に記事を連投することはまずありえないので、一意性の面でも相当に手堅い。ただし誠に残念ながら、WordPressなど一部のCMSでは本設定は禁じられている。数少ない欠点と言えよう。 おそらく彼らの言い分は「**厳密には**一意ではない」という話なのだと思われる。時刻ベースのパーマリンクは投稿日時に基づいて自動で決定されるため、意図してまったく同一の時間に揃えれば理論的には重複可能性が生まれてしまう。 WordPressのような巨大なCMSは、リテラシーにばらつきのある複数の人員で投稿作業が行われる状況も考慮して設計されているゆえ、こんな些細な抜け穴も許さないガチガチの仕様にならざるをえないのだろう。しかし、自由な設定が行える静的サイトジェネレータにおいては間違いなく最強候補の一つに挙がると僕は確信している。 **■連番** `/123/` 端的さの究極形態。記事数がそのままパーマリンクとなる。25番目の記事なら25、120番目の記事なら120。URLの情報をばっさり切り落としてでも端的さを追求するのは潔く美しい。僕は記事の投稿日時を有益な情報源と捉えているので当該の設定は採用しなかったが、あくまでミニマルの極北を目指す人にはおすすめできる。 欠点の一つは、記事数が2000以上に達してしばらくの間は時刻ベースのパーマリンクと誤解されるおそれがあること。特にアーカイブディレクトリのパーマリンクを別個に持っている場合、`/archive/2021/`(2021年に作成された記事一覧)と`/2021/`(2021番目の記事)が混同されかねない。URLの階層構造にこだわりを持つ人はこの辺が少し引っかかるかもしれない。 また、様々な事情で特定の記事を後から非公開にしたり削除した際、おのずと連番が欠けるので閲覧者に記事の秘匿を察知されやすく、同時に一貫性も失われてしまう。とはいえ、これらの問題はブラウザ上でURLの存在感が薄まるとともに目立たなくなっていくだろう。 なお、Hugoには連番を自動付与するフォーマットが存在しないので、実際の運用は手動で数字を付けるか各自工夫して自動化を図る形になる。 **■時刻ベース+単純なタイトル** `/:year/:month/:day/:title/` 先に示したとおり、常にネーミングセンスに優れたタイトルを付けることは現実的に難しい。仮にVimの設定に関する一つ目の記事を`/vim-setting/`と名付けてしまったら、以降は類似の内容であってもちょっとずつひねらなければならなくなる。最終的に`/vim-setting-setting-settei-unkoburi/`みたいになったら目も当てられない。こうなると管理者本人もただ苦痛を背負うばかりでなにも楽しくない。 これを解決する折衷案として、時刻ベースのパーマリンクを間に挟む形式が考えられる。一意性はタイトル側で補填されるため、時刻部分は時間単位まで詰める必要はない。逆にタイトルを`/vim-setting/`と単純に名付けても、時刻部分が同様に重複可能性を排除してくれるので端的さを維持できる。閲覧者から見ても`/2019/01/10/vim-setting/`と`/2021/07/24/vim-setting/`の違いは明白であり、**OGPと無縁の環境でも一定の情報を与えられることから総合的な戦闘力では上の二例より優れていると評せる。** 欠点としては、やはり短いにしても毎回自分でタイトルを考えなければならない手間が挙げられる。とりわけ更新頻度が多い管理者にとってはどんなに短いタイトルであっても、いや、むしろ単純でなければならないからこそ、案外悩みの種になるおそれが否めない。 しかし多少の苦労の代わりに得られる戦闘力はずいぶん強力なので、SEOやアフィリエイト収入を見越してWebサイトを運営している人には特にふさわしい形式と思われる。 ## 最後に **言い忘れたが、日本語URLは絶対にやめろ。**