PyCon JP 2021 カンファレンスレポート

2日目:Python 3.10新機能パターンマッチの神髄がわかる

この記事を読むのに必要な時間:およそ 3.5 分

セッション「他人が書いたコードのリファレンスをSphinxで作る方法」―杉山剛氏

(高倉佑輔)

杉山氏は事務系のお仕事を33年間勤める傍ら独学でPythonを学び,業務のデータ分析でも最近Pythonを使うようになった方です。また,書籍のレビューを積極的に行っており,過去に14冊もレビューし,さらにはPyCon JP 2021が開催された2021年10月時点でも1冊レビューをしている最中とのことです。

このセッションでは,他者が書いたPythonのコードにdocstringをつけていくことを通じて,Pythonコードの保守性をあげていくことを題材としています。Pythonにはコードのドキュメントを記載するdocstringというしくみがあり,これを記載すればSphinxなどのツールを使ってコードのリファレンスをお手軽に作ることができます。

今回のセッションでは,初老の事務系サラリーマンSさん(仮名)が,後輩から引き継いだdocstringの無いコードにdocstringを書きながら,コードの全容を把握するためのドキュメントを書いていくというエピソードを題材としています。このエピソードはあくまでもフィクションという体裁をとっていますが,おそらく杉山氏の実体験に基づくエピソードなのでしょう。

問題のコードはSさんの後輩がデータ分析用に書いたコードです。それがWebアプリ化され,業務用アプリとしてコードが書けない人にも使われるようになったのですが,そこでこのコードを書いた後輩が退職することになってしまいました。実際の業務で使われているのだから,メンテナンスができなくなることは死活問題です。Sさんの悪い予感は的中してしまいました。そのコードはいろいろな問題を抱えていたのです。PythonにはPEP 8というスタイルガイドがあるのですが,そのコードは全くPEP 8を守っていない上に,処理内容と辻褄が合わないコメントや冗長な処理など,読みづらくなる要素がてんこ盛りなコードでした。もちろん,テストもありません。

Sさんは処理そのものは手を加えずにPEP 8準拠にコードを書き換え間違っているコメントを直していきました。もちろん,docstringを書き加えながら。書き上げたdocstringは,Sphinxによって一瞬でドキュメントになったのでした。そのドキュメントの甲斐あって,テストの追加もリファクタリングも無事できましたとさ。めでたしめでたし。

筆者の経験でも,ドキュメントの無いコードは厄介なモノということを理解しています。しかし,だいたいコードの変更が先になってしまい,ドキュメントの無いコードが量産されるのはよくあることです。そして,そのドキュメントの無いコードをメンテナンスする際に思うことは,⁠ちゃんとドキュメント書いておけばよかった……」ということだったりします。筆者自身が書いたコードでさえ昔書いたコードの全容を忘れてしまうものですから,他者が書いたドキュメントのないコードを理解するということはあまりにも大変なことなのです。そういう大変なことをSさんはやり遂げたわけです。

動画アーカイブや発表資料はこちらからご覧ください。

セッション「Loggingモジュールではじめるログ出力入門」―堤利史氏

(神田佳積)

堤氏は,GMOペパボ株式会社にてデータエンジニアとしてデータ基盤の構築・運用に従事しています。このセッションではPythonに標準搭載しているloggingモジュールの利用判断基準,構成要素,ならびに,ログ出力方法と実装例に関して取り上げられました(対象バージョンは3.9⁠⁠。

最初にloggingモジュールの利用判断基準として,print関数でも良いケースについて説明がありました。確かにデバッグなり軽い挙動確認等ライフタイムが短く,イベント記録以外の場合はprint関数でも良さげという感じがしました。また便利ポイントとして説明された,イベント時刻・発生箇所の記録,エラーや警告等ログレベル指定が必要となる場合はloggingモジュールを用いた方が適切という感じがしました。

print関数でも良い場合について説明する堤氏

print関数でも良い場合について説明する堤氏

続いてloggingモジュールの主な構成要素として

  1. Logger
  2. Level
  3. LogRecord
  4. Filter
  5. Handler
  6. Formatter

が存在し,各々の要素についての説明がありました。

これらの要素について筆者(神田)の経験を述べると,Formatterはタイムゾーンの関係等で意識します。また,ログをファイルやストリームに出力する際に,Handlerも意識します。この2つ以外も開発で使いますが,HandlerFormatterほど意識せずに使っていました。

またloggingモジュールの性質で階層構造についての説明があり,読み込まれた時点でroot logger(すべてのLoggerの祖先)が生成されるというのが印象的でした。よく参考書等で直接記録するサンプルコードを見かけますが,これらはroot loggerで行っているものだと改めて認識させられました。ちなみに,propagate属性を用いれば上位のLoggerに伝播できるとのことです。

ログ出力方法として,アプリケーション,ライブラリ各々のお作法,AWSならびにGCPでの出力の仕方について説明がありました。アプリケーションでの設定では以下設定方法について説明がありました。

  1. コードで直接指定
  2. logging.basicCongfig
  3. logging.config.dictConfig

またライブラリでは詳細設定を行わず,NullHandlerのみは設定して問題ないとのことでした。

アプリケーションの設定なら,簡単なものでしたらコードで直接指定,クラス構造がはっきりしているものは logging.config.dictConfigで行った方が最善ではないかなと説明を聞いていて感じました。

AWSならびにGCPでの出力の仕方については,Twelve-Factor Appを前提としてAWSではAWS LambdaおよびAWS Glue Python Shellジョブタイプを用いたAmazon CloudWatch Logsへの出力,GCPではCloud FunctionsおよびCloud Runを用いたCloud Loggingへの出力のプログラム例について説明がありました。

詳細は割愛しますが,実際にGitHubにソースコードがあるとのことですので,実際に手を動かしてみるのも良いかと思います。

筆者(神田)自身ここ最近Pythonを触りはじめた者としてloggingモジュールが標準で用意されていることは知っているものの,構成要素等詳細なところまではわからないところがありました。このセッションでどういう構成要素がどんな動きをするかが理解でき,設定方法のバリエーションやパブリッククラウドでの利用例等も聞けて有意義でした。

Pythonを用いたシステム開発を行っている方に加えて,これから開発に関わる初学者の方にもお勧めしたいセッションでした。

動画アーカイブや発表資料はこちらからご覧ください。

ライトニングトーク

「PyCon JP 2021」ではクロージングの前にライトニングトークを行いました。5枠の発表がありましたが,主なものではMicroPythonを用いてテプラで印刷する話やPythonでブラウザを一杯動かしたという話がありました。また海外(インドネシア)からも発表がありました。いずれも興味深く大変盛り上がりました。

カンファレンス2日目のレポートは以上です。1日目と同様に今回紹介できなかったセッションも多数あるのですが,それらは下記のリンクから見ることができます。

みなさまの気になるセッションは見つかりましたか? ぜひ他のセッションも見ていただければと思います!

著者プロフィール

吉田健太(よしだけんた)

PyConJPには2018年からスタッフとして参加。2019年までは会場NOCを主に担当していた。株式会社エブリーに所属。SREとして主にインフラ領域の整備に従事している。

Twitter:@yoshiken_tut


高倉佑輔(たかくらゆうすけ)

株式会社サザビーリーグの特例子会社,株式会社サザビーリーグHRにて,グループ内のシステム開発,とりわけバックエンド系システムを担当しているエンジニア。

PyCon JP 2021においてトーク,オンライン会場を担当。PyCon JPには2017年からスタッフ参加しているが,実は業務では主にC#を使用しており,まだPythonを使ったことがなかったりする。

プライベートではAnshitsuという写真の色調を調整するためのコマンドラインアプリを開発中。多趣味で,文章系の創作や写真,プログラミングなどさまざまなことに興味を持つ雑食系。

GitHub:huideyeren
Twitter:@huideyeren
Facebook:高倉 佑輔(ヨーシャ)
Blog:恢徳堂のヨーシャさんのブログ


nikkie(にっきー)

2019年よりPyCon JPスタッフ活動を始め,2021年は座長としてがんばりました。

株式会社ユーザベース所属のデータサイエンティスト。自然言語処理の研究開発に従事している。PyCon JPスタッフの他に,毎月開かれる「みんなのPython勉強会」のスタッフもしている。

Pythonが好き❤な上に怠惰なので,退屈と感じた作業はPythonにやってもらっている。それをPyConなどの場でアウトプットしている。また,アニメも好き🤗で,解放された現在は『アイの歌声を聴かせて』という作品をPythonの力を借りて応援している。

Twitter:@ftnext


神田佳積(かんだかづみ)

グッズ及びTalk進行を担当。今回初めてPyCon JPにスタッフとして参加。

普段は福岡のシステム会社にて受託開発及び常駐での開発に従事。Pythonは現職になって触れ始める。

他にもJAWS-UG 横浜支部の運営スタッフでもある。

Twitter:@kazumiks

バックナンバー

PyCon JP 2021 カンファレンスレポート