現地参加したPyCon JP 2022のセッションのまとめ4本目です。
今回は、Day1の「Pythonに上級テクニックは要らない(そして正しい付き合い方)」です。
動画
スライド
スピーカー
- 清原弘貴さん
- 株式会社ゼンプロダクツ
- 代表取締役
- 株式会社ゼンプロダクツ
内容まとめ
- テクニックを過剰に使いすぎず、可読性・メンテナンス性の高いPythonコードを書くには、というお話
テクニックとは
- 例
- デコレータ
- Context Manager
- ジェネレーター
- 型ヒント
- など
- これらは学ぶと使いたくなる、使っていくべきもの
- しかし、過剰に手を染めすぎると可読性もメンテナンス性も下がる
理想としては
- 要件に合わせた意図を、プログラムという形で読みやすく記述できればいい
- テクニックは上手く隠蔽されているべきである
テクニックを使う場の見極め
手元のテクニック
- 仕事で書く自分の範囲
チームのテクニック
- 仕事のプロジェクトで書く中心部分
世界のテクニック
- 広く使われる・根底になるライブラリーやフレームワーク
内包表記
- 単純な場合は使おう
- しかし、二重の内包表記は避けた方がいい。ループで良い。
- 「内包表記の方が速い」が、その速度差を意識すべき場でないことがほとんど
外部や未来への影響
- 重要なのは、外部との関わりである
- 外部の関数やモジュールに影響がないなら好きにすればいい
- テストの書きやすさやモデルの設計こそが重要
- 最初は、プロジェクトやフレームワークの指示に従い学ぶ
なぜクラスにするのか?
- 辞書やタプルで十分な場合もある
- その方がテストしやすい
- 「ユーザーという辞書」のような概念があったり、共通した形を期待する関数が多い場合はクラスにする
あんまり使ってほしくないもの
-
global
・local
- モジュールのグローバルな状態に依存
-
subprocess
- 外部環境への依存
基底クラス
- 1回継承させる程度が良い
- 例えば、
BaseBackend
・FoobarBackend
など
「間を書き換えたい」は危険
- 「長い処理のここだけ書き換えたいからクラスを継承させる」というのは危険
- 重複したコードでも2つ程度なら良い
-
DRY(Don't Repeat Yourself)
の原則からは外れるので、難しいラインではあるけど
-
継承やクラスの意図が重要
- OK
- ビジネス上の処理のフローが決定していて、それを基底クラスとして決めた
- NG
- 継承すれば書き換えられるから、基底クラスにしておいた
まとめ
- テクニックは積極的に学ぶべきだが、要らないなら無理に使わなくても良い
- しかし、使っていかないと学べないのも確か
- 受け身に使える文法は多くて良いが、能動的に使うときは見極めよう
- 練習で作って失敗しておこう
- 実は「テクニック」よりも関数の設計やモジュールの分割などが重要
- 学ぶには作って経験すること、テストを書くこと、他人のコードを読むことが大事
感想
- 内包表記使うかループを使うかは、私も悩んだことがあります。
- そして、他の言語でもこういうことあるなと思いました。
- テストコードが書きにくいということは、設計や実装に改善点があると思うので、そういう時にしっかり考えたいですね。