🍣
Gollum 用のマクロを作る話
前回の記事 で Gollum を使って自宅用の Wiki を構築する話を書きました。今回の記事では Gollum のマクロを作ってみます。
Gollum とは
前回の記事でも書きましたが、Gollum とは Ruby/Sinatra 製の Wiki で、かなりシンプルな作りなのが特徴です。Gollum は GitHub Wiki のエンジンにも使われています。 Gollum は設定ファイル (config.rb
) が Ruby のコードになっており、継承等を使うことで様々な挙動を柔軟かつ容易に設定できます。 実際今回作成する Gollum のマクロも Ruby のクラスを 1 つ定義するだけで作ることもできました。
こういうものを作りました
今回は簡単な例として、YouTube の動画を埋め込むためのマクロを定義しました。具体的には、YouTube の動画ページの URI か動画の ID を記述すると動画を埋め込める様なマクロを定義しました。 例えば <<YouTube(F3589zFsgBo)>>
と記述すると https://www.youtube.com/watch?v=F3589zFsgBo
の動画が埋め込まれます。 動画の開始秒数を指定することも、html 中の URI を少し変更するだけでできるはずですが、今回はやっていません。また、このマクロは 2021 年 6 月現在動作しますが、YouTube の仕様変更などによりそのうち使えなくなると思われます。
作ったもの
具体的には以下の様なマクロを作りました。以下のコードを config.rb
に追加します。大事なことは以下の様になります。
-
Gollum::Macro
の内部クラスとしてGollum::Macro
を継承したクラスを作成する。 - 作成したクラス名をマクロで指定する。
- 実際にマクロが展開される結果は
render
関数の返り値である。
require 'gollum-lib'
module Gollum
class Macro
# Macro to embed a YouTube video
class YouTube < Gollum::Macro
def render(url_or_id, title = 'YouTube video player')
result = url_or_id.match('https://www.youtube.com/watch?v=(.*)')
id = result ? result[1] : url_or_id
size = 'width="560" height="315"'
src = "https://www.youtube.com/embed/#{id}"
allow = 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture'
attribute = "#{size} src=\"#{src}\" title=\"#{title}\" frameborder=\"0\" allow=\"#{allow}\""
"<iframe #{attribute} allowfullscreen></iframe>"
end
end
end
end
感想
これはめっちゃ簡単
Discussion