JeffreyFrancesco.org 公開日 タグ Tag Permalink 現在地 Facebook page Twitter RSS feed

Gemfileにclassifier-rebornとgslを追加しました

お昼どきですけど、こなさんみんばんわ。

そんな訳で、時間が有り余っているので毎日Webサイトを弄っておりますが1、昨日唐突に「あーそうだ、各記事の本文が終わった後に、関連記事の一覧を表示させたいなぁ…」とか思いまして。

Jekyllには元々そのための変数(site.related_posts)が用意されているのですが、デフォルトだとこの変数、ただ単に最新記事が10件入ってるだけなんですよね。ちゃんと内容とかを分析して関連する記事をピックアップするためには、ビルド時に--lsiというオプションを付ける必要があります。

そこまではうろ覚えとはいえ知ってたのだけど、でも今まで一度もやったことがなかったので、まずは試しにやってみます。

$ bundle exec jekyll build --lsi

…エラーが出ただけでした。涙
あれーなんでーと思ったのだけど、その理由はエラー・メッセージに書いてある通りで、LSI生成をするために必要なgemであるclassifier-rebornが入ってないからですね。そういえばJekyll 3.0からはclassifier-rebornがオプション扱いになったのでした。なので、Gemfileにgem classifier-rebornって書いてbundle installしないといけません。やりましょう。

はい、やりました。よし、これでいけるか…と思いきや、色々調べてみると「Jekyllで関連ポストを表示する」という記事にたどり着きました。それによると、

  1. --lsiオプションを付けるとビルドに時間がかかる
  2. ビルドを高速化するためにはrb-gslというgemが必要
  3. そのrb-gslをインストールするにはGSLというライブラリが必要

ということらしいです。そうか、外部ライブラリがいるのか…でも、ローカル環境についてはbrew install gslで済みそうだけど、これNetlifyのビルドイメージには入ってるんかな? 入ってなかったらどうやって入れたらいいのかな? いやそもそも入れられるんか? ってなりまして。ちょっと面倒くさそうじゃないですか。

なので、とりあえずはこれだけで試しに手元でビルドしてみよう、遅いとかいうても5分とかそれくらいなら我慢できなくもない範囲だし…と思って、始めてみました。

…2時間過ぎても終わりません。涙
あかん、さすがにこれは遅すぎて耐えられない。ていうか、NetlifyのStarterプラン(無料)ってビルドにかけられる時間が月300分しかなくて、そこを過ぎると500分あたり7ドル課金されます。確実に超過するw 死ぬwww ってなりました。

そんな訳であらためて色々調べ直し。すると、中国の方が書いた英語のブログ記事を見つけました。翻訳しながら読み進めていくと、最後の方にNetlify has already added gsl in their building imageって書いてある。入っとるやんけ!(歓喜の声)

それなら迷う理由はもうありません。この時点で3時間経ってもまだビルドを続けているJekyllをさっさとctrl + cで停め(ていうか続けとったんかい、涙)、homebrewでGSLを入れ、rb-gsl gemをbundle install。あらためて--lsiオプション付きでビルドをしてみますと、あっという間に完了。その所要時間は2秒と少し! はやwww 入れる前は3時間だったと考えても、1/5000以下の時間で済む計算ですね。これなら超過の心配もなさそうです。

雑に書いたコードでsite.related_postsの内容をチェックしてみても、最新記事と一緒ということはなく、ちゃんと関連してそうな記事を拾ってきてくれてる感じでした。ちなみにコメントアウトして表には出してませんが、その雑なコードで出力した内容は残してあるので、実はソースを確認すると見られます。覗いてみた方(おるんか? 涙)、どうでしょう? うまくいってると思うんですけどね。


という訳で、無事に関連記事の出力ができそうなところまできました。まだマークアップも見た目の調整も一切行ってないので、実際に各ページに反映させるまでにはもう少し時間をいただくかと思いますが、暖かい目で見守っていただけますと幸いです。

現場からは以上です。

  1. 就活しろよ。涙