Goの次世代を担うNext Expertsが語る、プライベートクラウドを支えるエンジニアリングのあり方

技術・デザイン

当社には、特定の分野に抜きん出た知識とスキルを持ち、第一人者として実績を上げているエンジニアを選出する「Developer Experts制度」があります。その次世代版である「Next Experts」として選出したエンジニアは、各専門領域において培った知見をサイバーエージェントグループ全体に還元すべく、技術力の向上に努めています。

2022年に新卒入社し、グループIT推進本部 CIUでエンジニアを務める渋谷は、Go領域のNext Expertsも担当しています。サイバーエージェントグループの事業を支えるプライベートクラウドを開発する渋谷に、クラウドネイティブに求められる技術や、Goのプロダクト導入のノウハウを聞きました。

Profile

  • 渋谷拓真 (グループIT推進本部 CIU)
    2022年新卒入社。Goにおける当社Next Expertsであり、Go領域において史上最年少で就任。CA 1Day Youth Boot Camp Go Rookie Gymをはじめとした社内のGoイベントのリード、社外イベントをはじめ数多くのイベントに登壇。「Go Conference 2024」 主宰。golang.tokyo運営。Kubernetes、Kubernetes SIGsメンバー。

サイバーエージェントの事業を支えるプライベートクラウド

── 渋谷さんの、現在のお仕事や役割について教えて下さい。

現在は、サイバーエージェントグループ全体のインフラを支える組織 CIU(CyberAgent group Infrastructure Unit)インフラエンジニアをしています。CIUは主に、プライベートクラウドである「Cycloud」を開発・運用しています。「Cycloud」は複数拠点のデータセンターにて数千台の物理サーバーによって稼働していて、サイバーエージェントグループでおよそ200を超えるプロジェクトで利用されています。

私は「Cycloud」の主要機能の1つである「AKE」の開発を担当しています。「AKE」はサイバーエージェントのプライベートクラウド上でコンテナオーケストレーションツールの1つであるKubernetesを提供するサービスで、各チームはそれぞれのチームにカスタマイズされたフルマネージドなKubernetesクラスタを簡単に使用することができます。
直近の大きな仕事は「AKE」の根幹であるマネジメントクラスターのもつデータ構造における全面刷新を担当したことです。

「AKE」では管理者側が使用しているマネジメントクラスターとユーザーの使用するワークロードクラスターがあります。ユーザーの使用するクラスタの設定情報はマネジメントクラスターにより管理されています。

これらの情報の一部を例にあげると、どのようなノードをいくつ欲しいか、ストレージやネットワークは何を使用するかといった情報が保持されています。いわばこの情報なくしては各プロジェクトに安定したKubernetesクラスタを提供できない重要なデータとなっています。このデータは歴史的な経緯により一部運用しづらい部分がある等の問題がありました。そこでこの部分のデータ構造の再設計を行い、関連する根幹システムを全て書き換えるといった仕事を担当しました。

「AKE」はAI事業本部やメディア事業などサイバーエージェントの主要な事業で数多くのプロダクトが利用しているため、ワークロードクラスターに万が一でも不具合が生じると、場合によってはサービスの停止などビジネス的な事業リスクも大きく、担当する我々にとっても責任重大なプロジェクトとなりました。

2024年7月に刷新作業が無事に完了し、事故も一切なくスムーズに完了することができた事で、クラウドネイティブエンジニアとしても自信につながりました。

── 「Cycloud」は、どのようなビジネスニーズや背景をもとに導入されていますか?

サイバーエージェントのインフラの歴史は長く、2004年からサービスのインフラを自社運用してきました。その後も社内インフラは、サイバーエージェントの幅広い事業ドメインとプロダクトの成長にあわせて、プライベートクラウド環境へと進化してきました。私が所属するCIUも、2021年にサイバーエージェントグループ全体に展開していたOpenStackベースのプライベートクラウドを統合するために設立した組織で、その過程で開発されたのがプライベートクラウド「Cycloud」です。

「Cycloud」は、サイバーエージェントの多種多様なビジネスニーズや、技術的なチャレンジに寄り添ったプライベートクラウドであることを大切にしています。

2024年1月には、AI事業の根幹である機械学習モデルの大規模化を躍進させる技術への積極投資として「NVIDIA DGX H100」を国内で初めて導入した際、80基の「NVIDIA H100 Tensor コア GPU」を活用したAI開発環境の大幅強化を実現しています。

2024年前半に至っては、AIやグラフィックス関連のニーズもさることながら、コスト面の観点からもプライベートクラウドを選定するケースも増えています。2024年7月には、円の対ドルレートが記録的な安値となり、海外のクラウドサービスのコスト増加がビジネス環境を逼迫させているのが現状です。

CIUでは、契約している複数拠点のデータセンターでプライベートクラウドを運用していて、サーバーマシンの調達やメンテナンスも、我々CIUで管理運用を行っています。そのため、パブリッククラウドと比較して、安価に利用することが可能になっています。

プライベートクラウドですが他パブリッククラウドにも劣らない機能を提供しており、VM提供基盤であるComputeや、マネージドデータベースであるCDB、AWS S3互換のオブジェクトストレージであるS4、認証認可を司るIAMやLoadBalancerなどを供用しています。ユーザーの学習コストを低くしていることで利用開始までの時間を抑えながら提供しております。

また提供しているCLIインターフェースも他パブリッククラウドを利用しているユーザーも扱いやすいコマンド形態にしているなど、ユーザーに寄り添い開発生産性の向上に寄与しております。

このように、国内かつ自社で運用するプライベートクラウド「Cycloud」の存在は、ランニングコストを抑えつつ変化の激しいプロダクト状況に寄り添いつつ開発・運用できることに重きを置いており、プロダクト開発の皆様に大きなメリットを感じて頂いております。

また、サイバーエージェントの各プロダクトが直面する技術的な課題や要件について、優先度高く個別対応している点も、社内で評価頂いています。一般的には、こういった個別サポートには高額なエンタープライズ契約が必要だったりするので、サービス側が今まさに直面している技術的な課題に対して、社内から寄り添ったフォローができる点は、CIUの強みの1つになっているようです。

── 現在はどのようなビジネス課題に対して、どういった新機能を実装していますか?

CIUでは、サイバーエージェントの多様なニーズを満たすために、フルマネージドサービスの機能を充実させています。前述のCycloudサービスの他にも、GitHub Actionsで使えるself-hosted runnerである「Cycloud-hosted runner」があり、GitHub提供のHostedRunnerと変わらない使用感を保ちつつ、他Cycloudサービスとのインテグレーションや社内事情を汲んだ構成を取りやすくしています。

2024年7月には「Cycloud」向けのサーバーレスサービスである「Cycloud Run」をリリースしました。「Cycloud Run」は複雑な VM 管理が不要で、コンテナの簡単なデプロイとパブリッシュが実現できます。OpenStack のテナント申請も必要なく、Cycloud用のコマンドだけで即座に利用を開始できるのが特徴です。「Cycloud Run」は高いポータビリティ性と高速なデプロイを実現していているのが特徴で、ステートレスなコンテナを数秒でデプロイ可能になっています。特に、0 to N のオートスケールをサポートしているので、アクセスがない時間帯の課金が発生しないのも、サービスにとってメリットになっています。

これらのサービスは、コスト面の課題をはじめとして、多様な事業ドメインで直面するサイバーエージェントならではの課題感から生まれたサービスと言えます。

クラウドネイティブエンジニアに求められる技術とは

── そんなCIUに所属するクラウドネイティブエンジニアとして、現場で求められる技術要素を教えて下さい。

「AKE」はKubernetes as a Serviceであって「Kubernetes」上でマシン管理やクラスターのオートスケーリングを実現するサービスである特性上、その基盤となる「Kubernetes」のコントローラーはすべてGoで実装されています。他にも「Cycloud Run」のような新サービスもGoで開発しています。サイバーエージェントでも「ABEMA」をはじめとしてGoがバックエンドで活用されていますが、クラウドネイティブでもGoが第一選択肢として利用されているのが現状です。

── 「クラウド」と聞くと、様々なマネージドサービスがWebのGUI画面で提供されるイメージがありました。クラウドネイティブエンジニアは、そういったマネージドサービスの裏側を開発しているというイメージでしょうか?

「Cycloud」などのクラウドサービスプラットフォームが提供するマネージドサービスには、開発者がインフラの構築や運用に必要な作業をクラウドサービスプラットフォームに任せられるというメリットがあります。サービス開発側からすると、インフラ構築・運用業務はGUI画面で完結しているように見えますが、実際にはクラウドの機能をGUI画面上でスムーズに設定できるようにするための開発が行われています。

例えば、クラウドコンピューティングの「Auto Scaling」機能は、あらかじめ定義したスケールポリシーに基づいてコンピューティングリソースを自動的に増減させることが特徴です。これにより、急激なトラフィック増加への対応や夜間のコスト削減が可能となります。CIUの業務は、この「Auto Scaling」機能そのものを開発していると言えます。

AKEでは各クラスターの管理にKubernetes SIGsのプロジェクトであるCluster APIを使用しています。またAKE独自の機能もKubernetesの提供するエコシステムに沿った開発が行われています。そのため、マネージドサービスの機能において「このケースでこういった挙動が起きる」「こういったケースで動作が安定しないかも」といった問題が発生した場合「Kubernetes」本体やKubernetesの提供するその他プロジェクトの機能を理解し、必要であればコントリビューションをする必要があるためGoがかけることはCIUで開発をする上で必須条件となります。

「Kubernetes」はコンテナの分散サービスであり、あるコンテナで障害が発生すると別のコンテナに影響が出る可能性があります。自分の作業が影響する範囲が、複数のデータセンターにまで影響するため、一つのミスが全社のサービス全体に影響を及ぼしかねません。

Go領域のNext Expertsとして感じる、ビジネス課題とGoの親和性

── 渋谷さんはNextExpertsのGo領域を担当されています。サイバーエージェントでGoを導入したり、生産性を向上していく際に感じている、Goの魅力について教えて下さい。

GoはGoogle社内で開発されたオープンソース言語で、Google内のプロダクトにおける課題解決のために誕生したという背景があります。個人的にも、Goの開発された際の目的でもある「コード整形作業などの日常的なタスクを自動化し、大規模なプロダクト開発におけるコーディング作業の障害を取り除くことで、エンジニアの開発速度を向上させる」という考え方は、サイバーエージェントが手がける大規模プロダクトにおける、開発のありかたとシンクロする部分があり共感しています。

サイバーエージェントにおけるGoの導入という点ですと、以前の部署で、新規プロダクトにおける開発言語の選定をした事がありました。その際、Goを含めた複数の開発言語を検討した結果、Goが他の言語に並ぶパフォーマンス性能を発揮していた事とあわせて、上記をはじめとした利点に注目し、担当したプロダクトの開発言語に選定したという経緯があります。

プロダクト導入後の開発体験で言えば、Goは豊富な標準ライブラリを備えているのが特徴で、ネットワークや、暗号化、データやファイル操作、テストなど多岐にわたる分野において標準の機能を使用して開発することが可能です。サードライブラリもこれらの機能をより使いやすいように工夫したようなものが多く存在します。そのため欲しいと思っていたようなライブラリがすでに存在していることも多く、標準ライブラリと合わせ、必要に応じてメンテナンスされている外部のライブラリに頼りやすいことも大規模開発における生産性の向上に寄与していると感じました。

2023年にはサイバーエージェントの「リスキリングセンター」主導で、バックエンドエンジニアを育成するための3ヶ月の特別プログラム「Go Academy」を開催しているように、今後もGoをプロダクト開発に活用するニーズは増えていくと思われます。

── 大規模開発においてどんな事業課題があり、Goを選定することでどんなメリットが得られましたか?

サービス開発するエンジニアにとって開発環境やコーディングに関する「認知負荷」や「メンテナンスコスト」が、開発の生産性を妨げかねない要素になっている点は見逃せません。

そういった背景の中、Goは予約語の少なさもあり、ある処理を実装したいと思った際に、ある程度似たような書き方に収束しやすい言語です。またチームごとに改行をどこで行うかといった好みのフォーマットルールが生じないよう、go fmtというGoのチームが決めた標準のフォーマットツールが備わっています。このようなGoの特徴が、副次的に学習コストや認知負荷を軽減することにつながっているようです。

また、Goは静的解析を行うことが非常に容易な言語です。例えば、Goに標準で存在するgo vetは、プログラム実行前にバグの可能性のあるコードを静的解析を行い、発見することが可能なコマンドです。静的解析を行うツールを自作できるレールも整備されているため、go vetで足りないプロジェクト固有のリンター作成や、複数のソースコードを自動生成してプロジェクトのメンテビリティの向上、本来集中したいビジネスロジックに集中しやすい環境を作りやすいところも、サイバーエージェントのプロジェクトサイクルの速さを担保する上で魅力的な点であると考えています。

こういった機能や特徴は、実際のプロダクト開発で新規メンバーをアサインする際に非常に効果を発揮します。

他の例をあげると、言語固有のランタイムのインストールや使用しているパソコンのプラットフォームを考慮して環境構築のガイドラインを用意せずとも、Goがクロスコンパイルに対応しているため、対応するOS、アーキテクチャのGoをインストールするだけでプログラムの実行が可能、つまりGoの環境構築が完了するという特徴もあります。そのためオンボーディングコストも低く、新規メンバーが最短で開発にとりかかれることはとてもいいメリットであると思います。

Goは比較的新しい言語ですが、互換性を保ちながら新しいバージョンがリリースされることもプロダクト開発目線だと好感がもてました。Goチームの出しているリリースサイクルに基づいたアップデートであるため、プロダクトの主要言語として使用する上でも計画的なアップデートを行うことができるので非常に安心して使用することができます。

Goでは、他言語と同様にリリースポリシーも存在し、あるバージョンから数えて2つさきのバージョンまではサポートされることが明記されています(例 Go1.18はGo1.20までサポート)。これもアップデートをする上での指標となります。また先に触れた互換性についても、当初想定されていた意味での破壊的な変更を含めたGo2はこないことが記述されています。


もちろんバージョンをあげることによる変更点は注意する必要はありますが、積極的に最新のバージョンにしやすい言語であると思います。また最近新しくリリースされたGOTOOLCHAINという機能も誤ったコンパイルを防げるといった利点もあり、言語として一貫性を保つ工夫をし続けている印象もあります。

リリースや変更に関する議論の中で、特にわたしが好きな議論はこちらです。Goの開発者の1人でもあるRob Pike氏の「これをやろうといったことを効率的にやり遂げることではなく、承認されたプロセスでやり切る」という言葉は日頃の仕事にも通じるとても良い思想だと思います。

── Go領域のNextExpertsとして、今後はどんな事にチャレンジしていきたいですか?

私は国内のGoコミュニティ「Go Conference」の主催を務めており、2024年6月に「Go Conference 2024」を開催しました。「Go Conference」をはじめとして、Goの技術コミュニティは、新規参入者を暖かく迎え入れ、議論の輪に加えてくれるカルチャーが特徴です。「Go Conference 2024」の運営も新メンバーが中心になって運営しました。

「Go Conference」などの技術コミュニティを通じて、Goの最新情報や開発ノウハウをキャッチアップしたり、メンバー間で議論できる場にしていきたいと思っています。最近では、学生のGo人気が高く、サイバーエージェントでもGoをバックエンド開発に活用するインターンシップを開催するなど、Goを学ぶ機会を広げていたりします。

エンジニアとして成長するためには、担当業務におけるステップアップも重要ですが、それだけだと、現在できることの繰り返しに留まってしまいがちです。「Go Conference」など技術コミュニティに参加することで、新しい技術に触れ、技術的な議論を通じて成長する機会にもつながります。「Go Conference」は新しくGoに興味をもってくれた方々が参加しやすいコミュニティでありたいと考えています。

多くのOSSがそうであるように、Goも多くのコミッターや技術コミュニティの普及活動を通して、Goをより良くしていきたい想いをもとに、アップデートを重ねています。Go自体がOSSなので、業務で発生した課題を発見・修正する事でGo自体へのコントリビューションを行うことも可能です。コントリビューションのやり方についてもこちらでまとめられています。

Goの誕生は2007年とまだまだ若い言語ですが、次世代のGoが今よりもっと良いソフトウェアであるために、自分もNext Expertsとして貢献していきたいと考えています。

Goを始めとしたOSSの良いところは、自分たちの利用するソフトウェアを自分たちで良くしていくことができる点です。サイバーエージェントにも「自分たちの会社は、自分たちの手で良くしていく」というカルチャーがあります。

サイバーエージェントでのGoの導入や、「Go Conference」など技術コミュニティの活動を通じて、Goの次世代を担うエンジニアが若手から現れることを期待しています。もちろん、私自身もその次世代を担うエンジニアでありたいと考えています。
 

この記事をシェア

オフィシャルブログを見る

記事ランキング

未来のクリエイターへ贈る実践的カリキュラム!日藝×サイバーエージェントが仕掛ける、学生の未来を拓く産学連携

技術・デザイン

~クリエイターのビジネス視点を育む講座「芸術総合講座Ⅳ コンテンツビジネス実務」レポート~

Page Top