この記事は先日開催されたEuRuKo 2023 の参加レポートです。カンファレンスの内容と旅の記録 (筆者は開催地のヴィリニュスの街を含め 4 都市に滞在しました) そして多くの写真で構成されています。
EuRuKo はヨーロッパで毎年開催されている Ruby のカンファレンスです。特徴としては開催地が持ち回りかつ投票で決められることにあります。そのため、日本から行く難易度も毎年変わります (直行便がない都市に行くのは少し大変です)。公用語は英語です。シングルトラックで行われることも特徴的で、そのためトーク数は少な目となっています。
EuRuKo 2023 は EuRuKo の 20 周年記念であり、Ruby の 30 周年記念でもあり、ヴィリニュスの 700 周年記念でもあったようです。今回は新しい試みとして Expo トラックというのがあり、そのため全てのコンテンツを網羅することは不可能になっていました。
では早速カンファレンスの話をしましょう。各トークについて手短にまとめていきます。なお、タイトルがリンクになっているものは録画へのリンクとなっています。
Steven はかの RSpec を作った人です。その歴史についてのトークでした。 元々は TDD の際に「存在しないものはテストできない」という意見を受けて、「テストという用語に問題があるので新しい語彙を作る」という目的で作られたソフトウェアがあり、それが発展して RSpec となりました。Steven 本人は当初はそこまで重要だと思っていなかったものの、カスタマーサポートの人が RSpec のコードを見てそれがコードだと気づかずにメモ書きのようなものだと勘違いしたことを知って、その可能性に気づいたという話は非常に興味深いと感じました。 RSpec が生まれたのは 2005 年ごろのことであり、ちょうど Rails の出現と同時期だったこともあり広く普及したのではないか、という話でした。 最終的には「自分で自分のほしいものを作る」ことが重要であるというメッセージが共有され、”Create. Share. Repeat.”でトークが締めくくられました。
【筆者の感想】 RSpec がソフトウェア業界に与えた影響は大きく、今や広く使われているプログラミングの大部分に RSpec クローンが存在するほどです。しかし、その誕生はほとんど偶然であるというのは多くのことを示唆していると感じました。
最近実践例が増えてきた Passkeys についての話です。まず Carla はパスワードのつらさとパスワードレス認証のユーザー体験の良さについて述べます。続けて WebAuthn とその Ruby 実装である webauthn gem が紹介されました。 WebAuthn は公開鍵暗号を基盤にしたブラウザベースの認証 API であり、キーは物理的なセキュリティキーやローカルなどに保存されます。メリットとしては公開情報しか保存しないためセキュリティ的に安全であることなどがあります。 最後には Passkeys が紹介されました。Passkeys は WebAuthn と関連していますが、FIDO2 discoverable であることが要件であると説明されました。
【筆者の感想】 最近よくきく WebAuthn と Passkeys についてのよくまとまったトークでした。Ruby の話はそこまでたくさんは出てきませんでしたが、Ruby の主戦場であるところの Web 開発の現場でも今後採用例が増えるだろうと思うので今後注視していきたいと思います。
依存解決についての話です。RubyGems, Bundler, rubygems.org などの概説と関係性の紹介がされた後、RubyGems と Bundler では使っている依存関係の解決アルゴリズムが異なることが解説されました。PubGrub というアルゴリズムについても紹介され、Rails のように存在するバージョンが非常に多い場合に依存解決に時間がかかってしまう問題などが述べられました。 最後の部分では RubyGems と Bundler の間にコマンドやコードの重複があるのでそれを取り除いていくということが語られました。
【筆者の感想】 日本人トーク 1 人目は hsbt さんのトークです。今回の話は依存関係の解決アルゴリズムなどにフォーカスしたトークとなっていて、RubyGems と Bundler は依存解決を同じようにしていると思っていたので興味深かったです。
Raspberry Pi Pico というマイコンで Ruby を動かす話です。デモが中心で、L チカをしてみたりと色々と行われました。mruby と PicoRuby の違いについても解説され、mruby は汎用的だが PicoRuby はマイコンに特化していること、PicoRuby はフットプリントが非常に軽いことなどが解説されました。
【筆者の感想】 日本人 2 人目ははすみさんのトークでした。これはもうデモありきですし、実際に見るほうが早いと思うので動画を見て下さい。
その後はアンカンファレンスが行われました。これはメイン会場を使って行われる飛び入りトークのようなものですが、キーノートの直後にピッチと投票が行われ上位のトークが選ばれるというプロセスになっています。 この枠では Avo について、DB のマスキングについて、Sinatra について、スレッドについての 4 トークが実施されました。
EuRuKo でも例に漏れずオフィシャルなパーティーがありました。今回は趣向を凝らしたものとなっており、まず専用の貸し切り列車 (! ) でかつて車庫だったホールまで移動した後にパーティーをするというもので、移動中も各国から来た Rubyist と話せて満足度は非常に高かったです。会場ではクラフトビールが 10 種類以上飲めたので、ビール好きにはたまらなかったのではないでしょうか (筆者はお酒に強くないので 2 杯くらいしか飲めませんでした)。
【パーティーの様子】
2 日目もシングルトラックでトークが続きます。
まつもとさんによるキーノートはオンラインでの実施となりました。GVL の話が中心で、Python では GVL を取り除こうとしているが、Ruby としてはそれをフォローするつもりはなく、Ractor を使うことで GVL と共存してやっていくという決意が述べられました。 GVL を取り除かないという選択については、GVL 除去が C API の変更を伴うこと、Web においては GVL がボトルネックになることは少ないこと、IO バウンドな処理に対してはスレッド、CPU バウンドな処理に対しては Ractor で対処可能なこと、などが挙げられていました。
【筆者の感想】 GVL というとなんとなく「悪いもの」のように感じられることがあります (昔は私もそうでした)。しかし、ちゃんと理由があって存在しているのであり除去もまたトレードオフになることが丁寧に解説されており、言語設計者としての Matz がよく表れたトークだったと思います。
Pro Git の著者である Scott によるバージョン管理考古学とも呼べるトークです。バージョン管理をなぜ使うのかを考えたときに、知りたいことは例えば「この行を最後に編集したのは誰か」ということだったりします。珍しい質問としては、「どのファイルがこのファイルに一番近い関係を持つのか」というような質問が考えられます。 Git 単体では回答できない質問もあります。例えば「このコードがマージされる前にどんな会話が行われたのか」というようなものです。このような質問に答えるために彼は gitbutler という新しい Git クライアントを作っているとのことです。
【筆者の感想】 Git に初期の頃から関わっている開発者による振り返りと今後の展望というような内容でした。Git と GitHub は十分パワフルに思えますが、さらなる発展の余地があるということで要注目だと思います。
スレッドとそれにまつわる問題点についてのトークです。スレッドによって Flaky なテストが発生してしまう問題と、解決策としてのThread::Queue
クラスや rspec-wait gem の存在や、データの入力スレッドと出力スレッドが競合してしまう問題に対する concurrent-ruby や mutex などの解決策が語られました。
スレッドの問題のうちいくつかはプロダクション環境のみで発生するためテストでは捕捉できないことや、||=
のようなコードはアトミックではないため競合が発生する可能性があることなどよく直面しがちな問題について解説されました。
【筆者の感想】 スレッドに関係するトラブルについてのまとまったトークでした。長いことプログラミングをやっている人にとっては既知の論点が多かったかもしれませんが、スレッドを使いこなすのは難しいので (自作の gem でマルチスレッド絡みのバグを出した経験があります)、こういうまとめは定期的にあると嬉しいですね。
筆者 (大倉) による RSpec のライブコードリーディングです。RSpec のコードはメタプログラミングが多用されており比較的読みづらいのですが、それを解きほぐしながら describe や it のようなコアの部分について解説しました。 スライドは少なくもっぱらエディタを使っての発表でした。
【筆者の感想】 初めて海外カンファレンスに物理登壇したのですが、楽しんでもらえたようでよかったです。ライブ感を重視した発表ということで、動画を見ていただけると嬉しいです。
2 日目にもアンカンファレンスが行われました。この日は RSpec のパフォーマンス、Rails のスケーラビリティ、データベース、マルチテナントの 4 つの発表が行われました。
パブに関する企画だったと思うのですが、これは正直よくわからない感じでした。現地のお酒はビールが中心のようで、ビールは比較的安価で美味しいものが揃っていました。
GitHub 社の Hana によるフィーチャーフラグに関するトークです。フィーチャーフラグには色々な分類があり、例えばスタッフにみに機能を有効にするものやある特定の割合で有効にするものなどがあります。GitHub では flipper というツールを使っているということでした。フィーチャーフラグを使うことでデプロイを安全に行えるようになるという利点があります。 具体例として、Code Scanning という機能の設定を YAML と GUI 両方からできるようにする、という例が挙げられました。ここでは API と UI 両方にフィーチャーフラグを設定し、オンオフの組み合わせをテストします。そして最初はチーム内、次にスタッフ、その次にプライベートベータというふうに徐々に適用範囲を広げ、最終的には GA (Generally Available) にするということでした。また、フィーチャーフラグの除去については GitHub では自動化されているとのことでした。
【筆者の感想】 GitHub で実際に使われているフィーチャーフラグの知見が詰まったトークでした。GitHub は頻繁なデプロイで有名ですが、このような工夫によってデプロイ頻度と品質維持を両立しているということで、参考になる現場も多かったのではないでしょうか。
これはおそらく EuRuKo で最も特徴的な出し物ではないでしょうか。前述の通り、EuRuKo は毎回カンファレンスの最中に投票で次回の開催地が決まります。投票ということは各都市 (国ではなく) のアピールタイムが必要なので、それがこの時間ということになります。この時は 7,8 の都市 (正確な数は忘れてしまいました…) がピッチを行い自分たちの都市の良さをアピールしていました。
いわゆるパネルディスカッションです。Ruby を学ぶ環境がどう変化したのかという話題や、今後の 10 年についての話題が個人的には興味深かったです。このパネルディスカッションには日本からまつもとさんも参加していましたが、ネットワークの問題で時々フリーズしてしまっていたのはご愛敬でした。
WASM ( Web Assembly ) に関するトークです。まずは WAT という、WASM のテキスト表現が紹介され、WASM の実用例がいくつか紹介されました。Ruby は 3.2 で WASM サポートを追加しましたが、スレッドやネットワークについての制約も存在すると述べられました。 wasm2c という WASM を C に変換する技術が存在しますが、バイナリサイズが大きくなる上、WASI というインターフェースのシステムコールが部分的にしかサポートされておらず、結局 Ruby コードは動作せず、最終的に wasmtime というランタイムを使うことで動作したとのことです。しかし、ハローワールドのバイナリサイズが 50MB にもなってしまい、実行にも約 2 秒かかるということで、実用的とは言いがたいようです。
【筆者の感想】 WASM に関する話は Ruby3.2 以降で比較的よく見るようになりましたが、このトークでは関連する多数の技術が紹介されていたのが特徴的でした。近年エコシステムが急激に発達している WASM ですが、2023 年時点での現状把握に最適な発表だと思います。
DSL ( Domain Specific Language ) に関するトークです。最初に DSL について簡単に紹介され、Rake などが具体例として挙げられました。次に DSL を使う理由が解説され、可読性が高い、設定ファイルを個別に用意する必要がない、メタプログラミングによる自動化などの利点が述べられました。
続いて実際に DSL を作ってみる話に移ります。define_method
を使う例、yield
とinstance_eval
を組み合わせる例、ブロックを変数に格納してあとでcall
する例、さらに複雑なケースとして Plugin システムを構築する例や Module Builder Pattern も紹介されました。
最後にメタプログラミングの実用例として見た場合に、APM のようなケースではメタプログラミング自体はユーザーから見えないのに対し、DSL はむしろユーザーとのインタラクションを改善することに主眼が置かれているという指摘がありました。
【筆者の感想】 DSL は大好きなので興味深いトークでした。総じて初学者向けの印象ではありますが、DSL やメタプログラミングの実用例が多数紹介され、DSL とはどのようなものかのイメージを掴むことのできる良いトークでした。
イベントの大トリを飾るのは次回の開催地発表です。今回の勝者はボスニア・ヘルツェゴビナのトゥズラ ( Tuzla ) という都市でした…が、その後諸事情によりボスニア・ヘルツェゴビナの首都サラエボに変更となりました。このへんは必然的に準備期間が短くなってしまうこの方式の宿命といえるかもしれません (例えば会場の確保に失敗する可能性があるなど)。
【 Tuzla に決まった瞬間】
初めての EuRuKo、初めての海外カンファレンス物理参加でした。やはり次回開催地を投票で決めるというのが特徴的で、各都市の紹介は単純に面白かったです。そもそも今回のヴィリニュスという都市もそうですが、日本に住んでいるとヨーロッパの地方都市というのはせいぜい名前を知っているだけになりがちではないでしょうか。普段なかなか行く機会のない都市に連れて行ってくれるのは EuRuKo の魅力の一つだなと感じます。 トークを含めた全体の雰囲気は日本でいうところの地域 Ruby 会議が少し似ているというか、やはり RubyKaigi とはかなり違います (当たり前ではありますが)。日本には Ruby 本体の開発者がたくさんいるので「生産者カンファレンス」とでも言うべきものがあり得るわけですが、ヨーロッパには Ruby そのものを開発している人はあまりいないので、いわゆる「ユーザーグループ」的な雰囲気が強いのではと思いました。テーマは多様なのでその意味では Kaigi on Rails とも近い部分がある気がします。 英語についてですが、実はヨーロッパの人たちは一部を除いて英語は外国語として習得しているので、レベル感もまちまちです。自分の国の言葉のなまりが出た英語を話す人もいたりもしますし、学校で習うような英語で話してもらえるとは限りません。見たところ、彼らの所属している企業には複数の国籍の人たちが在籍しているので英語を使うしかないのではないでしょうか。少しくらい英語が苦手でもあまり気にされないという意味では最初の国際カンファレンスとして最適かもしれません。
実は私はこの EuRuKo 以降、カンファレンス後の日程を少し空けて観光を楽しむようになりました。EuRuKo については単純に行くのが大変すぎたので (片道約 17 時間)、せっかくだから旅行もしようというだけだったのですが、思った以上に楽しかったので以後定番化してしまいました。 ということで、この記事の後半は旅行記です! ヴィリニュスからリガ、タリンそしてヘルシンキへと移動していきます。
まず自分は今回プロポーザルが通るまでリトアニアの首都の名前を知りませんでした。なんとなく海に面しているイメージがあったのですが、実際にはヴィリニュスは内陸の都市です。ヨーロッパ最大と言われる旧市街を持ち、さらにそれを新市街が取り囲んでいます。 地勢としては川と坂道という印象であり、川のすぐに近くに小高い丘があってその頂上に塔があったりして面白いです。戦略ゲームだったらたしかにそこには塔を建てたいよなというくらいです。 そしてここまで書いたらリトアニアについて紹介しないわけにはいかないことに気づいたのでリトアニアの話をします。
リトアニアはいわゆるバルト三国の 1 つであり、最も南にあります。ポーランドの隣国であり、かつてはポーランドと同君連合だったこともあります (少し難しいのですが、同じ国だったと考えてもそこまで間違いではないと思います)。他にもいろんな国と接しています。ヨーロッパの地理は難しいので地図を見てみると色々発見があります。 そしてポーランドはカトリックの国なので、リトアニアもまたカトリック文化圏です。このことは教会を巡る際に意味を持ってきます。ロシア正教会の教会とカトリックの教会が混ざっているので雰囲気の違いを感じることができて面白かったです。 蜂蜜で有名らしいです。実際、テラスでご飯を食べていると蜂が寄ってきます。これはバルト三国全部で同じことが起きたのでリトアニア固有のことではなさそうですが、ヴィリニュスには蜂が特にたくさんいた印象です (どこかで聞いたのですが、マイ蜂の巣がある家も多いとか)。 かつてはユダヤ人が大勢住んでいたそうですが、第二次世界大戦の際にドイツに占領され、ホロコーストによってユダヤ人は散り散りになってしまいました。このとき、ユダヤ人にビザを発給し続けたのがかの有名な杉原千畝です。私は彼が仕事をしていたカウナスという都市には行けなかったのですが、ヴィリニュスにも記念碑がありました。公園にも彼の名前を冠しているものがあったりと、その尊敬の大きさを伺わせます。
【ヴィリニュスの街、川沿いから塔を臨む】
リガはラトビアという国の首都です。リーガとも書きます。ヴィリニュスとは異なり海運業で栄えた街ですが、街の中心部は海岸線からは少し距離があります。巨大な川が流れていて、その河岸に街が広がっています。かなり平坦なのが特徴的で、ほとんど坂道を感じません。 ヴィリニュスからはバスで約 5 時間。ひたすら何もないところを走り、町に入って小休憩しまた走る、の繰り返しです。バスはネットで 20 ユーロくらいで買えました。 実は今回の旅で一番好きになった街がリガです。「バルトの貴婦人」と言われるらしいのですが、本当に雰囲気が最高に良い。各所に高い塔があり、建物の風格もいい感じです。驚くべきは旧市街の外側にある新市街もとても素敵であることで、賑やかで都会的でありながらどこか古めかしい雰囲気が良いのです。
ラトビアなんですが、実はあまり書くことがない…バスケットボールが強いらしいというのは聞いたのと、歴史的にはドイツの影響力が大きい地域だそうです。宗教的には元々プロテスタントのところにロシア正教会が来たという感じのよう。
【リガの街角】
タリンはエストニアという国の首都です。こちらも海運業の町ですが、旧市街から歩いて 10 分ほどで海にたどり着けるのが特徴です。バルト海を挟んでヘルシンキがあります。こちらはだいぶ起伏のある地形で、丘に登ると旧市街が一望できます。小さな博物館がたくさんあるのが興味深かったです (時間の関係でほとんど行けませんでしたが…)。また、バルト三国の首都の中では一番発展しています。旧市街から歩いて 5 分ほどのところには近代的なショッピングモールがありますし、それ以外にもガラス張りの建物がいくつもありました。 リガからはバスで 4 時間ほど。例によって何もないですが、海岸線が見える箇所がほんの一瞬あったのが救いです。 そしてエストニアは実は我々ともゆかりのある国です。
エストニアは IT で有名です。かの Skype はこの国から生まれましたし、今回の旅で多用した Bolt というアプリもここで作られています。Bolt は Uber に似ているのですが、非常に使いやすくセンスを感じました。Skype に至っては Facebook よりも前に生まれているらしく、IT で米国に先行できる非常に珍しい国です。 バスに乗るときもクレジットカードのタッチ決済で乗れます ( Suica 的なものは当然ありますが、自分は使いませんでした)。他にも色々とデジタル化が進んでいるようです。日本から移民する人も多いとか。
【タリンの旧市街と新市街】
ここは日本人にも大人気の観光地ですね。日本人のツアーっぽい人々はここで初めて見かけました (それ以外の都市ではそもそも日本人を見かけることがほぼなかった)。様々な教会があり、特に洞窟の中に教会があるテンペリアウキオ教会はおそらくここにしかない光景なのではないでしょうか。また、デザイン文化が盛んな都市なのでデザイン美術館があったり、それ以外にも美術館や博物館がたくさんあります。 また、スオメンリンナという島に船で行くことができ、かつて実際に使用されていた要塞の跡地などを見ることができます。 タリンからはフェリーで約 2 時間。ヘルシンキは北欧の例に漏れず物価が高いので、タリンまで買い出しに出かけるヘルシンキ住民も多いとか。フェリーの中にはカジノがあったり飲食店があったりとちょっとしたショッピングモールみたいになっています。
ここに書くことではないかもしれませんが、他と揃えるために一応書きます。フィンランドは北欧の小さい国です (小さいといってもイタリアやイギリスよりは大きいみたいです、さらにノルウェーよりも大きいので北欧最小でもない…知らなかった…)。人口は約 500 万人と多くはないですが、豊かな国として知られています。
【テンペリアウキオ教会】
まず、Apple Pay は非常に便利です。PayPay のような決済手段は使えないので、スマホ決済をしたければ iPhone の人は Apple Pay の設定をすべきでしょう。毎回財布からカードを出す必要がないのは大きいです。現金が必要だった箇所は一カ所だけでした。Android の人は、多分何かあるでしょう。 支払いといえば買い物ですが、基本的には日本のコンビニのような 24 時間営業の店は少ないです。これがどういうことかというと、飲料や食料を夜に入手しようと思うと、単に不可能かホテルで高値で買う必要がでてくるということです (ホテルにもよりますが、普通の 3 倍くらいの価格になります)。そのため、昼のうちにスーパーで買い物をしておきましょう。なお、自販機は皆無です。 水はペットボトルの水を買う方が安全だと思います。水道水は結局飲まなかったのですが、まあ 1.5L の水は 2 ユーロ以下で買えます (現時点のレートだと 300 円とかになっちゃいますが) ので安心料として買うといいでしょう。水筒を持っていって、大きな水を買って詰め替えると安く済みそうです。ただ、スパークリングの割合がかなり高く、普通の水 (“still”とパッケージに書いてあります) は以外と数が少ない店もあるようです。 水といえば、ホテルのシャワーから出てくる水は硬水です。ですので髪の毛がゴワゴワになります。これはもうどうしようもない気がします。 鉄道は都市間の移動のためのもので、都市内の移動はバスやトラムが中心となります。公共交通機関は国によって使い方も違って怖さもあるので、Bolt のようなアプリを使うのが良いかもしれません。運転手は英語ができなかったりしますが、アプリで行き先を伝えているので挨拶だけしてあとは無言で OK です。 英語といえば、やはり英語はみんなある程度はできるので、こちらもある程度できる必要はあります。とはいえ、あまり長文を言う必要はないです。個人的には、曖昧な言い方をしないではっきりした言い方にすると誤解を生まないんじゃないかと思います。それと、挨拶を気軽にする文化なので、こちらも気軽に挨拶するようにするといいんじゃないかと思います。”Hello”くらい言うだけでも少し違う気がしますね。
ということで EuRuKo 2023 の参加レポート、いかがでしたでしょうか。このレポートを読んでくれた人が自分も海外カンファレンスに参加してみたい・登壇してみたいと思っていただけたのなら嬉しいです! 最後に、参加費を支援してくださった日本 Ruby の会様に感謝して結びとします。