SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

EuroPythonレポート

EuroPython 2018参加レポート(1)~基調講演、Python 3.7の新機能、大規模コードベースにおける型アノテーション

  • X ポスト
  • このエントリーをはてなブックマークに追加

大規模なコードベースにおける型アノテーションの連携

monkeytype と PyAnnotateの比較
monkeytype と PyAnnotateの比較
  • タイトル:Type annotations with larger codebases
  • 発表者:Stephan Jaensch
  • セッション動画

 本記事の最後に紹介するのは、yelpのバックエンドエンジニアによる型アノテーションに関する発表です。

 型アノテーションおよび型ヒントに関する発表は、PyCon JPでも毎年発表が行われています。

 筆者もこれらの発表を聞いていたのですが、どちらも型アノテーション・型ヒントに関連するPEP(Python Enhancement Proposal)を紹介し、仕様や型ヒントの書き方についてキャッチアップする上で非常によくまとまったトークでした。しかしその後、DropboxのPyAnnotateやInstagramのMonkeyTypeといった型アノテーションを自動生成するためのツールが登場したりと気になる動きもありました。そこで今回は型アノテーションに関連するツールチェインにフォーカスして紹介します。

型チェッカー:mypy vs Pyre

 まずは発表の中で紹介のあった型アノテーションに関するツールチェインとして、型チェッカーと型アノテーション自動生成ツールの紹介・比較がありました。まずは型チェッカーから確認していきましょう。型チェッカーとして有名なツールは次の2つです。

 mypyは最も広く利用されているツールで現状はデファクトスタンダードとなっていますが、Pyreは比較的高速に動作する型チェッカーで、大規模なコードベースを抱えているFacebook社やInstagram社によって開発されています。一方でmypyはPython 2など型アノテーションの構文を持たないバージョンに関しても、コメントベースの型アノテーションが記述できるようになっていますが、PyreはPython 3にのみ対応しています。

 また型チェッカーを利用する上でのTipsとして次のようなテクニックが紹介されました。

  • mypyのcheck_untyped_defsオプション等による型ヒントの強制
  • pre-commit によるコミット前の型チェック自動実行

型アノテーションの自動生成ツール:MonkeyType vs PyAnnotate

 型ヒントの付与されていなかった既存のコードベースに地道に型ヒントを記述していくのは少し骨の折れる作業です。そんな中2017年末にInstagramとDropboxが立て続けに型アノテーションを自動生成するためのツールを公開していました。

 どちらも実行時のランタイム情報をもとに、型ヒントを自動で追加したり、スタブファイルを生成することができるツールです。利用者からみた大きな違いを挙げるとすると、PyAnnotateはPython 2のコードベースにも対応しています。公開から半年ほど経ったのもありyelpでの利用実績などが聞ければと思っていたのですが、紹介程度におさまっていました。このトピックに関してより詳しく知りたい方は森本哲也さんによる次の資料がおすすめです。ぜひチェックしてみてください。

 文字数の都合上、解説はツールチェインに絞りましたがmypy_extensions.TypedDictによる辞書型オブジェクトの型ヒントの記述方法、Descriptorの型ヒントの記述方法、再帰する型にmypyが対応していないこと(詳細は「Support recursive types #731 - python/mypy」を参照)の紹介等がありました。気になるトピックがあった方はぜひ動画をチェックしてみてください。

まとめと次回予告

 いかがでしたでしょうか? EuroPythonは毎年開催されています。興味を持たれた方は、次回の参加を検討されてみてはいかがでしょうか。

 第1回はEuroPython 2018の概要と最初の基調講演であるDavid Beazley氏による「Die Threads」をはじめに、Python 3.7の新機能と型アノテーションといったPythonの新機能に関する発表についてお届けしました。

 次回、第2回は筆者らが気になった・面白かったセッションについてお届けしていきたいと思います。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
EuroPythonレポート連載記事一覧
この記事の著者

芝田 将(株式会社サイバーエージェント)(シバタ マサシ)

 株式会社サイバーエージェント AbemaTV 配信チーム所属。go-prompt 開発者。 共訳書『エキスパートPythonプログラミング改訂2版』。 Webサイト: https://c-bata.link

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

石川 諒(株式会社サイバーエージェント)(イシカワ リョウ)

 株式会社サイバーエージェント AbemaTV iOSエンジニア。主にコード品質や視聴周りの改善を行う本質改善チームに在籍。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11053 2018/08/30 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング