Jekyll(Liquid)で記事の目次を出力するプラグインを作ってみた

あらすじ

Jekyllのプラグイン作成の練習。エントリから見出しを抽出して目次を出力してみたい。

参考サイト

ソース

まだできてない事

  • 記事中に h1 (#) タグがあるとうまく生成されない
    • 記事タイトルが h1 (#) なので、 h2 (##) 以下の見出しを集めてくるようにしている
  • 目次から記事へのリンク
    • Markdownでは ## <a name="section"> hoge と記載すればnameを振ってくれるようだけど、めんどいので自動で振ってほしい
    • むしろ今はaタグを入れているとレイアウトが崩れる
    • …あれ? 別の環境でやったら hタグに section , section-1 , section-2 … って連番が振られてる!? なんで!

作り方

最小単位はこうなるみたい。(何もしないプラグイン)

module Jekyll
  class SampleTag < Liquid::Tag
    def initialize(tag_name, xxx, tokens)
      super
    end

    def render(context)
    end
  end
end

Liquid::Template.register_tag('sample', Jekyll::SampleTag)

これでMarkdown中に {{ "{% sample hogehoge fuga " }} %} と書くと、initializeメソッドの tag_name にsample、 xxx にhogehoge fuga、 tokens に本文が渡される。

という事でタグにつけた引数や本文を使う場合はinitializeで確保しとく。

renderメソッドでreturnした文字列がそのままページに出力される。

※ 新しくタグを作ったときは、Jekyllを再起動しないと Unknown tag が出続ける。

  • 己のJekyll下の _pluginstree_list.rb を突っ込む
  • html(postするMarkdownファイルでもいいし、テンプレートのhtmlでもいい)のどこかに {{ "{% tree " }} %} を埋め込む
  • $ jekyll --server 実行後localhost:4000にアクセス

これで文中の見出しが目次としてかき集められる。ただし、GitHub Pagesを使っている場合はソースをそのままpushするだけではダメで、対策が必要っぽい。

関連記事(この記事の初版より古い記事はリンクがグレーで表示されます)

  1. 2013/05/23 [Jekyll] [Liquid] [Ruby] 記事の目次を出力するJekyllプラグインの改良
  2. 2012/11/12 [Ruby] [Jekyll] はてなダイアリーのエントリをJekyllへ移行する
  3. 2012/09/21 [Python] [Ruby] [Jekyll] Pygmentsを使ってJekyll内記事のコードハイライトを実現する
  4. 2012/09/20 [Jekyll] [StartUp] [Ruby] JekyllをGitHub Pagesに上げるための準備
  5. 2012/09/14 [Ruby] [StartUp] [Jekyll] JekyllとJekyll Bootstrapでかんたん静的サイト生成…するための準備
  6. 2015/08/06 [Jekyll] [Liquid] Jekyllで出力するタグをソートする 解決編
  7. 2014/04/01 [Ruby] [Jekyll] [イベント] kawasaki.rb #010 で発表してきました #kwskrb
  8. 2014/01/28 [Jekyll] [GitHub] [Ruby] Jekyllプロジェクトへpull requestを行う手順(したとは言っていない)
  9. 2013/09/07 [Ruby] [Git] [Jekyll] Jekyllバージョンアップの際に思いのほか手こずった話 てっく煮さん製プラグインの更新に追従したい編
  10. 2013/08/07 [Ruby] [Jekyll] [Git] Jekyllバージョンアップの際に思いのほか手こずった話 Jekyll Bootstrapの更新に追従したい編
  11. 2013/05/27 [Jekyll] [Ruby] Jekyll@GitHub Pagesの運用形態を変えたのでAnalyticsの設定が効かなくなっていた
  12. 2013/04/11 [Ruby] [Jekyll] Jekyllのバージョンを 0.12.0 にあげた
  13. 2012/12/25 [Ruby] メモ化を知った
  14. 2012/10/01 [Ruby] [Bundle] [Windows] bundle execを省略したいのでバッチを作った(Windows版)
  15. 2012/09/13 [Ruby] [Fluentd] Fluentdの自作プラグインがロードできないのでソースの中身を追ってみる…