株のシステムトレードをしよう - 1から始める株自動取引システムの作り方

株式をコンピュータに売買させる仕組みを少しずつ作っていきます。できあがってから公開ではなく、書いたら途中でも記事として即掲載して、後から固定ページにして体裁を整える方式で進めていきます。

02日目: 爆速開発環境の構築 —— `uv` とDev Containers

前回:

how-to-make-stock-trading-system.dogwood008.com

次回:

まだ


第2回目の今日は、開発環境の構築を行う。 「環境構築で一日が終わった」という経験は、エンジニアなら誰しもあるはずだ。特にPythonの環境構築は、Anaconda、pip、Poetry、pyenv...とツールが乱立しており、混沌を極めていたのが、これまでのよくある話だった。

しかし、2026年の今、私がこれは正解なのではと考える組み合わせは、 uvDev Containers もしくは Docker である。 この2つを使えば、環境構築は「コマンド一発」で終わる。さっと環境を作って、コードを書くことに集中しよう。

Poetryより速い? 最新パッケージマネージャ uv の導入

これまで私は Pipenv を使ってきたが、今回から uv に乗り換えることにした。

Python環境構築の「めんどくさい」を終わらせる

uv は Rust製のPythonパッケージマネージャで、とにかく速い。依存関係の解決(Resolve)が、Poetryの10倍〜100倍速いとされている1。 また、Python自体のインストール機能も持っているため、「pyenvでPythonを入れて、venvを作って...」という手順すら不要になる。

uv の導入と初期化

まずは uv をインストール2する。

curl -LsSf https://astral.sh/uv/install.sh | sh

プロジェクトの初期化はこれだけである。

mkdir my-trading-bot
cd my-trading-bot
uv init
mkdir -p src
mv main.py src/

これで pyproject.toml が生成される。

依存パッケージの追加

必要なライブラリを追加する。今回は polars, duckdb を入れてみよう。

uv add polars duckdb

これだけで、仮想環境の作成(.venv)、パッケージのダウンロード、インストールがすぐに完了する。

環境差異を撲滅する Dev Containers の設定

次に、Dev Containers を導入する。 これは VS Code の機能で、Dockerコンテナの中に開発環境を丸ごと閉じ込めるものである。

「私の環境では動いた」をゼロにする

システムトレードは、OSの違い(Windows vs Mac vs Linux)による微妙な挙動の差異が致命傷になることがある(特に時刻処理やファイルパス)。 Docker上で開発すれば、本番環境(おそらくLinuxのクラウドサーバー)と全く同じ環境でコードが書ける。これをやらない手はない。

.devcontainer の設定

プロジェクトルートに .devcontainer フォルダを作成し、2つのファイルを配置する。

1. .devcontainer/devcontainer.json

{
  "name": "Trading Bot Dev",
  "build": {
    "dockerfile": "Dockerfile",
    "context": ".."
  },
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-python.python",
        "charliermarsh.ruff",
        "tamasfe.even-better-toml"
      ]
    }
  },
  "remoteUser": "vscode"
}

2. .devcontainer/Dockerfile

FROM mcr.microsoft.com/devcontainers/python:3.12-bookworm

# uv のインストール
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv

# 作業ディレクトリ設定
WORKDIR /workspace

# ユーザー設定(必要なら)
USER vscode

3. .devcontainer/dockerignore

.git
.venv
__pycache__
*.pyc
.pytest_cache
.ruff_cache

これで VS Code の左下にある「><」マークをクリックし、「Reopen in Container」を選ぶだけである。 コンテナがビルドされ、その中で VS Code が立ち上がる。そこはもう、クリーンで統一された開発環境である。

Git管理とCI/CDの準備

最後に、Gitの設定をしておく。 システムトレードで最も恐ろしいのは「APIキーの誤コミット」である。これを防ぐために、.gitignore は最初に完璧にしておく必要がある。

.gitignore のベストプラクティス

# .gitignore

# Python
__pycache__/
*.py[cod]
.venv/

# Environment Inputs
.env
.env.*
!*.example

# Data (巨大なデータはコミットしない)
data/
*.parquet
*.duckdb

# VS Code
.vscode/
!.vscode/settings.json

APIキーやパスワードは必ず環境変数(.env)で管理し、リポジトリには含めないこと。これは絶対のルールである。

GitHub Actions でのLint

コードの品質を保つため、Pushするたびに静的解析ツール Ruff(これもRust製で爆速である)が走るようにしておこう。

.github/workflows/lint.yml:

name: Lint

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install uv
        uses: astral-sh/setup-uv@v5
      - name: Run Ruff
        run: uv run ruff check .

これで、汚いコードを書くとGitHub Actionsに怒られる仕組みができた。

今日の成果

  • uv を導入し、パッケージ管理を高速化した。
  • Dev Containers で、OSに依存しない開発環境を構築した。
  • GitとCIの設定を行い、安全に開発できる土台を作った。

地味な作業かもしれないが、ここをサボると後で必ず痛い目を見る。 次回は、いよいよデータ処理の中核、Polars を触ってみる。


前回:

how-to-make-stock-trading-system.dogwood008.com

次回:

まだ

(C) 2020 dogwood008 禁無断転載 不許複製 Reprinting, reproducing are prohibited.