PyCon mini 東海 2025
posfie(有志):
朝
7:39 東海道新幹線 東京駅発。
自由席、3人掛けの通路側を確保
しまった3分待って次のに乗ればコンセントが確保できたな..
9:16 名古屋着
9:30 住よしできしめんを頂く
9:40 東山線 名古屋 発
新幹線出口から東山線乗り場までがまだちょっと迷う
9:50 東山線 栄 着
10:00 会場着
10:30 ~ 11:20
村橋 究理基 さん
https://scrapbox.io/files/690e9e504d91d1b411121c17.png
「タイトルが固い」w
shimizukawa.icon 語り口が軽快で面白い
shimizukawa.icon 開始15分、Rubyの話を経てやっとPythonの話w
RaspberryPiでコマ撮りした写真をタイムラプス動画にしてYouTubeに上げている
https://www.youtube.com/watch?v=Mjd5fyQaQ0w
プログラミング
https://scrapbox.io/files/690ea8c82a3dd0404a9f1e37.png
質疑応答
Q. (はむかず) Pythonはみんな独学?
A. 公式には各学科でPythonを教えていることにはなっていない。解析にはmatplotlibなどが必要で独学で学んでいるし、教員も教えている。
Q. それならば学校でPythonを教えようということにはならないんでしょうか?
A. Ruby振興に松江市がお金を出しているという大人の事情もあるが、C/C++は基本的に教えていることもあり、Pythonは独学でも学べる程度の基礎力はある。なので、Pythonは独学できる。
11:35 ~
PyScriptとOpenCVを使ってWebで画像処理AI
https://scrapbox.io/files/690ead92f1323d9e7950f06a.png
Hello World
Tic Tac Toe
Folium geographical data 地図表示
AI画像処理
ライブラリ
PyScriptでメディアデバイスが扱える
shimizukawa.icon Webカメラにアクセス!なるほどー
shimizukawa.iconインストールせずにけっこう色々できるんだなあ
推論自体はそんなに遅くないけどCanvas反映が遅い
create_proxy を使うと速いけどメモリリークがあったので今回は避けた
今回のスライドは全てGitHub Pagesで動作してます
質疑応答
Q: (@aodag) Python処理系でWASM対応からWASI対応にTierが上がってきているけど、PyOdide以外の処理系(Rust)のPyScriptもありますが、そちらはどうですか? A. わかんないです
S. SPy(静的型付けPython)の話があった。他は分からない。
Q. (@nikkie) GitHub Pagesで動かせるの良いですよね。PyOdideを直接使っていてそれで良いじゃん!と思ってるんですが、PyScriptの推しポイントを教えてください A. Pythonそのままのソースコードをアップロードできるのが良いよね、という主張が公式でされてます
A. PyOdideのラッパーとして「使いやすくしている」のが推しポイントだと思います
Q. さっそくPyScriptでカウントダウンタイマーを作ってみたんですが、Pythonを使ってもらいたい人にいちいちPythonインストールしてもらうのが面倒なので、ブラウザで使ってもらうのに気をつけるべきことがあれば教えてください
A. ダークITにならないこと(会社に黙ってやらないこと)
A. 公式では、教育用途に適してますということを言ってます
12:05 ~ 12:30
個人ではじめるマルチAIエージェント入門 〜LangChain × LangGraphでアイデアを形にするステップ〜
https://scrapbox.io/files/690eb3a83fab03fb0bfa0097.png
きっかけ
児童文学サークル出身だったこともあり、文学を小学校低学年向けに変換するAIエージェントを作った
Agent実装
https://scrapbox.io/files/690eb47f9f6ee3c0c4a159ea.png
shimizukawa.icon マルチエージェントのお手本っぽいチャート。おもしろい
先日 1.0 がリリースされた
楽に開発できるようにする
JSONを扱うと補完も使えず手間が多かった
エージェントのワークフローをグラフ構造で定義
各エージェントが扱うデータをステートとして渡せる
graph.get_graph.draw_mermaid_png() で Mermaidで出力される! shimizukawa.icon便利ぃ~
LangGraphの実行結果を人間が評価してコンソールinputで評価値を入れてLangSmithへ
shimizukawa.icon便利いい!!
エージェントの質を上げる
一般的にその作品で言及される名言、印象的なフレーズを TavilySearchAPIRetriever でWeb上から取得して取り込む
文体模倣エージェントを追加し、同じ作者の別作品の文体を模倣させて、趣を取り戻す
質疑応答
Q. 一番苦労した課題は?
A. 一番苦労したのは(書いて無くて)文体
Q. LLMモデルによって変わったりしますか?
A. 変わると思いますが、今回はそこまで比較できていない
A. ChatGPT-4.1, 4.5, 5 で比較したら、4.5が良かった。5だと短文になりすぎてしまった
Q. (@takanory) めっちゃ面白かった。最後の文体模倣エージェントのステップですが、文体固定なんですか? A. 最初の方で模倣する文章を入力させてます
A. 文章がないと模倣できないので、同じ作者さんの子供向け文章があれば良いけれど、他の作者の文体を使うのは避けたかった。一般的な子供向け文体のようなものがあればそういうのでも良いかもしれない
12:30 - 13:50
ランチタイム!
今回はお弁当が2種類!
尾張御膳(おわりごぜん)と十二単(じゅうにひとえ)
https://scrapbox.io/files/690ec229e659f99a99029d40.png
十二単の方
https://scrapbox.io/files/690ec2a552d6ae8e6ca3765c.png
尾張御膳の方(2つめ食べた)
https://scrapbox.io/files/690ecaffdabb6555487079e9.png
https://scrapbox.io/files/690ecb3c98ea1a07c7f79d04.png
スクリーン前にコミュニケーションエリアが用意されていて、初めて会った人同士で話しやすい環境作りがされてました
13:50 -14:15
Pythonでやってはいけないやってみるべきこと
https://scrapbox.io/files/690ed3a1d3e7a87c4bcd1989.png
「昼ご飯の後のまったりとした時間」に「技術の話をしますよ」
安全で窮屈
「Pythonってダイナミックな言語なはずなのに静的型チェックとかなんなんだよ!」
冒険的プログラミング
悪いことをしよう
shimizukawa.icon 語り口が超おもしろいw
「違う自分になってみよう」
code:py
cat.__class__ = Dog
cat.greet() # => わん
「いくらやっても、Pythonの手のひらから出られない、Pythonの手のひらってどこだよ」
shimizukawa.iconヘビだからねw
まとめ
やってみるべきこと
ふとした疑問を試してみる
さらに疑問を投げかける
黒魔術との境に気をつける
黒魔術に気付く
やってはいけないこと
やってみたことを武勇伝のように伝える
質疑応答
Q. 率直にお伺いしますが、仕事でやらかしちゃった事ってありますか?
A. 存分に.... あ、具体的に聞きたいですか? 本番のOracleのセッションをロックしたことがあります
Q. 素敵なマジックの紹介ありがとうございました。仕様上ゆるされているから出来ていると思いますが、これは仕様でも禁止されたほうがいいと思いますか?
A. けっこう難しい話なんですが、__class__ の差し替えは出来なくて良いと思います
Q.(@shimizukawa) __class__ の差し替えができなくなると「古いclassを参照していたpickleのロード」で困りませんか? A. まあそうなんですが、まあそうですね。そうなんだけど、それってZopeの話でしょ?Zopeの人たちはなんとかすると思うので良いと思います。
Q. (@terapyon) Pythonの仕様が変わって出来なくなる黒魔術もあると思いますが(True = Falseの代入とか)、いま禁止して欲しいそういったことはありますか? A. 今日話した範囲は「あえてやろうとしなければ出てこない」黒魔術だと思うので、禁止しなくてもよいかなと思います
14:20 - 14:45
APIのテストデータを自動生成できるSchemathesisの紹介
https://scrapbox.io/files/690ed3c63dc6293cc85cd20d.png
「API実装を直したけど、まだコケる.. こんなデータでAPIエッジケースを見つけて来て正直ムカつきます」
shimizukawa.icon ww
https://scrapbox.io/files/690ed52193d3a1a81a414140.png
エラーがある場合に2回目のテストは速い
Schemathesisはテストデータをキャッシュしていて、次のテストでエラーになりそうなケースを優先的にテストしている ところでなぜ .schemathesis ではなく .hypothesis なのか?
Djangoの場合
人間がテストを書かなくて良いのでは?
そんなことはなかった
Schemathesisのテストは、どんなテストが行われるのか分からないしコントロールできない
テストコードから仕様を読み取れなくなる
使いどころ
エッジケースを見つける
仕様と実装の乖離を見つける
質疑応答
Q. エラーになったらキャッシュして次のテストで優先的にテストするという話があったが、修正で別の所を壊してしまった場合、前の成功したテストは再実行される?
A. ちょっと分からない
A. よく分からない。a, b 以外の長いへんなデータを渡していて、それがどう作用しているのかよく分からない
Q. テストパターンで大量にテストケースを回したい場合は良いなと思うけど、境界値のテストがちゃんと入ってるかの指定はできる?
A. できます。パラメータに最大値最小値などを指定してカスタマイズできます。
aodag: そうなると、pytest.fixture であらかじめ用意したデータを投入しておいてテストとかはできる?
A. できます。pytestの仕組みでデータ投入しておけます
14:55 - 15:20
稼働中のバッチアプリケーションを依存性逆転の法則でモダナイズ - 型安全と堅牢なテストによるリプレイス戦略
https://scrapbox.io/files/690edc1ed493b5d8e6066fd2.png
エンジニアでない方が書いたPythonコード
ビジネスの根幹ではあるけど本番で動かすには安全ではないコード
shimizukawa.icon というニュアンスのことを言われていた
shimizukawa.icon dfが登場したら研究職と思え
テストコードなし、試行錯誤相当、Jupyter Notebookから始まったコードがほとんどそのまま本番バッチで動いている
アンチパターン1
見通しが悪い
アンチパターン2
グローバル関数の乱立
対策1
対策2
collection.abc を使ってメソッドの実装を強制
インフラレイヤーが実装詳細ではなくインターフェースだけを把握すればよい
make docker/setup で完結
テストも
make docker/test
質疑応答
Q. (nibu) レイヤー構造化したことで逆に認知負荷が高まることもあると思いますが、どうでしたか? A. 混乱は、無かった。それ以前がノールールだったので、特に混乱はなかったです。
A. READMEは文章なので気付きづらいですが、Makefileは劣化が気付きやすい Q. (@aodag) レイヤー構造にみんな沿ってくれますか?あるいはどうやって強制していきますか? A. もらうときは構造に沿って無くてもよいけど、そのまま本番に持っていくことは防いでいます
エンジニアが、水際で防いでいます
15:35 - 16:00
型でつなぐFastAPI × フロントエンド活用術
https://scrapbox.io/files/690ee4d962fcdc1b29c7a136.png
Webフレームワーク比較
FastAPI Operation ID 便利
APIのエンドポイント
Open API上ではドキュメントのURL hash になる
まとめ
軽量、高速、柔軟なファイル構成
質疑応答
A. genファイルはHey APIのアウトプットで、それを参照してクライアント生成したりします Q. 本番で使っても大丈夫なもの?
A. 大丈夫です
16:05 - 16:30
Pythonで構築する人口移動ナレッジグラフ: GraphRagを用いた意味的地域検索への応用
https://scrapbox.io/files/690eec46e659f99a9903b624.png
SSDSE Standardized Statistical Data Set for Education 教育用標準データセット
欠損値がなくデータが膨大で解説PDFもあり至れり尽くせり
Pandas みんなまだ使ってる?
データ把握しようとおもったら、Google Spreadsheet 一択
Gemini 内蔵なので自然言語で質問もできる
テーブルデータから知識グラフの構造へ
知識グラフとは
https://scrapbox.io/files/690ef6abe424c6086fe9d395.png
ナレッジグラフを動かすには、そこそこお金がかかるので注意
質疑応答
Q. ファイル群を作ってそれをクエリできるようにしている?
A. そんな感じです
A. 名古屋から三重に移動したデータというのがあるので、それを使ったけれど、今回はデータの関係のみ(重みなしということかな?)
休憩
テラスからの眺め
https://scrapbox.io/files/690ef6c949b64884c324c17e.png
https://scrapbox.io/files/690ef6d3e37cda5edf0d63f4.png
去年作りかけだったビルが完成している!!
まだ完成ではないらしい
16:50
LT
oEmbedPyを使って、ドキュメントに◯◯◯を埋め込もう
https://scrapbox.io/files/690ef82b590f3b2bdde3ad47.png
民主的なフォーマット
メジャーどころが対応している
https://scrapbox.io/files/690ef824d6d85de7404e0913.png
shimizukawa.icon おーすごい
他にPyPIに3つくらいoEmbedのPythonクライアントが公開されてるけど、全部メンテされてない
自分で使いたかったら、自分で盆栽しましょう
みその (miso taku)さん
巡回セールスマン問題を数理最適化で解いてハシゴ酒の最短ルートを見つける(MIP, Google Maps API)
https://scrapbox.io/files/690ef93874d75bfd59528a26.png
組み合わせが膨大で簡単には解けない
数理最適化を解くMIP
最短距離でハシゴ酒
Streamlitで作成した
行ってきた
https://scrapbox.io/files/690ef97072e11ea6647a240a.png
3件でおなかいっぱい
shimizukawa.iconウケるww
まとめ
ハシゴ酒に巡回セールスマン問題は必要ない
🐱絵文字をドキュメントにいれよう
https://scrapbox.io/files/690efa1599628b19bb0706f1.png
https://scrapbox.io/files/690efb8d9f5f1e98113e49a9.png
17:10 -
クロージング
https://scrapbox.io/files/690efbb3c1502167dc02d43b.png
https://scrapbox.io/files/690efbb92fb7fdd2b479c82c.png
「座長からのあいさつ」を全部しゃべっちゃったw
プレゼント企画
https://scrapbox.io/files/690eff359f6ee3c0c4a31a5e.png
https://scrapbox.io/files/690eff3cc800d9536e1295b6.png