小門照太
PyCon APAC開催概要
PyCon APACはアジア太平洋地域におけるPyConのオーガナイザグループであり、毎年持ち回りで開催されています
開催日時 | ワークショップ、スプリント:2024年10月25日 カンファレンス:2024年10月26日 |
---|---|
開催場所 | インドネシア ジョグジャカルタ |
URL | https:// |
参加の目的
プロポーザルが採択され、スピーカーとして30分のセッションで登壇しました。
発表したトークのタイトルは
テーマを選んだ理由
今回のトークは2024年9月に開催されたPyCon JP 2024で話したものと同じ内容でした[1]。
また、私はそれまでRust言語に入門したことはなく
「“Pythonで利用できるライブラリをRustで実装する”
準備
以下がPyCon JPおよびAPACでの発表に至る簡単な時系列です。
- 5月31日:プロポーザル期限
(PyCon JP 2024) - ※期限ギリギリで提出
- 7月11日:採択通知
(PyCon JP 2024) - 7月14日:プロポーザル期限
(PyCon APAC 2024) - ※期限ギリギリで提出
- 8月2日:採択通知 (PyCon APAC 2024)
- 9月28日:発表本番
(PyCon JP 2024) - 10月26日:発表本番
(PyCon APAC 2024)
PyCon APACにプロポーザルを提出したのはPyCon JPの採択通知の後でした。同僚のrhoboroが
PyCon JPとAPACのスケジュールの差はちょうど1ヵ月程度でした。そのためPyCon JPで発表した内容、資料を英語に翻訳して準備するのにちょうど良いタイミングだったと思います。
発表内容
改めて発表タイトルは
本題はRust言語の概要と、Rustを使ってPythonライブラリを開発する方法について、でした。PyO3とmaturinによるサンプルコードを例に、Rustで実装したコードをPython向けにビルドする方法を説明しました。またベンチマーク結果として、一般的にPythonよりも処理速度が速いことを紹介しました。
最後に実際の活用例としてpydantic-coreの実装にも触れました。これは上記で説明したPyO3/
発表資料、サンプルコードはGitHubから参照できるようになっていますので、ぜひご覧ください。
- PyCon JP 2024
- PyCon APAC 2024
発表を終えて
PyCon JPでもそうでしたが、発表後は多くの方が話しかけてくれたり
「登壇ドリブン学習」
カンファレンスでの登壇はプロポーザルを提出しない限り機会を得られません。プロポーザルのテーマを
勢い半分でもいいから"プロポーザルを出す!"ことの重要さを改めて実感しました。また、PyCon APACのプロポーザル提出のきっかけを与えてくれた同僚
印象に残ったキーノート:The Language of Programming Languages
我々開発者がプログラミング言語を扱う上での自然言語との関係性についてのトークでした。
プログラミング言語とは人間からコンピューターへ命令するためものですが、このトークでは人間同士のコミュニケーションを切り口とした自然言語に焦点があてられました。
はじめに
前半では、プログラミングと自然言語の歴史的な関係性について述べられました。
- Pythonコーディングをするときは、2つの言語を知っている必要がある。英語とPython。
- 3分の2のプログラミング言語は英語を母国語でない作者によって生み出された
- しかし、プログラミング言語の構文には英語が用いられている
- それは英語が世界で最も話者人口が多いから
システムで使用される言語
続いてコンピューターシステム内の
Code | Character |
---|---|
U+06A0 | ڠ |
U+B420 | 될 |
U+4740 | 䝀 |
U+A9C5 | ꧅ |
U+1F910 | 🤐 |
今日、UTF-8はさまざまな環境で標準として受け入れられているが、Pythonは未対応。
- ASCII互換
- JSON、TOML、YAML
- 多くのテキストエディタやウェブサイト
- プログラミング言語: Node.
js、Go、Rust、Java Python
LLMと言語
講演の後半ではLLMにおける多言語化の状況や課題、またLLM言語を活用してどのように言語の壁を取り払うか、というビジョンについて述べられました。
- Multilingual Large Model and Curse of Multilinguality
(大規模多言語モデルと多言語の呪い) - …大規模言語モデルを英語以外の言語で利用すると精度が下がってしまう場合がある。
- 言語モデルに与える文章
(プロンプト) はトークンに変換される - 頻繁に出現する
(英語の) 単語は固有のトークンを持つが、そうでない単語は複数のトークンで構成される - 約96%のトークンは英単語で、残りの4%は他の言語によるもの
- したがって、言語モデルを英語以外で利用しようとしても同じようには反応しない
- ヒンディー語では、同じ文でもトークン数が最大10倍になってしまう例も
言語モデルには
I'm writing an email to a colleague at work and want to introduce myself in Javanese.
What would be a formal introduction that is friendly and encourages us to work together well?(職場の同僚にメールを書いていて、ジャワ語で自己紹介をしたいと思っています。
友好的で、一緒にうまく仕事ができるように促すような正式な自己紹介はどのようなものでしょうか?)
まとめ
総括として述べられた
- 英語が母国語でない人々を受け入れるコミュニティを奨励しよう
- 英語が母国語でない人向けのツールやリソースを開発しよう
- 英語が母国語でない人との仕事では、コミュニケーションの主言語に母国語を使おう
- 英語圏以外の人がプログラミング言語にアクセスしやすくするためのプロジェクトに貢献、支援しよう
- 英語を話す人は、新しい言語を学ぼう!
途中のスライドではジャワ語をもじった
印象に残ったトーク:Don't break your library users
- スピーカー:Dima Tisnek
- リンク:https://
pretalx. com/ pycon-apac-2024/ talk/ SFZRBY/
発表概要は以下のように紹介されています。
PyPI is full of amazing libraries. How did they do it? What does it take to keep a library relevant? What is the art of compatibility? Who are the users and where to find them?
Pythonライブラリの提供者に対して、ユーザーの利便性を維持する秘訣や互換性についての内容でした。発表者の過去の経験に基づき、具体的なコード例やそれらの教訓について話されました。
例:型チェッカーの破壊
はじめに、引数の変更がmypyなどの静的ツールや型チェッカーに与える影響について、例示を踏まえて紹介されました。
以下の関数コードがあったとする。
def order(food: str, quantity: int):
if food == "Bakso":
return cook_bakso(quantity)
elif food == "Bakmi":
return prepare_bakmi(quantity)
else:
raise ValueError("Only Bakso or Bakmi")
これを以下のように型ヒントを変更することを考える。
- def order(food: str, quantity: int):
+ def order(food: Literal["Bakso", "Bakmi"], quantity: int):
if food == "Bakso":
...
これは安全かそうでないか?
関数の処理で行っていることはfood == "Bakso"
という比較演算であり、これはstr型のみに限定されない[3]。
このような場合に、Literal["Bakso", "Bakmi"]
と型ヒントを変更してしまうと、利用者の静的チェッカーのテストを壊してしまう場合がある。
テストの破壊
続いて、ユーザーがテストでモックを使用している場合に、そのテストに破壊的変更を及ぼすケースが紹介されました。
class Warung:
- def order(self, food: str): ...
+ def order(self, foo: str | bytes): ...
変更前の状態でユーザーがWarung
クラスをモックしていた場合にも、型チェッカーによってエラーを発生させることとなる。
class MockWarung(Warung):
def order(self, foo: str): ...
#[mypy] Argument 1 of "order" is incompatible with supertype "Warung"; supertype defines the argument type as "str | bytes"
まとめ
ライブラリ開発者が変更を加える際は、ユーザーの視点で考えることの重要さが強調して述べられました[4]。たとえば、ライブラリの新しいバージョンがリリースされたらユーザーはいつか移行する必要があるので、変更を早めに発表したり、移行方法のドキュメントを提供することが重要です。
それ以外に以下の観点が紹介されました。
- ライブラリ利用者の多数派の影響をよく考えるべき
- 「ユーザーのことを知る」
- ユーザーのテストを実行じよう
- マジで実行しよう
- 全部実行しよう
- 過去のバージョンに遡ってテストを実行しよう
- 概念的なアドバイス
- 開発者の目線で判断しがちだが、ユーザーの目線を学ぶべき
- 将来の後悔を最小化する
- 複数の選択肢がある場合は
「ユーザーのコスト」 に焦点を当てよう - 後戻りすることも重要
- 複数の選択肢がある場合は
また
参加者との交流
キーノートスピーカーのAnthony氏と廊下で話す機会がありました。Anthony氏は9月に開催されたPyCon JPでもスピーカーとして日本に来ていましたが、直接話をするタイミングはありませんでした。
PyCon JPでのライトニングトークが印象に残っており、それについて聞いてみました。執筆時点
また、PyCon JPのLTで動かしていたアプリのコードも教えてもらいました。
クロージング
カンファレンス最後のクロージングでは、ライトニングトークやクイズイベントが開催されました。
クイズイベントは
個人的に印象に残ったのは、Guid van Rossumの累計コミット数を多くの人が正答していて
最後に、次回のPyCon APAC 2025はフィリピンでの開催に決定したとのこと。日程は2025年3月1日~2日
- PyCon APAC 2025
- URL:https://
pycon-apac. python. ph/
また、プロポーザルの受付期間もすでに始まっています
おわりに
初めての海外登壇
また今回はPyCon JP Association運営の鈴木たかのりさん、寺田さん、清水川さんなど日本のメンバーも多く来ていたのは心強かったです
今後もPyCon JPをはじめ、Pythonコミュニティに携わる機会を作っていきたいと思います。