# CLI・インフラツール：推奨構成

> 作成：2026年9月。前提：PHPは選択肢から除外。個人の既定であり、プロジェクト固有の要件・既存資産・チームの制約と食い違う場合はそちらを優先する。
> バージョン番号は書いていない。採用時は各ツールの最新安定版を確認して使う。料金も記載していないので、各サービスの最新の料金ページで確認する。

前提（既定の条件）：処理の中心＝一般的な処理
案件の条件が前提と違う場合は、下の「条件が違うとき」で該当する行を確認する。

## 推奨：Go
- 単一バイナリで配布しやすく、クロスコンパイルも簡単なGo（§2-9）

## 構成

### 構成（§19-10 をもとに条件に合わせて差し替え）
| レイヤー | 採用 |
|---|---|
| 言語 | Go（Cobra、slog） |
| 配布 | GoReleaser（GitHub Releases、Homebrew tap） |
| 性能が厳しい箇所 | Rust（clap、Tokio） |
| CLI | **Cobra**（差し替え） |
| テスト | **標準 testing ＋ go-cmp**（差し替え） |
| 脆弱性チェック | **govulncheck**（差し替え） |

## 運用の内訳
- 自分で書く：Cobra、log/slog、GoReleaser、clap、Tokio、testing、go-cmp、govulncheck
- マネージドに任せる：GitHub Releases、Homebrew

## 条件が違うとき（既定との差分）
- 処理の中心＝速度・起動時間を詰めたい：推奨が「Rust」になる／構成は言語別の既定から組み立てる：言語＝Rust、CLI＝clap、配布＝cargo-dist、クロスコンパイル＝cargo-zigbuild、テスト＝cargo-nextest、脆弱性チェック＝cargo-audit ／ cargo-deny

## §19-10 インフラツール・CLI

```mermaid

flowchart TB
  SRC["Go ソース"] --> GR["GoReleaser"]
  GR --> GH["GitHub Releases"]
  GR --> HB["Homebrew tap"]
  GR --> CR["コンテナイメージ"]

```

## §26-1 共通の準備

```bash
# 言語・ツールのバージョン固定（使う言語だけ）
mise use node@lts pnpm@latest
mise use go@latest
mise use ruby@latest
mise use python@latest uv@latest

# Gitフックと依存更新
pnpm add -D lefthook && pnpm exec lefthook install
# renovate.json を置き、GitHubでRenovateアプリを有効化する
```

## §26-10 CLI（§19-10）

```bash
go mod init example.com/tool
go get github.com/spf13/cobra
goreleaser init
```

## 次に読む
- §2-9: https://stackbook.kom3da.dev/s/2.md（「### 2-9.」の節）
- §2-2: https://stackbook.kom3da.dev/s/2.md（「### 2-2.」の節）
- §23: https://stackbook.kom3da.dev/s/23.md
- §24: https://stackbook.kom3da.dev/s/24.md
- §25: https://stackbook.kom3da.dev/s/25.md
