ローカルマシンでDapr Docsを動作させる手順

# はじめに

本記事では、分散アプリケーションランタイム「[Dapr](https://dapr.io/)」の公式ドキュメントサイト「[Dapr Docs](https://docs.dapr.io/)」をローカルで動作させる手順を紹介します。

Dapr Docsは、静的サイトジェネレーター「[Hugo](https://gohugo.io/)」で作成されており、公式サイトは「[Azure Static Web App](https://docs.microsoft.com/ja-jp/azure/static-web-apps/overview)」上にデプロイされて動作しています。

ドキュメントコンテンツは、GitHubの「[dapr/docs](https://github.com/dapr/docs)」で公開されています。セットアップ手順は [README.md](https://github.com/dapr/docs/blob/v1.4/README.md) に記載されており、本記事もこれをベースとして私がハマった点などを交えています。

# 実行環境

macOS Big Sur バージョン 11.6 で動作確認しました。

# 対象ドキュメントコンテンツ

2021年9月24日時点において最新版のデフォルトブランチである [v1.4](https://github.com/dapr/docs/tree/v1.4) を使用します。

# 前準備

「Hugo」とJavaScriptエンジン「[Node.js](https://nodejs.org/ja/)」をインストールします。

## Hugo

Hugoは、standard版ではなく、Sass/SCSSに対応したextended版をインストールする必要があります。

私はGitHubのHugoのReleasesから最新版の実行バイナリーをダウンロードしました。

https://github.com/gohugoio/hugo/releases

本記事執筆時の最新版はv0.88.1で、ダウンロードしたファイルは「hugo_**extended**_0.88.1_macOS-64bit.tar.gz」です。extended版は少し下の方にあり、ファイル名に"extended"が含まれています。任意の場所に展開してください。

## Node.js

Node.jsは、LTS版でもCurrent版でも大丈夫です。この後の作業で警告を出したくない場合は、Current版をインストールしておきます。

私は公式サイトのダウンロードページからCurrent版の実行バイナリーをダウンロードしました。

https://nodejs.org/en/download/current/

本記事執筆時の最新版はv16.10.0で、ダウンロードしたファイルは「node-v16.10.0-darwin-x64.tar.gz」です。任意の場所に展開してください。

# セットアップ

ターミナルにて、配置したい任意のディレクトリーを作成した後、カレントを移動します。

```zsh
% mkdir go/src/github.com/dapr
% cd go/src/github.com/dapr
```

`git clone` コマンドにて、GitHubからドキュメントコンテンツを取得します。

```zsh
% git clone https://github.com/dapr/docs.git
```

取得が完了したら、カレントを `doc/daprdocs` に移動します。

```zsh
% cd ./docs/daprdocs
```

`git submodule` コマンドにて、ドキュメントコンテンツ内のサブモジュールを取得します。少し時間がかかります。

```zsh
% git submodule update --init --recursive
```

最後に、必要なnpmパッケージを取得します。

```zsh
% npm install
```

LTS版のNode.jsの場合、ここで警告が表示されます。この後、起動は出来ますので問題ありません。

```
% npm install
npm WARN dapr-docs-hugo@0.0.1 No license field.
npm WARN The package autoprefixer is included as both a dev and production dependency.

added 109 packages from 112 contributors and audited 109 packages in 2.651s

16 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
```

Current版のNode.jsの場合、`package-lock.json` の内容が最新版に書き換えられた後、正常終了します。

```zsh
% npm install
npm WARN old lockfile 
npm WARN old lockfile The package-lock.json file was created with an old version of npm,
npm WARN old lockfile so supplemental metadata must be fetched from the registry.
npm WARN old lockfile 
npm WARN old lockfile This is a one-time fix-up, please be patient...
npm WARN old lockfile 

up to date, audited 110 packages in 2s

16 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
```

# ローカルで起動

ディレクトリーはカレントのままで、`hugo` をサーバー起動します。

```zsh
% hugo server
```

起動に成功すると、以下のメッセージが表示されます。

```zsh
% hugo server
Start building sites … 
hugo v0.88.1-5BC54738+extended darwin/amd64 BuildDate=2021-09-04T09:39:19Z VendorInfo=gohugoio

                   | EN  | ZH-HANS  
-------------------+-----+----------
  Pages            | 423 |     375  
  Paginator pages  |   0 |       0  
  Non-page files   |   0 |       0  
  Static files     | 190 |     190  
  Processed images |   0 |       0  
  Aliases          | 106 |      86  
  Sitemaps         |   2 |       1  
  Cleaned          |   0 |       0  

Built in 5704 ms
Watching for changes in /Users/[ユーザー名]/go/src/github.com/dapr/docs/{daprdocs,sdkdocs,translations}
Watching for config changes in /Users/[ユーザー名]/go/src/github.com/dapr/docs/daprdocs/config.toml, /Users/[ユーザー名]/go/src/github.com/dapr/docs/daprdocs/themes/docsy/config.toml
Environment: "development"
Serving pages from memory
Web Server is available at http://localhost:1313/ (bind address 127.0.0.1)
Press Ctrl+C to stop
```

macOSの場合、ここでエラー「fatal error: pipe failed」が発生する場合があります。

これは、テーマとして採用している「[Docsy](https://www.docsy.dev/)」に起因するエラーの模様です。以下の２つの方法で回避できるようなので、上から軽い順に試してみてください。（私は１.の方法での確認を忘れていて、２.の方法を実行して成功してしまいました。）（2021年10月3日 １.の方法で成功しました。）

１. Hugoのファイルシステム変更監視を無効（false）にして、起動します。

```zsh
% hugo server --watch=false
```

２. macOSが扱うことができるファイル数を増加させた後、起動します。

```zsh
% sudo launchctl limit maxfiles 65535 200000
% ulimit -n 65535
% sudo sysctl -w kern.maxfiles=200000
% sudo sysctl -w kern.maxfilesperproc=65535

% hugo server
```

２. については、Docsyのサイトにも既知の問題として紹介されています。

- 参考：[Docsy - Getting Started - Known issues - MacOS](https://www.docsy.dev/docs/getting-started/#macos-1)

`maxfiles` の設定値はmacOSを再起動すると初期化されるようですが、私の場合は再起動後に `hugo server` を実行すると何故かエラーが出なくなりました。

# 動作確認

Webブラウザーにて「 http://localhost:1313/ 」 にアクセスすると、ローカル起動したDapr Docsを閲覧できます。

ターミナルで `[control]+[C]` のキーを押すと、停止します。

# さいごに

当初は上手く行かず、Hugoの最新版（v0.89.0）の[ソースコード](https://github.com/gohugoio/hugo)をGo １.17.1と1.16.8でコンパイルして試してみたり、Releasesの実行バイナリーのバージョンを一つずつ下げて試したりしました。

`kern.maxfiles` を試すのに0を設定してしまい、画面上のアプリが目の前で一つずつフリーズしていった時は焦りましたが、幸いにもmasOSの再起動で初期値に戻ったのでことなきを得ました。

ローカル起動なのでページ遷移などが速くて気持ち良いですね。これで日本語化へ挑戦する準備が整いました。