Kaigi on Rails 2023に参加していただいたみなさま、ありがとうございました。初のオフライン、オンラインのハイブリッド開催となりましたが、登壇者の皆様、Proposalを出してくださった皆様、協賛してくださった企業の皆様、そして一般参加者の皆様のご協力のおかげで無事に今年のKaigi on Rails 2023を終えることができました。
主役は参加者のみなさまということもあり、運営のひとりである僕からのふりかえりは手短かにしようと思います。
もともと会場でのサイネージの役割としてのなにかを用意したいよね、という構想はあったので運営内でのみ使うWeb appを作るつもりではいたのですが、大倉さんがドーンと rails new
をしたリポジトリが爆誕したのでそこに乗っかることにしました。お披露目クオリティに達したのが本当にギリギリだった1こともあり、イベント開催までの周知が全くできておらず当日にアクセスが集中して軽い障害が発生したのは本当に申し訳ないと思っています。でもこれで来年はもっと多くの人が使ってくれそうで嬉しいです。いくつか追加機能のアイデアも頂いています。
これについては他で話すネタになりそうなこともあり、あまり詳細な言及は控えます。とはいえソースは公開されているので何をやったかは全て見れる状況ですね。ドキュメントが少なすぎるのは追々なんとかします……
https://github.com/kaigionrails/conference-app
今年も昨年に引き続き配信関連の担当をしました。とはいっても今回は会場側に配信をやってくれるプランがあるので、それをお願いしました。なので当日は僕自身がなにか操作するということはありませんでした。
会期中は、配信に登壇されている方の姿や声がちゃんと乗っているかの確認のため、YouTubeを2窓して両方の発表を聞く、ということをしていました。冒頭の画像はそのために用意したディスプレイを置いていた、スタッフルームにおける僕の机の写真です。持っててよかったモバイルディスプレイ。ちなみに、手前にあるダンボール箱2つは、直前に僕が買ってきてもらうように頼んだChromebookです。
急にPC必要になって買いに行ったり、荷物が配送遅延で届いてなくてお買物行ったり、Day0からいらいろありましたがなんとかなった(たぶん)のでよかった。明日の起床がんばらねば。まずは風呂🛀
— ぷぽ (@pupupopo88) October 26, 2023
実際に配信のプロの方と組んでなにかをやる、ということは初めての経験だったのでとても勉強になりましたし、楽しかったです。
今年はオフライン開催ということでそこまでしている時間がなさそうな気配があったため、配信のトランジションについては何もするつもりがありませんでした。しかしアイデアが降ってきた&やってみたら案外時間をかけずに作れたために今年も作ってしまいました。これって会場で流れたんでしょうか?もしかしたら配信限定コンテンツだったかもしれません。
果たしていつまで作り続けられるでしょうね。
クロージングでもアナウンスがありましたが、2024年の開催は決定していますが現時点で会場がまだ決まっていません。やばいですね。
レビューしたいと言っていた大倉さんを途中からは完全に無視してCI pass即mergeを連発していました。よろしくないですね。 ↩
クックパッドという会社は、Rubyのコミュニティに関わっている僕にとっては特別な印象がありました。今でこそShopifyやGitHubにその座を譲っているでしょうが、世界最大級のRailsによるモノリシックなアプリケーションによるサービス提供、フルタイムRubyコミッターの登用、優秀なメンバー、技術ブログの豊富なアウトプット……いつだって「いつかこんな会社で働きたい」という会社のうちのひとつでした。
クックパッドが横浜に移転するタイミングで、多くの人が退職していくのを外から眺めていました。その勢いに、このままではいつか一緒に働きたいと思っていた人達がいなくなってしまうと思い、(以前から手が足りていないのでどうですか、という声はかけていただいていた)あそなすさんに連絡をとり、業務委託の立場で関わることになりました。
色々なことをやりました。事業に関わることはどこまで書いていいのかがわからないのであまり触れませんが、新規サービスの立ち上げ、Ruby及びRailsのアップデート、「さわるだけで開発期間が3倍になる優れモノ」とまで言われた1レシピサービス本体への機能追加などを覚えています。
事業に関わらないことでいえば、社内フェスでのDJ、チキチキ、データ指向アプリケーションデザインの読書会、Rubyに関する社内勉強会、そしてRubyKaigi。事業もそうでない部分も、本当に楽しかったです。
一方でいいニュースばかりではなく、度重なる事業の見直しやそれに伴なう人員整理が行われ、その度に寂しい思いで一緒に仕事をした方を見送ることが続きました。
そしてとうとう自分の番も来た、というだけのことです。まあ業務委託の立場で退職推奨に対して「自分の番」というのもおかしな話ですが、とにかく契約の解除ということになりました。僕は撤退作業の手伝いという形で9月末まで稼動していました。稼動初期に立ち上げから深く関わったサービスのクローズ作業をするのは感慨深かったです。
実は、RubyKaigiが終わった直後から、様々な条件付きで正社員として入る交渉をしていました。この交渉は本当に人員整理の直前までやっていたのですが、しかしまあ、白紙になりましたね。この条件に関しては、業務委託で稼動し続けた実績によって交渉していたものなので、そのまますぐ別の会社にこの条件でどうですか、ということはできません。なので本当に、残念な思いです。
職選びの観点で言うなら、たぶん自分はPythonやGoやJavaScriptの案件でもなんとか生活できるくらいのお金はいただけると思っています。それでもRubyの会社を選び続けるのは、Rubyでサービスを開発・運用し、コミュニティに投資している会社であれば、自分がRubyKaigiやKaigi on Railsのために使う時間のことを考慮してくれる(そのことで急に休みを入れることに理解がある)、そういうことへの理解があるからです。その点で、フルタイムRubyコミッタを抱えていたクックパッドは本当にいい会社でした。
個人的な気持ちの問題はどうあれ、クックパッドのサービスと会社のことは引き続き応援しています。残っているメンバーもまた優秀な人達ばかりなので、心配はしていません。
なお、次の稼動についてのお誘いに関しては不要です。
以上、個人の日記でした。
9/30 14時から開催の高専DJ部 #38 に来てください!!!
高専DJ部 #38、 9/30にやります!!!14時から茶箱です!!!!TwiPla登録お願いします!!!!僕は翌日から仕事がありません!!!! #kosendj https://t.co/cwtjZhtnoR pic.twitter.com/4WOwcXkXMp
— うなすけ(9/30は高専DJ部だぞ) (@yu_suke1994) September 7, 2023
上記、高専DJ部の告知を行うために @kosendj にログインし、ユーザー名を変更した後に「あなたが実在の人物であることを確認する必要があります。」という表示になりました。
そして画像認証を行うのですが……これが何回やっても全然終わらない!!!!
15分くらい格闘して一旦あきらめ、@yu_suke1994アカウントのほうで上記ツイートを行いました。そしたら同様の状態に……
ただ、どちらのアカウントも地道に認証をやっていたら突破できました。よかったですね。
どちらの場合も共通しているのは、「https://kosendj-bu.inのURLをツイートしたこと」です。あとハッシュタグでしょうか。いや、これが本当の原因かどうかはわかりませんが……
何かあったら僕はこのあたりにいます。というか、最近は発言の主軸は自分の立てているMastodonに移しているつもりでいます。
たぶんこれですね。
9/7現在、X(旧Twitter)にて名前/プロフィール変更をするとアカウント認証に飛ばされ認証通過しても「技術的な問題が発生したため」とログイン出来なくなるバグが発生中 - Togetter
8/3のCloudNative Days Fukuoka 2023(以下CNDF2023)と8/23のRubyKaigi 2023 follow upで発表しました。
どちらも、自分が取り組んでいるQUICに関連する話をしてきました。
CNDF2023においては、静的WebサイトとNginxなどのWebサーバーの2つの軸に対し、Public Cloud、特にAWSとGoogle CloudにおいてQUICでの運用が可能かどうかについての発表を行いました。
また、発表内で紹介した構成については、TerraformやWebサイトの構成をGitHubで公開しています。
半月ほどしか運用していませんでしたが、コスト削減を真面目にやっていなかったこともあり、AWS側で$122(¥17,000程度)、Google Cloud側で¥1,100ほどの費用がかかりました。
また、懇親会でのLT大会において、直前に開催されたIETF 117 San Franciscoで自分が聞いていたセッションで触れられていたdraftについて一言で説明していくという発表もさせていただきました。これについては発表資料はありませんが、IETF 117 San Franciscoの参加記でより詳細に記事にしています。
RubyKaigi 2023 follow upでは、自分が取り組んでいるRubyishなQUIC実装についての進捗報告を行いました。
IETFやCNDF2023、Kaigi on Rails 2023の準備もありなかなかめぼしい進捗が出せていませんが、来年のRubyKaigi 2024でもproposalを出せるような成果を出せるようがんばりたいです。
以下の記載において、間違い等あれば訂正したいので気軽に言及してください。
RubyKaigi 2023 follow upの会場で、「WebTransportはTCPの上にもQUIC(HTTP/3)の上にも展開されるのに、そこでリアルタイム性の求められる通信を行うのは、TCP及びQUICの欠損制御が邪魔になるのではないか?」という質問を頂いたのですが、その場で回答できなかったので調べました。
そもそもTCPと比較した際のQUICの優位点として、複数のstreamを使用することによるHead-of-line blocking(HOLB)の回避が挙げられます。WebTransport over HTTP/2ではこのstreamの独立をサポートしていません。また、続く “Partial Reliability” では、"HTTP/2 retransmits any lost data.“ とあるように、欠損したデータは全て再送されます(バッファリングできない分はdropすることが許可されます)。
Stream Independence: WebTransport over HTTP/2 does not support stream independence, as HTTP/2 inherently has head-of-line blocking.
Partial Reliability: WebTransport over HTTP/2 does not support partial reliability, as HTTP/2 retransmits any lost data. This means that any datagrams sent via WebTransport over HTTP/2 will be retransmitted regardless of the preference of the application. The receiver is permitted to drop them, however, if it is unable to buffer them. https://www.ietf.org/archive/id/draft-ietf-webtrans-http2-06.html#name-transport-properties
そして、WebTransport over HTTP/3 (https://www.ietf.org/archive/id/draft-ietf-webtrans-http3-07.html) では、このような欠損については特に言及されていません。
そもそも、draft-ietf-webtrans-overview-05 (The WebTransport Protocol Framework)にもhttps://www.w3.org/TR/webtransport/にも、WebTransportが"low-latency"を目的として生まれた技術であるとは書かれていません。(正確には、Head-of-line blockingによって生じるlatencyを避ける必要がある、という記述はありますし、またWebSocketはlatency-sensitive applicationsには向いていないという記載もあります1)
では真にlow-latency性を求める通信はどのように行うべきかというと、今まで通りに素のUDPやWebRTCを使ったり、RTP over QUIC (RoQ)2の登場を待つ、ということになるのかなあ……ちょっとわかりません。ただ言えることとしては、RFC 9002 QUIC Loss Detection and Congestion Controlにおいて、QUICがその欠損制御を無効化するような仕組みは定義されていないということです。
なので結論としては、QUICの欠損制御がWebTransportの通信において邪魔になるのかどうかという点については、QUICが複数のStreamによる通信によってHOLBを回避することで高速な通信を行うことができる、ということになると思います。
多分そういうことになるんじゃないかと考えていますが、間違い等あれば訂正したいので気軽に言及してください。
https://datatracker.ietf.org/meeting/117/proceedings
7/22から7/28まで開催されていたIETF 117 San Franciscoに日本からリモートで参加しました。前回のIETF 116 Yokohamaの開催後、ISOC日本支部によって開催されたIETF116報告会において、参加した感想を発表させていただきました。
その発表内で「参加記を書こう!」と宣言したのもあり、こうして117の参加記を書いています。なるべく今後も参加記は書いていこうと考えています。
以下で言及するWGについては、基本的にはsessionの部屋に入って議論を聞いてはいましたが、ここでまとめ直すにあたっては基本的には議事録を参考にして書いています。英語のリスニングスキルがポンコツなので……
https://datatracker.ietf.org/meeting/117/session/quic/
quic wgにおいては、前回の116 Yokohama以降の大きな出来事といえば RFC 9369 QUIC Version 2 が出たことでしょうか。
https://datatracker.ietf.org/meeting/117/session/moq/
moqはQUICを用いたメディア転送に関するプロトコル、Media over QUICを策定するためのworking groupです。今議論されているのはMedia over QUICそのものの仕様をどうするか、という点ですね。まだmoq wgからRFCは出ていません。116もそうでしたが、moqはセッションが2回ありました。なぜなんでしょうか。
draftを読んだりミーティングを聞いたりして感じたことは、やはりメディア転送についての知識が必要になるなということです。本当に難しい。別に他のWGの内容が簡単で理解できるという訳ではありませんが。
https://datatracker.ietf.org/meeting/117/session/tls/
TLS WGにおいて前回からの大きなUpdateといえば、個人的にはdraft-rsalz-tls-tls12-frozen-01がでてきたことでしょか。
https://$ORIGIN/.well-known/origin-svcb
で取得できるようにしようというdrafthttps://datatracker.ietf.org/meeting/117/session/mls/
E2EEなメッセージのやりとりをどうするかについてのWGです。
https://datatracker.ietf.org/meeting/117/session/ccwg/
ccwgは輻輳制御に関するworking groupです。もともとcongressという名前だったのが、ccwgに改名されました1。
https://datatracker.ietf.org/wg/httpapi/documents/
普段はこのWGの動向は追っていないのですが、 Kaigi on Rails 2021でohbaryeさんが発表してくださった「Safe Retry with Idempotency-Key Header」で紹介されている draft-ietf-httpapi-idempotency-key-header がagendaにあったので参加しました。これは一度expiredになってしまったのですが、つい最近03が公開されて再度activeに戻っています。
むずかしいですね。
https://mailarchive.ietf.org/arch/msg/congress/rHNowIkEJt8SZy4PkUYzAt2c0nw/ congressという単語よりccwgのほうがclearだというのは、確かにそうですね。 ↩
私はうなすけといい、Kaigi on Railsのオーガナイザー、つまり運営チームの一員です。Kaigi on Railsにおいては、運営に関わる全員がProposalを評価し、その結果から採択・非採択を決定します。なので僕は皆さんから送られてくるProposalを読み、評価をするメンバーのうちのひとりです。
昨年のKaigi on Rails 2022において、皆さんから多くのProposalを提出していただき、大変ありがたく思っております。2023年も引き続きKaigi on Railsを開催できること、皆さんからの Proposalを受け取れることを喜ばしく思います。
さて、昨年頂いたProposalを見ていて、「このテーマはとても興味があるんだけど、書かれてる内容からは採択できないな」と言えるような、惜しいものがいくつかありました。そこで、皆さんには、運営が(というか私が)送られてきたProposalをどのように見ているのかということについて書いていきます。
おこがましいお願いではありますが、Proposalを書こうとしている皆さんにはこれから書くことについて少し頭に入れておいてもらえればと思っています。
RubyKaigiとは異なり、Kaigi on Railsでは匿名レビュー、つまり 「Proposalの提出者が誰なのかを見ずに評価を行う」 のです。これを忘れないでいただきたいのです。
ただし、厳格ではありません。どういうことかというと、Proposalの内容に明らかに個人が特定できる要素、例えば「私はRailsの作者であり、ルマン24時間耐久レースに出場したことがあります」のようなことが書いてあったり、個人ブログや個人リポジトリへのURLが記載されていても、そのことによってリジェクトすることはありません。あなたが誰であるか、という情報は極力含めないでいただけるとありがたいですが、どうしようもない事情によって徹底することができないことも私達はわかっているつもりです。
abstract(概要)には、実際に公式Webページのタイムテーブルに掲載されるトークの概要を記入していただくこともあり、ここが書かれていなかったProposalはありませんでした。
ですが、悲しいことにdetails(詳細)にほとんどなにも書かれていないことによって、評価のしようがないProposalが2022年には数件ありました。detailsには、あなたが一体どのようなトークをすることができるのか(するつもりなのか)、ということを書いていただきたいのです。ここが書かれていないと、私達運営は、それを採択することによって参加者の皆さんが知見を得られるのかどうかが判断できないのです。あなたは、実際には非常に価値のあることを職場で、もしくはプライベートで成されているのかもしれません。そして当事者にとっては、終わってみれば割と自明なことに思えてしまいますが、第三者にとってはそうではありません。その取り組みの内容を具体的に書いていただかないことには、第三者である運営の我々が知ることは不可能です。是非、detailsを書いてください。
あなたが提出してくれたProposalと、ほとんど同じ内容のものを別の人が提出してきたとします。その場合、もちろんabstract、detailsは評価の対象となりますが、そこで甲乙付け難いと運営が判断したら、pitchによって判断することになります。結果として同じ内容の発表になろうと、そこに至るまでの経験や想いについては、かならずあなたにしかない何かがあるはずです。
この記事では、通過するproposalを書くための作文術(どのように書くか)ではなく、「どんなことを書くか」をいちレビュワーの視点から解説したつもりです。ここまでに書いたことについて少し気にしてほしいという想いはありますが、どうか過剰に気にすることなく、どんどんProposalをお送りいただければと思います。
https://kaigionrails.org/2023/cfp/
https://unasuke.fanbox.cc/tags/IETF
IETF Meetingに参加してから、QUIC WGやTLS WGの動向を追っておきたいなという気持ちになりました。
どうやって追っているかというと、RSS feedを購読しています。具体的には以下のfeedを、MonitoRSSを使ってDiscordに流しています。
そして更新が流れてきたタイミングで、内容を読んで思ったことを1〜2文程度で書き、pixivFANBOXに支援者限定で公開します。
このとき書く内容については単純に思ったことを書くのみで、技術的に正確だったり、なにかの学びになったりする内容にしようとはしていません。理由はそれが負担になって続けられなくなるのを避けるためです。これはRails及びMastodonにおいても同様です。
毎月末に、その月の投稿を1つにまとめて全体公開で再度投稿します。例えば5月は次のようになりました。
https://unasuke.fanbox.cc/posts/6073778
(5月まではDNS関連のdnsopとdpriveも追っていましたが、流量が多く負担が大きいのでやめました)
https://slide.rabbit-shocker.org/authors/unasuke/rubykaigi-2023/
As I wrote in last year’s participation (JA), I applied for the Ruby Association Grant 2022. As a result, it was accepted and I was able to complete the port of aioquic to some extent.
I think this presentation was a little early final report. I am a little concerned about whether or not I will apply for the Grant again this year, but I will think about it again when the time comes. This is because, after all, time constraints are unmanageable. It is true that it makes a deadline, and I can certainly make progress with the help of my mentor, but I have no choice but to devote my personal time to writing the code. I felt that if I cannot generate the time to do this as a job, I will not be able to continue. However, I wondered if any company would invest in the QUIC implementation of Pure Ruby, which is not suitable for production use. I have not been able to approach companies because I am worried about this, or rather, I have not been able to come up with an answer to this question.
“unasuke dropped”
I have been helping with the RubyKaigi network for the past few years. This year again, as a member of #RubyKaigiNOC
, I mainly helped with L1.
#rubykaigi #rubykaigiNOC 台数チェックをするうなすけの様子です pic.twitter.com/WqZpi1bEoV
— そらは (@sora_h) May 15, 2023
Sorah, who is the organizer of the RubyKaigi and NOC boss, is a very busy person. Therefore, this year I decided to take some of her tasks away from her. But as a result, other NOC members including her, helped me. However, thanks to that, I was able to gain knowledge about fluentd. I had never written a fluentd configuration before. The book “fluentd実践入門” written by tagomoris was very helpful in doing this task, and I got him to sign the book for me on #authorsrb.
I’m very pleased to provide the Internet to all RubyKaigi attendees. I hope to provide the same experience in Kaigi on Rails which is the conference about Ruby on Rails in Japan as one of an organizer of that either. But it’s a very hard thing in this year I thought.
Continuing from last year, I had the opportunity to DJ at a RubyMusicMixin2023 organized by pixiv. After a great Kaigi, it is a great time to dance to the music also.
#RubyMusicMixin #RubyMusicMixin2023
— 炬燵は首輪を買い足した (@sakahukamaki) May 14, 2023
NICEDJでオタクの語彙が「懐かしい」と「ヤバイ」になり、NICE VJで人は踊る pic.twitter.com/AOxrgr2T7C
2、そして3。https://t.co/0XDpjsJgQi pic.twitter.com/EIz0X4Zsa5
— うなすけ (@yu_suke1994) March 5, 2023
1. Write Codes, 2. Receiving and sending in English (as a lingua franca), 3. Show Your Presence at International Conferences – by kakutani
The most difficult part of this year’s RubyKaigi was speaking in English. I think I did a little bit about “1. Write Codes” in “Developing the Ruby Ecosystem,” as Kakutani-san mentioned. On the other hand, I did nothing about 2 and 3.
However, DeepL and ChatGPT have recently allowed us to empower English language skills. I may still be powerless in face-to-face conversations, but in one-way speaking situations where I have to prepare a script in advance or writing, they help me a lot. (Also, I wrote this blog in English and Japanese too!) In fact, for my presentation, I first wrote a script in Japanese, had it translated into English by DeepL, and then adjusted the English text to suit my English skill. (I spoke a little Japanese. I apologize.)
As I mentioned in my talk, I’m trying to create my own QUIC implementation based on my porting knowledge. In doing so, I’m reading RFC 8446 and draft-ietf-tls-rfc8446bis, although this is a bit of a detour. Because, during the porting process, I was trying to rewrite the existing Python implementation in Ruby in its original form, and not much thought was given to the TLS 1.3 specification itself.
See you at the next RubyKaigi, Okinawa.
昨年の参加記で書いたように、Rubyアソシエーション開発助成金 2022に応募しました。結果として採択していただき、aioquicの移植をある程度まで完成させることができました。
今回の発表は、結果として少し早めの最終成果報告という形になったんじゃないかと思います。今年度も応募するかどうかは少し悩んでいますが、時期が来たらまた考えようかと思っています。
ここ数年は #RubyKaigiNOC の一員としてネットワークの手伝いをしています。今年も、主にL1(ケーブル、APの敷設、撤収)の手伝いをしました。
RubyKaigiのオーガナイザーでもあり、NOCのボスでもあるsorahが大量のタスクを抱えているので、今年はsorahのタスクを奪うことを密かな目標にしていました。結果としてsorahやhanazukiさんにおんぶにだっこでしたが…… ただ、奪ったタスクにより、fluentdについての知見を得ることができました。そして、奪ったタスクはfluentdに関するもので、とはいえこれまでfluentdの設定を書いたことがなかったのですが、tagomorisさんの「fluentd実践入門」 がすごく助けになりました。#authorsrb のおかげで、tagomorisさんから直接本を書い、サインを頂くことができました。同じ本を何度も買おう!
最近本を出したRubyistに話しかけようスタンプラリー #rubykaigi2023 会場 をやります #authorsrb|やきとりい
RubyKaigi参加者の皆さんにインターネットを提供することは嬉しいことです。同じ体験をKaigi on Rails 2023でも提供できると嬉しいのですが、今年はどうなるでしょうね……
昨年に引き続き、今年もpixivさんの主催するアフターパーティーであるRubyMusicMixin2023でDJをさせていただきました。Kaigiの後に良い音楽を浴びるの、最高の体験ですね……!
最後に告知をしましたが、高専DJ部というイベントを早稲田にある「茶箱」で定期的に開催しています。次回は7月の後半になる予定です。RubyMusicMixin2023のような、オールジャンルなクラブイベントとなっています。是非来てください。
今回のRubyKaigiにおいての一番の挑戦は、英語で発表するということでした。角谷さんがおっしゃっていた「Rubyエコシステムの発展」にある事項(上記)のうち、1はそれなりにできていたんじゃないかと思っています。反面、2と3については僕は特に何もできていませんでした。
しかし、最近はDeepLやChatGPTなどによって英語力に下駄を履かせることができるようになりました。対面での会話に対してはまだ無力かもしれませんが、事前に原稿を練って一方的に話す場面や、文章を書く場面においては非常に力になってくれます(現にこの参加記も)。実際、僕の今回の発表は、まず日本語の台本を書き、それを一旦DeepLによって英語にしてもらったあと、その英文を自分の英語力に合わせて調整するという形式で作成しました。
今回の発表でも話しましたが、移植の知見を基にした独自のQUIC実装を作ろうとしています。それにあたり、少し遠回りではありますが、RFC 8446並びにdraft-ietf-tls-rfc8446bisを読んでいます。移植中は、既にある実装をそのままの形式でRubyに書き換えるという作業をしており、TLS 1.3そのものの仕様についてはあまり考えられていなかったためです。
それでは次のRubyKaigi、沖縄で……の前に、Kaigi on Railsで会いましょう。
※ IETF 116などの定期的に開催されるin-personな会合をこのブログでは “IETF Meeting” と呼びますが、正式名称ではない可能性があります。正式名称があったら教えてください。ちょっと探したけど総称っぽいものが見付かりませんでした。
IETFは、"Internet Engineering Task Force" の略で、インターネットの標準を決める団体です。ざっくばらんに言えば、RFCを出しているところです。
IETFが何なのかについては、既に良い説明があるのでそちらを参考にするのがいいでしょう。以下にリンクを貼っておきます。
さて、そんなIETFの116回目のMeetingが横浜で行われるとのことなので参加してきました。ただ、僕は都合上Hackathon(日曜)と木曜日のみの参加でした。
まずはIETFがどのような構造を持つ組織で、どのように議論が進んでいくのかを頭に入れておくと、議論が現在どういう状態にあるのかを把握でき、理解の助けになります。以下のリンクを読み、そのあたりの勉強をしました。
次に、自分の興味がある分野のdraftなど、Agendaに記載されている資料について読んでおきます。IETFの会議は、既にMailing listである程度議論されているdraftの内容について実際に対面で意見を交わすという場なので、draftは読んでおくべきでしょう。
以下、メモは常体です。正確性の保証はありません。
https://wiki.ietf.org/en/meeting/116/hackathon
Hackathonは特定のprojectには参加せず、自分がやっているcurlのHTTP/3版ビルドをメンテナンスしたり、QUIC実装のデバッグをしたりしていました。
https://datatracker.ietf.org/meeting/116/session/quic/
ACK_FREQUENCY
frame とか IMMEDIATE_ACK
frameとかadditional_schema
についてRELIABLE_RESET_STREAM
frame, that resets a stream, while guaranteeing reliable delivery of stream data up to a certain byte offsethttps://datatracker.ietf.org/meeting/116/session/moq/
むずかしい!
メディア転送、既にあるWebTransportではなくMoQ(MoQTransport)を定義したいモチベーションとしては、WebTransportはHTTP/3の上にあるプロトコルなので、映像配信をするのにサーバーがHTTP/3を解釈する必要があり、そうじゃなくQUICの上で直にメディア転送ができると嬉しいということらしい(会場で又聞きした)
https://datatracker.ietf.org/meeting/116/session/acme/
dns-account-01
を定義するもの
.onion
domain に対してもACMEによる証明書の自動発行が可能になるようにしようというものIETF、インターネットの標準化について「興味はあるし、楽しそうだけど敷居が高くて、自分はまだそのレベルじゃないな」と尻込みしている人が多いのではないかと思います。確かに、議論の内容はインターネットの最先端についてなので予習しておかないとついてはいけませんし、しかし予習したからといってついていけるわけでもないですし、何より英語でのやりとりを理解する必要があります。ただ文字起こしがあるので、あとからゆっくり読み返すことはできます。
しかし、IETFそのものが初心者を歓迎しているイベントです(そう感じました)。理由は、参加回数が5回未満であれば名札に “NEW ATTENDEE” というリボンを付けることができます。初参加者向けの “New Participants’ Social Hour” というイベントもあります。つまりそのようなNewbieに対するサポートを行うという意識が参加者の間にはあるということです。実際、わからないことを聞いても突き放されることなく、丁寧に教えていただけました。
ただやっぱり、趣味で行くにはEarly Birdであっても$700というのは厳しいものがあります。これについては、(レポートなりを書くことで)業務扱いとして参加費を出してくれる企業が増えてくれることを願うばかりです。特に「若い人達が流入してくれないか」というのを懇親会ではよく耳にしましたし、そのためには若者の手を引いてくれる先輩の存在が、そしていずれそのような先輩となってくれるような、標準化の分野に興味のある人が参加しやすいような土壌をつくることが重要です。インターネットは、欧米の大企業が作っているものを享受する、というものではなく、人類全体で作っていくものです。インターネット上でサービスを提供している企業であれば、インターネットをより良くしていくための活動に対しては支援を惜しむべきではありません。それこそ、社内で採用されているプログラミング言語やフレームワークのカンファレンスに対する参加支援と同じような流れで、IETF Meetingの参加費を支援する企業が増えてくれると嬉しいですね。毎回とはいかないまでも、せめて国内開催の場合は旅費交通費を含めた支援がされるのが望ましいのかもしれません。
そして、お金を払って参加するのであれば、何か目標を自分に課すといいかもしれません。議論の様子や発表される資料は全て公開されています。それでも現地に参加するのは、実際に「インターネット」に関わっている人達に会えるからです。実際僕も、今回のIETF Meetingで「QUIC working groupのchairに話してQUIC開発者が集まっているSlackに招待してもらう」ことを目標として参加し、達成しました1。現地参加するのであれば、現地参加だから意味のある目標をひとつ決めて参加するのがいいと思います。
それと、チケットはWeek Pass(全日)を買っておくほうが絶対に良いです。僕は日和ってAgendaが確定した後にOne-Day Passを購入しましたが、自分の興味のある分野のMeetingが1日に集中することは本当にまれですし、一旦Agendaが確定した後に突然Meetingが生えたりすることもあります。
(ついでに言うと、1日しか参加しないにしても、Agendaの決定を待たずに購入するべきでした。参加当日、正確には受付時に判明したのですが、One-Day Passを購入する段階ではどの日に参加するかを選ぶものではなく、受付のタイミングでどの日に参加するか伝えるというものでした。上の写真の名札にある “THURSDAY” はその場でスタンプされたものです。つまりどういうことかというと、Early価格で買えたのにAgendaを待ってたからLate価格になってしまった……という話です。このシステムが116特有のものか、ずっとこのシステムなのかはわかりませんが。)
僕もこの界隈に足を踏み入れたばかりなので右往左往していますが、それでも参加して楽しかったし、今になっては全日程参加しておけばよかったと思っています。QUICというプロトコルに関しての活動をしているタイミングで、国内でIETF Meetingが開催されるというのは本当に幸運だったと思います。
次回、117はサンフランシスコで開催されるようです。時差が厳しい問題ではありますが、まずはRemote参加をしてみるというのは検討してみてもいいのではないでしょうか。僕も参加するとしたらリモートになるでしょうし。
https://www.ietf.org/how/meetings/117/
もちろんmailing list経由で招待してもらうこともできると思います。しかしこんな良いタイミングでIETFがあるなら直接、と考えました。 ↩
Rubyアソシエーション開発助成 2022年度の僕のプロジェクトの成果としては、以上の通りとなります。このブログは最終成果報告ではなく、個人的なふりかえりなどを書いています。
感想としては、「勉強にはなったが、しんどかった」です。いくら既存の実装を移植するタスクとはいえ、いくらPythonがRubyと似た言語であるとはいえ、移植作業はとても困難1でした。単純に行数が多いというのもその理由のひとつですが、特に移植が大変だった tls.py
と connection.py
では、さらに大きな問題がありました。
まずは、処理対象となるデータが暗号化されていることです。テストケースが落ちているとき、どこから実装が誤っているのかの調査が困難でした。とにかく大量のdebug printを出したり、PyCharmのdebuggerとdebug.gemによるstep実行を1行ごとに交互に進め合ったりするなどしてなんとかしました。その結果、基礎的な暗号技術の知見がないために生まれたバグが原因だったり、call stackの奥深くでtypoしていたりして、自分の実力を思い知らされました。
次に、暗号化に関連しますが、OpenSSL binding API の問題です。PythonもRubyも、暗号化や、鍵交換に関わる処理はOpenSSLを利用しています。Python、aioquicだとpyca/cryptographyが、Rubyだとopenssl gemがOpenSSLのAPIを利用するのに使われますが、この2つのライブラリ間で、OpenSSL APIの抽象化度合いが異なります。なのでOpenSSL APIを使う部分の移植については、まずPython側の実装が最終的に何のOpenSSL C APIを呼んでいるかを突き止め、それがopenssl gemではどんなAPIになっているかを調べる、という手順が必要でした。
言ってしまえば、この分野に首を突っ込むにはまだまだ知識が不足していることを痛感させられた、ということです。
一方、そのような難しいことに取り組むことにあたって、やはり「やります!」と宣言して締め切りが生まれるのは、自分の手を動かすことへの途方もないくらいの後押しになりました。採択されなくても進めるつもりではありましたが、その場合は倍以上の時間がかかるか、そもそも諦めていたでしょう。
また、この取り組みにあたって、どうせならと型定義も書くことにしました。型定義(RBS)を書くことで、補完や警告による恩恵を受けることができました。ただ、nil checkをした後でもnilによる警告が出たり、長大なファイルになってくると補完候補が出てくるまでにふた呼吸必要になったりと、まだまだこれからという印象は否めませんでした。型定義について、これからはなるべく書いていこうと思います。
このプロジェクトを進めるにあたって新規に購入したり、既に買っていたけど改めて読み直したりした本が以下です。
https://www.oreilly.co.jp/books/9784873119328/
このプロジェクトをやる人間が読むのが「入門」はないだろうという感じではありますが、Pythonについて体系的に学んだことがなかったので購入しました。 この本を読むまで知らなった文法が多々あり、もちろんそれはaioquicでも使われている場面がそこそこあったので、読んでおいてよかったです。
https://www.lambdanote.com/products/tls
SSL/TLSそしてOpenSSLに関しては、とりあえずはこの本を読んでおいて間違いないと考えており、以前から所有していました。実装にあたってTLS 1.3を解説した新章がその助けになりました。
https://www.shoeisha.co.jp/book/detail/9784798171418
TLSの実装の際に、より役に立ったのはこちらの本でした。「プロフェッショナルSSL/TLS」のほうはSSL/TLSがどのようなものであるかの説明であるのに対し、こちらの本はOpenSSLのAPIを使って実際に通信をするためのコードが出てきたりと、より実装寄りの本となっています。
https://www.shoeisha.co.jp/book/detail/9784798148816
TLSが通信を暗号化するために使用している技術について学ぶことができる本です。まだ読み終えてはいませんが、そもそもにTLSを移植しようという人間が、その内部で使われている暗号技術に関して無知というのはいかがなものかと思い読んでいます。
https://www.ohmsha.co.jp/book/9784274065736/
これもまだ読み終えられていません。なぜこの本を買ったかというと、OpenSSLについての知識が足りないなと思ったためです。この本ではOpenSSLの0.9.6について解説しており、現在OpenSSLの最新リリースは3.1.0です。なので今となっては古い本となってしまいますが、そもそもOpenSSLそのものを解説した(日本語の)本というのは本当に少ないので、まずはこれを読もうと思っています。
僕の理解を書きます。なので誤っているかもしれません。
QUICについては、IETFのQUIC working group(以降WGなどと略します)で議論されており、現在activeなDraftは8つあります。またQUICのWG以外でもQUICが関連しているRFCやDraftがあります。例えば最近はQUIC上で映像や音声の転送を行うための仕様について議論するMedia Over QUIC WGが盛り上がっている2ようです。
QUICプロトコル自体については、Version 2についてのdraftが出ています。Version 1からの変更点は、まずversion値が変更されます。暗号化について定めされているいくつかの初期値も変更されます。そして、そもそもQUICのどのversionで通信を行うのかを合意するversion negotiationをどのように行うかについてもdraftになっています。
興味深いのは、これまでのQUIC v1ではversionの値として 0x00000001
が使用されますが、QUIC v2ではその値に 0x6b3343cf
が使われることです。これは硬直化を防ぐのが目的だと記載されています。硬直化とは、通信を処理するプログラムの古い実装が、新しい仕様での通信内容を解釈できずに通信が阻害されてしまうことを指します。既存の例を挙げると、TLS 1.3では、自身のバージョン値として TLS 1.2の値を使用して通信することになっています34。そもそもに、QUIC v2がそのような硬直化を防ぐためにRFCとなる作業が進められている(ように読める)ものなので、QUIC v1がもう古くなって脆弱だ、ということはありません。それはdraft-ietf-quic-v2-10にも
QUIC version 2 is not intended to deprecate version 1.
と明記されています。
他にもdraftになっているものはいくつかありますが、3月末に開催されるIETF 116 YokohamaにおいてAgendaにあるのは以下の3つです。(QUIC v2についてはAgendaには載っていません)
Media Over QUICのほうに目を向けてみると、mailing listの投稿がとても活発で追いかけるのが大変なのですが、下記のyukiさんのまとめによれば、Warpをbase draftとして議論が進んでいるようです。まとめではdraftの番号が02となっていますが、今年3/13に04が出ています。
おそらくIETF 116においてもこれについてのミーティングが行われるのだと思いますが、今これを書いている段階ではまだAgendaがなにもありません。
プロジェクトとしては一区切りしましたが、移植作業そのものはまだ途中です。引き続きQUICの実装に取り組むつもりです。が、とりあえず迫っているRubyKaigiの準備があるのでしばらく実装についてはゆっくりになると思います。というかまあ、プロジェクト期間中は結構無茶な開発をやっていたので、しばらくはペースが落ちると思います。
ここで書きすぎると、RubyKaigiで話す内容がなくなってしまうのでこのくらいで。
メンターとして面倒を見てくださった笹田さん、そしてそもそも僕のproposalを採択していただき、このような機会をくださったRubyアソシエーションさんに感謝します。本当にありがとうございました。
開発は基本的にUbuntuマシンにSSHして行っていました。これを、福岡Rubyist会議03や鹿児島Ruby会議02のときには飛行機に乗ることもあり、MacBook上に開発環境を構築しようとしましたが、しばらく頑張ってもaioquicのテストをApple SiliconのMac上でネイティブ実行することができずに諦めました。OpenSSL周りに問題がありそうだというところまではわかったのですが……とはいえ移動中にまともなコードは結果的に書けなかったので、これは些細な問題でした。 ↩
Media Over QUIC、実はあまり追い掛けていなかったので調べながら書いています。いや、他のRFCやdraftについても調べながら書いています。 ↩
プロフェッショナルSSL/TLS 付録A TLS 1.3 A1.1.1 Record Structure 参照のこと ↩