🐍

堅牢.py #1 に参加しました

に公開

はじめに

堅牢.py #1 というイベントに参加してきました

今回が「初開催」とのことですので、イベントの内容・雰囲気・参加した感想を紹介します。

また、私自身も本イベントで登壇し、再現性の高い Python 開発環境を構築する方法について発表しました。
この記事では、イベントレポートに加えて、登壇スライドの背景についても触れていきます。

堅牢.py とは

connpass のイベントページより引用します。

https://kenro.connpass.com/event/371009/

堅牢.py はPythonを安全に扱うための技術に興味を持つエンジニアのイベントです。

15分のショートセッションを披露していただきます。本イベントのテーマである「堅牢にPythonプログラムを作成する技術」について思う存分語ってください!!

テーマ例:

  • Typing Module
  • Package Manager, Lockfile
  • 静的解析, 実行時型解析
  • 非同期処理
  • その他、Pythonプログラムの堅牢性に貢献する知見


開催のきっかけ

主催者の方々は、「Python ソフトウェアの堅牢性」に特化したイベントが存在しないことに気づき、そのテーマに関心を持つ人たちが一度に集まり、議論や知見共有ができる場を作りたいと考えられたそうです。

開催の経緯や背景については、ブログで詳しく発信されています
ぜひご覧ください

  • しゅんそくさん(@shunsock)の記事

https://note.com/shunsock/n/n35350d54dd0c

  • にっきーさん(@ftnext)の記事

https://nikkie-ftnext.hatenablog.com/entry/announcement-kenro-py-1-durable-python-techniques

セッション一覧・資料リンク

1. テストを書かない研究者に送る、最初にテストを書く実験コード入門 / Let's start your ML project by writing tests

  • 登壇者:しゅんけーさん

https://x.com/shunk031

  • スライド
  • サンプルコード

https://github.com/shunk031/pytest-ml-tdd-example

2. モノリスDjangoにおける堅牢性の追求

  • 登壇者:skokado さん

https://x.com/_skokado

  • スライド

https://docs.google.com/presentation/d/e/2PACX-1vQrXQD8m1aiWdqSWWWBF-XxtGy1eH66FdSB4TubHwuR6C1rNv4-Fv_oQneXZX-hhECS-CjP8oZWky-H/pub?start=false&loop=false&delayms=3000&slide=id.g2f0893b24e5_0_0

  • サンプルコード

https://github.com/skokado/speak/tree/main/kenro-py-1

3. numpyやPyTorchの配列にdtypeとshapeをアノテーションするjaxtypingのススメ

  • 登壇者:ころんびあさん

https://x.com/colum2131

  • スライド
  • サンプルコード

https://colab.research.google.com/drive/1wdJXEPO3PpKLF09xJq3H5AFee6H1vy5_?usp=sharing

4. 再現性の高い Python 開発環境を作る - Python ライブラリは uv / その他ツールは Nix で固定する

  • 登壇者:ryu(本記事の筆者)

https://x.com/ryu_trifolium

  • スライド

感想

会場

会場は「株式会社ユーザベース」様でした。
東京駅から歩いて数分ほどの場所にあり、アクセスの良さが印象的でした。

https://www.uzabase.com/jp/company/

当日の様子

主催者のにっきーさんが、当日の投稿をまとめた X スレッドを公開されています。

https://x.com/ftnext/status/1991729880959225970?s=20

セッションごとに質疑応答の時間が設けられており、どの回も活発な質問が飛び交っていました。

参加者から多くの手が上がり、登壇者の方がすべての質問に答えきれないほど盛況だったのが印象的でした。

各セッション

1. テストを書かない研究者に送る、最初にテストを書く実験コード入門 / Let's start your ML project by writing tests

「テストを書く=実験設計を明示する」というメッセージが明確で、とても印象に残りました。

pytest を「単体テスト専用のツール」という印象で捉えていましたが、本セッションではタスクランナーとしての活用方法が紹介されており、新しい発見がありました。

セッション外の話題として、登壇者の方がイントロで「筋の良い Python の書き方」をまとめたコラムを紹介されていました。
型ヒントなどについて丁寧に解説されており、とても分かりやすい内容でした。

https://note.com/shunk031/n/n02edafb543a6

2. モノリスDjangoにおける堅牢性の追求

最後のスライドにあった「初期のコードはコピペされ増殖する、初めが肝心」というメッセージが印象的でした。

私はこれまで Django を触ったことがなかったのですが、設定を Python で記述する(settings.py)という点を初めて知りました。

セッションでは、個々の設定値に型ヒントを付けるだけでなく、独自定義の設定を dataclass で表現し、型が明示された ≒ 堅牢な設定管理を実現するというアプローチが紹介されていました。

また、設定ファイルを用途ごとに分割して管理する方法も提案されており、その背景として「モジュラモノリス」という概念が登場しました。
私はこの用語を今回初めて知ったのですが、近年注目を集めている概念とのことです。

https://zenn.dev/loglass/articles/d2ea268a7522be

IaC ツール(Terraform)やプログラムのクラス設計においては、機能や関心ごとに分離することは自然な発想かと思います。
しかし、モジュラモノリスという観点からサービス構成を分析するのは面白そうと感じました。

アプリケーション全体の堅牢性を考える上で、とても示唆に富んだ内容でした

3. numpyやPyTorchの配列にdtypeとshapeをアノテーションするjaxtypingのススメ

jaxtyping の概要と活用方法について解説されていました。

セッションでは torch.Tensor が関数の引数や返り値に使われている場合を例に挙げていました。
ドキュメンテーション文字列(関数直下の """ docstring """ の部分)を書かずとも、型ヒントだけで引数や戻り値の構造を明確に示せるのは魅力的だと感じました。

解説 1

解説 2

https://github.com/patrick-kidger/jaxtyping

また、登壇者の方は jaxtyping を実際に試せる Google Colab 環境を用意されており、準備が凄いと思いました。

Google Colab 環境

https://colab.research.google.com/drive/1wdJXEPO3PpKLF09xJq3H5AFee6H1vy5_?usp=sharing#scrollTo=b1Vo3flCQp3Q

4. 再現性の高い Python 開発環境を作る - Python ライブラリは uv / その他ツールは Nix で固定する

Nix と uv を活用した開発環境構築についてお話ししました。
発表時間がギリギリとなってしまい、質疑応答の時間を取れなかった点が心残りです。

セッション中、uv の使用率アンケートした際、ほぼ 100% が利用していると回答しており、驚きました
また、Nix もアンケートしたところ、利用者はわずか数人でしたが、聞いたことがある方は 7~8 割程おり、ゆっくりと広がっているのかなと感じました。

Nix 利用者が増えて、日本語でノウハウを共有する機会が増えたら嬉しいなと思っています。

スライドの環境に何故行き着いたかという背景が知りたい人用

長くなったので折り畳みにしました。

時間の都合上、背景の説明を省略してしまったのですが、過去の失敗体験がきっかけで「コード」だけでなく「環境の堅牢さ」にもこだわるようになりました

プログラミングを始めたばかりの頃、Python ライブラリを pip install で直接導入していました。
当初は特に問題なかったのですが、数か月後に同じプロジェクトを再利用しようとした際、当時の環境を再現に苦労しました。

その後、uv を使うようになってからは Python ライブラリの管理が楽になりました。
しかし、ある時、PC を引っ越す機会がありました。
Python 以外のツールを再現する作業が非常に手間で(そもそも何を入れていたか覚えていない)、大変面倒な作業でした

その経験から Docker を使ってプロジェクトごとに独立した環境を構築するようになり、最終的に「手軽さ」と「再現性」を両立できる Nix に魅力を感じるようになりました。


話が脱線しますが、Nix に移行して以降、新しい PC を購入した際、簡単に環境を再現できて感動しました。

Nix をインストール  
→ home-manager をインストール  
→ git clone  
→ home-manager switch

これだけでメイン PC と同等のユーザー環境が再現できます。
個別のプロジェクトも、git clone して nix develop すれば、後は放置しておけば構築が終わります。

懇親会

ASIAN RESTAURANT BASIL というカレー屋さんでした。

https://www.marunouchi.com/tenants/10293/

丁度いい写真が無かったので、にっきーさんのツイートを勝手に引用させていただきます。
カレー以外にも前菜やサラダもあり、とても美味しかったです。

https://x.com/ftnext/status/1991537235582415208?s=20

会の途中で席替えタイムがあり、色々な方と交流するよいきっかけとなりました。
(もっと複数回席替えがあっても良いかもと思いました)

私がお話しした方は機械学習系の方が多い印象でしたが、アプリケーション系の人もいたらしいと聞きました。
県外から来られている方もおり、皆さん熱意が凄かったです。

おわりに

どうやら次回開催の目途が立っているらしいので、次回を楽しみに待っています!

Discussion