Jekyllで日本語タイトル記事を書く
jekyll で日本語タイトル記事を書くにあたって、いろいろ試行錯誤してました。minimal-mistakesテーマをもとにしていますので、それ故の設定も混ざって話が進んでいくかもしれません。
jekyll で日本語タイトル記事を書くとファイルが見つからないエラー
なぜなのか。
jekyll で日本語がパスに含まれると webrick で正しく扱えない
jekyll で serve して確認してから本番に _site の中身をアップしたりとかするわけじゃないですか。
そのローカルで jekyll serve
はブラウザで確認できるようにサーバーが立ち上がるのですけど、そのhttpサーバーの動作は ruby の webrick っていうのが担当しているんですね。
それでその webrick は扱う url のパスに日本語が含まれていると正しく扱えず、ファイルがないよ、not foundだよってエラーが返るのです。
なぜかは知らない。
記事ファイル名の一部を記事タイトルが参照しているのでこのままではローカルで確認するときに日本語タイトルが使えない。
webrick 以外なら
それはそのサーバーによるとしか。ちなみにこのブログはbitbucket上で動いていますけど、日本語がパスに含まれていても正常に動いていますね。 なので本番さえよければって人は本番アップしたらいいんですよ。もし本番アップしてだめだったら鯖変えたらいいんですよ。
ローカルでもちゃんと表示するには
webrickにモンキーパッチ当てるか、webrick使うのをやめて違うもので鯖立てできるようにするか(できるのかわからない)、あるいは日本語タイトル記事に限定していうとタイトルは日本語で、記事のurlを別のものに変えてしまえばいいのですよ。
一応、記事ファイル .mdのファイル名につけていた日本語をurl_escapeしたものに置換して、記事レンダリングするときの記事タイトルを取得するときにデコードする方法でもいいかもしれないですが、その場合、ディレクトリがぱっと見で何なのかわからない文字列ばかりになってよろしくないので試していません。もしするなら liquid のフィルターにデコードするものがなさそうのでカスタムフィルターを用意することになるとおもいます。フィルター自作自体は難しくなさそうです。
記事の html が入っているディレクトリを別のものに変える
permalink っていうものがあって、 jekyll で 記事ページ y-m-d-hoge日本語タイトル.mdの yaml front matterで
---
permalink: /hogehoge/
---
このように指定することで hoge日本語タイトル ディレクトリじゃなくてhogehogeディレクトリができます。
jekyllの記事タイトルに設定されるリンクを変更する
あとはそれに合わせて記事へのリンクの箇所をpermalinkに合わせたら、 日本語タイトルでもパスは日本語じゃないものを指定できます。
まとめ
jekyll serve
で使われるwebrickは日本語が含まれるパスが正しく扱えない。- 日本語パスが扱えないならパスを変えて日本語を含まないものにしてしまえばいい。
- yaml front matter で permalinkで記事urlを変更
- permalinkに合わせて記事リンクを修正
以上
Comments