PyCon JP 2025

Pythonで実現する堅牢なシステム設計 - イミュータブルがもたらす恩恵
2025/09/26 , ラン

本発表では、Pythonにおけるイミュータブル(不変)なデータ構造の重要性と、それを活用した堅牢なシステム設計について解説します。

多くのPython開発者は、リストや辞書などのミュータブル(可変)なデータ構造を日常的に使用していますが、これらが原因で発生する予期しない副作用やバグに悩まされた経験があるのではないでしょうか。特に、複数のモジュール間でデータを共有する際や、並行処理を行う際には、ミュータブルなオブジェクトが思わぬ問題を引き起こすことがあります。

本発表では、実務でのシステム開発で蓄積された知見をもとに、以下の内容を扱います:
- ミュータブルなコードが引き起こす典型的な問題パターン
- frozen dataclassesやプロパティを活用したイミュータブルな設計手法
- Webアプリケーションでの活用事例(データベースなど)

発表では、実際のプロダクションコードから抽出した具体例を交えながら、すぐに現場で活用できる実践的なテクニックを紹介します。Pythonの型ヒントとイミュータブルデザインを組み合わせることで、より安全で保守性の高いコードベースを構築する方法を学ぶことができます。

対象者は、Pythonでシステムを開発している方、チーム開発でコードの品質向上を目指している方々を想定しています


  1. イントロダクション(3分)
    - ミュータブルなコードが引き起こした実際のインシデント事例
    - なぜ今イミュータブルが重要なのか

  2. ミュータブルの罠(5分)
    - デフォルト引数の罠(def func(items=[])など)
    - 意図しない参照共有による副作用
    - リストの直接変更がもたらす追跡困難なバグ
    - 実際の失敗例

  3. イミュータブルデザインパターン(10分)
    - frozen dataclassesの活用方法と注意点
    - プライベート属性とプロパティによる読み取り専用設計
    - 実務を例にした値オブジェクトの実装など

  4. 実践的な活用方法(5分)
    - 既存のミュータブルなドメインオブジェクトの改善など
    - Webアプリケーションでの活用事例(データベースなど)

  5. まとめとQ&A(2分)
    - チームへの導入方法
    - パフォーマンスへの影響と対策


この題材を選んだ理由やきっかけ:

以前の私は、オブジェクトが変更可能(ミュータブル)であることのリスクをそれほど意識せずにコードを書いていました。

しかし、あるプロジェクトで「オブジェクトは一度作ったら変更しない(イミュータブル)」というシンプルなルールを徹底してみたところ、実装、レビュー、そしてデバッグといった開発のあらゆる場面で、「この値はどこかで変わっていないだろうか?」という余計な心配事がなくなり、もっと本質的で、本当に頭を使うべき部分にリソースを集中できるようになりました

この経験を通じて、イミュータブルな設計がもたらす「先が読めることの安心感」や「思考のシンプルさ」は、プロジェクトの規模や種類を問わず、私たち開発者を助けてくれる強力な武器になると実感しました。

この経験を元に、実務で実践しているイミュータブル設計について皆様に共有させていただき、少しでも堅牢なWebアプリケーション開発の手助けになればと思い選択させていただきました。

オーディエンスが持って帰れる具体的な知識やノウハウ:
  • イミュータブルがもたらす恩恵
  • ミュータブルがもたらす罠
  • Webアプリケーションでのイミュータブル活用方法
オーディエンスに求める前提知識:

Pythonの基本文法

オーディエンスの経験レベル:

Beginner

発表の言語:

日本語

発表資料の言語:

日本語