Hugoのサマリ長(Summary Length)

Hugoではトップページの投稿一覧に表示するサマリの長さがデフォルトで70でした.英語の場合は70単語で良いのですが,日本語では70文字になってしまい圧倒的に少なすぎました.先日ようやく最新のMasterにデフォルトのサマリ長を変更するコードがマージされました.

リポジトリから最新バージョンをビルド,インストールし,config.tomlsummaryLength = 200 と指定することで,デフォルトのサマリ長をオーバーライドできます.

Macでのビルド方法は,brewでgoとgovendorをインストールして以下を実行します.

$ mkdir hugo-working; cd huge-working
$ go get github.com/kardianos/govendor
$ govendor get github.com/gohugoio/hugo
$ go install github.com/gohugoio/hugo

これで hugo/bin 以下にバイナリが出来上がります.

$ ./hugo/bin/hugo version
Hugo Static Site Generator v0.30-DEV darwin/amd64 BuildDate: 2017-10-01T12:26:08+09:00

手動でサマリ長を設定する場合の問題点

config.toml で設定した文字数内にプログラミング・コードなどが含まれている場合,サマリは全てのタグをストリップするためおかしな文字の羅列がトップページに現れます.その場合,コードの手前で <!--more--> を挿入するとその部分までをサマリとして抽出します( マニュアル).

しかし,hugoは <section class="post-content"> 内の最初から <!--more--> までのコンテンツを,タグをストリップせずに挿入します.例えばasciidocフォーマットから変換した文書だと post-content クラス以下に preamblesectionbody クラスの div ブロックができますが,これらが </div> で閉じられる前にサマリが終了してしまいます.以下の例は,<p>第1パラグラフ</p> 直後に <!--more--> を挿入した場合,トップページに表示されるサマリ抽出部分です.

<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>第1パラグラフ</p>
</div>

<div class="paragraph"> 以外の div はストリップされるべきなので,Casper themeのサマリ表示部分を以下のように変更しました(layouts/partials/li.html).{{ .Summary | planify }} で常にタグを取り除く処理を実行しています.

<section class="post-excerpt">
        <p>{{ .Summary | plainify }}
        {{ if .Truncated }}
        <a class="read-more" href="{{.RelPermalink}}">.... &raquo;</a>
        {{else}}
        </p>
        {{ end }}
</section>