ML Documentation

開発ワークフロー

概要

このプロジェクトでは、本番環境と開発環境を明確に分離し、効率的な開発を実現しています。

環境構成

本番モード

開発モード(docker-compose.override.yml)

主要コマンド

基本的な起動方法

# 本番モード(最適化バイナリ)
make hyperliquid

# 開発モード(ホットリロード)
make hyperliquid-dev

# ログの確認
make logs-hyperliquid      # 本番モード
make logs-hyperliquid-dev  # 開発モード

Web開発

# ホットリロード付きWeb開発
make dev-web

# Webモニターのみ再起動
make restart-web

テスト実行

重要: RustのテストはすべてDocker環境で実行する必要があります。これにより、環境の一貫性が保たれ、依存関係の問題を回避できます。

# 全テスト実行(Docker経由)
make test  # または make rust-test

# コンポーネント別テスト
make test-consumer  # hyperliquid-consumerのテストのみ
make test-crawler   # hyperliquid-crawlerのテストのみ
make test-config    # configモジュールのテストのみ

# テストコンテナのクリーンアップ
make test-clean

注意事項:
- sccacheは依存関係の問題により削除されました
- テスト実行時はdocker-compose.override.ymlの存在に注意してください
- 環境変数のテストは既存の設定に影響されないよう、保存と復元を行っています
- ローカル環境での直接実行は推奨されません(環境変数の競合やビルド依存関係の問題が発生する可能性があります)

docker-compose.override.yml の仕組み

このファイルは自動的にdocker-compose.ymlとマージされ、開発時の設定を提供します:

  1. ソースコードマウント: ./src/rust:/app
  2. キャッシュ永続化: cargo registryとビルドキャッシュ
  3. 開発プロファイル: --profile devで明示的に有効化
services:
  hyperliquid-crawler-dev:
    extends:
      file: docker-compose.yml  # 明示的にファイルを指定
      service: hyperliquid-crawler
    build:
      target: dev  # 開発ステージを使用
    volumes:
      - ./src/rust:/app
      - rust-cache:/cache
      - cargo-registry:/usr/local/cargo/registry
    command: ["cargo", "run", "--bin", "hyperliquid-crawler"]
    profiles:
      - dev

開発フロー

1. 初回セットアップ

# 環境準備
cp .env.example .env
make setup

2. 開発サイクル

# 開発モードで起動
make hyperliquid-dev

# 別ターミナルでログ監視
make logs-hyperliquid-dev

# コード編集後、コンテナ内で再ビルド
# (ソースコードがマウントされているため、変更は即座に反映)

3. テスト実行

# 変更をテスト
make test-consumer  # または test-crawler

# 本番ビルドの確認
make rust-build

4. 本番モードで動作確認

# 開発モードを停止
make stop-hyperliquid

# 本番モードで起動
make hyperliquid
make logs-hyperliquid

トラブルシューティング

キャッシュのクリア

# Rustビルドキャッシュをクリア
docker volume rm crypto-ws-crawler_rust-cache
docker volume rm crypto-ws-crawler_cargo-registry

サービスの完全リセット

make clean  # 全ボリューム削除
make setup  # 再セットアップ

パフォーマンス比較

モード 起動時間 ビルド時間 パフォーマンス
本番 高速 事前ビルド 最高(最適化済み)
開発 遅い 実行時 良好(デバッグ情報付き)

デバッグ方法

ログレベルの調整

# 環境変数でログレベルを設定
RUST_LOG=debug make hyperliquid-dev

# 特定モジュールのみデバッグ
RUST_LOG=hyperliquid_crawler::crawler=debug,hyperliquid_consumer=info make hyperliquid-dev

コンテナ内での直接操作

# 開発コンテナにシェルでアクセス
docker exec -it crypto-ws-crawler-hyperliquid-crawler-dev-1 bash

# コンテナ内でのコマンド例
cd /app/hyperliquid-crawler
cargo build
cargo test
RUST_LOG=debug cargo run

リアルタイムデバッグ

# コンテナ内で cargo-watch を使用(自動再実行)
docker exec -it crypto-ws-crawler-hyperliquid-consumer-dev-1 bash -c \
  "cargo install cargo-watch && cargo watch -x 'run --bin hyperliquid-consumer'"

よくある開発シナリオ

1. WebSocket接続エラーのデバッグ

# 詳細なWebSocketログを有効化
RUST_LOG=hyperliquid_crawler::websocket=trace make hyperliquid-dev

# ネットワーク接続の確認
docker exec -it crypto-ws-crawler-hyperliquid-crawler-dev-1 \
  curl -I https://api.hyperliquid.xyz

2. Kafka接続問題の調査

# Kafkaブローカーの状態確認
make redpanda-topics

# コンシューマーグループの確認
docker exec -it redpanda rpk group list
docker exec -it redpanda rpk group describe hyperliquid-consumer

3. QuestDB書き込みエラー

# QuestDBの接続テスト
docker exec -it crypto-ws-crawler-hyperliquid-consumer-dev-1 \
  nc -zv questdb 9009

# ILPプロトコルのデバッグ
RUST_LOG=hyperliquid_consumer::questdb=trace make hyperliquid-dev

4. メモリ使用量の監視

# コンテナのリソース使用状況
docker stats crypto-ws-crawler-hyperliquid-crawler-dev-1

# メモリプロファイリング(開発コンテナ内)
docker exec -it crypto-ws-crawler-hyperliquid-consumer-dev-1 bash -c \
  "cargo install cargo-instruments && cargo instruments -t Allocations"

開発環境の最適化

VSCode Remote Containers設定

// .devcontainer/devcontainer.json
{
  "name": "Rust Crypto Crawler",
  "dockerComposeFile": ["../docker-compose.yml", "../docker-compose.override.yml"],
  "service": "hyperliquid-crawler-dev",
  "workspaceFolder": "/app",
  "extensions": [
    "rust-lang.rust-analyzer",
    "vadimcn.vscode-lldb"
  ]
}

cargo設定の最適化

# ~/.cargo/config.toml (コンテナ内)
[build]
target-dir = "/cache/target"

[net]
git-fetch-with-cli = true

ベストプラクティス

  1. 開発時は必ず開発モードを使用
    - ソースコード変更が即座に反映される
    - デバッグ情報が含まれる

  2. 本番デプロイ前は必ず本番モードでテスト
    - 最適化による挙動の違いを確認
    - パフォーマンスを検証

  3. 定期的なキャッシュクリーンアップ
    - ビルドエラー時はキャッシュをクリア
    - 依存関係更新後も推奨

  4. ログ出力の活用
    - 開発時はRUST_LOG=debugを基本とする
    - 本番環境ではRUST_LOG=infoに設定

  5. コンテナ内でのインタラクティブ開発
    - 複雑なデバッグはコンテナ内のシェルで直接操作
    - cargo-watchで自動再実行を活用