時雨堂を支える Python
時雨堂では Python や Python で書かれたツールをどのように利用しているかを書き出しておきます。
何に使っているか
- 主力製品の Python SDK
- 主力製品の E2E テストに pytest
- 標準ライブラリのみを利用したビルドツール
- 主力製品のクラウド版のツール
- IT 自動化システム Ansible
- ドキュメントツール Sphinx
なぜ Pyhton
- 使い慣れてるから
- pytest が本当に良くできてるから
- 必要なライブラリが揃ってるから
- SpaceX がツールやテストに Python を採用していたから
-
We are the SpaceX software team, ask us anything!
Python for tools, testing and automation
-
We are the SpaceX software team, ask us anything!
uv / Ruff
Rust で書かれたツールを採用しています。
- astral-sh/uv: An extremely fast Python package installer and resolver, written in Rust.
- astral-sh/ruff: An extremely fast Python linter and code formatter, written in Rust.
mypy
mypy を少しずつ導入しています。
主力製品の 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
参考
pytest で E2E テスト
時雨堂の主力製品は Erlang/OTP で書かれていますが、 E2E テストは pytest を利用して書かれています。主力製品は WebRTC という技術を利用しているのですが、 libwebrtc を利用している Python SDK を利用しています。
test-e2e/ というディレクトリ以下で rye run pytest を実行するだけで E2E テストが実行されます。
Playwright Python
E2E テストには主力製品の Python SDK 以外に、Playwright Python も利用予定です。
- Fast and reliable end-to-end testing for modern web apps | Playwright Python
- microsoft/playwright-pytest: Pytest plugin to write end-to-end browser tests with Playwright.
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
標準ライブラリのみを利用したビルドツール
時雨堂では Makefile 代わりに Python を利用しています。
標準ライブラリだけで利用できるようになっており、 uv は利用していません。
ruff.toml
- Ruff を利用
line-length = 100
mypy.ini
- mypy を VS Code ベースでお試し導入中
- mypy.ini は未設定
参考
- https://github.com/shiguredo-webrtc-build/webrtc-build/blob/master/run.py
- https://github.com/shiguredo/sora-cpp-sdk/blob/develop/run.py
- https://github.com/shiguredo/sora-c-sdk/blob/develop/run.py
- https://github.com/shiguredo/sora-unity-sdk/blob/develop/run.py
- https://github.com/shiguredo/sora-python-sdk/blob/develop/run.py
- https://github.com/shiguredo/zakuro/blob/develop/run.py
主力製品のクラウド版のツール
クラウド版の開発メンバーが Python に慣れているということもあり、ツール類は Python を採用しています。
IT 自動化システム Ansible
自社サービスのアップデートや構築は Ansible を採用しています。特に必要性を感じていないので自動デプロイとかは採用していません。手動デプロイです。
Ansible は Python というか YAML ですが。
Akamai Connected Cloud (Linode)
自社のシステムには Akamai Connected Cloud (Linode) を利用していますが、ちゃんと Ansible が用意されていて良いです。
ドキュメントツール Sphinx
自社製品のドキュメントには Sphinx を採用しています。 reStructuredText を利用しています。
自社テーマ も開発しており、独自に Meilisearch を利用した日本語全文検索を提供しています。
参考
uv
- uv add
- uv sync
- uv run
基本この 3 つだけ覚えてればいい。