2023/10/26-27 に開催された PyCon APAC 2023 に参加してきました。

なぜ参加したのか

  • これまでPythonのカンファレンスの参加経験がなく、一度は参加してみたかった
  • APAC(アジア太平洋地域規模のカンファレンス)が気軽に行ける場所で開催、これは行くしかない
  • 何より、単にPythonが好きだから

1日目

受付で名札記入とノベルティ受け取り

ノベルティTシャツって良いですよね。

PyCon APAC 2023 のノベルティTシャツ

どのセッションも面白く、学びの多いものでした。この記事では、その中から特に私に響いた2つのセッションをピックアップして紹介したいと思います。

Introduction to Structural Pattern Matching

@takanory さんによる、構造化パターンマッチングの紹介セッションです。

発表資料: https://slides.takanory.net/slides/20230812pyconkr/#/

構造化パターンマッチングは Python 3.10 から導入された新機能です。 本セッションでは、構造化パターンマッチングの基本構文や各種パターンについて、サンプルコードを交えて丁寧に解説されていました。 また、「従来のif文を用いるならばこうなる」という比較は大変興味深く、構造化パターンマッチングによりコードが簡潔かつ理解しやすくなることが示されていました。

以前から「構造化パターンマッチングはコードを短く書けるが、理解しづらくなるのではないか」という懸念を抱いていましたが、これからはコードをより理解しやすくするための記法として積極的に使っていこうと思いました。

また、この新機能の導入過程において「Soft keywords」という新しい仕組みが取り入れられた点についても触れられていました。 既存のコードとの互換性を保ちつつ新機能を追加するための手法として、興味深く感じました。

2日目

メモリプロファイラMemrayのススメ

@terapyon さんによる、メモリプロファイラ Memray の紹介セッションです。

発表資料: https://speakerdeck.com/terapyon/memoripurohuairamemraynosusume

Memrayはトレーシング方式のメモリプロファイラで、Python 3.8 以降の Linux/macOS で利用できます(発表時点での情報)。
セッションでは、HTML形式でのレポート出力機能と、リアルタイムのメモリ使用状況を表示するLive表示機能のデモンストレーションが行われました。

特に印象的だったのは、メモリ使用量の大きいオブジェクト(例ではnumpy配列)2度作成して同じ変数名に代入する際、メモリ使用量が一時的に増加する様子をMemrayで可視化したパートです。
以下のコードは、変数 arr に長さ 1024**3 のnumpy配列を2度代入しています。

SIZE = 1024**3

arr = np.ones(SIZE, dtype=np.uint8)
arr = np.ones(SIZE, dtype=np.uint8)

一見、同じ変数に2度代入しているだけなのでメモリ使用量は変わらないように見えますが、実際には一時的にメモリ使用量が増加します。
これは、変数 arr に代入される前のnumpy配列が、代入後に参照されなくなったためにガベージコレクションにより解放されるまでの間、メモリに残っているためです。

また、pytest-memray というpytestインテグレーションが存在し、テストにメモリ使用量の上限を設定することができることも紹介されていました。
メモリ使用量を自動テストするという発想は、私にはなかったのでとても新鮮でした。 組み込み用途など、メモリ使用量が重要な環境では有用な機能だと感じました。

さいごに

2日間、多くの学びを得ることができました。 紹介したセッション以外にも、多くのセッションがあり、どれも興味深いものばかりでした。
また、カンファレンスに参加することで、Pythonコミュニティの活発さを改めて実感することができました。

次も参加するつもりです。