2020-05-31

5/31

DocsyでGoogleカスタム検索エンジンを使う

そろそろLunr.jsに限界を感じてきたので、導入する。
具体的には「k8s」や「k9s」などが検索でヒットしない。

やり方は公式ドキュメントのNavigation and Search | Docsyの通り。

  1. https://cse.google.com/cse/all にアクセスし、新しい検索エンジンを追加。
    • 対象は「progrhy.me/tech-notes/*」
  2. オプションの設定
    • 「デザイン > レイアウト」で「結果のみ」を選ぶ
    • 「検索機能 > 詳細設定 > ウェブ検索の設定」で、「リンクターゲット」を「_parent」にする。これで現在のタブで(新しいタブを開かずに)検索結果に遷移できる
  3. config.toml 編集
    • params.gcs_engine_id に作成した検索エンジンのIDを設定
    • params.offlineSearch = false として、Lunr.jsを無効化

ローカルではLunr.jsを使う

カスタム検索エンジンを使うと当然 https://progrhy.me/tech-notes/ に遷移してしまうので、ローカル作業時はLunr.jsの方が都合が良い。

Hugoで、オプションによって設定を切替える方法について調べてHugo#Configurationに記した。

初め、環境変数で以下を指定してやろうとした:

export HUGO_PARAMS_GCS_ENGINE_ID=
export HUGO_PARAMS_OFFLINESEARCH=true

試したところ、 offlineSearch = true は設定できたようだが、 gcs_engine_id の指定を無効化することはできなかった。
config.tomlではコメントアウトしておいて、公開サイトビルド時に環境変数で gcs_engine_id を設定するやり方も考えられるが、バグったときに面倒なので、CIの設定はなるべく変えたくない。

同じページ(Hugoのドキュメント)を見ていたところ、 hugo --config a.toml,b.toml のように設定ファイルを複数指定できることに気がついたので、下のような config-local.toml を用意した:

[params]
gcs_engine_id = ""
offlineSearch = true

…で、ローカルでは hugo server --config config.toml,config-local.toml と指定してサーバを起動するようにしたら、上手く行った。

ちなみに、こんなの毎回打ってられないので、少し前からラッパースクリプトを使っていて、 HUGO_CONFIG=config.toml,config-local.toml とシェル変数を設定ファイルに書いて読み込ませて対応している。

--config オプションを使わなくてもよかった

Hugoには所定のディレクトリに設定ファイルを配置すると、コンテキストに基づいて設定ファイルを読み込んでマージしてくれる機能があると知った。
やり方はHugo#Configuration-ディレクトリ構成に記した。

hugo server ではデフォルトで development で起動するので、 config-local.tomlconfig/development/config.toml に移動することで、 --config オプション無しでも読み込んでくれるようになった。

新しいGoogle Search ConsoleでURLの再クロールをGoogleにリクエスト

https://search.google.com/search-console

最近全然使ってなかったから、いつ変わったのかわからないけど、Search ConsoleがスタイリッシュなUIに生まれ変わっていた。

URLの再クロールの依頼方法がわからなかったが、ググったらヘルプページが見つかった:

そして見つけた時には既にサイトマップを送信済みだった。

(追記)

なぜかページの古い状態がキャッシュ(?)に残ってるっぽくて、アーカイブ済みのメモページにヒットすると404になったりすることがしばし。

GolangのCLIパッケージを改めて探した

たぶん3〜4年ぶりぐらいかな。
高機能なものは相変わらず下の2つが強そう:

サブコマンドやフラグに対応しており、だいたいできないことはなさそう。

jessevdk/go-flags

もう少し軽量な感じのだと以前は https://github.com/jessevdk/go-flags というのが人気だったのだが、2年前で更新が止まっている。
go.mod がないのでGo Modulesにも対応してないみたい。
いま使うのはちょっとイマイチかも?

spf13/pflag

その代わりになるかわからないが、 https://github.com/spf13/pflag というのを見つけた。
これも標準パッケージの flag の強化版で、ショートオプションを簡単に加えられたり、GNUスタイルの --help のようなロングオプションを追加できる。

flagの拡張版のようで、サブコマンドにも対応できるようだ。

参考:

google/subcommands

サブコマンドで行くと https://github.com/google/subcommands というのも見つけた。
これも依存がなくてシンプルのようだが、README読んだだけだと、使い方がイマイチわからん。

検索したり、 pkg.go.dev で使っているコードを探して見たりした。

フラグにも対応しており、いい感じにヘルプが生成できたりと、シンプルだけど必要十分な機能がまとまってるっぽい雰囲気を感じる。

posener/cmd

posener/cmd: The standard library flag package with its missing features

これはAwesome Goから気になって開いて見た。
17 starsしかないが、google/subcommands相当のことはできそうで、google/subcommandsよりドキュメントがわかりやすい。