作りはじめた記事を書いてから約2年が経った。
開発を続けてきたRustライブラリ ATrium
を、先日ついにorganizationに移管した。
経緯
昨夏からAT Protocolの OAuth に対応する実装を進めていたものの、プライベートの事情などもあってなかなか順調には進まなかった。何度かPull Requestをもらって実装方針を議論したりもしたが、進捗は芳しくなかった。
@erlend-sh 氏からDiscordで「organizationに移管したらどうか?」とアドバイスを受けたこと、また自分自身も継続的な開発・メンテナンスを強い意志で続けていける自信が持てなかったこともあり、前向きに検討を始めた。
そして先日ようやく atrium-oauth
をリリースしたところで一区切りとし、自分の個人repositoryからorganizationへと移管。「メンテナンスに協力してくれる」と手を挙げてくださった4人のメンバーたちと一緒に運営していくことにした。
つい先日、同世代の友人の訃報を知るという出来事もあった。OSSライブラリが自分の死によってメンテナンスが止まってしまう、ということも現実のリスクとして無視できないと感じるようになった。
私とATrium
約2年前に X(当時はまだTwitter) を見限って新たな可能性を求めてBlueskyに参加した。AT Protocol というもので作られていることを知り、早速APIを叩いて何かをしてみたかったが、自分の好きなRust言語向けのライブラリはまだあまり良いものが無かった。 「これは挑戦してみるチャンス」と思い、さっそく自作に取り組んでみたのが始まりだった。
最初は atprs
とか適当な名前だった。とにかく lexicon のJSONをparseして、Rustの型に落とし込んでコードを生成することでAPIが使えるようになる、というものを目指して作った。あとはXPRC Requestを処理する部分を作って繋ぎ込み。
そしてChatGPTに相談してプロジェクト名を決定。
AT Protocolのための小さなライブラリが集まり青空を望む中庭、ということでATrium
このときは適当に決めたが、後々とても愛着の湧くものになった。
I've published my Rust library "ATrium API" to crates.io, a library for AT Protocol Services. It includes strict type definitions for all XRPC requests, which are generated from the latest Lexicon schema. Attention Rustaceans, give it a try! https://crates.io/crates/atrium-api
— すぎゃーん (@sugyan.com) May 3, 2023 at 10:59 PM
[image or embed]
早速 Community Showcase にも登録してもらい、多くの開発者に注目していただいて、Pull RequestやIssueも届くようになった。 自分が全く知らなかったライブラリを教えてもらったり、新しい手法を提案してもらったりと、とても勉強になる日々だった。
実装を進めるにあたって様々な問題に遭遇し、試行錯誤を繰り返しながら解決策を模索していった。
- 自動でtokenをrefreshして再送するRustの非同期HTTP Client - すぎゃーんメモ
- Rustのserdeで、データフォーマットによって異なる型にserialize/deserializeする - すぎゃーんメモ
依存しているライブラリで不具合があって そちらに Pull Request を送って対応してもらうこともあった。 Release-plz を導入してリリースフローを整備し、互換性を考慮しながら設計を必死に練り直し、寄せられた要望や問題に対応していった。
ドッグフーディングも兼ねて、自分でもATriumを使ってRustで botを作ったり、Desktop Client や TUI Client を開発してみた。
そうしているうちに、多くの方々の協力を得て、Starも300を超えるまでに成長した。公式SDKではないものの、AT ProtocolのRustライブラリとしては事実上の標準的な存在になり、多くのRustプロジェクトで活用されるようになった。 自分が手がけたOSSがここまで広く使われるようになったのは、これが初めての経験だった。
嬉しかったので記念にスクショしました
— すぎゃーん (@sugyan.com) April 13, 2024 at 4:45 PM
[image or embed]
もちろん良いことばかりではなく大変なこともあったけど、それらも含めて非常に貴重な経験ができた、と思う。
ありがたいことに様々なissueやpull-requestをいただくようになってきたけど エイゴが苦手なのもあり上手くさばききれずにいる…。実装も大事だけど、オーエスエスはコミュニケーションと意思決定が非常に重要だなとつくづく感じる。
— すぎゃーん (@sugyan.com) November 15, 2024 at 10:54 PM
得たもの
ATriumの開発を通じて多くの学びがあり、Rustaceanとして間違いなく技術力が向上したと思う。特に非同期処理の制御や、Genericsを活用してユーザが柔軟に実装を差し替えられる構成にした点は、苦労の連続ではあったが その分大きな学びとなった。そして依存ライブラリやfeatureについてよく調べたり、他のSDKの実装を読みこんだりもした。
またProtocolの実装のために、AT ProtocolのspecやOAuth関連のRFCを何度も調べたり読み込んだりしたのも良い経験になった。
何より、ATriumというOSSの開発を通じて多くの開発者の方々と交流できたことが財産になっている。開発者コミュニティDiscordなどにも入れていただいて、多くのアドバイスや情報をいただけるようにもなった。
今後
もちろん、organizationに移管したからといって開発を一切放棄するというわけではなく、メンテナの一員として対応できるものがあればやっていくし、自分自身でもまだ使い続けるので必要と思った修正や更新は積極的に入れていくつもり (もちろん他のメンテナから承認もらった上で)。
ただ「自分が対応しないと何も進まない」という状態からは脱することができて 少し安心している。
さらに多くの人々に使っていただけるOSSプロダクトとして成長していけるよう、無理の無い範囲で関わっていけたらいいなと思っています。