zxell.ai
開発記録 / review02
この記録は、プロジェクトの作業報告(報告 → アーキテクトの回答)を公開用に編集したものです。サーバ運用・セキュリティに関わる部分を省略しています(編集方針)。

review02: サーバ改修(フェーズ2着手分)の報告と確認事項

作成日: 2026-08-10 対象: zxell-main/zxell_server(ロードマップ 3.6「サーバ実装の改修方針」8 項目に対応)


1. 実施内容

roadmapplanning.md 3.6 の表の全項目、および 3.3 の API 案に沿って zxell_server を全面改修した。

#3.6 の改修方針実施内容
1本文はシャードへ、DB はメタデータのみTrainingData(記事 1 件=1 タスク)を廃止。タスクは type + payload(シャード名・基準重みバージョン・ローカルステップ数 H)を持つ汎用構造に。シャード実体は ZXELL_STORAGE_DIR/shards/ に置き GET /api/shards/{name} で配布
2リース期限+自動再キューGET /api/tasks/next はリース期限付き払い出し(既定 1 時間、ZXELL_LEASE_SECONDS)。期限切れは自動で pending に戻り、規定回数(max_attempts、既定 3)超過で failed
3結果の永続化POST /api/results で results テーブルに永続化。metrics(JSON)と成果物ファイル(Δ 等、multipart)を受領。Δ はストレージに保存しパスを記録
4認証クライアント登録制(POST /api/clients/register で API キー発行)+全クライアント API で X-API-Key 必須。管理系 API(タスク投入・重み登録)は X-Admin-Key
5DB 接続情報の環境変数化pydantic-settings 導入。ZXELL_DB_URL 等の環境変数 / .env で設定(メモにあった ZXELL_DB_URL がそのまま使える)
6Pydantic v2 移行orm_mode → from_attributes。requirements.txt をサーバ実機(Python 3.8)で動作確認済みの版に固定
7重み配布weight_versions テーブルでバージョン管理(checksum・サイズ付き)。POST /api/weights(管理)で登録、GET /api/weights/latest / GET /api/weights/{version}/download で配布
8排他払い出しSELECT ... FOR UPDATE SKIP LOCKED による二重払い出し防止(PostgreSQL 9.5+ で動作。実機の PG10 で問題なし)

その他:

2. 確認事項

  1. 旧データの有無: 実機の zxell_db に旧 training_data テーブルへ投入済みのデータはありますか。新コードは旧テーブルを参照しない(残っていても無害)ため、データが無ければ対応不要です。あれば移行スクリプトを用意します。
アーキテクト回答データはありません。
省略: 確認事項 2(作業環境の移行)
  1. クライアント登録の方式: 現状 POST /api/clients/register は誰でも呼べます(同一 LAN・closed 運用前提の最小構成)。登録自体にも管理キーを必須にしますか。 → 当面 LAN 内運用なら現状案で十分と考えますが、外部公開の予定が早まるなら承認制にします。
アーキテクト回答Web自体はLAN外からもアクセスできると思うので、承認制にしてください。
  1. /api/status の公開範囲: ダッシュボード用に認証なしとしています(クライアント名・稼働状況が見える)。LAN 内運用なら問題ないはずですが、認証を掛けるか確認させてください。
アーキテクト回答Web自体はLAN外からもアクセスできると思うので、認証を掛けてください。
省略: 確認事項 5〜7(ストレージの場所、サーバ OS の更新、コーパスの所在と形式)
  1. クライアント実装の置き場所: クライアント(zxell-client、PyTorch ベース)は同一リポジトリ内 zxell_client/ に置く想定でよいですか(別リポジトリにする案もあり)。 → 当面はモノレポ(同一リポジトリ)を推奨します。サーバとスキーマを共有しやすいため。
アーキテクト回答同一リポジトリ内 zxell_client/ に置く想定でよいです。

3. 次の作業予定(確認待ちの間に着手可能なもの)

← review01目次review03 →