PyCon JP 2025 Logo
広島国際会議場
JPEN
fujidomoe

fujidomoe

育てるアーキテクチャ:戦い抜くPythonマイクロサービスの設計と進化戦略

ダリア1日本語
05:50 - 06:2030min
DAY 2
09/27
SAT

Pythonの柔軟性は魅力的ですが、その結果として「すぐにリプレイスを余儀なくされるコード」を生み出すことも少なくありません。私たちはテレシー社で6年間、数多くのPython製WebAPIおよびバッチマイクロサービスを運用する中で、「6年間進化し続けるコード」と「短命なコード」の明確な違いを肌で感じてきました。

PyCon JP 2025のテーマ「あつまれPythonのピース」が示すように、Pythonを支える多様な技術、ツール、経験、そして人々が繋がり、新たな可能性を生み出す場を目指しています。このトークでは、私たちの実体験から得られた「転ばぬ先の杖」となる設計原則と具体的なテクニックに焦点を当てます。

特に、型定義の重要性、見通しの良い設計手法、依存性逆転(DIP)によるアーキテクチャの柔軟性、そしてこれらを支えるPydanticなどのツール活用術について、実際の失敗談や成功例を交えながら解説します。特定のWebフレームワークに縛られない設計が、将来的な技術選定の柔軟性をどう高めるか、そしてストレージスタック変更のような大きな変化にどう対応できたかをお伝えします。

これからPythonで堅牢なサービスを構築しようとしている方、または既存システムのメンテナンス性に課題を感じている方にとって、明日から活用できるヒントを提供します。


トーク詳細 / Description

テレシー社が6年間のPythonマイクロサービス運用で直面した具体的な課題と、それを解決するために導入した設計・開発プラクティスを、実例を交えて解説します。私たちの経験は、まさに「Pythonのピース」が繋がり、より長く「育てられる」システムを構築した証です。

失敗から学ぶマイクロサービス開発の現実 まず、私たちが引き継いだ、あるいは初期に開発したアプリケーションコードが抱えていた具体的な問題点から話を始めます。特に、「メソッドに何が渡されるか分からないような型不明瞭なコード」や、「レイヤー構造が不明確で開発者がどこに何を書くべきか迷うコード」が、いかに開発効率と保守性を損なうかを具体例を挙げて解説します。これらの課題が、いかに「寿命の短いコード」へと繋がったかをお話しします。

持続可能なWebAPI、バッチアプリケーションの構築 これらの課題を乗り越えるため、私たちはWebAPIとバッチアプリケーションの設計と実装において、特定のフレームワークに強く依存せず、必要な機能を自分たちで選定し構築するアプローチを取りました。これにより、将来的な技術選定の柔軟性を確保し、FastAPIなどの別のフレームワークへの移行も容易な疎結合なアーキテクチャを実現しています。

WebAPI(Flaskのルーター+選定ライブラリ):

Flaskのルーター機能のみを活用し、ビジネスロジックやドメインモデルを完全に分離する戦略を採用しました。これにより、アプリケーションの核となる部分はフレームワークに縛られず、再利用性や保守性を高めています。

SQLAlchemy を用いた堅牢でフレームワーク非依存なデータベース管理層を構築。

Pydantic による厳密なデータバリデーションと型安全の確保は、特に「メソッドに何が渡されるか分からない」という初期の課題を解決する上で決定的な役割を果たしました。これらのライブラリはフレームワークに依存しないため、他のWebフレームワークへの移行時にもシームレスに利用可能です。

Alembic によるデータベースマイグレーション管理の効率化も、長期運用において重要なピースです。

バッチアプリケーション:

バッチアプリケーションにおいては、特定のフレームワークには依存せず、シンプルな依存性逆転設計を適用した独自の設計を採用しています。これにより、WebAPIで培った知見(特にデータバリデーションやドメインロジックの分離)をバッチにも適用し、堅牢性とテスト容易性を保った開発を進めました。

依存性逆転設計(DIP)によるコード品質の向上 コードの見通しと保守性を劇的に向上させた依存性逆転設計(DIP)について深く掘り下げます。具体的なコード例を通じて、DIPがもたらす設計上の利点(テスト容易性、機能追加の柔軟性、各レイヤーの独立性)と、それが「開発者がどこに何を書けばよいか分からない」という問題をどのように解決したかを解説します。

さらに、この設計思想は、初期のMySQL/AWS S3というストレージスタックから、Snowflakeへのデータ基盤の移行(ダッシュボード表示に必要なメトリクスデータ移設)といった、大きなインフラ変更時にも真価を発揮しました。依存性逆転させていることで、アプリケーションのコアロジックに大きなリアーキテクチャを施すことなく、新たなストレージに対応できた具体的な経験を紹介し、プロジェクト全体の柔軟性と再利用性がどのように向上したかを実例をもとに説明します。

チーム開発を加速させる開発環境とツールチェーン 新メンバーがスムーズに開発を開始し、チーム全体で効率的に開発を進めるためのプラクティスも重要です。

Dockerfileとdocker compose を用いた、再現性の高い開発環境の構築方法。「makeを実行すればすぐに開発環境が手に入る」という具体的なプラクティスを公開し、チーム開発における環境構築の課題解決について詳述します。

Pytest による効果的なテスト自動化。

UV を活用したパッケージ管理の工夫と、依存関係の管理戦略。

CI(GitHub Actionsなど) の構築を通じた開発プロセスの効率化と品質担保。

認証周りの堅牢な実装(Auth0の活用) 最後に、実際のアプリケーションにおける認証機能の重要性と実装について触れます。Auth0 を利用した認証の実装方法を具体的に解説し、セキュリティとユーザー管理のプラクティスについても簡単に紹介します。

fujidomoe

fujidomoe

プロフィール

株式会社テレシー開発本部 部長 兼 VPoE 兼テックリード

大学卒業後、オンラインゲームの開発に携わりRTSやアクションRPGのエンジニアリングを行う。 2017年にVOYAGE GROUP(現CARTAHOLDINGS)に入社し、子会社のfluctにて広告配信のエンジニアリングに携わり2020年にテレシーにJOIN、リードエンジニアとしてアプリケーションとインフラのエンジニアリングを行う。2024年からVPoE兼テックリードに就任。