# 管理者用環境構築手順 (Administrator Setup)

プロジェクト作成時に **一度だけ** 行う初期設定．

## GitHub リポジトリの作成 (Repository Creation)

private リポジトリとして作成する（臨床データは含めないが，研究途中のコードを公開しないため）．

```bash
gh repo create rintoHasegawa/TIASJudgeModel --private --source=. --remote=origin \
  --description "舌画像から舌色 5 分類を推定する機械学習モデル（TIASjudge 用）"
```

## リポジトリのセキュリティ設定 (Repository Security Settings)

Dependabot alerts（脆弱性検出）と Dependabot security updates は**リポジトリごとに既定で OFF** なので，作成直後に有効化する（冪等なので再実行してよい）．

```bash
gh api -X PUT repos/rintoHasegawa/TIASJudgeModel/vulnerability-alerts
gh api -X PUT repos/rintoHasegawa/TIASJudgeModel/automated-security-fixes
```

検証:

```bash
gh api repos/rintoHasegawa/TIASJudgeModel/vulnerability-alerts       # 204 なら有効（404 なら無効）
gh api repos/rintoHasegawa/TIASJudgeModel/automated-security-fixes   # {"enabled":true,...} なら有効
```

※ 依存バージョンの定期更新は `.github/dependabot.yml` で設定する（別物．リポジトリ設定とは独立に動く）．

## Newton 側の初期設定 (Server Setup)

```bash
mkdir -p ~/work/TIASJudgeModel        # コード置き場（push で上書きされる）
mkdir -p ~/data/TIASJudgeModel        # データ置き場（push の対象外）
chmod 700 ~/data/TIASJudgeModel       # 共用サーバなので自分だけに絞る
```

コードを初回送信したあと，サーバ上で以下を確認する．

```bash
cd ~/work/TIASJudgeModel
uv sync
uv run python -c "import torch; print(torch.cuda.is_available(), torch.cuda.device_count())"
```

`uv sync` は CUDA 版 PyTorch が入るため時間がかかる．`True` と GPU 台数が出ることを確認する．`False` の場合は [ENV_01「CPU / GPU の依存差」](ENV_01_技術スタック.md)に従う．

## 臨床データの初回コピー (Initial Data Copy)

原本は研究室 PC に置き，**研究室 LAN 内で Newton へ一度だけコピーする**．手元 PC を経由させない．

### 原本の置き場所 (Source Location)

```text
C:\Users\Papin\clinical-data\TIASJudgeModel\
```

ラベルごとの 9 フォルダに PNG が直置きされている（内訳は [TEST_01 データセット構成調査](../06_TEST/TEST_01_データセット構成調査.md)）．

> ⚠ **研究室 PC では「ドキュメント」フォルダが OneDrive（`OneDrive - 千葉大学`）にリダイレクトされている**．臨床データをドキュメント・デスクトップ配下に置くとクラウドへ同期されるため置かない．上記のプロファイル直下の独自フォルダは同期対象外である．

### フォルダ名の対応 (Folder Mapping)

日本語フォルダ名をそのまま転送すると Windows（CP932）と Linux（UTF-8）の文字コード差で名前が壊れるため，**ASCII のスラッグ名に対応付けて**コピーする．

| 研究室 PC のフォルダ | サーバ上のディレクトリ |
| --- | --- |
| `淡紅（正常）` | `images/light_red_normal` |
| `暗赤紅＿あり` | `images/dark_red_strong` |
| `暗赤紅＿ややあり` | `images/dark_red_mild` |
| `紫＿あり` | `images/purple_strong` |
| `紫＿ややあり` | `images/purple_mild` |
| `紅＿あり` | `images/red_strong` |
| `紅＿ややあり` | `images/red_mild` |
| `淡白＿あり` | `images/pale_strong` |
| `淡白＿ややあり` | `images/pale_mild` |

### 手順 (Procedure)

1. 研究室 PC で作業する（**`hostname` で研究室 PC であることを確かめてから実行する**）
2. PowerShell で以下を実行する（対応表どおりに 9 フォルダを転送する）

   ```powershell
   $src = "C:\Users\Papin\clinical-data\TIASJudgeModel"
   $dst = "hasegawa@192.168.23.14:~/data/TIASJudgeModel/images"
   $map = @{
     "淡紅（正常）"     = "light_red_normal"
     "暗赤紅＿あり"     = "dark_red_strong"
     "暗赤紅＿ややあり" = "dark_red_mild"
     "紫＿あり"         = "purple_strong"
     "紫＿ややあり"     = "purple_mild"
     "紅＿あり"         = "red_strong"
     "紅＿ややあり"     = "red_mild"
     "淡白＿あり"       = "pale_strong"
     "淡白＿ややあり"   = "pale_mild"
   }
   ssh hasegawa@192.168.23.14 "mkdir -p ~/data/TIASJudgeModel/images"
   foreach ($k in $map.Keys) {
     ssh hasegawa@192.168.23.14 "mkdir -p ~/data/TIASJudgeModel/images/$($map[$k])"
     scp "$src\$k\*.png" "$dst/$($map[$k])/"
   }
   ```

3. コピー後に件数を突き合わせる

   ```powershell
   (Get-ChildItem -LiteralPath $src -Recurse -File).Count   # 研究室 PC 側（1085 の見込み）
   ssh hasegawa@192.168.23.14 "find ~/data/TIASJudgeModel/images -type f | wc -l"
   ```

4. 原本は研究室 PC に残す（Newton 側は作業用コピー）

以降は再転送しない．データセットの内容確認（枚数・クラス分布・破損チェック）はサーバ上のコマンドで行い，**集計結果のみ**を手元で見る．

※ 研究室 PC から Newton への鍵が未登録の場合はパスワードを求められる．

## 学外アクセス用の踏み台 (Off-campus Access)

研究室 PC を ProxyJump の踏み台にする設定は SmTIAS-LightSim で構築済みのため，本プロジェクトでの追加作業は不要（未設定の場合は同プロジェクトの `docs/02_ENV/ENV_02_環境構築手順.md`「学外から接続する（研究室 PC 経由）」に従う）．

## 人間が確認すべき事項 (Human Checklist)

Claude は実施できない．着手前に確認する．

- 臨床データの倫理審査・データ利用許諾の範囲（機械学習での二次利用が含まれるか）
- データを研究室の共用計算サーバに置くことが規程上許容されるか
- 研究室 PC で SSH サーバを動かすことが研究室のルールに照らして問題ないか
