3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

みずほリサーチ&テクノロジーズ株式会社の @fujine です。
2024/9/27-29に東京で開催されたPyConJP 2024に参加・登壇してきました。

遅ればせながら、本記事では私の発表内容と、他セッションで特に面白かったものを共有させていただきます。

私の発表

あなたのアプリケーションをレガシーコードにしないための実践Pytest入門

今年度はpytestによるテスト事例を発表させていただきました。いくつかの開発案件にてpytestを導入して得られたノウハウをまとめたものです。発表資料はMarpで作成しました。

プログラムは通常、他のモジュール、実行環境、外部API、外部DBなど様々な要素に依存していることが多く、単体でのテストを難しくする要因となります。

これらの依存関係をどのように解消して単体テストできるようにするか、を具体的な事例を多数盛り込んで解説しました。

スライド後半にはテスト駆動開発(TDD)のデモを加え、テストファーストな開発手法の有用性を紹介しました。

当日は多くの参加者にご聴講いただきました。この場を借りてお礼申し上げます。

以降の章では、私が特に面白いと感じたセッションを順不同で抜粋してご紹介します。

Day1

5年分のツケを一気に払った話

「ドキュメントが無い、テストも無い、開発者もいない」という三重苦なレガシーコードをいかに苦労して改善したか、のサクセスストーリーです。

パッケージ単体の互換性問題ならまだしも、パッケージ同士の依存関係が複雑だと問題解決がさらに困難になるため、セッションの苦労話はとても共感できました。

(最後のスライドで私の発表を少し宣伝していただけたようです。ありがとうございます!)

ORM と向き合う

便利だけとメンテが大変なORM、なぜ必要なのか、どうして辛いのか、他に方法は無いのか、といった疑問点を深掘りしています。

結構分かりやすいのに内容は深いです。全てをPythonだけで何とかしようとするのではなく、「必要な責務さえ果たせるならば他言語のサービスを組合せても良い」という発想の転換は大事だと思います。

無慈悲なインピーダンスミスマッチ」はパワーワードですね笑

MLOpsの「あるある」課題の解決と、そのためのライブラリgokart

データ・特徴量・パラメータ値・モデルやパイプライン全体の管理って結構大変ですよね。Kaggleなどのコンペでも大量の試行錯誤を行うことが多いため、機械学習やるなら個人・チームを問わずMLOpsは重要な技術要素だと思います。

gokartは初見でしたが結構簡単に使えそうな印象でした。これまでscikit-learnPipelinemlflowを使ってましたが、gokartも試してみようかな。

PythonのHTTPクライアントツール 徹底比較

requestshttpxaiohttpの比較セッションです。

requestsは昔からお世話になってますが、これからはrequestsをベースにしつつ非同期処理もサポートしているhttpxへの切替を検討してみます。

FastAPIでのasync defとdefの使い分け

「並行処理、並列処理、非同期処理は何がどう違うのか」がとても分かりやすかったです。

async/awaitはまだまだ初心者ですが、今年からFastAPIを勉強中なのでしっかり覚えていきたいです。

Day2

【招待講演】PythonのUTF-8化

CPythonコアデベロッパーの方による講演です。UTF-8への移行にってこんなに大変だったんですね。

私の会社PCはずっとWindowsなので、CP932エンコーディングに起因するエラーには何度も悩まされました...2026年のPython3.15が待ち遠しいです。

Pythonで 日本語処理 入門 〜フリガナプログラムを作ろう〜

SudachiPyによる日本語の形態素解析とフリガナ処理を学べるセッションです。日本語処理ではGiNZAも有名ですが、内部の形態素解析ではSudachiPyが使われています

(私は昔janomeを愛用していたのですが、こうした言語処理は辞書の精度とボリュームが命なので、今はSudachiPy推しです。)

初心者向けの分かりやすい内容なため、Pythonで言語処理を始めて学ぶ方の学習コンテンツにも適しています。

Streamlining Testing in a Large Python Codebase

ソースコードの増加に伴う自動テストの実行時間の増加をいかに削減するか、という内容です。マルチコアによる並列テスト、インストールパッケージのキャッシュ、テスト済みコードの再テストやカバレッジのスキップ、などが紹介されています。

ちなみにpytestにも、--last-failed--failed-firstといった前回失敗したテストケースから再開するオプションがあります。

Skip Unnecessary Tests and Lintersの章ですが、モジュール同士に依存関係がある場合、変更していないプログラムのテストが失敗する可能性はあります。リグレッションテストを行うのであれば、一部をスキップせず全テストケースを実行するのが確実でしょう。

Pythonの数学機能を学ぼう! その仕組みも学ぼう!

普段何気なく使っているintfloatがどのように実装されているのかをディープダイブできます。

  • プログラミング言語によって、n + 1 ≠ nが保証されるかどうかは異なる
  • -5〜256以外の整数値は動的に生成される
  • 整数の精度に上限がない(メモリが許す限り表現できる)のはなぜか
  • int("1" * 4301)はなぜエラーになるのか
  • Python3.13で追加されるFMAとはどんな数学関数なのか

など、数値を扱う奥深さを体感することができ、驚きの連続でした。

「巨人の肩の上」で自作ライブラリを作る技術

自作ライブラリ開発のポイントを紹介しています。
いきなりプログラムを書き始めるのではなく、

  • 既存の類似パッケージや文献を調査し、「車輪の再発明」を回避
  • 泥臭い調査を経て、自作ライブラリの要件を精緻化
  • 要件をテストケースに落とし込み、テストファーストに開発

という開発スタイルは、自作ライブラリに限らず通常のシステム開発でも大いに有益だと感じ、とても共感できました。

SQLModel入門 〜クエリと型〜

SQLModelによる型安全なモデル定義やクエリの実装ノウハウです。全体で116枚、おまけも含めると146枚のスライドは読み応えがあります!

FastAPISQLAlchemyを組み合わせることは多いので、SQLModelで作ったモデルをそのままFastAPIのレスポンスに使えるのは結構便利ですね。私もSQLModelを使ってみたいと思います。

みなさんもCfPへの盛り込みすぎには気をつけましょう🥲

私もCfpに盛りすぎちゃってスライド作成が大変だった同志です。

Rustを活用したPythonライブラリの開発

Rust製Pythonパッケージの開発手法を紹介しています。近年はRuffPyDanticなど、Rust実装により高速化を図ったパッケージが増えてきましたね。

Rustは全く門外漢ですが、コードさえ書ければPythonへの組み込みは意外と難しくなさそうな印象でした。Python自体もFaster CPythonプロジェクトにより徐々に高速化されており、今後の更なる性能改善が期待されます。

データサイエンスのフルサイクル開発を実現する機械学習パイプライン

MLOpsの改善事例です。LuigiAmazon SageMakerPrefectというワークフロー・パイプラインの変遷を通じて、当時の課題や解決方法の模索を追体験できます。

Python製ワークフローではAirflowが真っ先に思い浮かびましたが、Prefectも結構使いやすそうですね。

AirflowMWAA(AWS)Cloud Composer(Google Cloud)Azure Data Factoryなど主要なプラットフォームにも統合されている点が強みですが、小規模な開発と運用であればPrefectから始めてみるのもアリだなと思いました。

実践Dash - 手を抜きながら本気で作るデータApplicationの基本と応用

Dashによるローコードな可視化ツール作成のセッションです。Steamlitよりも(比較的)レイアウト変更が柔軟でデータ可視化に強い、のがDashの特徴のようです。

どんなLow-codeでもちゃんとやろうとするとLowじゃなくなる

はまさに真理で、「要件やこだわりを思い切って削れる覚悟」が無いと追加機能がどんどん膨らんで結果的にハイコード開発になりがちだなぁと実感しています。

Pythonで3次元CGを作りたい人のためのPyVista入門

3DのCGを作成できるPyVistaの紹介です。基本的な形状のポリゴンやテクスチャマッピング、光源の設定など、代表的な処理ができるようです。3D開発って敷居が高いイメージでしたが、こんなに簡単にできるとは驚きでした。

Pythonと相互運用可能な静的型付け言語Erg

Pythonの欠点を補完することを目的とした新言語Erg開発のプレゼンです。どのような言語にも何らかの欠点がある中、外部パッケージに頼るのではなく「新しい言語を開発する」というモチベーションは凄いと思います。

プロダクションでのPython非同期ユースケース - Trio/Trio-Utilを中心に

ロボットを自律制御するための非同期処理の開発事例です。

非同期処理=asyncioと思いがちですが、あえて外部パッケージのTrioを当時採用した理由やその効果が解説されています。「構造化された並行性(Structured Concurrency)」という概念は勉強になりました。

ところでnursery(保育園)ってAPI名はセンスありますね。

Getting Started with Open Source Contributions

オープンソースプロジェクトに貢献するための心構えやアドバイスについてのトークです。

  1. 初心者に優しく、活発で、自身の関心が強いプロジェクトを選ぶ
  2. まずはドキュメントの加筆・修正から始め、コントリビュートの手順を習得する
  3. イシューを眺め、自分が取り組めそうな課題を探したり、イシューにコメントする
  4. バグのレポートや修正を通じて、メンテナーとの対話を深める
  5. 自身のアイディアや機能追加を提案してみる

のように、難易度が低いものから徐々に取り組むことで、最初から大きな失敗をすることなく継続的にコントリビュートできそうです。

Be polite and patient in all interactions.
(あらゆるやり取りにおいて、礼儀正しく辛抱強くあること)

は特に大事なスタンスだと感じました。

pytestプラグインを開発してDRYに自動テストを書こう

複数のプロジェクトで共通的に使用するテスト用処理をプラグイン化した話です。

プラグイン開発と聞くと難易度が高そうですが、pytestでは意外と簡単に作れるんですね。プロジェクト数が増えてconftest.pyの管理が大変になってきたらやってみようと思いました。

まとめ

本記事では、PyConJP2024の発表スライドを紹介させていただきました。

次回のPyConJP2025は、2025/9/26-27に広島にて開催予定です。来年度のCfpにも応募予定ですので、また会場で発表できる日を楽しみにしております。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?