Open8

時雨堂を支える Python

voluntasvoluntas

時雨堂では Python や Python で書かれたツールをどのように利用しているかを書き出しておきます。

何に使っているか

  • 主力製品の Python SDK
  • 主力製品の E2E テストに pytest
  • 標準ライブラリのみを利用したビルドツール
  • 主力製品のクラウド版のツール
  • IT 自動化システム Ansible
  • ドキュメントツール Sphinx

なぜ Pyhton

  • 使い慣れてるから
  • pytest が本当に良くできてるから
  • 必要なライブラリが揃ってるから
  • SpaceX がツールやテストに Python を採用していたから

uv / Ruff

Rust で書かれたツールを採用しています。

mypy

mypy を少しずつ導入しています。

https://www.mypy-lang.org/

voluntasvoluntas

主力製品の Python SDK

主力製品向けの Python SDK を開発しています。Python といっても C++ SDK を nanobind を利用して作っているため、Python は全くといっていいほど利用していません。

ただ、サンプルや E2E テストはがっつり Python です。 dependencies は 0 です。

pyproject の一部

requires-python = ">= 3.10"

[tool.uv]
python-preference = "only-managed"
dev-dependencies = [
    "nanobind~=2.1.0",
    "setuptools>=75.0",
    "build~=1.2.2",
    "wheel~=0.44.0",
    "auditwheel~=6.1.0",
    "ruff>=0.6",
    "typing-extensions>=4.12",
    "pytest>=8.3",
    "python-dotenv>=1.0",
    "numpy>=2.1",
    "mypy>=1.11",
]

[tool.ruff]
target-version = "py310"
line-length = 100

参考

voluntasvoluntas

pytest で E2E テスト

時雨堂の主力製品は Erlang/OTP で書かれていますが、 E2E テストは pytest を利用して書かれています。主力製品は WebRTC という技術を利用しているのですが、 libwebrtc を利用している Python SDK を利用しています。

test-e2e/ というディレクトリ以下で rye run pytest を実行するだけで E2E テストが実行されます。

Playwright Python

E2E テストには主力製品の Python SDK 以外に、Playwright Python も利用予定です。

pyproject の一部

dependencies = [
    "sora-sdk~=2024.3.0",
    "pytest>=8",
    "httpx>=0.27",
    "numpy>=2.0",
    "aiohttp>=3.9",
    "pytest-timeout>=2.3",
]

requires-python = "~= 3.12"

[tool.uv]
package = false
managed = true
python-preference = "only-managed"
dev-dependencies = ["ruff>=0.6"]

[tool.hatch.metadata]
allow-direct-references = true

[tool.pytest.ini_options]
timeout = 45

[tool.ruff]
target-version = "py312"
line-length = 100
voluntasvoluntas

標準ライブラリのみを利用したビルドツール

時雨堂では Makefile 代わりに Python を利用しています。
標準ライブラリだけで利用できるようになっており、 uv は利用していません。

ruff.toml

  • Ruff を利用
line-length = 100

mypy.ini

  • mypy を VS Code ベースでお試し導入中
  • mypy.ini は未設定

参考

voluntasvoluntas

主力製品のクラウド版のツール

クラウド版の開発メンバーが Python に慣れているということもあり、ツール類は Python を採用しています。

voluntasvoluntas

IT 自動化システム Ansible

自社サービスのアップデートや構築は Ansible を採用しています。特に必要性を感じていないので自動デプロイとかは採用していません。手動デプロイです。

Ansible は Python というか YAML ですが。

Akamai Connected Cloud (Linode)

自社のシステムには Akamai Connected Cloud (Linode) を利用していますが、ちゃんと Ansible が用意されていて良いです。

voluntasvoluntas

uv

  • uv add
  • uv sync
  • uv run

基本この 3 つだけ覚えてればいい。