Lan's note

高速HUGOブログで脱WordPress!静的ブログでもココまでできるを実証中!

2020-02-25

【解決】HUGOのテーマをacademicに変えたらパーマリンクの濁点・半濁点に不具合が生じたので暫定的対処

解決(2020/03/05追記)

/config/_default/config.toml

removePathAccents = false

設定ファイルのremovePathAccentsの設定値をtrueからfalseにすることで濁点・半濁点のあるURLが正常に処理されるようになりました。

以下、解決策までの過程を書き残しておきます。

(追記ここまで)

HUGOブログのテーマを最も利用されているacademicに変更したら、カテゴリページやタグページURLの日本語の濁音・半濁音がバグってしまいました。

不具合例

カテゴリ名:/categories/ブログ → URL:/categories/フロク

その結果、カテゴリページやタグページへのリンク切れが発生してしまします。

academicテーマを導入するにあたり、HUGOをExtended版に変更する必要があったので、これが原因なのでしょうか?

(標準のHUGOではパーマリンクの文字化けは起こりませんでした。)

原因と対処法を探ってみるもわからないため、暫定的にhugoコマンド後、正常な濁点・半濁点付きURLに修正するスクリプトを作成しました。

Golangでカテゴリ・タグフォルダ名を修正

HUGOではカテゴリページは/public/categoriesに、タグページは/public/tagsに格納されます。

この2つのディレクトリに含まれているフォルダ名をGolang(Go言語)で正しく修正します。

Golangで書く必要は全くありませんが、現在、Golangでプログラムを書くことが多いため今回もGolangで行います。

Golang 濁点・半濁点修正プログラムコード

package main

import (
    "fmt"
    "os"
)

func main() {

	// カテゴリ名修正
    ct1 := []string{
		"lineオーフンチャット検索",
		"アフリ",
		"アフリの素",
		"スホーツ",
		"ナレッシ",
		"まちかとしゃんけん",
		"めさまししゃんけん",
	}
	ct2 := []string{
		"lineオープンチャット検索",
		"アプリ",
		"アプリの素",
		"スポーツ",
		"ナレッジ",
		"まちかどじゃんけん",
		"めざましじゃんけん",
	}

	for i, cat := range ct1 {
		if err := os.Rename("/home/DocumentRoot/HUGOルート/public/categories/" + cat, "/home/DocumentRoot/HUGOルート/public/categories/" + ct2[i]); err != nil {
        	fmt.Println(err)
    	}
	}

    // タグ名修正
	tg1 := []string{
		"301リタイレクト",
		"dnsサーハー",
		"アトセンス",
		"インスタクラム埋め込み",
		"カスタマイス",
	}
	tg2 := []string{
		"301リダイレクト",
		"dnsサーバー",
		"アドセンス",
		"インスタグラム埋め込み",
		"カスタマイズ",
	}

	for i, tag := range tg1 {
		if err := os.Rename("/home/HUGOルート/public/tags/" + tag, "/home/HUGOルート/public/tags/" + tg2[i]); err != nil {
        	fmt.Println(err)
    	}
	}
}

特に難しいことはしてなく、濁点・半濁点抜きで生成されてしまうフォルダ名を濁点・半濁点付きにリネームしているだけです。

新しいカテゴリやタグが出るたびに上記の配列に追記しなければいけませんが、そうそう濁点・半濁点付きのカテゴリやタグは出てこないと思いますので、よしとします。

スクリプトの作成

HUGOのビルドの度上記のGoプログラムを実行するのも面倒なので、スクリプトを作成します。

hugo-deploy.sh

#!/bin/sh
cd /home/DocumentRoot/HUGOルート; hugo --minify;
cd /home/上記Goプログラム設置ディレクトリ; go run main.go;

こんな感じでhugoコマンド実行後、フォルダ名修正プログラムを走らせるスクリプトを作ります。

追記

すでに濁点・半濁点の欠けたディレクトリと正常な日本語ディレクトリが混在すると不具合のもとになりますので、hugoコマンド実行前にcategoriesディレクトリとtagsディレクトリを削除するプログラムを追加します。

package main

import (
    "fmt"
    "os"
)

func main() {
    if err := os.RemoveAll("/home/HUGOルート/public/categories/"); err != nil {
        fmt.Println(err)
	}
	if err := os.RemoveAll("/home/HUGOルート/public/tags/"); err != nil {
        fmt.Println(err)
    }
}

hugo-deploy.sh

#!/bin/sh
cd /home/ディレクトリ削除Goプログラム設置ディレクトリ; go run main.go;
cd /home/HUGOルート; hugo --minify;
cd /home/ディレクトリ名変更Goプログラム設置ディレクトリ; go run main.go;

まとめ

正しい解決方法があるとは思うのですが、今回は半自動で濁点・半濁点文字に変換する処理を作ってみました。

この件に関する記事が少ないため、皆さん不具合は起きていないのでしょうか?

同じ悩みで困っている人がいらっしゃれば、その一助になれば幸いです。