👉 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.yml
plugins:
- 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-links
jekyll-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
のカスタマイズも、特別な要件でもない限り、無用。