以前、Octopressでサイトをbuildするときに 時間帯の地域をUTCにするようにしていたんですが、 Octopressをアップデート したらそれが効かなくなったのでその辺について。
- 時間帯地域の設定
- 以前の方法: plugins/date.rb
- jekyll-date-format.rb
- ENV[‘TZ’]をUTCで固定してしまう
- コマンドを呼ぶときに設定
- Rakefileの中で設定
- _config.yml
時間帯地域の設定
それ程気にする所ではないんですが、 各ポストのyamlブロックのところで、
date: 2014-07-10 13:00
の様にするように日時を指定することで作成されたとされる日時を指定できますが
1、
Jekyllでbuildするときにコンピューターの地域を使って時間を設定します。
日本でやると上の時間が日本のものとして 2014-07-10 13:00 +9:00
的な。
なので、海外とかに行ってbuildし直すと同じファイルでも
この出力される日時が変わってしまいます。
(イギリスなんかでなら2014-07-10 13:00 +1:00
みたいに。)
だからどうした、という感じもあるんですが、ちょっと気持ち悪いので、 常に指定時間はUTCのものである、ということになるように設定していました。
実際、上のdate
の部分は、通常だとファイルを作った時に勝手に設定されますが、
ファイルを作った時と投稿する時が日付すらずれるときもあって書きなおしたりもするし、
あまり時間は重要でも無いので。
なので、このサイトを作るときには、さらにRakefile
の中で、必ず12:00
になるように出力させています。
時間が重要になるのは同じ日に幾つかポストがある場合で、
この場合にはこの日時の順に投稿された、とみなされます(同時に始めてbuildしても)。
今日のこの一連の物も、一度作ってから
順番を考えてそれぞれ12:00
、13:00
、14:00
みたいに時間をずらして
順番をつけています。
いずれにしろ、どこへ行っても同じ様になるように 時間帯を指定しておくのは良いと思います。 (もちろんUTCじゃなくてJSTでも良いんですが)
以前の方法: plugins/date.rb
以前は、時間のフォーマットをOctopressのplugins/date.rbで行っていました。
その中で、datetime
と言う関数があって、
これを使って日時にFilterをかけて表示していたので、
その関数内で
1 2 3 4 5 6 7 8 9 10 11 |
|
的な感じでUTCに変換する様にしていました。
ただ、新しいOctopressではこのdate.rbが廃止されて
他からdatetime
なんかを持ってくる様になったので、他の方法が必要に。
jekyll-date-format.rb
plugins/octopress_filters.rb を見るとわかりますが、新しいOctopressでは、 jekyll-date-format というプラグインを代わり使っています(Octopressの作者のものなのでそちらに移行させた、という感じ)。
datetime
関数などは
jekyll-date-format-1.0.0/lib/jekyll-date-format.rb
2
の中で定義されています。
Jekyll 1.X or 2.X (+ Octopress)でのCategoryの取り扱い でやったようにこれをpluginsにコピーしてきて変更すれば良さげではあります。
で、実際に変更してみると上手く行きません。
どうも、同時に呼ばれているdate_to_xmlschema
というフィルター
3
がさらにJTSに戻してしまっている模様。
結果的に、一度無理やりUTCで12:00とかにしているので、出力は21:00+9:00とかになってしまいます。。。
以前もdate_to_xmlschema
は使っていたので、ここも変更があった様。
こちらはJekyllの中で定義されています(jekyll-2.0.3/lib/jekyll/filters.rb)。
こちらも持ってくれば良いといえば良いのですが、余りに面倒な感じになってきたので 他の方法を探すことに。
ENV[‘TZ’]をUTCで固定してしまう
以前の方法では一度ENV['TZ']
をUTCにした後に律儀に元に戻していますが、
基本的にすべての場所でこれをしたいわけなので、
一度どこかで変更してそのままにしておけば良いだけ、ということに。
例えば、plugins/octopress-filter.rbの先頭に
ENV['TZ'] = 'utc'
と書いておくだけでもいけました。
ただ、これだと順番が重要になってどこに於けばよいのか曖昧。
コマンドを呼ぶときに設定
ちょっと探したらこんなのが見つかりました。
Force Octopress/Jekyll to use a specific time zone - Tim Taubert: http://timtaubert.de/blog/2012/09/force-octopress-jekyll-to-use-a-specific-time-zone/
$ TZ=UTC rake generate
の様に、環境変数設定をしておくとrubyの中でのENVとして使われる様です。
ただ、これだと毎回これを加えるか余計なexportをしなくちゃいけなくてチョット嫌な感じ。
Rakefileの中で設定
通常の環境を汚さないために、 Rakefileの中で
1 2 3 4 5 |
|
みたいにjekyll
コマンドを呼ぶ前にENVを設定することも可能。
ただ、これだと、きちんとやろうとするとpreview
とかすべての場所に追加しなきゃいけないので
これもチョット面倒
4。
_config.yml
と、色々やっていた所、Jekyllの設定で簡単にできることが分かりました。。。
_config.ymlの中で
timezone: UTC
の様にtimezone
を指定してあげれば良いだけ。
(多分前にはなかった、はず。。。)
ということで、色々おかしな手間をかけずともこれをするのが 一番正しく簡単な方法です。