著者: Unity 社プロダクトマネージャーTed Cordery、DevOps エンジニアRasmus Selsmark
もしあなたがコンピューターゲーム開発に凝っているなら、おそらくUnityをご存じでしょう。Unityは、インタラクティブなリアルタイム3Dコンテンツの開発と運用では世界的に有数のプラットフォームです。何千というゲームクリエイターがUnityプラットフォームを利用し、市場にあるモバイルゲームの半数以上、ARおよびVRコンテンツの60パーセントを構築しています。
これを裏で支えるUnityでは、私たちのプラットフォームが競合のはるか先を行き、業界の最先端にいられるよう、常に努力が続けられています。私たちの仕事は、当社のすべてのエンジニアリングチームにツールやサービス、サポートを提供することです。当社では、世界各地の約150のチームに1,500人以上のエンジニアがおり、日々私たちの提供する開発ツールを利用しています。このところ活用されているツールのうち、最も重要で適応範囲の広いものの1つが共有Jenkinsライブラリです。
私たちの仕事は主にUnity Adsをサポートしています。私たちは顧客が―つまりゲームクリエイターが―自分のゲームに合った、意味のある広告を挿入して収入を得られるよう支援しています。サービスのスケールは桁外れです。Unity Adsの報告では、2020年6月30日までの半年間で、ひと月あたりのプレイヤー数は240億を超え、全世界での広告インプレッションは月平均で2,290億を超えます。実際、モバイル統計企業AppsFlyerのthe company’s biannual Performance Index studyによれば、2020年上半期のモバイル広告における1位はFacebookで、GoogleとUnity Adsがそれに続きます。
サービスの需要が爆発的に増加するにつれて、このようなスケールに対処するには―そして10倍ものトラフィックの増加に対応するには―アーキテクチャを変えなければならないことを認識しました。特に、モノリシックなサービスを脱却し、マイクロサービスに移行する必要がありました。しかしそこで課題が現れました。どうやってマイクロサービスすべてのデプロイメントを協調させればよいのでしょうか?
1回作成して何回も共有
幸運なことに、私たちには困難を克服するのに役立つ共有Jenkinsライブラリがあったので、すべてのマイクロサービスで利用できるような共有ライブラリの開発に着手しました。つまり、別々のパイプラインで同じコードを実行するのではなく、1回だけコードを作成すればよいのです。パイプラインのデプロイメント管理に費やす時間が減るいっぽう、機能を構築し、ビジネスバリューを生み出すための時間が増えることになるので、開発チームにも好評です。
現在では、200以上のマイクロサービスが1つの環境で同じ共有Jenkinsライブラリを使用しており、1日150回以上の運用環境へのデプロイメントが行われています。40以上のチームが共有ライブラリを利用し、約30人のコントリビューターがコンスタントに機能をリポジトリに追加しています。
このプロジェクトが始まってから気づいたことの1つは、みなが共通ライブラリにコントリビュートするようになると、当事者意識が高まるということです。単に押し付けられたツールではなくなります。また、共有Jenkinsライブラリはチームを越えたコラボレーションも促進しました。たとえばカナリアデプロイメントなど、あるチームが開発した機能を他のチームが利用するのも容易です。
Unity Adsチームのエンパワーメント
共有ライブラリの利用は、Unity Ads部門で育てたいと考えているタイプのDevOpsカルチャーにも適合しています。つまり、学びの共有とチームのエンパワーメント、そしてツールセットの透明性を重視するというカルチャーです。誰でもJenkinsライブラリの中を覗いて、何が行われているかを理解できます。ブラックボックスではないこと、これは、デプロイメントプロセスで利用しても大丈夫だろうかという、開発者が持つかもしれない不信感を解消するのに役立ちます。
私たちは、共有Jenkinsライブラリはインフラストラクチャに不可欠のコンポーネントだと考えています。Jenkinsライブラリが動作しなければ、運用環境にデプロイできないということにもなりかねません。間の悪いときにそんなことが発生すれば、非常に危機的な状況にもなるでしょう。
CloudBees CIがこのプロジェクトの大きな成功要因であることは、言っておかなければなりません。標準化された方法でコントローラーを構成する能力を与えてくれるという点で、CloudBees CIは共有ライブラリを個々の開発チームに提供するうえで大きな可能性を持つと考えています。チームが共有ライブラリを基に何かを付け加えたとき、広く会社全体の役に立つと判断すれば、その追加を取り込んでライブラリを拡張できます。
CloudBees CIがあれば、共有ライブラリをすみやかにコントローラーに組み込み、共有ライブラリに必要なすべての統合を事前に設定できます。すると、開発者はより短い時間でパイプラインのセットアップ方法を理解し、すばやくデプロイを始めることができます。
簡単に言えば、共有Jenkinsライブラリには非常に期待しています。実際、Unity Ads部門が成功を重ねていくうえで、共有ライブラリがおおいに役立っていると感じています。
DevOps World 2020 On Demandで私たちのプレゼンテーション「How Do I Mock It? – Open Source Examples of Unit Tests for a Jenkins Shared Library」をご覧ください。(訳注:ご視聴には氏名、メールアドレスの入力が必要です)
(この記事は、CloudBees社 Blog 「Game Time: How Shared Jenkins Libraries Helps Unity Keep Its Ad Pipeline Flowing」2020年11月30日の翻訳です。)