SlideShare ist ein Scribd-Unternehmen logo
1 von 79
Downloaden Sie, um offline zu lesen
『ラブライブ!スクールアイドルフェスティバルALL STARS』を支えるビルドパイプライン
〜より安定したサービス提供を目指して〜
©KLabGames©SUNRISE©bushiroad All Rights Reserved.
KLab株式会社 栂井 良太 / 橋本 卓也
2
モバイルゲームの開発プロジェクトと横断
組織を兼務し、DevOpsを推進
各セクションのつなぎこみや運用業務を効
率化するツールの開発、自動化など
栂井 良太
バックエンドアーキテクチャG エンジニア
2018年 KLab新卒入社
とが い
 りょうた
APIサーバ開発・通信アーキテクチャー
設計を経て、パイプライン担当になる。
パイプラインのためのクライアント・
サーバの各種設計・実装に関わる。
橋本 卓也
バックエンドアーキテクチャG エンジニア
2012年 KLab新卒入社
はしもと
 たくや
3
ラブライブ!スクールアイドルフェスティバルALLSTARSとは
美麗な3Dで楽しめるリズムアクションRPGです!
※ 動画はリリース初期
2019/09の動画です
4
本セッションの内容
ラブライブ スクールアイドルフェスティバル ALLSTARS(スクスタ)
の新しいコンテンツやアップデートを
いち早く、安定して提供するための仕組みをご紹介
自動化 バージョン管理
CIシステム構築
ビルドパイプライン
ビルドパイプライン概要
目的と問題点、KLabでの取り組み
6
モバイルゲームビルドパイプラインとは
ユーザー

企画

プログラマー

デザイナー

リポジトリ or

ファイルストレージ

自動テスト
サーバー
展開
本番サーバー

アセット
ビルド
パッケー
ジング 追加ダウンロード用スト
レージ

開発環境構築
ビルドパイプライン
アプリ
ビルド
ストア
アップロード
7
ビルドパイプラインの重要性
企画 開発 テスト 展開
フィード
バック
より素早い改善サイクルを提供できるゲームがユーザーに評価されやすい
・ユーザーの要望をすぐにサービスに反映できる
・バグがあればすぐに治せる
・積極的な新機能開発ができる
バリューストリーム
✅ バリューストリーム高速化のためには
ビルドパイプラインの安定化、高速化が必要不可欠
8
スクスタのビルドパイプライン構成要素
アプリビルド
実機動作確認環境
アプリビルドマシン
開発サーバー
Jenkins
開発環境
プログラマー
企画
 開発サーバー
ゲームエンジン
プログラム
マスターデータ gitリポジトリ
デザイナー

AssetBundleビルド
Jenkins
アセットビルドマシン
Subversion
サーバー
サーバー展開
パッケージング
Jenkins
本番サーバー
追加ダウンロード
ストレージ
サーバー
9
ビルドパイプラインの特徴と問題点
① リリース遅延要因になりやすい
ビルドパイプライン(Jenkinsなど)は全メンバーが利用
非効率なしくみだとリリースまでに時間がかかってしまう
② 運用が属人化しやすい
日々進化するビルドパイプラインは使い方も変わっていく
特定の運用作業者しかテストビルドを作ることができなくなる
③ 突然壊れたら直しにくい
アップデート必須の状況はやってくる
その日、数年間触ってないマシンを触らないといけなくなる
10
KLabのビルドパイプラインへのとりくみ
企画

プログラマー

デザイナー

リポジトリ or

ファイルストレージ

アセット
ビルド
パッケー
ジング
追加ダウンロード
用ストレージ

自動テスト
サーバー
展開
アプリ
ビルド
ストア
アップロード
開発環境構築
本番サーバー


プロジェクトA
企画

プログラマー

デザイナー

リポジトリ or

ファイルストレージ

アセット
ビルド
パッケー
ジング
追加ダウンロード
用ストレージ

自動テスト
サーバー
展開
アプリ
ビルド
ストア
アップロード
開発環境構築
本番サーバー


プロジェクトB
ビルドパイプライン専属グループ
兼務 兼務
知見、ツールの横
断的共有
11
KLabのビルドパイプラインへのとりくみ
パイプライン専属のメンバーがプロジェクトの需要に合わせ
たツールの開発を行い、知見を横断的に共有
数年後も、
よりはやくユーザーにコンテンツを届けられるシステム
を目指す
① リリース遅延要因になりやすい
② 運用が属人化しやすい
③ 突然壊れたら直しにくい
本日は得られた知見の中で、
3つの問題点を解決した手法をご紹介
運用を柔軟にするgod環境
サーバー環境の物量作戦
① リリース遅延要因になりやすい
対
策
13
スクスタのビルドパイプライン構成要素
開発環境
プログラマー
企画

デザイナー

AssetBundleビルド
アプリビルド
実機動作確認環境
サーバー展開
パッケージング
開発サーバー
ゲームエンジン
アプリビルドマシン
開発サーバー
Jenkins
Jenkins
アセットビルドマシン
プログラム
マスターデータ gitリポジトリ
Subversion
サーバー
Jenkins
本番サーバー
追加ダウンロード
ストレージ
サーバー
14
開発・マスターデータ作成フロー
開発者や企画者が素早く自分の修正をゲーム上で確認し、
ゲームを作りこんでいく
目的
① 開発PCで
コードやデータを
修正
②サーバ展開
開発サーバ
③Unityエディタ
動作確認
ポイント
✅ 自分の修正をUnityエディタで
簡単に動作確認できること
✅ クライアントだけでなく、
サーバの動作確認も一緒にできること
④PRを出してマージ
サーバとAPI通信
サーバとAPI通信
⑤実機で
動作確認
✅ 多様な需要を満たせるように
運用に柔軟性があること
15
開発体制
参考 : CEDEC+KYUSHU 2018
「大規模モバイルオンラインゲームを支えるソフトウェアアーキテクチャ開発とその使用例」
クライアント サーバ
フロントエンド開発者の責任範囲 バックエンド開発者の責任範囲
クライアントの一定範囲について
バックエンド開発者が責任を持つ開発体制
16
開発体制
この体制では、クライアント・サーバを密結合にするのが
品質・開発効率を考えると合理的
クライアント サーバ
フロントエンド開発者の責任範囲 バックエンド開発者の責任範囲
密
結
合
参考 : CEDEC+KYUSHU 2018
「大規模モバイルオンラインゲームを支えるソフトウェアアーキテクチャ開発とその使用例」
17
クライアント・サーバ密結合の問題点
クライアントのバージョンと
サーバのバージョンが合わないとき、
アプリが正常に動作しない
→ 密結合にすることで、この問題が発生しやすくなる
古いサーバ
新しいクライアント
18
サーバ需要の増大
KLabでは従来、共用サーバを使うことが多く、
クライアント開発チームで1台の共用サーバといった体制
19
サーバ需要の増大
しかし、クライアント・サーバ密結合化を進めた結果、
1台の共用サーバで機能実装を進めるのは困難に
クライアントが
新しすぎる
クライアントが
古い
クライアントの
バージョンが
合ってる
クライアントの
バージョンが
少しずれてるけど
動いている
20
サーバ需要の増大
サーバを増やすことで対応
Amazon EC2でサーバをたくさん立てる体制に
21
god環境
EC2で動かしているサーバ環境はgod環境と呼ばれている
god0001 god0002 god0003 god0004
22
god環境
開発者は基本的に一人1god
23
増えるgod
マスタデータを作る企画者にも一人1god
24
増えるgod
実機動作確認のためにもgod
25
godの利点
・サーバ環境が空くまで動作確認できないという状況を回避でき、
待ち時間を節約
・各自がローカルサーバ環境を構築する時間を節約
・開発者が全サーバにssh接続できるので、
不具合調査がしやすくなる
・何か起きても、EC2インスタンスを破棄して
サーバ環境を作り直す手段がとれる
26
god操作のChatOps
誰がどのgodを使っているかを管理し、
godの起動・停止・破棄ができるslack botがある
godは夜に自動停止する
(Go言語のnlopes/slackを使用)
@godpanther start
@hashimoto-t god0003 started
27
リポジトリ構成
baseリポジトリ
・クライアント (Unityプロジェクト)
・サーバ
・マスタデータ (tsv形式)
これらを一つのgitリポジトリで管理している
→ 同一ブランチのクライアント・サーバなら整合が取れる
→ たくさんのgodを運用する上でも都合が良い
28
gitブランチ管理
9/1公開用ブランチ
9/5公開用ブランチ
次のバイナリ更新用ブランチ
本流ブランチは一つではなく、公開時期ごとにブランチが分かれている
→いつ公開予定の内容を確認したいかによって、使うブランチを変える
これによって多様な需要を満たせるようにしている
29
運用を柔軟にするgod環境
god環境と呼ばれているAmazon EC2で動作するサーバ環境によって、
簡単かつ柔軟に動作確認できる体制になっている
① 開発PCで
コードやデータを
修正
②サーバ展開
③Unityエディタ
動作確認
ポイント
✅ 自分の修正をUnityエディタで
簡単に動作確認できること
✅ クライアントだけでなく、
サーバの動作確認も一緒にできること
④PRを出してマージ
サーバとAPI通信
サーバとAPI通信
⑤実機で
動作確認
✅ 多様な需要を満たせるように
運用に柔軟性があること
god環境
まとめ
アセット管理のために
作ったpbag
チーム全体の作業効率を高める
AssetBundleビルド戦略
① リリース遅延要因になりやすい
対
策
31
スクスタのビルドパイプライン構成要素
開発環境
プログラマー
企画

デザイナー

AssetBundleビルド
アプリビルド
実機動作確認環境
サーバー展開
パッケージング
開発サーバー
ゲームエンジン
アプリビルドマシン
開発サーバー
Jenkins
Jenkins
アセットビルドマシン
プログラム
マスターデータ gitリポジトリ
Subversion
サーバー
Jenkins
本番サーバー
追加ダウンロード
ストレージ
サーバー
32
アセット制作・管理のフロー
デザイナーがゲーム素材(アセット)を制作し、
AssetBundleビルドしたものを管理する
目的
ポイント
✅ アセット制作後、AssetBundleを
素早くビルドできること
✅ 必要なリリースタイミングで
適切にアセットを公開できること
✅ ビルドしたAssetBundleを
バージョンをつけて管理できること
② AssetBundle
ビルド
Subversion
① アセットの制
作
ダウンロード
⑤実機で
動作確認
③ ビルド後の
成果物を集積
④ パッケージング
追加ダウンロード用
ストレージサーバ
④ リリースタイミングを制
御
pbag
33
チーム全体の作業効率を高めるには
Unityプロジェクトを開くのに時間がかかる
→ これを高速化したらチーム全体の作業効率が高まる
34
Unityプロジェクトの構成
3Dモデル等のアセットを別のUnityプロジェクトに分離
→ Unityプロジェクトを開く時間の短縮
→ サーバ展開の高速化
baseリポジトリ
・クライアント (Unityプロジェクト)
・サーバ
・マスタデータ (tsv形式)
35
Unityプロジェクトの構成
baseリポジトリのUnityプロジェクトでは、
AssetBundleビルド後のアセットを使用
AssetBundleはgit管理外とし、
Hidden AssetsにすることでUnityエディタからも管理外に
AssetBundles~
git上では空
この下に大量の
AssetBundleファイル
AssetBundles~は無い
UnityEditorからは見えない
参考 : https://docs.unity3d.com/Manual/SpecialFolders.html
36
リソース入りgitリポジトリ
リソース入りgitリポジトリが別に存在する
→ baseリポジトリから分離した3Dモデル等のアセットが入っている
リソース入りgitリポジトリからAssetBundleビルドして
baseリポジトリで使う
リソース入り
gitリポジトリ
AssetBundles~
baseリポジトリ
AssetBundle
ビルド
37
リソース入りgitリポジトリ
リソース入りgitリポジトリは、baseリポジトリを包含する構造
baseリポジトリからリソース入りリポジトリへ随時同期する
リソース入り
gitリポジトリ
baseリポジトリ
同期
38
Subversion
リソース入りgitリポジトリは重い
・アセットの素材が基本的に全部入っている
・Unityエディタの動作が遅くなる
・作業者のストレージを圧迫する
→ 細分化し、Subversionで管理する
例:
リソース入り
gitリポジトリ
3Dモデル制作用
Subversion
3Dモーション制作用
Subversion
同期
同期
39
AssetBundleビルド
AssetBundleビルドはJenkinsで実行している
リソース入りgitリポジトリの任意のブランチを指定して
AssetBundleビルドできる
→ プログラム修正などが柔軟にできるように
3DモデルのAssetBundleビルド、
3DモーションのAssetBundleビルド、
のようにカテゴリごとにビルドできる
→ ビルド時間の短縮
パラメータ:
・ブランチ
・カテゴリ
40
pbag
AssetBundleビルドの成果物を集積し、
Unityエディタで作業する人がAssetBundleを利用可能にする
ストレージが必要
紆余曲折あって、
ストレージソフトウェアを自作することにした
pbag
AssetBundles~
AssetBundle
ビルド
成果物を
集積
ファイル
を取得
41
pbagの要件
・pbagからのダウンロードが高速
・pbagへのアップロードはビルドマシンのみに限定して良い
・管理するファイルは多かったり大きかったりする
・gitブランチのような機能が欲しい
・あるバージョンの中で一部のファイルだけをダウンロードできる
42
pbag概要
pbagサーバ
pbagクライアント
a9993e3...
84983e4...
34aa973...
dea356a...
ファイルのダイジェストから
ファイル実体へのkey-value store
ファイルリスト
a9993e3...
84983e4...
34aa973...
dea356a...
Models/Models
Models/Models.manifest
Models/shader.unity3d
Models/prefab.unity3d
ファイルリストも
pbagサーバで管理されるファイルであり、
そのダイジェストは
gitでいうところのcommit id
43
pbag概要
pbagサーバ
pbagクライアント
a9993e3...
84983e4...
34aa973...
dea356a...
認証サーバ 兼
ファイルリスト管理サーバ
(カテゴリ, 名前) から
ファイルリストのダイジェスト への
マッピングを管理する。
gitでいうところのブランチ
マッピング
76aa478...
8c7b756...
ver1.8.0
ver1.8.1
44
アセットダウンロード
pbagで管理されるのはエディタ実行用のファイル
実機ではAmazon S3からダウンロードしたファイルを使う
(ipaに埋め込むなど例外あり)
S3上のファイルはダウンロード時間短縮のため
複数のAssetBundleを結合した状態になっており、
暗号化もされた状態になっている pbag
結合・
暗号化
45
チーム全体の作業効率を高めるには
サーバを増やしやすくしたい
→ サーバを増やしやすいアセット管理にする必要がある
46
アセットマスタデータ
S3上に配置されたファイルの情報は、
アセットマスタデータとしてサーバに展開する
サーバを増やしやすくするため、baseリポジトリに入れる
アセットマスタデータ
展開
baseリポジトリ
47
アセットダウンロード
クライアントはアセットマスタデータをサーバからダウンロードし、
それに基づいてS3からファイルをダウンロードする
アセットマスタデータ
アセットマスタデータ
ダウンロード
ダウンロード対象
ダウンロード対象
ダウンロード
48
パッケージング
マスタデータに基づきpbag上のファイルを
結合・暗号化してS3にアップロードし、
アセットマスタデータをbaseリポジトリにcommitする
baseリポジトリ
・クライアント (Unityプロジェクト)
・サーバ
・マスタデータ (tsv形式)
・アセットマスタデータ
pbag
データベース
49
パッケージング処理 (1/5)
パッケージングはJenkinsジョブになっていて、
baseリポジトリのブランチを指定して実行する
まず、マスタデータから必要なアセットを列挙する
baseリポジトリ
・クライアント (Unityプロジェクト)
・サーバ
・マスタデータ (tsv形式)
アセット一覧を
作成
50
パッケージング処理 (2/5)
パッケージング用のデータベースが存在する
既にS3にアップロードされているファイルの情報を取得し、
どのようなファイルを作成してS3にアップロードするかを決定する
パッケージ済ファイルの
情報を取得
データベース
51
パッケージング処理 (3/5)
pbagから必要なファイルをダウンロードする
事前に使用するファイルを決定しているので、
必要なファイルだけをダウンロードすれば良い
pbag
ダウンロード
52
パッケージング処理 (4/5)
ファイルを結合・暗号化してS3にアップロードする
作成したファイルの情報はデータベースに保存する
アップロード
情報を
保存
データベース
53
パッケージング処理 (5/5)
アセットマスタデータを生成して、
baseリポジトリにcommitする
baseリポジトリ
・クライアント (Unityプロジェクト)
・サーバ
・マスタデータ (tsv形式)
・アセットマスタデータ
54
パッケージング(再掲)
マスタデータに基づきpbag上のファイルを
結合・暗号化してS3にアップロードし、
アセットマスタデータをbaseリポジトリにcommitする
baseリポジトリ
・クライアント (Unityプロジェクト)
・サーバ
・マスタデータ (tsv形式)
・アセットマスタデータ
pbag
データベース
55
データの流れ
デザイナー

リソース入り
gitリポジトリ
同期
pbag
AssetBundleビルド
AssetBundles~
エディタ実行
ダウンロード
パッケージング
実機実行
56
アセットローダ
アセットパスをアセットローダに渡すとロードされる構造
pbag管理ファイル (AssetBundles~) からロードするか
S3からダウンロードしたファイルからロードするかは
アセットローダによって隠蔽される
→ フロントエンド実装は、どちらからロードしているかを意識しない
アセットローダ
アセットパス
アセット
pbag
AssetBundles~
S3
57
アセットの公開制御
パッケージングは、マスタデータから参照されているアセットだけを
アセットマスタデータに書き出すことで、未公開データの流出を防ぐ
マスタデータから参照されていないアセットがあると困るので、
アセットローダはマスタデータから取得したアセットパスしか受け付けない
アセットローダ
アセットパス
アセット
pbag
AssetBundles~
S3
マスタデータ
↑
stringではない
58
アセットの公開制御
パッケージングは、マスタデータから参照されているアセットだけを
アセットマスタデータに書き出すことで、未公開データの流出を防ぐ
→ 適切なマスタデータが設定されていたら流出は防がれるので、
  pbagには将来のAssetBundleを格納できる
→ 将来のAssetBundleがpbagに入っていることで、
  マスタデータ調整や動作確認がしやすくなる
→ チーム全体の作業効率を高める
59
アセット管理のために作ったpbag
・アセット管理はチーム全体の作業効率を左右する
・AssetBundleを管理するためpbagを作成した
まとめ
ポイント
✅ アセット制作後、AssetBundleを
素早くビルドできること
✅ 必要なリリースタイミングで
適切にアセットを公開できること
✅ ビルドしたAssetBundleを
バージョンをつけて管理できること
② AssetBundle
ビルド
Subversion
① アセットの制
作
ダウンロード
⑤実機で
動作確認
③ ビルド後の
成果物を集積
④ パッケージング
追加ダウンロード用
ストレージサーバ
④ リリースタイミングを制
御
pbag
ChatOpsによる
ビルド作業の効率化
誰でもほしいビルドが
自分で作れるしくみ
② 運用が属人化しやすい
対
策
61
スクスタのビルドパイプライン構成要素
開発環境
開発
企画

デザイナー

AssetBundleビルド
アプリビルド
実機動作確認環境
サーバー展開
パッケージング
62
スクスタのアプリビルドフロー
ポイント
✅ Jenkinsを使って、Macで素早く安定し
てアプリのビルドと展開ができること
✅ 非開発者でもアプリビルドやサーバー展
開ができること
① Jenkinsでビ
ルド開始
② Macで
アプリビルド
③ 実機に
アプリを
インストール
④ サーバー
展開
開発サーバー
追加DL
ストレージ
サーバー
アセット管理
サーバー
⑤ パッケー
ジング
⑥ 実機でサーバーに
接続し、動作テスト
⑦ 追加ダウンロード
63
Jenkins運用と問題点
アプリビルド
サーバー展開
アセットビルド
パッケージング
あらゆる運用作業をJenkinsを起点
として行う
非開発者
ビルド依頼
運用作業者
ビルド
✅ Jenkinsを非開発者に使ってもらうには一定のレクチャーが必要
✅ 運用作業者が代理でビルドをする場合、ビルド待ち、コミュニケーショ
ンコストが発生する
64
ChatOpsの導入
ビルド結果

コマンド投稿
ChatOps
非開発者でも利用しやすいインターフェースで、
誰でもJenkinsで運用作業できるようにしたい
HTTP Request
Slack bot
ビルド実施
ビルド
非開発者
ビルド依頼
✅ 非開発者でも、slackに発言するだけで
Jenkinsで運用作業ができるようになった
✅ ビルドの仕方がわからなくても、slackのロ
グを検索することでやり方がわかる
運用作業者
Slack bot
65
理想のビルドコマンド
ビルドパラメータ複雑問題
長いビルドコマンド
ビルドパラメータが複雑で
調整のハードルが高い
66
ビルドパラメータの複雑性
長いビルドコマンド
サーバー接続先
ブランチ
認証キー
アプリタイトル
アセットのブランチ
ビルドマシン名
💣 ビルドパラメータが肥大化しがち

実現したいビルドを作るために必要なパラメータが多
い

結局限られた運用作業者でないとビルドが困難

ビルド
Slack bot
生成されたコマンドをコピペ
🧐 解決案の着想



実現したい
ビルドの要素
コマンド
生成器
ビルドコマンド
67
ビルドコマンド生成シートの導入
コピーアンドペースト
ビルドしたい条件を入力していく
スプレッドシートの数式処理により
ビルドコマンドが自動生成される
✅ビルドパラメータ
複雑問題が解決
ビルド ビルド実施
ビルドコマンドが
生成される
68
ChatOpsとコマンド生成シートの導入結果
非開発者
ビルド依頼
運用作業者
ビルド
非開発者
コピー&
ペースト
ビルド
Slack bot
✅ ChatOpsの導入により、運用属人化問題が解消
✅ ビルドパラメータがわからなくても、コマンド生成シートからコピー
&ペーストするだけで非開発者でもビルドができる
✅ プロジェクトのメンバー全員が、自分の欲しいビルドを自分でつくれ
るようになった
壊れても復活する
ビルドシステム
マシンが故障しても
リリース遅延を起こさないしくみ
③ 突然壊れたら直しにくい
対
策
70
スクスタのビルドパイプライン構成要素
開発環境
開発
企画

デザイナー

AssetBundleビルド
アプリビルド
実機動作確認環境
サーバー展開
パッケージング
71
アプリビルドマシンと問題点
1プロジェクトに1台だ
けある社内Mac
アプリビルド
ABビルド
社内Mac上のJenkinsでアプリビルド

iOSのビルドのため、アプリビルドは社内Mac

Mac上にJenkinsを構築し、アプリビルドを行う

💣単一障害点となる社内Mac

運用が長期化してくると、社内Macにつぎはぎで設定を入れ
ていくことになる

もはや誰もビルドマシンを構築することができなくなる

Macが故障すると、アプリのリリースができなくなる

72
Jenkins master slave運用
AWS
東京オフィス
jnlp slave jnlp slave jnlp slave
福岡オフィス
jenkins master
✅ Jenkins自体はMacに置かず、
クラウド上のLinux(EC2)に載せる
✅ Mac上ではjnlp slaveを立ち上げ、
jenkins masterに接続する
(master-slave構成)
✅ Macは複数台用意し、地理的冗長化す
る
✅ Macが1台壊れたとしても、リリース
が止まらない
73
ChatOpsと合わせた、ビルドのロードバランシング
jnlp slave 3
(3ビルド実行中)
jenkins master Slack bot
ビルド
jnlp slave 2
(1ビルド実行中)
jnlp slave 1
(4ビルド実行中)
最も実行中ビルドが
少ないslaveを指定して
ビルド ✅ ChatOpsと合わせると、Macをロードバ
ランスし、ビルドを効率化可能
✅ ビルド時にslack botからJenkinsの最も
ビルド数の少ないMacを取得し、ビルド
✅ 特定のMacにビルドが集中することな
く、全体的にビルドスピードが向上
JenkinsのAPIから
最も実行中ビルドが
少ないslaveを取得
slave2が最も
ビルドが少ない
74
Jenkinsの手動設定をgit管理
Jenkins Configuration as code
(Jenkins本体の設定)
✅ Jenkins本体の設定をyamlで記述可能
✅ Jenkinsの設定をgitで管理可能。コード
レビューが可能
Jenkins Pipeline Script
(各ジョブの設定)
✅ Jenkinsの各ジョブの設定をgroovyライク
なスクリプトとして記述可能。シェル実行可能
✅ ビルドスクリプトをgithubから取得可能。
git管理、コードレビューできる
Jenkinsにスクリプトや設定を手書きして、
誰がいつ更新したかも管理できていない
Jenkinsのあらゆる手動設定を gitで管理し、
Jenkinsが壊れても再現性を確保
75
Ansible、Dockerによる構成管理
jnlp slave
jnlp slave jnlp slave
jenkins master
jenkins docker image
✅ Jenkins masterはDocker上で
構築し、構成管理する
✅ Mac slaveはAnsibleで
構成管理をする
✅ 冗長化Macが増えた場合でも、
Ansibleで即セットアップ可能
✅ どこかのサーバーが故障しても
即座に復旧可能
76
アプリビルドがどう変わったか
1プロジェクトに1台だ
けある社内Mac
アプリビルド
ABビルド
jnlp slave
jnlp slave jnlp slave
jenkins master
アプリビルド
ABビルド
✅ 単一障害点となっていた社内Macを冗長化し、Macの故障に対するリ
スクヘッジを達成
✅ あらゆる手動設定をコード化し、git管理、コードレビュー可能にし
てJenkinsの故障に対するリスクヘッジを達成
✅ ビルドマシンに潜む、あらゆるリリース遅延要因を排除
まとめ
78
ビルドパイプラインの特徴と問題点と解決策
① リリース遅延要因になりやすい
② 運用が属人化しやすい
③ 突然壊れたら直しにくい
1人1サーバー環境(god)の整備
アセット管理方法の工夫
対
策
Slackを利用したChatOpsの導入
コマンド生成シートの作成
対
策
ビルドマシンの冗長化
CIのあらゆる設定をコード化
対
策
バリューストリームの高速化を達成できた
79
おわりに
より良いゲーム運営をするためには、
バリューストリームの高速化、安定化が必要
バリューストリームの速度は、
ビルドパイプラインシステムの影響が大きい
KLabではビルドパイプラインに熱い情熱を注ぎ、
日々より良い運営ができるシステムを目指しています!

Weitere ähnliche Inhalte

Was ist angesagt?

Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界
Hideki Takase
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
 

Was ist angesagt? (20)

シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~​
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~​シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~​
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~​
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
 
Cinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作るCinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作る
 
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
 
アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~
 
Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム
Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステムAndroid向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム
Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
 
Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話
 
Jetson活用セミナー ROS2自律走行実現に向けて
Jetson活用セミナー ROS2自律走行実現に向けてJetson活用セミナー ROS2自律走行実現に向けて
Jetson活用セミナー ROS2自律走行実現に向けて
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 

Ähnlich wie 『ラブライブ!スクールアイドルフェスティバル ALL STARS』を支えるビルドパイプライン 〜より安定したサービス提供を目指して〜

大規模モバイルオンラインゲーム開発における チーム組成とワークフロー最適化
大規模モバイルオンラインゲーム開発における チーム組成とワークフロー最適化大規模モバイルオンラインゲーム開発における チーム組成とワークフロー最適化
大規模モバイルオンラインゲーム開発における チーム組成とワークフロー最適化
KLab Inc. / Tech
 
Developer Summit_20140214
Developer Summit_20140214Developer Summit_20140214
Developer Summit_20140214
samemoon
 
デベロッパープロダクトシステムの マイクロサービス化
デベロッパープロダクトシステムの マイクロサービス化デベロッパープロダクトシステムの マイクロサービス化
デベロッパープロダクトシステムの マイクロサービス化
LINE Corporation
 
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
Yuta Matsumura
 

Ähnlich wie 『ラブライブ!スクールアイドルフェスティバル ALL STARS』を支えるビルドパイプライン 〜より安定したサービス提供を目指して〜 (20)

cedec2021
cedec2021cedec2021
cedec2021
 
UnityとAmazon Web Servicesで生み出す新しい価値
UnityとAmazon Web Servicesで生み出す新しい価値UnityとAmazon Web Servicesで生み出す新しい価値
UnityとAmazon Web Servicesで生み出す新しい価値
 
Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324
Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324
Enterprise agile dev ops-and-xr-techonology-adoption-for-fintech-20180324
 
大規模モバイルオンラインゲーム開発における チーム組成とワークフロー最適化
大規模モバイルオンラインゲーム開発における チーム組成とワークフロー最適化大規模モバイルオンラインゲーム開発における チーム組成とワークフロー最適化
大規模モバイルオンラインゲーム開発における チーム組成とワークフロー最適化
 
Five Steps to Culture Change を日本語で解説する 2020/11/06
Five Steps to Culture Change を日本語で解説する 2020/11/06Five Steps to Culture Change を日本語で解説する 2020/11/06
Five Steps to Culture Change を日本語で解説する 2020/11/06
 
もっとサーバーレスを手軽に便利に!Azure Logic Apps
もっとサーバーレスを手軽に便利に!Azure Logic Appsもっとサーバーレスを手軽に便利に!Azure Logic Apps
もっとサーバーレスを手軽に便利に!Azure Logic Apps
 
モバイルゲームビルドパイプラインとChatOps
モバイルゲームビルドパイプラインとChatOpsモバイルゲームビルドパイプラインとChatOps
モバイルゲームビルドパイプラインとChatOps
 
Broadcast チームの オブザーバビリティ向上活動.pdf
Broadcast チームの オブザーバビリティ向上活動.pdfBroadcast チームの オブザーバビリティ向上活動.pdf
Broadcast チームの オブザーバビリティ向上活動.pdf
 
Developer Summit_20140214
Developer Summit_20140214Developer Summit_20140214
Developer Summit_20140214
 
デベロッパープロダクトシステムの マイクロサービス化
デベロッパープロダクトシステムの マイクロサービス化デベロッパープロダクトシステムの マイクロサービス化
デベロッパープロダクトシステムの マイクロサービス化
 
Gitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイGitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイ
 
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
 
駅すぱあとWebサービスにおけるAWSとその周辺
駅すぱあとWebサービスにおけるAWSとその周辺駅すぱあとWebサービスにおけるAWSとその周辺
駅すぱあとWebサービスにおけるAWSとその周辺
 
2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話
2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話
2022_08_10 SaaS.tech #5業務システム開発でデザインとフロントエンドも妥協しない話
 
Swaggerを利用した新規サービス開発
Swaggerを利用した新規サービス開発Swaggerを利用した新規サービス開発
Swaggerを利用した新規サービス開発
 
Going Serverless, Building Applications with No Servers
Going Serverless, Building Applications with No ServersGoing Serverless, Building Applications with No Servers
Going Serverless, Building Applications with No Servers
 
UXを損ねる静的コンテンツ配信アンチパターン7選
UXを損ねる静的コンテンツ配信アンチパターン7選UXを損ねる静的コンテンツ配信アンチパターン7選
UXを損ねる静的コンテンツ配信アンチパターン7選
 
AI-first Code Editor 「Cursor」の機能紹介
AI-first Code Editor 「Cursor」の機能紹介AI-first Code Editor 「Cursor」の機能紹介
AI-first Code Editor 「Cursor」の機能紹介
 
Logic Apps/Flow Update Summary
Logic Apps/Flow Update SummaryLogic Apps/Flow Update Summary
Logic Apps/Flow Update Summary
 
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
サーバーレスやマイクロサービスへの"チャレンジ"を後押ししてくれるセッションを紹介
 

Mehr von KLab Inc. / Tech

ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト  モバイルゲームのUIを自動的に検出・操作する モンキーテストゴリラテスト  モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
KLab Inc. / Tech
 

Mehr von KLab Inc. / Tech (20)

運用中の大規模オンラインゲームで 8年ぶりにPHPバージョンアップをした話
 運用中の大規模オンラインゲームで 8年ぶりにPHPバージョンアップをした話 運用中の大規模オンラインゲームで 8年ぶりにPHPバージョンアップをした話
運用中の大規模オンラインゲームで 8年ぶりにPHPバージョンアップをした話
 
AirLab導入でテストコストの大幅削減と品質向上! 数十台の端末を一斉に全自動テストできる社内DeviceFarmについてご紹介
AirLab導入でテストコストの大幅削減と品質向上! 数十台の端末を一斉に全自動テストできる社内DeviceFarmについてご紹介AirLab導入でテストコストの大幅削減と品質向上! 数十台の端末を一斉に全自動テストできる社内DeviceFarmについてご紹介
AirLab導入でテストコストの大幅削減と品質向上! 数十台の端末を一斉に全自動テストできる社内DeviceFarmについてご紹介
 
生成AIが切り拓く新しいゲームの創り方・遊び方
生成AIが切り拓く新しいゲームの創り方・遊び方生成AIが切り拓く新しいゲームの創り方・遊び方
生成AIが切り拓く新しいゲームの創り方・遊び方
 
表も裏もすべて見せます! KLab謹製大規模オンラインゲームの リアルタイムチャットマイクロサービス
表も裏もすべて見せます! KLab謹製大規模オンラインゲームの リアルタイムチャットマイクロサービス表も裏もすべて見せます! KLab謹製大規模オンラインゲームの リアルタイムチャットマイクロサービス
表も裏もすべて見せます! KLab謹製大規模オンラインゲームの リアルタイムチャットマイクロサービス
 
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
 
他業界からゲーム業界へ転向したときの話
他業界からゲーム業界へ転向したときの話他業界からゲーム業界へ転向したときの話
他業界からゲーム業界へ転向したときの話
 
「リアルISUCON」としてのモバイルオンラインゲーム開発
「リアルISUCON」としてのモバイルオンラインゲーム開発「リアルISUCON」としてのモバイルオンラインゲーム開発
「リアルISUCON」としてのモバイルオンラインゲーム開発
 
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト  モバイルゲームのUIを自動的に検出・操作する モンキーテストゴリラテスト  モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
 
モバイルアプリの高速で安定したビルドを支えるJenkins運用術
モバイルアプリの高速で安定したビルドを支えるJenkins運用術モバイルアプリの高速で安定したビルドを支えるJenkins運用術
モバイルアプリの高速で安定したビルドを支えるJenkins運用術
 
KLabのチャットシステム インフラ変遷
KLabのチャットシステム インフラ変遷KLabのチャットシステム インフラ変遷
KLabのチャットシステム インフラ変遷
 
Ganglia のUIにGrafanaを追加する話
Ganglia のUIにGrafanaを追加する話Ganglia のUIにGrafanaを追加する話
Ganglia のUIにGrafanaを追加する話
 
KLabのインフラエンジニア 〜 こんな感じで働いてます 〜
KLabのインフラエンジニア 〜 こんな感じで働いてます 〜KLabのインフラエンジニア 〜 こんな感じで働いてます 〜
KLabのインフラエンジニア 〜 こんな感じで働いてます 〜
 
属人化して詰まってた作業を自動化で楽しようとした話
属人化して詰まってた作業を自動化で楽しようとした話属人化して詰まってた作業を自動化で楽しようとした話
属人化して詰まってた作業を自動化で楽しようとした話
 
見よう見まねでやってみる2D流体シミュレーション
見よう見まねでやってみる2D流体シミュレーション見よう見まねでやってみる2D流体シミュレーション
見よう見まねでやってみる2D流体シミュレーション
 
モバイルオンラインゲームにおけるUIエンジニアの業務紹介
モバイルオンラインゲームにおけるUIエンジニアの業務紹介モバイルオンラインゲームにおけるUIエンジニアの業務紹介
モバイルオンラインゲームにおけるUIエンジニアの業務紹介
 
VyOSで作るIPv4 Router/IPv6 Bridge
VyOSで作るIPv4 Router/IPv6 BridgeVyOSで作るIPv4 Router/IPv6 Bridge
VyOSで作るIPv4 Router/IPv6 Bridge
 
ワールド別のDBへの取得・更新に後から対応した話
ワールド別のDBへの取得・更新に後から対応した話ワールド別のDBへの取得・更新に後から対応した話
ワールド別のDBへの取得・更新に後から対応した話
 
運営型モバイルゲームの運用について
運営型モバイルゲームの運用について運営型モバイルゲームの運用について
運営型モバイルゲームの運用について
 
Adobe AIR で作る カジュアルゲーム開発
Adobe AIR で作る カジュアルゲーム開発Adobe AIR で作る カジュアルゲーム開発
Adobe AIR で作る カジュアルゲーム開発
 
個人情報の保護となりすまし対策~KLabのゲーム内通貨の払戻のシステムの場合~
個人情報の保護となりすまし対策~KLabのゲーム内通貨の払戻のシステムの場合~個人情報の保護となりすまし対策~KLabのゲーム内通貨の払戻のシステムの場合~
個人情報の保護となりすまし対策~KLabのゲーム内通貨の払戻のシステムの場合~
 

Kürzlich hochgeladen

Kürzlich hochgeladen (12)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

『ラブライブ!スクールアイドルフェスティバル ALL STARS』を支えるビルドパイプライン 〜より安定したサービス提供を目指して〜