アイルランドで開催 ―EuroPython 2022レポート

#01EuroPython 2022 Day 1注目セッションと渡航や現地のあれこれ

鈴木たかのりです。アイルランドで開催されたEuroPython 2022に参加して発表などをしてきたので、現地の様子をこのレポートで伝えたいと思います。

EuroPythonとは

EuroPythonは、ヨーロッパ地域で開催されるPythonに関するカンファレンスです。毎年ヨーロッパの各地域で開催され、今年はアイルランドのダブリンで開催されました。なお、2020年と2021年はオンライン開催となっており、今回は2019年以来のリアル開催となりました。

なお、EuroPython 2019にも筆者は現地で参加しています。そのときの様子は以下のレポートを参照してください。

EuroPython 2022のイベント概要は以下の通りです。

URL https://ep2022.europython.eu/
日程 チュートリアル: 2022年7月11日(月⁠⁠、12日(火)
カンファレンス: 2022年7月13日(水⁠⁠~15日(金)
スプリント: 2022年7月16日(土⁠⁠、17日(日)
場所 アイルランド、ダブリン
会場 The Convention Centre Dublin
参加費 375ユーロ(約53,000円)
主催 EuroPython Society
EuroPython 2022 Webサイト

筆者はトークでの発表のために参加しました。カンファレンスのみに参加したので、キーノートやトーク発表などを中心にレポートします。

1回目はDay 1(1日目)のセッションの様子を中心にお伝えします。

会場到着から受付、オープニング

ホテルから歩いて20分くらいでカンファレンス会場です。カンファレンス会場はダブリン中心を流れるリフィー川沿いにあります。会場は外から見てかっこいいなと思いましたが、中もとてもきれいで過ごしやすい会場でした(縦移動が少し多いですが⁠⁠。

会場のThe Convention Centre Dublin
会場のThe Convention Centre Dublin

受け付け手前でボランティアスタッフにより2種類のネックストラップが配られていました。ストラップにカメラの絵が描いてあり、撮影OK/NGがわかるようになっています。その後、受付番号のアルファベットごとに窓口が分かれているので、自分の場所で受付して名札をもらいました。

受付
受付

受付で、名札に付ける「接触をどこまで受け入れるか」のステッカーを選びます。⁠ハグOK、握手OK、肘タッチOK、接触不可」の4種類から選べます。筆者が受付に行ったときには「握手OK」がすでになかったため、⁠ハグOK(Happy to hug⁠⁠」ステッカーをもらいました(会期中ハグはとくにしませんでしたが⁠⁠。このあたりの配慮は、今時の現地開催カンファレンスだなと思いました。ちなみにマスクは受付の写真を見てもわかるとおり、必須ではなく個人の判断にまかされています。ヨーロッパ全体的にそういう雰囲気だと思われます。

名札
名札

その後メイン会場に入りオープニングです。主催者であるEuroPython ScietyのChairであるRaquel Douから挨拶とイベントの案内がありました。ハイブリッドであることや、トーク以外の各種イベントの紹介などがありました。ホールは各座席で机を引き出すことができるようになっており、PCなどが使いやすいなと感じました。

オープニング
オープニング

Keynote 1:Python's role in unlocking the secrets of the Universe with the James Webb Space Telescope

Dr. Patrick Kavanagh
Dr. Patrick Kavanagh

最初のキーノートはPatrick Kavanagh博士による、ジェイムズ・ウェッブ宇宙望遠鏡の中で使われているPythonについてのトークです。ジェイムズ・ウェッブ宇宙望遠鏡はハッブル宇宙望遠鏡の後継として2021年に打ち上げられた望遠鏡です。この壮大な宇宙望遠鏡プロジェクトの中でもPythonが活用されているという興味深い話です。

たくさんの人の前で話すの久しぶりだそうです。キーノートこの日(7月13日)の直前(7月11日)には、宇宙望遠鏡が捉えた初のフルカラー画像が公開されたということが告げられました。筆者は全然知りませんでしたが、その場にはアメリカのジョー・バイデン大統領も同席していたそうです。この画像の作成にもPythonが使用されているそうです。

参考130億年前の銀河の姿を明らかに…ジェームズ・ウェッブ宇宙望遠鏡による初のフルカラー画像を公開 | Business Insider Japan

この宇宙望遠鏡はテニスコートくらいの大きさがあり、14の国が開発に関わっているそうです。この望遠鏡は2021年の12月に打ち上げ(Launch)られ、2週間かけて宇宙望遠鏡の形に展開(Deploy)されます。ロケットにおさまる形からテニスコート大に展開するわけです。しかも300以上の単一障害点(SPOF、Single Point of Failure)があり、1つでも失敗すると望遠鏡が使い物にならないそうです。ソフトウェア開発で日常的に耳にする言葉(Launch、Deploy、SPOF)も、宇宙が舞台になると重要さや影響範囲が全然違う意味を持つなと感じました。

1月に望遠鏡が無事展開(Deploy)されてから試験に6ヵ月がかかり、その後、鏡のフォーカスを合わせる作業に2、3ヵ月かかったそうです。鏡の調整が終わると画像が取得できるようになりますが、生(raw)データにはゴミの情報やエラーも含まれています。

そこでデータを修正するキャリブレーションパイプラインを構築して使用します。このパイプラインの構築には何年もかかったそうです。

キャリブレーションパイプライン
キャリブレーションパイプライン

このパイプラインはPythonで作られているそうです。パイプラインの最終チェックはこのトークの数日前に行われたそうです(ギリギリですね⁠⁠。このパイプライン(JWST Calibration Pipeline)の90%以上はPython製で、処理速度が必要なところはCも使っているそうです。そして、望遠鏡から送られてきたデータ自動で処理して結果となる画像などが取得できます。

参考JWST Science Calibration Pipeline Overview

パイプラインで扱うデータは基本的にSciPy、NumPy、Astropyなどを使用して、各ノードごとに独立して開発ができたことがメリットだと述べていました。また、このパイプラインの開発は公開して行われていたそうです。確かに調べてみるとGitHubのリポジトリがありました。パイプライン自体を実行するにはstpipeというライブラリを使用しているそうです。このライブラリも、このプロジェクトのために作られたようです。

作成したパイプラインが正しく動作しているか確認するために、テスト用のデータを作成するMIRISimというソフトウェアもあるそうです。MIRI(Mid-Infrared Instrument: 中間赤外線装置)は望遠鏡の画像データを生成する部分(だと思われます)です。その動作をシミュレートしてテスト用のデータを生成し、パイプラインの生成する最終的な画像がうまくできているかを確認したようです。確かに、宇宙に打ち上げないとテストデータが得られないとなると、それは確かに困るなと思いました。

そうして望遠鏡が取得したデータをパイプラインが処理し、最初の画像が取得できたのです。

宇宙規模のものすごいプロジェクトですが、普段自分たちがプロジェクト開発で行っていることと進め方については共通点が感じられました。長期間に渡るプロジェクトなのでもっといろいろ大変だったとは思いますが、基本的な進め方は同じなのだなと感じて勇気をもらえました。

Making Python better one error message at a time

スピーカーのPablo氏はCPythonのコアデベロッパーであり、Python Steering Councilのメンバーでもあります。この発表ではPablo氏が中心となってPython 3.10や3.11で実装したbetter error messagesについて語られました。

Pablo Galindo Salgado氏
Pablo Galindo Salgado氏

Python 3.9以前は構文エラーが出たときに、どこでエラーが発生しているかわかりにくいことが多くありました。例として最初に以下のエラーメッセージを表示し、なにが問題かわかるかを聴衆に質問しました。

  File "integrate.py", line 11
    def integrate(method, x, y, sol):
    ^
SyntaxError: invalid syntax	

当然ですが、ここだけ見てもエラーの原因はわかりません。元となるコードは以下のようなものです。エラーが発生しているの原因は、辞書の{が正しく閉じていないためです。

構文エラーのあるコード
構文エラーのあるコード

それから、いくつも正しい位置でエラーを指摘できないコードの例を示しました。一番お気に入りのエラーは以下のようなものだそうです。これは確かになにが問題かまったくわかりませんね。

File "example.py", line 10

    ^
SyntaxError: unexpected EOF while parsing

そこで、Pablo氏が中心となって新しいパーサー(PEG parser)を開発し、それによってエラーメッセージが新しくなりました。PEG parserはPEP 671で提案され、Python 3.9で採用されました。それ以前はLL(1) parserが使用されており、このパーサーは1990年から存在します。PEG parserによってコンテキストマネージャーをカッコで囲んで複数指定したり、matchcaseが使えるようになったそうです。

PEG parserによって新しくなったエラーメッセージの例を示します。たとえば、最初に出てきたような辞書が閉じていない例では、以下のように{が閉じられていないことを示してくれます。

my_dict = {"a": "b", "c": "d"

def foo(a, b, c):
    ...
  File "example.py", line 1
    my_dict = {"a": "b", "c": "d"
              ^
SyntaxError: '{' was never closed

しかし、実際にこのようなメッセージを追加することは困難だったそうです。適切なエラーメッセージを表示するには、コンピューターが「人がなにをしようとしているか」を理解する必要があります。たとえば以下のようなエラーメッセージを追加したいとします。

>>> x = [x, y x, w]
  File "<stdin>", line 1
    x = [x, y x, w]
            ^^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?

このようなエラーメッセージを出力するために、2つの要素がスペース開けて並んでいるときにこのエラーとするとしてしまうと、以下のようなパターンでも同じエラー(Perhaps you forgot a comma?)が出てしまいます。

>>> for variable collections:  # inキーワードがない
>>> kf"some_string""  # 文字列のプレフィックスが正しくない
>>> match foo:

このように間違えてエラーメッセージが出ないようにするために、さまざまなパターンに対応する必要があり、そこが難しいとのことです。

また、Python 3.11ではPEP 657によるよりよいトレースバックが実装されます。より細かくエラーが発生した場所を指し示すようになるそうです。これはコードとAST(抽象構文木)の情報を元に、エラーが発生した場所を特定しているそうです。

今後もさらにエラーメッセージを便利にしたいので、ぜひ開発に参加してほしいと語っていました。その入り口としてGuide to the ParserというPythonのパーサーに関するドキュメントが紹介されていました。このドキュメントの中にエラーメッセージを追加する方法も書いてあるそうです。

Python 3.10からエラーメッセージがわかりやすくなり、より初心者に優しいプログラミング言語になったと筆者も感じています。その中心となった開発者自信の口から、裏話や難しいポイントなどが聞けて、非常に有意義なトークでした。

その他のトーク

1日目のトークをいくつかざっと紹介します。

From pip to poetry - Python (many) ways of packaging and publishing

こちらはリモートでの発表でした。リモート発表はYouTubeの画面と同じものがスクリーンに表示されており、それを参加者が見る形式です。

リモート発表の様子
リモート発表の様子

発表の内容はPythonパッケージを作成、公開するためのツールのそれぞれの違いを紹介していました。pip、pipenv、poetryをそれぞれ紹介し、初心者向け、他のツールへの依存、仮想環境管理の有無など観点で比較していました。

Choosing the right database for your next project - Looking at options beyond PostgreSQL and MySQL

PyCon JPでも発表したことがあり、EuroPython Societyの元ChairでもあるMarc-Andre氏の発表です。このトークでは次の新しいプロジェクトをはじめるときに、より適切なデータベースを選択するためにいろいろなデータベースを紹介するという内容です。

最初にhttps://dbdb.io/というWebサイトが紹介されました。このサイトはDatabase of Databasesというタイトルで、800以上のデータベースの情報をまとめたデータベースです(面白いネーミングですね⁠⁠。プロジェクトではRDBのPostgreSQLやMySQLがよく使われていますが、世の中にこんなにデータベースがあるということには驚きました。

データベースのデータベース
リモート発表の様子

まず、よく使用されるデータベースとしてMySQL、MariaDB、PostgreSQLがあげられましたが、データベースを選定する際はその用途がOLTPなのか、OLAPなのかが重要だという説明が最初にありました。

  • OTLP:Online Transaction Processing、オンライントランザクション処理
  • OLAP:Online Analytical Processing、オンライン分析処理

また対象となるデータベースの複雑性(Complexity)についての観点がいくつか紹介されました。

  • Schema complexity:スキーマは単純か複雑か
  • Cardinal & Temporal complexity:カラム数が多かったり、行数が多いか。データは頻繁に更新されるか
  • Query complexity:クエリのパフォーマンスや結合が多いか
  • Deployment complexity:クラスターか。VM、コンテナーなど。ディザスターリカバリー対応が必要か
  • Operational complexity:マネージドサービスか、DevOps対応しているか、ダウンタイムなしでアップグレードが必要か

そのあとは、さまざまな特徴のあるデータベースをジャンルごとに紹介していました。組み込みDB、データウェアハウス、ドキュメントDBなどは聞いたことはありましたが、他にGPUベースのDB、時系列DB、Geo用DB、列指向DBなど、さまざまな知らないジャンルのデータベースがあることを知りました。

ある用途に向いたデータベースが存在しないか、Database of Databasesを見たりしてちょっと考えてみたいなと思うような発表でした。

CPython Developer Panel

CPythonのコアデベロッパーによるパネルディスカッションです。スピーカーは以下の7名です。名前は写真の左から写っている順番です。

  • Łukasz Langa:PSFがフルタイムで雇用している開発者、Blackの作者
  • Steve Dower:Windows上のPythonとセキュリティが専門
  • Mark Shannon:Faster CPythonチームのテックリード
  • Pablo Galindo Salgado:Python 3.10、3.11のリリースマネージャー
  • Batuhan Taskaya:パーサーとコンパイラーを担当
  • Ken Jin:typingモジュール、Python Fasterチーム
  • Irit Katriel:Exceptionグループの実装、Python Fasterチーム
パネルディスカッション
パネルディスカッション

Łukasz氏が司会進行で、他の6人が質問に回答するという形式で進行していきます。最初の質問は「Pythonへの初めての貢献について」です。

  • Steve: 最初の貢献はバグレポートでした。すぐに修正されたのでとてもびっくりしました。その後Windowsのインストーラーを手伝うようになりました
  • Mark: 最初のバグレポートは足し算に関するものでした
  • Pablo: 最初はドキュメントに対する貢献でした
  • Batuhan: Python 2から3に移行するときに非推奨ではない機能に対して変更を加えました
  • Ken: 最初の貢献はpickleに関するものですが、そのPRはまだマージされていません。その後ドキュメントに関する貢献をしました
  • Irit: 自分たちのコードがPython 3.7から3.8に更新するときにテストが落ちた。そこにはPython 2.6からGCに関するバグを見つけて報告した。

次の質問は「どうしてコアデベロッパーになったのか?」です。

  • Irit: ロックダウン中に当時のマネージャーから週に1日Pythonに取り組んでみないかと言われて始めました。今はMicrosoftでフルタイムでPythonについて取り組んでいます
  • Ken: 最初はtypingに取り組んでおり、Guidoがメンターになってくれました。CPythonの他の分野手を広げてPabloがメンターをしてくれました。そしてコアデベロッパーになりました
  • Butuhan: Pythonの内部を調べるのが楽しく、AST(抽象構文木)などについてのPRを送りました。ある日PabloからASTについてのメールが来て、一緒に作業をすることになり、Pabloがメンターになってくれました。そしてコアデベロッパーになりました
  • Mark: 動的プログラミング言語のVMの実装で博士号をとったので、PythonやRubyに取り組むのは自然なことでした。Pythonはとても良い言語で挑戦的な研究対象です。

その後聴衆から質問を募集し、コードフォーマッターについて、WebAssemblyについて、Steering Councilについて、Python 4.0ではどんな後方互換性を捨てるか、PythonにNil結合演算子は入らないのか?など、さまざまな質問が寄せられました。ここでは紹介しきれないので、興味のある方はぜひビデオを見てみてください。

筆者の発表:Automate the Boring Stuff with Slackbot(ver.2)

筆者の発表の様子
筆者の発表の様子

カンファレンス初日の夕方には筆者自身のトークがありました。発表内容は、PyCon JPのSlackで運用しているチャットボットの開発の実例をベースに、日常の面倒なタスクをSlackbotで楽をするというものです。2019年に同様の内容で各国のPyConで発表をしていましたが、その後SlackのAPI変更とそれに伴う使用ライブラリの変更を受けて、さまざまな情報を更新しました。

発表資料の作成時には、まず実際に動作するコードを作成して、その内容をベースにスライドを作成しました。Slackでbotなどのアプリ開発をするときには、セキュリティの関係でトークン発行や権限設定などの事前準備が必要となります。そのあたりを伝えないとそもそも開発がはじめられないため、きちんと説明しましたが、情報として少し盛り込みすぎたかなとも思いました。結果として発表時間が少し足りず、メインとなる後半のケーススタディでコードをあまり説明できなかったのが悔やまれます。

発表しているときに何人かたくさんうなずいて聞いてくれる人がいたので、ちゃんと伝えたいことは伝わったのかなーと思っています。なお、 日本語バージョンをPyCon JP 2022で発表予定ですので、興味のある方はぜひそちらの発表を聞いてもらえるとうれしいです。

質疑応答では2件質問がありましたが、1つ目は意味がうまく取れず、司会のイクバルさんに日本語で意味を教えてもらって事なきを得ました(イクバルさんは日本在住です⁠⁠。質疑応答は以下のような内容でした。

QSlackのスレッド内でのメッセージ対応はどうすればよいですか?

A全メッセージを取得できるのでスレッド内のメッセージも対象となります。メッセージ送信時に引数を指定するとスレッドの中に送信もできます

Qどこでこのプログラムを動かしていますか?

APyCon JPのボットはEC2のようなサーバーで動かしています。Boltはサーバーレスにも対応しているので、ぜひチャレンジしてみてください

ライトニングトーク

カンファレンス1日目の最後はライトニングトークです。1人持ち時間5分で、さまざまな発表がありました。いくつか紹介します。

ビールを飲みながらリモート発表のVB氏
ビールを飲みながらリモート発表のVB氏
  • 最初にライトニングトークの案内を、スタッフのVB氏が外からリモートで実施。しかもすでにビールを飲んでいる。
  • Cyclone DDSというデータ配信システムの紹介
  • PytchというScratchからPythonへの橋渡しをするプロダクト。Pythonでコードを記述してScrachのように動作させてゲーム等を作成できる
  • ファイルのパーミッションに関する問題。os.chmod(f, 700)のように間違えて(正しくは0o700指定しているコードが存在するということを、https://grep.app/で検索して示していました

会場の様子

ここではトーク以外の会場の様子を少しお伝えします。

ランチとコーヒーブレイク

ランチは3日間毎日提供されます。3種類の中からメインを選ぶという感じで、1日目は中華風の炒め物を選びました。ランチには毎回デザートもついていて、1日目はフルーツが盛りだくさんで個人的にとてもうれしかったです。

中華風のランチ
中華風のランチ
ランチのデザート
ランチのデザート

午前と夕方にはコーヒーブレイクもあり、コーヒー、紅茶とクッキーなどのおやつが出ます。疲れた脳に甘いおやつが染み渡ります。

コーヒーブレイクのおやつ
コーヒーブレイクのおやつ

企業ブース

ランチ、コーヒーブレイクなどが行われる0階(アイルランドは地上階が0階)のMain Forumには、企業ブースもあります。各社、アンケートに答えると豪華景品があたるかも!!といったイベントを展開しており、かなり積極的に参加者とコミュニケーションをとっていました。久しぶりのリアルEuroPythonということで、各社気合いが入っているなと感じました。Optiver社の赤いアヒルちゃんはおみやげにもらいました。

Kraken Techはぬいぐるみが当たる
Kraken Techはぬいぐるみが当たる
Optiverはさまざまなグッズを提供
Optiverはさまざまなグッズを提供

企業ブースの全体の様子は以下のような感じです。ここに写っているのがMain Forum全体の右半分といったところです。右奥には丸テーブルがあり、座ってランチをとったり休憩ができます。

コロナ禍ということもあるのか、全体的に広々とスペースを使っているなという印象でした。

企業ブースの様子
企業ブースの様子

その他の話題

ここではカンファレンスとは直接関係ない話題を少し書こうと思います。

日本からの移動

このカンファレンスは筆者にとって久しぶりの海外旅行となりました。いろいろ情報を調べているときに、以下のツイートを目にしてびっくりしました。

どうも空港の職員が減っているところに、コロナの反動で旅行者が増えて空港が混乱しているようです。荷物がなくなるのは最悪なので、今回は荷物も必要最小限にして持ち込み手荷物のみにしました。ちょうどいいスーツケースがなかったので、アールワイレンタルで軽いスーツケースをレンタルして対応しました。EuroPythonのあとにヨーロッパ旅行もしていたので、11泊12日の旅行をたったこれだけの荷物で過ごしました。服は圧縮バッグで圧縮しました。途中で洗濯をすることで、このサイズでも十分なんとかなるなと感じました。また、荷物を預けなくてよいので、乗り降りはとてもスムーズでそこはメリットだなと感じました。

11泊12日で荷物はこれだけ
11泊12日で荷物はこれだけ

久しぶりの成田空港は「空いているな」という印象です。出発が月曜日の昼ということもあったかも知れません。出国するときには、予想していましたが特に陰性証明やワクチンの証明書などは求められませんでした。

空いている成田空港
空いている成田空港

カンファレンス前日の飲み会

ダブリンについてカンファレンスの前日に、日本から参加しているイクバルさん@iqbalabd⁠、ゆういちろうさん@whitphxと顔合わせを兼ねてビールを飲みに行くことにしました(日本からEuroPythonに参加しているのはこの3名だけと思われます⁠⁠。お店はThe Brew Dockで、ダブリンローカルの醸造所が運営するビアバーです。

THE BREW DOCK
THE BREW DOCK

お店の1階でビールを飲んでいると、偶然にもMarcさんとその友人が階段を上がってきました(Marcさんは1日目にデータベースのトークをした人です⁠⁠。私とイクバルさんはMarcさんと面識があるので「あー、Marcさんじゃーん」と声をかけて一緒のテーブルで飲むことになりました。この日(カンファレンス前日)はチュートリアルが行われており、Marc氏はそのあとにたまたまこの店に来たようです。他にもビールの店はあるのに、なんたる偶然。

日本メンバーと偶然いたMarcさんたちとビール
日本メンバーと偶然いたMarcさんたちとビール

明日からがカンファレンス本番ということもあり、この日は21時ごろと早めに解散となりました。外に出てみるとまだ全然明るいです。治安的には明るいので安心して歩いて帰れるということはありますが、感覚的に「全然明るいからまだまだ飲んでても大丈夫」となるので、危険な街だなと思いました。

21時でこの明るさ
21時でこの明るさ

まとめ

EuroPythonのカンファンレンスの1日目の様子のレポートは以上です。久しぶりの現地開催のカンファレンスを楽しむことができました。次回はカンファレンス2日目、3日目の様子として興味深いトーク、Social Event、筆者のLTなどをお伝えします。

おすすめ記事

記事・ニュース一覧