Markdown が苦手なことも
Hugo のブログ運営に欠かせないのが Shortcode の仕組みだと思います。
IT エンジニアは、 Markdown を書き出すとこれ一色になってしまって「 Markdown マジ神」みたいになりやすいのですが、シンプルな記法であるため、ちょっと複雑な HTML など、表現できないこともたくさんあるわけです。
プロジェクトのかんたんなドキュメントなら良いかもしれませんが、ブログとなると、ちょっと凝ったレイアウトとかしたいじゃないですか ?
そんなときに、やむを得ず Markdown 中に HTML を書いてしまったりすることもあるとおもうのですが、どちらかというと本末転倒なことですよね。
Shortcode とは
Hugo でそれを解決する仕組みが、 Shortcode です。
その Shortcode は「コンテンツ中にカスタムテンプレートを埋め込むためのスニペット」と公式で説明されています。
要するに
- 使いやすい HTML テンプレートをつくっておいて
- かんたんに呼び出せて
- しかも動的にできる
というシロモノです。
当ブログでも次のような Shortcode を自作して活用しています。
- 画像
- 内部リンク
- 外部リンク
- Amazon アソシエイト
他にも LINE 風フキダシや、Twitter 、 YouTube を埋め込む Shortcode など、活用シーンはとても多いですね。
Shortcode について Hugo 公式はこちらです。
CONTENT MANAGEMENT Shortcodes
https://gohugo.io/content-management/shortcodes/
Shortcode を追加するには
Shortcode は HTML ファイルを作って layouts/shortcodes
に 入れておけば OK です。
ファイル名が test.html
なら test
という Shortcode として呼び出すことができます。
HTML にデザインを当てる場合は、インラインで書かずに別途 CSS を整備しておくと良いですね。
Shortcode のサンプル
サンプルとして、 「ボックスで装飾されたリンク」を追加します。
Markdown でもリンクくらいできる、のですが、CSS をあて見た目を良くしたものを Shortcode 化しています。
Markdown の画像やリンクって覚えられなくて。Shortcode 本体
次の HTML を layouts/shortcodes/entry_card.html
にファイル保存します。
1<div class="entry-card">
2 <a href="{{ .Get "href" }}" target="_blank" rel="noopener noreferrer">
3 {{ if .Get "title" }}
4 <span class="title">{{ .Get "title" }}</span>
5 {{ end }}
6 <span class="url">{{ .Get "href" }}</span>
7 </a>
8</div>
コンテンツの埋め込み
この Shortcode を使ってキャプション付きで画像を差し込む場合、コンテンツの Markdown の中に埋め込みます。
1{{% entry_card
2 title="リンクのサンプル"
3 href="http://example.com/hoge/fuga"
4%}}
出来上がった HTML
これをビルドすると、次の HTML ができました。
1<div class="entry-card">
2 <a href="http://example.com/hoge/fuga" target="_blank" rel="noopener noreferrer">
3
4 <span class="title">リンクのサンプル</span>
5
6 <span class="url">http://example.com/hoge/fuga</span>
7 </a>
8</div>
Shortcode を使おう
エディタによっては Markdown と HTML を混在させるとコードハイライトが変になって目が痛くなっちゃったしますよね。
そして、そもそもが Markdown に HTML を混ぜるのはなんか邪道じゃないですか。
その点、Shortcode はスッキリおさまって、繰り返しのタイプも減るので、活用すると幸せに近づけると思います。