# システム設定（ヘルスチェック）

## 概要

システムの環境変数・Python パッケージ・外部サーバー・ストレージの状態を一覧表示する管理画面。各機能の稼働に必要な設定が不足していないかを一目で確認できる。

## URL

| ページ | URL | 説明 |
|--------|-----|------|
| システム設定 | `/admin/system-setting` | 管理者専用ヘルスチェック画面 |

## 主な機能

### 1. Python 環境チェック

| 項目 | 説明 |
|------|------|
| Python バージョン | `config('services.python.bin')`（デフォルト: `python3`）のバージョンを表示 |
| パッケージ確認 | `requests`, `numpy`, `anthropic`, `eth_account`, `hyperliquid`, `yfinance` の import 可否を確認 |

各パッケージについて、依存する機能名（Bot、バックテスト、ドンチアン等）を併記。

> **注**: Python バイナリのパスは `env('PYTHON_BIN')` ではなく `config('services.python.bin')` 経由で取得するように変更されました（`config:cache` 対応）。

### 2. 環境変数グループ

以下のカテゴリごとに、必要な環境変数の設定状況を表示:

| カテゴリ | 主な変数 |
|---------|---------|
| AI (Anthropic Claude) | `ANTHROPIC_API_KEY` |
| 仮想通貨 (Hyperliquid) | `HYPERLIQUID_PRIVATE_KEY`, `PYTHON_BIN` |
| 家計簿 (MoneyForward) | `MONEYFORWARD_EMAIL`, `MONEYFORWARD_PASSWORD` |
| 家計簿 (Zaim) | `ZAIM_CONSUMER_KEY` 等 |
| 銀行 (三菱UFJ) | `MUFG_BANK_CLIENT_ID` 等 |
| クレジットカード | 楽天/JCB/セゾン/PayPay の認証情報 |
| 不動産・地図 | `MLIT_REINFOLIB_API_KEY`, `GOOGLE_MAPS_API_KEY` |
| ショッピング | Amazon Creators API, 楽天 API |
| Amazonアソシエイト | `AMAZON_EMAIL`, `INTERNAL_API_TOKEN` 等 |
| SNS (Twitter/X) | `TWITTER_CONSUMER_KEY` 等 |
| 動画・音声 | `VOICEVOX_URL`, `YOUTUBE_API_KEY` |
| Shorts 動画自動生成 | `SHORTS_MAX_DURATION_SEC`, `SHORTS_MIN_DURATION_SEC`, `SHORTS_DEFAULT_DURATION_SEC`, `SHORTS_BGM_DIR`, `SHORTS_REMOTION_DIR`, `SHORTS_DISCORD_WEBHOOK_URL`, `SHORTS_VOICEVOX_SPEAKER_ID` |
| IoT・スマートホーム | `NATURE_REMO_ACCESS_TOKEN` |
| 仕様QA | `CHATWORK_API_TOKEN`, `GITHUB_WEBHOOK_SECRET` |
| LINE WORKS カレンダー | `LINE_WORKS_CLIENT_ID` 等 |
| ソーシャルログイン | LINE/Twitter/Google の OAuth クライアント情報 |
| AI画像生成 | `STABILITY_API_KEY`, `CIVITAI_API_KEY` |
| AWS請求 | `AWS_BILLING_ACCESS_KEY_ID` 等 |

`secret: true` がマークされた変数は「設定済み ✓」のみ表示し、値の一部を露出しない。

### 3. 機能別ステータス

環境変数と Python パッケージの設定状況から、各機能が利用可能かどうかを自動判定。
未設定の変数・パッケージがあれば「不足」として表示。

### 4. 外部サーバーヘルスチェック

| サーバー | URL | 説明 |
|---------|-----|------|
| メルカリ スクレイピングサーバー | `config('services.mercari.server_url')/health` | HTTP タイムアウト3秒で疎通確認 |

### 5. ストレージチェック

以下のディレクトリの存在・書き込み権限を確認:

- `storage/app`
- `storage/app/hl_backtest`
- `storage/app/hl_donchian_backtest`
- `storage/app/crypto_lead_lag`
- `storage/app/amazon_associates`

## ファイル構成

```
app/Http/Controllers/Admin/
└── SystemSettingController.php      # ヘルスチェックロジック

app/Helpers/Core/
└── EnvFileReader.php                # .env ファイル直接パース（admin診断用）

resources/views/admin/
└── system-setting.blade.php         # 管理画面ビュー
```

## EnvFileReader

`App\Helpers\Core\EnvFileReader` は `.env` ファイルを直接パースして値を取得するヘルパークラス。`env()` ヘルパーは `config:cache` 後に動作しないため、「.env に何が書かれているか」を確認したい admin 診断ページで利用する。

| メソッド | 説明 |
|---------|------|
| `EnvFileReader::get(key, default)` | `.env` から指定キーを取得 |
| `EnvFileReader::has(key)` | `.env` に指定キーが書かれていて空でないか |
| `EnvFileReader::all()` | `.env` の全エントリを返す（コメント行スキップ） |
| `EnvFileReader::flush()` | テスト用にキャッシュを破棄 |

> **注意**: 通常のアプリコードでは `config('services.foo.bar')` 等を使い、`env()` は `config/` 配下からのみ呼ぶこと。`EnvFileReader` は admin 診断ページ専用。
