Chocolatey を使って任意のインストール先に Hugo をインストールする


### Hugo のインストール方法

OSS のドキュメントを翻訳して公開するにあたり、記事を Markdown で記述し、
スタティックサイトジェネレーター (SSG) である [Hugo](https://gohugo.io/) で HTML に変換することにしました。

Hugo のドキュメント、[Install Hugo](https://gohugo.io/getting-started/installing/) によると、Windows にインストールする場合、
以下の3つの方法があります。

1. [Chocolatey](https://docs.chocolatey.org/en-us/)
2. [Scoop](https://github.com/ScoopInstaller/Scoop)
3. [Hugo Releases](https://github.com/gohugoio/hugo/releases) から Zip ファイルをダウンロードする


自分の場合、使用する Windows に [Node.js](https://nodejs.org/ja/) をインストールしており、インストールの際に、
"Automatically install the necessary tools" をチェックしてインスト―しているため、
Node.js のインストールと同時に、Chocolatey、Python、Visual Studio 2019 Build Tools がインストールされています。

このため、上記 1 の Chocolatey でインストールするか、3 の Zip ファイルを展開してインストールするか、選ぶことにしました。


### Chocolatey による Hugo のインストール

Chocolatey でインストールしたパッケージは、`choco upgrade` コマンドにより簡単に更新することができます。
(ただし、Chocolatey 側でパッケージの更新を行うまでのタイムラグがある場合があります)

自分の場合、デフォルトのインストール先である C ドライブを使用するよりも、開発用に用意した SSD である G ドライブにインストールしたいので、
インストール先を変更できるのであれば、Zip ファイルをダウンロードして展開するよりも、Chocolatey でインストールする方が簡単だと判断しました。

そこで、Chocolatey でインストール先を変更する方法を検索したところ、「環境変数 `ChocolateyInstall` の下の `lib/` にインストールされる」
という記事 (後述の「参考資料」を参照) を見つけ、実際にインストールを行い、実現できるか試すことにしました。
(ただし、記事によると、パッケージによってはインストール先を変更できないそうです)

Hugo を G ドライブの下 ("G:\Hugo") に Chocolatey でインストールする場合、PowreShell のターミナルで、
環境変数 `ChocolateyInstall` に "G:\Hugo" を設定し、choco コマンドを用いて、以下のようにコマンドを実行しました。

```ps1
# Default: ChocolateyInstall = C:\ProgramData\chocolatey
> cd G:
> MkDir Hugo
> cd Hugo
> MkDir lib
> $Env:ChocolateyInstall = "G:\Hugo"
> choco install hugo
> choco install hugo-extended
> tree
G:\HUGO
├─bin
├─config
├─helpers
│  └─functions
├─lib
│  ├─hugo
│  │  └─tools
│  └─hugo-extended
│      └─tools
├─logs
├─redirects
└─tools
```

`$ChocolateyInstall`/lib が存在しないと、choco コマンドでエラーが発生するため、choco コマンド実行前にディレクトリを作成しています。

が、lib ディレクトリの下にインストールされるのではなく、上記 tree コマンドの出力のように、
`$ChocolateyInstall` に設定した "G:\Hugo" の下にインストールされることが分かりました。

この後、Hugo ドキュメントの [Install Hugo](https://gohugo.io/getting-started/installing/) ページ、[For Windows 10 Users:](https://gohugo.io/getting-started/installing/#for-windows-10-users) に書かれている手順により、環境変数 `Path` に "G:\Hugo\bin" を追加します。

具体的には、Windows 10 または Windows 11 の場合、以下の操作を行います。

> スタートボタンの右クリック → システム → システムの詳細設定 → 環境変数 → ユーザー環境変数 `Path` → 編集 → 参照 または 新規でパスを手入力

その後、PowerShell ターミナルを起動し直して、以下のコマンドでインストールされていることを確認します。

```ps1
> which hugo
/g/Hugo/bin/hugo
> hugo version
hugo v0.100.2-d25cb2943fd94ecf781412aeff9682d5dc62e284+extended windows/amd64 BuildDate=2022-06-08T10:25:57Z VendorInfo=gohugoio
```

これにより、目的であった「**Chocolatey を用いて任意の指定先にインストールする**」ことが可能であることが分かりました。



### 参考資料

- [Install Hugo](https://gohugo.io/getting-started/installing/) - Hugo 公式のインストール方法
- [Chocolatey の使い方とインストール手順](https://nodachisoft.com/common/jp/article/jp000012/) - ブログ記事
- [Chocolatey Documents - INSTALL](https://docs.chocolatey.org/en-us/choco/commands/install) - Chocolatey 公式のドキュメント
- [Installing Hugo](https://cloudcannon.com/community/learn/hugo-tutorial/) - CouldCannon のチュートリアル記事



### (補足) Chocolatey の v2.0.0 で非推奨となるコマンド

choco コマンドを実行した際、以下の警告が表示されます。

> **DEPRECATION NOTICE**
> 
> The shims `chocolatey`, `cinst`, `clist`, `cpush`, `cuninst` and `cup` are deprecated.
> We recommend updating all scripts to use their full command equivalent as these will be
> removed in v2.0.0 of Chocolatey.

Chocolatey 関連の日本語記事では、`chocolatey`、`cinst`、`clist`、`cpush`、`cuninst`、`cup` が記載されている場合がありますが、v2.0.0 では使用できなくなるので、注意が必要です。

また、パッケージ更新のコマンドとして、`choco update` を記載している記事を見かけますが、
最新版では `choco upgrade` を代わりに使用する必要があります。



### (余談) QA サイトについて

Chocolatey を使ったインストールで、任意のインストール先を指定する方法を検索していた際、
日本の技術系 QA サイトである [teratail](https://teratail.com/) の下記の記事が検索に表示されました。

- [Chocolatey で任意のインストール先を指定する方法を教えてください。- teratail](https://teratail.com/questions/109872)

本記事を読めば、上記記事の回答が誤りであることが分かりますが、私が teratail で質問した経験から言うと、
teratail で回答する人間の技術レベルは高くないように思います。

今回の記事の場合、下記のブログに目的の情報が掲載されており、実際に自分で確認して、目的を達成することができました。

- [Chocolatey の使い方とインストール手順](https://nodachisoft.com/common/jp/article/jp000012/)

もはや、teratail で質問する気はありませんが、Google で技術情報を検索した際に teratail の記事が結果に現れると、
大抵、記事の内容が間違っているのに気づきます。

QA サイトについては、Qiita に下記のような紹介記事が書かれていますが、自分がこれまで利用してきた体験とは少しずれていると感じます。

- [技術系 Q&A サイトのすゝめ - Qiita](https://qiita.com/yohhoy/items/9fc18aa2e349907ccb16)

そこで、自分が技術情報を検索してきた知見を少し紹介します。

日本語で情報検索して見つからない場合、以下の URL を指定して US 版の Google 検索を用いて情報検索を行っています。

```
https://www.google.com/webhp?gl=us&hl=en&pws=0&gws_rd=cr
```

この Google 検索で検索した場合、本家英語版 の [Stack Overflow](https://stackoverflow.com/) の記事が検索結果に表示されるケースが多く、
また記載された情報に有用な情報が多く含まれているように感じます。

さらに、[Stack Overflow](https://stackoverflow.com/) のような汎用の QA サイトではなく、それぞれのソフトウェアのコミュニティサイトの方が有益な情報が多いと感じます。

これから分かることは、結局、QA サイトは、どれだけその分野に精通した (つまり、技術レベルの高い) 人間がコミュニティに参加しているか、に依存するのではないでしょうか?

残念ながら、これまでの日本のネット上のコミュニティサイト、2チャネル (現 5チャネル)、Yahoo! 知恵袋、Yahoo! ニュースのヤフコメ、は言うに及ばず、
新参の [Quora](https://jp.quora.com/) や [teratail](https://teratail.com/) を含めて、日本でのネットコミュニティのレベルの低さを痛感します。

自分の経験から導き出された言葉としては、「**質問しても役に立つ回答はないから、自分で検索するか、自分で試した方が早い**」と言えそうです。