Findy Engineer Lab

エンジニアの"ちょい先"を考えるメディア

エンジニアはGood Citizenであれ。OSSコミュニティ活動が形成したKubernetesスペシャリストのキャリア

f:id:findy-lab:20201027110239j:plain

株式会社サイバーエージェントでインフラエンジニアを務める青山真也さんは、KubernetesやOpenStackの専門家として広くその名を知られています。過去には同社において、OpenStackを使ったプライベートクラウドやGKE互換なコンテナプラットフォームをゼロから構築。また、技術コミュニティでの登壇や書籍の執筆、他社での客員研究員・技術アドバイザーとしての活動も積極的に行っています。

唯一無二のキャリアを歩んできた青山さんですが、自身の成長にはOSSコミュニティ活動が大きく影響しており、自らがコミュニティの恩恵を受けてきたからこそ世の中に自分の知見を還元していきたいと語ります。本稿では青山さんのキャリアをたどりながら、過去に取り組んできた活動やその意義について伺いました。

インフラ基盤との出会いは大学時代

──まずはKubernetesやOpenStackなどの技術に興味を持った理由をお聞かせください。

青山:私は大学時代から、システムのインフラ基盤を構築する技術に興味がありました。そのバックボーンになっているのが、大学時代に学部で使われるシステムのインフラを管理していたことです。私の出身である法政大学には、情報科学部・情報科学研究科のコンピュータ資源を管理している「RAT」という学生有志によるチームがありました。私はそのチームに参加してシステムのインフラ管理に携わっていたのです。

チームを運用するにあたって、いかに性能の良いインフラ基盤を提供するか、そして自分たちの管理作業をどれだけ効率化できるかを意識していました。その頃に取り扱っていたのが、クラウド環境構築用のソフトウェアであるOpenStackや、Linuxカーネルをハイパーバイザとして機能させるための仮想化モジュールであるKVM(Kernel-based Virtual Machine)などの技術です。

──インフラ基盤を構築するうえでベースとなる技術を扱っていたのですね。

当時から、AWSやGCPといったクラウドプラットフォームを使う側ではなくて、提供する側にまわりたいというマインドが強かったです。就職先としてサイバーエージェントを選んだのも、この会社ならば将来的にプラットフォーム構築の業務に携われるのではないかと思ったから。もちろん、サイバーエージェントの持つ企業風土や文化も魅力的でした。

幸いなことに、入社後はプライベートクラウドの基盤開発チームに配属され、コンテナ基盤をプライベートクラウド上に構築するプロジェクトにアサインされました。

f:id:findy-lab:20201027110535j:plain

熟考したうえでの失敗ならば、それも成長の糧

──現在ではコンテナオーケストレーターとしてKubernetesがデファクトスタンダードになっていますが、当時は多種多様なコンテナオーケストレーターが登場しており、どのソフトウェアが生き残るかわからない頃だったように思います。

青山:さまざまなソフトウェアが群雄割拠している時代でしたね。調査を続けるなかで、KubernetesまたはDocker Swarmのいずれかをコンテナオーケストレーターとして選ぶべきだというところまでは絞り込めましたが、どちらが良いのかを決めかねていました。

そこで、初期のコンテナ基盤では、利用者がKubernetesとDocker Swarmのどちらもマネージドサービスとして利用可能な状態にしていたのです。しかし、Docker Swarmはリリースから1年以内に機能の提供をやめてしまいました。

──なぜ最終的にKubernetesの側を残したのですか?

青山:Docker Swarmはとても簡単に利用できる一方で、拡張性や機能性に難がありました。コンテナのプロセスを動かすだけの用途ならばDocker Swarm単体でも十分なのですが、より複雑なことを実現するとなると、他のソフトウェアが必要になってきます。また、エコシステムやオープンソースコミュニティとしての発展性も、Kubernetesと比較すると課題が多かったです。それらの点を踏まえて、Docker Swarmの提供をやめる決断をしました。

一方のKubernetesは汎用性の高さが大きな利点です。さまざまなリソースのあるべき状態を宣言的に定義することで、システムを一定の状態に保つReconciliation Loopというメカニズムが本当によくできている。この機能により、多種多様なコンポーネントをKubernetesの管理下に置けるため拡張性にも優れています。また、リソース状態を指定する宣言的APIのつくりも非常に洗練されていると感じました。

──入社して間もない頃にインフラ基盤構築のプロジェクトに携わったことは、青山さんのキャリアにどのような影響を与えたと思いますか?

青山:すでにアーキテクチャや設計が決められている環境で一部の機能だけを作るのと、何もないところからベストな選択肢を試行錯誤していくのとでは、得られる経験が全く違います。やはり後者の方が、圧倒的にエンジニアのスキル向上には寄与してくれるはずです。

入社してすぐに、ゼロイチの状態から技術選定に携われたのは幸運でした。自分自身で徹底的に調査をし、そして優秀なチームメンバーからさまざまなことを学びながらアーキテクチャを検討できたのは、貴重な経験だったように思います。

──エンジニアがキャリアを積み重ねていくうえで、何かしらの技術選定に携わることは重要でしょうか?

青山:そうですね。技術選定に携わると、世の中に登場している技術の詳細や特徴を徹底的に調べる経験を積めますし、どのような判断基準に基づいて選定すべきかという考え方も身につきます。もちろん、先ほどのDocker Swarmのように自分の選定したものを廃止・リプレースしなければならないこともありますが、それも含めて大切な経験だと私は思います。過去の選択を悔いるのではなくて、より良いシステムに変えていくために必要なプロセスだったと考える。その方が仕事を楽しめますし技術習得のスピードも早くなるはずです。

2,000時間を要した書籍執筆。続けられたのは楽しかったから

──その後、青山さんは徐々に社外のKubernates関連の勉強会に足を運ぶようになっていったのだとか。

青山:当時のサイバーエージェント社内には、Kubernetesを用いてプラットフォームを構築しているのは基盤開発チームのメンバーしかいない状態でした。社内だけでは得られる知識に限界があったため、より高度なことを学びたいと思ったのが、Kubernetes関連の勉強会に参加した理由です。

初めて登壇したのは、新卒1年目にあたる2016年12月に参加した「Okinawa Open Days 2016」です。「OpenStack 環境における Container as a Service の提供と課題」というテーマで、プライベートクラウド環境を構築するなかで得た知見を発表しました。その後も「Kubernetes Meetup Tokyo」や「Docker Meetup Tokyo」などさまざまな勉強会に参加して登壇の機会を増やしていきましたね。

──なぜ登壇する側になろうと思われたのですか?

青山:自分たちの構築したインフラ基盤やコンテナ・Kubernetes関連の最新技術について、他の方々とディスカッションしフィードバックをいただきたいと思ったからです。その過程でより良いアーキテクチャが見つかる可能性もありますし、自分たちの得てきた知見を世の中に還元したいとも思いました。

実際、カンファレンス参加者の方々とディスカッションするなかで数多くの知見を得られました。例えば、各社の持つKubernetesの運用知見や障害発生時の対策などは、インフラ基盤の構築・運用に携わる方とディスカッションしなければなかなか得られません。それに、自分の知識を共有することで他社のお役に立てるケースも多々ありました。

最近では参加するだけではなく、「CloudNative Days Tokyo 2020」のCo-chair(共同実行委員長)や「Kubernetes Meetup Tokyo」「Cloud Native Meetup Tokyo」のオーガナイザーなど、運営する側にも回っています。ちなみに私は自分のことを“コミュ障”だと思っているのですが、カンファレンスへの参加を続ける過程で、そんな私でもたくさんの友人や知り合いができました(笑)。本当に嬉しいことです。

──志をともにする仲間が増えていくのは、コミュニティ活動の醍醐味ですね。青山さんは、外部への情報発信として書籍の執筆にも携わっていらっしゃいます。Kubernetesの解説書である『Kubernetes完全ガイド』を書かれたきっかけは?

青山:2017年の夏くらいに、出版社の方から声をかけていただきました。私の登壇活動などを知って、依頼をしてくださったのだと思います。

──書籍の執筆は大変な作業だと思いますが、どれくらい時間がかかりましたか?

青山:第1版はトータルで2,000時間ほどかかりました(笑)。

──2,000時間とは、すごい作業量ですね。

青山:主に業務後や土日の時間を利用して執筆をしていました。本を書き上げるまでプライベートな時間はほとんどなかったですが、全く苦ではなかったですよ。執筆が楽しくて仕方ありませんでした。

──本を書く経験をしたことは、自身の成長にどう結びついたと思いますか?

青山:エンジニアの業務において、特定の技術領域の全てを調査することはほとんどありません。調べたとしても、自分の業務に関係する部分だけだと思います。ですが専門書を書くとなると、特定領域を網羅的に調べて、かつ正確な知識を身につける必要があります。その過程で自分自身のスキルを相当に向上させることができました。それに、読んでくださった方々から感謝の声をいただくたび、チャレンジして良かったなと実感しますね。

f:id:findy-lab:20201027110547j:plain

コミュニティを大切にするKubernetesの文化

──青山さんは登壇や書籍執筆だけではなく、OSS活動にも積極的に取り組まれています。とりわけ最近は、KubernetesのCRDやOperatorなどの機能をフル活用しKubernetes-nativeな手法を取り入れた「Kubernetes-native testbed」や「Kubernetes-native CI/CD」を作成されていました。これらのOSSを作成する過程で、大切にした点や身についたスキルはありますか?

青山:「Kubernetes-native testbed」は、あえて新しい技術のみを選定してプラットフォームを構築していました。技術選定の過程において、Kubernetes-native関連技術の内容や将来性などを身をもって体験できたのは大きかったです。

それから、最新のソフトウェアは不具合などさまざまな要因により思いどおりに動かないことが多いです。「Kubernetes-native testbed」構築の過程でも、いくつもの課題に直面しました。原因究明のためにはトラブルシューティングが必要なのですが、その作業自体がエンジニアにとって技術的な学びの大きいものです。トラブルシューティングの経験が自分の成長につながりました。

──過去にはさまざまなOSSを見てきたと思うのですが、印象に残るPull RequestやIssueなどはありますか?

青山:(インタビュー時点から)半年ほど前、Kubernetesにサイドカーコンテナに関する機能追加のPull Requestが出されました。

Kubernetesの機能追加のフローは、設計に関する提案のDesign ProposalであるKubernetes Enhancement Proposalが提出された後、コントリビューター同士が慎重に議論を重ねてOKが出たうえで実装に入るという流れになっています。機能が取り消しになることはほぼないのですが、その機能に関しては珍しく、実装を終えてリリースされる直前の段階でNGが出ました。

完全に振り出しに戻ってしまったのですが、Kubernetesのコントリビューターたちは決して感情的にならず、とても穏やかにその事態を受け止めていました。OSSコミュニティとしてあるべき姿だと感じましたね。 f:id:findy-lab:20201027110502p:plain

https://github.com/kubernetes/enhancements/issues/753 にて、前述のサイドカーコンテナに関する機能の議論が行われた。

──KubernetesのOSSコミュニティでは、なぜ穏やかな空気感が醸成されているのだと思われますか?

青山:Kubernetesのコントリビューターたちは、さまざまな場で“コミュニティ”という言葉を頻繁に用いる傾向があります。例えば、各種のカンファレンスでは多くの登壇者が、コミュニティの大切さやコミュニティをみんなで盛り上げる意義について発表している。その草の根運動が功を奏している面はあると思います。

Cloud NativeやKubernetes Nativeなアーキテクチャを実現するうえでは、各種のOSSが必要不可欠です。だからこそKubernetesに携わっている人々は、オープンソースという世界をコミュニティのみんなで盛り上げていく意識を強く持っている気がしますね。

エンジニアは“Good Citizen”であれ

──今回のインタビューを通じて、青山さんが自分自身の知見を積極的に他の方々へ還元されていることが伝わってきました。そのモチベーションの源泉は何ですか?

青山:現在のエンジニアの仕事は、オープンソースソフトウェアやドキュメント、それについて利用者が発信した情報がなければ成り立ちません。多くの企業はOSSを用いてプロダクトを開発しているわけですし、エンジニアは業務時間中にインターネット上の記事や書籍の情報を参考にしながら作業を進めていきます。

いわば、エンジニアという仕事そのものが、誰かの発信した情報やコミュニティ活動の副産物によって成り立っている。仮に全世界の誰もOSSにコントリビューションせず情報を発信しなくなれば、エンジニアはかなり仕事がしづらくなってしまうでしょう。

私はThe Linux Foundationの方からはじめて聞いたのですが、OSS開発に携わる方々はしばしば“Good Citizen(良い市民)”というフレーズを用います。これは、私たちはさまざまなOSSの恩恵を受けているのだから、他の人々に何かをお返しできるような良い市民になろうという意味なのですが、私はこの言葉をすごく大切にしています。

余談ですが、サイバーエージェントには特定領域の第一人者として実績を上げているエンジニアに、その分野の発展のための貢献および、サイバーエージェントグループに還元することを目的とした「Developer Experts制度」があります。この制度を新規で立ち上げる際、藤田社長にGood Citizenの話をしました。私たちはOSSの恩恵を受けているからこそ、企業としてそのコミュニティに還元していくべきだと。

藤田社長もこの考えを気に入ってくれたからこそ、サイバーエージェントは「Developer Experts制度」を立ち上げ、業界への還元を目指すようになりました。

f:id:findy-lab:20201027110525j:plain

──エンジニアとして本当に意義のある活動ですね、最後に読者の方々に対して、OSS活動という軸でメッセージをお願いします。

青山:OSS活動に取り組むことで、会社の業務だけをこなすよりも遥かに高い技術を身につけられます。なぜなら、各種のOSSを開発・運営しているのは世界でもトップクラスのスキルを持ったエンジニアの方々ですから。彼ら・彼女らによる設計を学び、プログラムを読み、ともに議論することは、いわば世界最高峰のバーチャルチームと一緒に開発をしているに等しいです。

それに、OSSのコミュニティへと積極的に参加している方々は、技術への向上心や探求心のある人が非常に多い。そういった方々と一緒に学んだり、ポジティブな空気感を味わうことでエンジニアとしてモチベーションの向上にもつながります。ぜひエンジニアリングを楽しむためのひとつの方法として、OSSという文化に親しんでいただきたいです。