🐟

コンテナランタイムの世界を知り初めてOSSにコミットをした

2022/03/27に公開

コンテナランタイムに興味を持ち、その勢いで初めてOSSコミットをしました。せっかくなのでまとめておきます。

最終的な着地

Rust製OSSランタイムyoukiPRを投げて、マージしていただきました。
PRの内容は取るに足らない軽微なドキュメント追記のコミットです。そんな非常に小さなPRとはいえ、僕にとしては嬉しい経験でした。

https://github.com/containers/youki/pull/707

コンテナランタイムの世界を知るきっかけ

普段はwebアプリケーションエンジニアをしており、Railsを使ったサーバサイド開発とAWSを使ったインフラの構築/運用を主な業務としています。Dockerを使う以外のコンテナ技術とは少し遠い業務領域です。
その時点で習得しているコンテナの知見は「Dockerなんとなく使える」くらいのレベルでしたが、Docker、コンテナという技術にぼんやりと興味はありました。

そんな僕がコンテナ技術に強い興味を持ったきっかけは、情報収集として聞いていたPodcastでコンテナランタイムについて話す回を聞いたことでした。

https://fukabori.fm/episode/54
https://fukabori.fm/episode/55

「コンテナの世界にはDockerの他にも多くのライブラリが存在し、それらは標準仕様のもとで活発に開発されている」ことがPodcast内で語られており、それが僕にとっては興味を引く内容でした。
その標準仕様を理解すればコンテナ技術に貢献ができたり、あわよくばランタイムが作れるようになるのではと少し思いました。(まあそんな簡単なものではなかった)
Podcastを聞いたあと本編で紹介されていた書籍をすぐに購入し、本編と並行して書籍を読み進めていきました。

さらにコンテナランタイムに関する情報をインターネットで追っていきました。AWS Fargate1.4でDockerからcontainerdへ実行エンジンが移行される記事や、KubernetesのDockerランタイム非推奨に関する記事を読んで、内容の一部を理解できるようになりコンテナランタイムの概要を掴むことができてきたかなと思いました

https://www.amazon.co.jp/dp/B08PNMRXKN
https://aws.amazon.com/jp/blogs/news/under-the-hood-fargate-data-plane/
https://thinkit.co.jp/article/18024

Rust製OCIランタイムyouki

コンテナランタイムに関する情報を追っていく中でRust製OCIランタイムyoukiの作者 utam0kさん の記事を読み、僕がやりたかったことがまさに書いてありました。
残念ながら僕の場合は、仕様書を読んですぐに作れそうとは思えませんでした。ただ、記事内のオープンな雰囲気や日本人の方が開発していることから、いずれ自分も何かしらの貢献はできるのではないかと思いました。
https://zenn.dev/utam0k/articles/74d08c9f556534

手始めに、リポジトリのissues眺めてみました。RustもLinuxもさほど知らない自分には Good First Issues でも少しハードルが高そうだなと思いました。次に、実際に手元で動かしてみようとドキュメントを読んでいきました。ありがたいことに、youkiではドキュメントが非常にきれいにまとめられており、簡単に触って試すことができました。Docker内で動いているruncをyoukiで置き換えて動作した時に初めてOCIランタイムが手元で動いていることを実感して感動しました。(手順としては、どう考えてもissues見る前に先に手元で動かすべきでした)

youkiにPRを投げた

youkiを手元で動かしている中で ドキュメントの記述で気になる点がありました。これはPR投げるチャンスかもと少し思ったのですが、この小さなドキュメントの変更により誰か助かる人はいるのだろうかとも思いました。
少し葛藤を繰り返した結果、「自分のような初心者ならではの疑問なのでPR出してみよう、まあ最悪でもdenyされるだけだから大したことではないか」という着地にいたりました。
決めたはいいものの、僕は次の壁にぶつかりました。「OSSのお作法がワカラン。英語ワカラン。OSSコワイ。」

OSSのお作法ワカラン
インターネットで見つけたそれらしい記事に目を通した上で、youkiのドキュメントを確認して解決しました。

英語ワカラン
「first」とかでPR検索をかけて、過去にマージされたPRほぼコピペして 参考にして解決しました。

つまり、OSSへの貢献にあたって僕が大きな障壁だと感じていたことは、いざとなると大したことない問題でした。

無事PRの作成が完了し、待っている間は終始ソワソワしてましたが、翌日に無事マージされました。

これから

次の目標としては 既存のissuesを理解して機能要望/修正要望が出せるようになることです。
プロジェクトの課題の理解と発見のためには一定の技術力が必要になるため、ソースコードリーディングをベースにRustとLinuxへの理解を少しずつ深めていこうと思います。
コンテナ界隈にはギークな人が多く見え 恐縮してしまいますが、自分にできそうな貢献を見つけてコミットしていこうと思います。

GitHubで編集を提案

Discussion