👉 English Edition is also available HERE
GitHub Pages(Pages)+Jekyllでドキュメントを書く際に
.mdファイル間の内部リンクはどう書くべき?.mdと.html両方へのリンクを書いた方がいい?……といった悩みを持つ方は多いのではないでしょうか。
GitHub Pages(デフォルトのJekyll構成)は、jekyll-relative-linksなどの標準プラグインのおかげで、Markdownリンクを自動的に最適化してくれます。本記事では、2025年時点での実験・観察結果をもとに、その挙動や仕組み、ベストプラクティスをまとめます。
📝 注意:
本稿の内容は2025年9月時点の検証・観察に基づいたものです。将来、仕様が変更される可能性があります。
📝 ちなみに jekyll は「ジキル」あるいは「ジクル」と読みます。あの物語「ジキル博士とハイド氏」”Dr. Jekyll and Mr. Hyde” のそれ、そのものです。
index.mdではなく、README.mdが優先的なインデックスファイルとして認識されます。index.htmlがインデックスとして認識されます(これはPages特有というより、一般的なHTMLサーバーの標準的な挙動であり、jekyllはそれを遵守しているに過ぎない、と言えます)。Pagesはindex.mdとREADME.mdのどちらもindex.htmlに変換しようとしますが、両方が存在する場合には衝突が起きることになります。その場合、HTMLページ生成アルゴリズムは常にindex.mdを先に検出して変換するため、結果的にREADME.mdは無視されます。
📝 補足:
すでにREADME.mdがある状態でindex.mdを追加すると、index.mdの方がが変換されて、index.htmlを上書きするかたちになります。そこで今度はindex.mdを削除すると、再びREADME.mdからindex.htmlが生成されます。希に挙動が不定な場合も見られたようです—レースコンディションが存在するのかもしれません。
_config.ymlplugins:
- jekyll-sitemap
_config.ymlはこのようにシンプルです。運用Tipsも参照してください。
Linux/OpenSSL/Linux/OpenSSL/)。/Linux/OpenSSL/ へアクセスすると、そのディレクトリのindex.html(jekyllによって変換されたもの)が表示される。vSphere/vcsa-cert-replace-procedures/README.md/Straypenguins-Tips-Inventory/vSphere/vcsa-cert-replace-procedures/)に自動的に書き換えられる(ファイル名なし)。index.htmlが表示される。vcsa-cert-replace-procedures.md.htmlに変換されている。(例:/Straypenguins-Tips-Inventory/vSphere/vcsa-cert-replace-procedures/vcsa-cert-replace-procedures.html).htmlページが表示される。GitHub Pagesでは、いくつかのjekyllプラグインがデフォルトで有効化されています(公式ドキュメント)。そこには、以下のようなプラグインが含まれます:
jekyll-relative-linksjekyll-readme-index特にキーとなるのが jekyll-relative-links:
Markdown内での.mdファイル間相対リンクを、HTML化の際に自動的に、呼応する.html(あるいはindex.htmlを持つディレクトリ)パスに変換してくれます。
そのおかげで、単に
[Label](other-page.md) や [Label](Subfolder/) といったふうに書くだけで、公開されたサイト上でもリンクが切れせず「つべこべ言わんでもとにかく動く」わけです。
.html版を作る必要はありません。index.htmlとして変換され、ディレクトリパスだけでもアクセスできます。index.mdではなくREADME.mdのみを置くのが最善のようです。.md表示とGitHub Pagesの.html表示を両方したい場合には、ダブルリンク併記も有効な手段ですが、.mdへのリンクだけでも十分です。
- vCSA Certificate Replacement (GitHub Web) / (GitHub Pages HTML)
_config.ymlにjekyll-relative-links等のプラグインを手動で追加する必要はありません(GitHub Pages標準で有効)。_config.ymlのカスタマイズも、特別な要件でもない限り、無用。