PyCon JP 2022

Pythonに上級テクニックは要らない(そして正しい付き合い方)
2022/10/14 , pyconjp_1
言語: 日本語

Pythonのテクニックは何があるでしょうか? ContextManager、デコレーター、継承、特殊メソッドなど色々な文法や知るべき技術があります。

ですがそれらを普段の開発でどれほど活用すべきでしょうか?
「新しく学んだので使ってみた技術が、後々のメンテナンス性を大きく下げていた」そんなことはよくあります。Pythonの文法や使える技術がそれぞれどういった場面に適しているか、むしろ使うべきでないかをお伝えします。
作りたいものの複雑さや、仕事とライブラリーのコードの違い、関わる人の人数などを念頭に説明します。

とくにこれから中堅になってくるPythonエンジニアが聴くべき(そして未来の失敗を避けるべき)トークになるでしょう。


トークのレベルとしては初級から中級にステップアップするPythonエンジニア向けとなります。ContextManager、デコレーターなど基本的なテクニックから、特殊メソッドやMixinといった少し複雑なテクニックまでを説明します。それぞれどういった場面で使うべきものであるかを伝えつつ、どういった使い方をすべきでないかを強調するのが本トークの特徴です。

さらに使う場面に応じたレベルを5段階で明示し、それぞれの文法やテクニックがどこに当てはまるかを説明します。具体的には以下の5つです。

  • ★☆☆☆☆:手元でも使っていくテクニック
  • ★★☆☆☆:使う機会があれば手元でも良いが、使いどころを考えたほうが良いテクニック
  • ★★★☆☆:プロジェクト内で他の人に使ってもらう部品を作るときのテクニック
  • ★★★★☆:仕事で難しい要件がきたときや、ライブラリーなどで他の人が楽できるように使うテクニック
  • ★★★★★:基本、使わない。フレームワークなどを作りたいなら使うテクニック

このように作りたいものの規模や関わる人の人数、オープンソースのライブラリーなのかどうかといった切り口でレベルを分けます。「初心者であればレベル3以上は先輩の社員と相談することをおすすめ」など具体的に仕事で使える切り分けを提示します。

トークを準備している現時点では以下のようなレベル分けになる想定です。

  • ★☆☆☆☆:手元でも使っていくテクニック
    • リスト内包表記(短めに使おう)
    • ジェネレーター
    • yield
    • yield from
    • 型ヒント
    • itertools
    • collections
  • ★★☆☆☆:使う機会があれば手元でも良いが、使いどころを考えたほうが良いテクニック
    • クラス、dataclass
    • デコレータ(簡易)
    • contextlib(with作るやつ)
    • argparseやclick等のコマンド作成
    • @property
    • global、local(基本はやめてほしい)
    • subprocess(基本はやめてほしい)
  • ★★★☆☆:プロジェクト内で他の人に使ってもらう部品を作るときのテクニック
    • 基底クラス(継承を前提としたクラス)
    • 少し凝ったクラス
      • __iter____next__
      • __enter__
      • __call__
    • エラークラスの定義
    • デコレータ(引数ありや例外処理を含む)
    • パッケージング
  • ★★★★☆:仕事で難しい要件がきたときや、ライブラリーなどで他の人が楽できるように使うテクニック
    • Mixinクラス
    • attr.s
    • @my_propaty.setter
    • import_module(動的インポート)
    • __add____sub____len__ 拡張
    • 他言語拡張
  • ★★★★★:基本、使わない。フレームワークなどを作りたいなら使うテクニック
    • メタクラス
    • abc
    • __getattr__ 拡張
    • slice()

トークのボリュームに応じて説明できる範囲は変わります。

中級エンジニアにステップアップする際に失敗しがちな『やりすぎ』を防ぎ、どの技術をどこまで安全に使えるかを説明します。スキルは使うことで磨かれていきます。ですがいきなり仕事に持ち込みすぎると大失敗の原因となります。そうでなく、よくある失敗やチームで相談すべき点を知っておくことで、安心して次のPythonのレベルに成長できるようにします。

kyです。

僕のことはky(さん)と呼んでください!

Python大好き、Webサービス大好き、自然言語処理やAIも大好きなエンジニアです。Python、Django歴は10年以上です。

株式会社ゼンプロダクツというスタートアップの代表取締役です。清原弘貴といいます。 Shodoという、日本語をAIが校正してくれるWebサービスを開発・運営しています。オンライン上でMarkdownの執筆・レビューができるサービスですので、テックブログの運営にもおすすめです。ちなみに、この発表概要や自己紹介もShodoで書きました。

DjangoCongress JPというカンファレンスも毎年主催しています。

ぜひフォローしてください!