Open7

時雨堂を支える Python

voluntasvoluntas

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

何に使っているか

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

なぜ Pyhton

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

Rye / Ruff / uv

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

mypy

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

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

voluntasvoluntas

主力製品の Python SDK

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

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

利用しているライブラリ

dev-dependencies = [
    "nanobind~=1.9.2",
    "setuptools>=69.2",
    "build~=1.1.1",
    "wheel~=0.43.0",
    "auditwheel~=6.0.0",
    "pytest>=8.0.0",
    "ruff>=0.3.0",
]

参考

voluntasvoluntas

pytest で E2E テスト

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

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

Playwright Python

E2E テストには主力製品の Python SDK 以外に、Playwright Python も利用しています。

Ruff の設定

[tool.ruff]
line-length = 100

利用しているライブラリ

dependencies = [
    "sora-sdk>=2024.2.0",
    "pytest>=8.1",
    "httpx>=0.27",
    "numpy>=1.26",
    "aiohttp>=3.9",
    "pytest-timeout>=2.3",
]

導入を予定しているライブラリ

Python の PBT である Hypothesis の導入を検討中。

voluntasvoluntas

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

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

  • Ruff を利用
  • mypy をお試し導入中

ruff.toml

line-length = 100

参考

voluntasvoluntas

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

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

voluntasvoluntas

IT 自動化システム Ansible

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

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