メインコンテンツへスキップ

Hugoのレンダーフックを使ったMermaidの利用

独自構文のテキストから、各種のダイアグラムを生成できるMermaidという便利なライブラリがありますが、現時点ではHugoでサポートされていません。

このため通常、

  • 独自のショートコードを作成する
  • 言語としてmermaidを指定したコードブロックを使用し、mermaidでlanguage-mermaidクラスの要素を変換対象として指定する

などの実装が多かったと思うのですが、公式サイトを調べていたところv0.93.0からサポートされたcodeブロックに対するレンダーフックを用いた例が載っており、よりスマートに実装できそうでした。

ここでは公式サイトのレンダーフックを用いたMermaidの組み込み方法を説明します。

レンダーフックの追加
#

codeブロックに対するレンダーフックを定義するには、

layouts/_default/_markup/render-codeblock-言語名.html

というファイルを作成します。今回ファイル名を、

layouts/_default/_markup/render-codeblock-mermaid.html

とすることで、

```mermaid
flowchart LR
    Start --> Stop
```

というような、言語にmermaidを指定したコードブロックに対してレンダーフックが起動します。レンダーフックの内容は以下の通りです。

<div class="mermaid">
  {{- .Inner | safeHTML }}
</div>
{{ .Page.Store.Set "hasMermaid" true }}
  • <div class="mermaid">でコードブロックの内容を囲む
  • Mermaidの記述があることを表すhasMermaidフラグをtrueにする

テンプレートの修正
#

テンプレートについては、

  • layouts/_default/baseof.html
  • layouts/_default/single.html

など、Mermaidのコンテンツを表示したいテンプレートへ以下の内容を追加します。私の場合、通常エントリでのみ表記できれば良いためsingle.htmlへ追加しました。

{{ if .Page.Store.Get "hasMermaid" }}
  <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
  <script>
    mermaid.initialize({ startOnLoad: true });
  </script>
{{ end }}

このコードはhasMermaidフラグがtrueの場合のみ、MermaidのJavascscript読み込みと初期化を行います。これにより、Mermaidの記述がないページではコードが展開されずムダな処理を抑止できるわけです。

上記処理をテンプレートへ追記する場合の注意点としては、.Contentが出現する箇所より下へ書く必要があるということです。Hugoでは.Contentが実行(評価)されるまではレンダーフックは処理されないためです。

参考サイト
#

関連記事

Hugoで写真をリサイズしExif情報を表示する

以下のページを参考にして、Hugoで写真のリサイズとExif情報を表示するためのshortcodeを書いた。 Displaying Exif Tags with Hugo このShortcodeは画像をページリソースとして扱うことを前提にしているので注意が必要(static/imagesなどにおいてある画像には適用できない) Page Resources | Hugo GRのシャッタースピードが小数点表示されてる。ちょっと、まじめにExifを調べないとだめかな…

Kindle for Macの情報を使って蔵書一覧を作成する

Kindleで持っている本の一覧が欲しくなり方法を調べたところ、そのものズバリの情報があった。 Kindle蔵書一覧を取得する方法 - Qiita このページでは、以下の3つの方法が紹介されている。 コンテンツと端末の管理ページからスクレイピングする Kindle Cloud Readerが使っているWeb SQL Databaseのクライアント側のDBからそのまま取得する Kindle for PC(Kindle for Mac)で生成されるXMLを参照する いちばんお手軽そうな2.を試してみたが、自分の環境ではうまく動作しなかったため、3.のXMLをパースして蔵書一覧をCSVで出力するスクリプトを書いた。 出力されたCSVを眺めてみると、 最初に買ったKindle本は、2011年11月のThe Rails 3 Wayだった 所有情報は存在するが、読めなくなっている本があるようだ XML上はASINのみ出力され、書籍名は—などとなっており、どの本が読めなくなったのかわからない トータル1035冊あった Kindle Unlimitedで読んでいる本はXMLに出力されない などがわかり、なかなかおもしろかった。 Kindle for Macが生成するXMLからは、 ASIN 書籍名 著者 出版社 出版日 購入日 を取れるっぽいが、これに図書分類コード的なものがあれば、ジャンル別に分類したりもできたんだけどね。

ワーキングメモリを鍛えて脳の働きを強化するための4つの方法

先日のエントリで取り上げたワーキングメモリですが、当然のことながら容量には個人差があり、心理学者のArt Markman博士によると容量が大きくなればなるほど、クリエイティブなアイデアが生まれる容量も増えるとのことです。 そうなってくると、ワーキングメモリの容量を増やす方法は無いのか?と思いますよね。 ということで少し調べてみました。 ワーキングメモリを鍛える方法 # 1.料理をする # 野菜を切る場合ピーラーやスライサーは使わず包丁で。市販のドレッシングを使うのではなく、手作りで調味料をあわせるなど。便利な調理グッズは使わず、昔ながらの方法で、ということですね。 2.スロージョギング # 5km/h程度で背筋を伸ばし、あごを少しあげて前傾姿勢で。着地はかかとからではなく、足の裏の前の方から着地することを意識して笑顔で走ると良いそうです。 3.読書量を増やす # 読んでいるものの理解を深めて読解力を身につける。一時的な記憶でもいいので、すべての文章をあとで思い出せるようにする。 4.聴覚と視覚を同時に使う練習をする # Nバック課題という聴覚と視覚を同時に使う練習をする。Brain Workshop — a Dual N-Back gameという無料で試せるゲームがあるそうです。 労働政策研究・研修機構(JILPT)の長縄久生氏によると、ワーキングメモリは加齢の影響を受けやすいということがわかっているそうです。少しでも長く健康な脳をキープしていきたいですね! 参考サイト # 物忘れよさようなら|NHK あさイチ クリエイティブなアイデアが出やすくなる、ワーキングメモリを鍛える方法 : ライフハッカー[日本版] 独立行政法人 労働政策研究・研修機構/コラム/ワーキングメモリと中高年