Slide 1

Slide 1 text

日常業務のカイゼンで図る 開発チームへの貢献 YAPC::Kyoto 2023 / 篠田 大地 @koluku 1

Slide 2

Slide 2 text

自己紹介 ● 篠田 大地 / koluku(コルク) ● 2020/04〜 ● ゲーム・エンタメ事業部所属 ● サーバーサイドエンジニア ● 新卒3年目 2

Slide 3

Slide 3 text

本セッションの背景 ● カイゼンでやった結果 ○ チームメンバーを5人から4人に縮小(20%の改善) ■ メンバーを希望の別チームへ配属させることができた ■ チームの人数減少前と同様に負担がない体制になった ○ 休日にサーバーを見守る以外の作業をしないで済むようになった ○ 各職能間の責任が明確になり作業に集中できるようになった ● これらをどう実現したのかを話します 3

Slide 4

Slide 4 text

みなさん仕事したいですか?

Slide 5

Slide 5 text

みなさん仕事したいですか? ● 僕はしたくないです ○ できれば不労所得でいたい ● でも現実はそうもいかない… ○ 働かないことにはお金がもらえない ● なら、なるべく仕事を減らすしかない

Slide 6

Slide 6 text

仕事を減らす方法 ● 仕事をもらわない ○ 拒絶する ○ 他の人に任せる ○ AIに任せる ● 作業を減らす ○ 複数人で分担する ○ 作業ステップを減らす ○ 複数の作業をまとめる ● 仕事を苦痛ではないと思いこむ

Slide 7

Slide 7 text

作業したくないことを書き出す ● 昼寝してても呼び出されない状態とは何か考える ● 時間かかっているよというのを書き出すとなお良い ○ 現実の話をすると説得しやすい ○ 3時間ぐらい消えてそうだなと体感ベースでも良い ● 困ってないなら技術記事を眺めて視野を広げる ○ 例) このツールに置き換えたら4倍速くなりそう? ○ 例) ドキュメントをGPT-4に書かせて修正すれば良さそう 7

Slide 8

Slide 8 text

それらカイゼン方針をIssueにまとめる 8

Slide 9

Slide 9 text

ソシャゲ開発の特徴 ● 機能開発以外の運営リリースが多い ○ ガチャ、新規キャラ、イベント、etc… ○ 半年前から準備を開始 ○ 数十個の開発が同時並行する ● リリース頻度が早い ○ 1日置きにイベントやガチャが入れ替わったりする ○ 細かいデータ更新も頻繁に行われる

Slide 10

Slide 10 text

やらなきゃと思ったこといくつか ● デプロイ作業が高コスト ○ 1回のデプロイで担当者が4〜6時間拘束され, 他のメンバーが1~2時間程度拘束される作業を 毎日行っていたが、それだと毎週最低でも30時間前後が消える ● 運営作業のコミュニケーションが高コスト ○ アイテム配布やデータ反映などが運営チームから開発チームに依頼されていたが、内容が 合っているのか、反映するしたなどコミュニケーションコストがチリツモで高かった ○ データ変更のレビュー依頼がきても意図が読み取れないことが多い ● なぜか手動で実行しているスクリプト実行が多い ○ 定期的に行われているスクリプト実行が手動で行われていた ○ また自動化しようと思ったまま放置、手が慣れてしまったなどがある

Slide 11

Slide 11 text

じゃあどうしようか 11 ● デプロイの効率化 ○ デプロイを自動化する ○ 週に行うデプロイ回数を減らす ● 運営作業の分担化 ○ 運営チームでもスクリプト実行できるようにする ○ 運営チームだけでデータ変更ができる状態にする ● 定期スクリプトの自動化 ○ 人の判断の余地が無いものは問答無用でバッチにする

Slide 12

Slide 12 text

カイゼン方法に問題ないかを聞いてみる ● チームからもっといい方法が提案してもらえるかも ○ 実はそれ古い手法だからこっちが良いよ ○ 最近出たこれがイケてそうだから検証してもらえない? ○ こうすればいいのはわかってるけど作業時間が確保できなくて… 12

Slide 13

Slide 13 text

● 関係者に話を通しておく ○ 急に変更されすると作業者が困る ○ コードに手を加えなくてもお願いして終わることもある ● PMにも話を通しておくのもアリ ○ カイゼンの工数に対して改善する時間をコスパを見積もっておいて、1プロジェクトにするの を検討してもらう ■ スキマ時間にやるより早く終らせることができる 事前に色んな人に根回しておく 13

Slide 14

Slide 14 text

カイゼン作業する

Slide 15

Slide 15 text

デプロイの効率化編 ● デプロイ頻度を下げる ○ 「デプロイがだるいんですよね〜」など1on1でPMに話していたところ、運営チームと調整 をしてもらえた ● デプロイを自動化する ○ 途中で止まっても再開・巻き戻せることを確認した上で1ワークフローのまとめ、デプロイに かかる時間を短縮 ○ ステージング環境の自動デプロイも本番環境のデプロイの前提条件として取り入れる ● 1つのファイルに全員で書き込むのをやめる ○ 複数のPRで同じファイルを並行で変更してPRのコンフリクトが高頻度で発生していた ○ PRごとにCSVを分割して最終的に結合する仕組みを採用 ○ 最近GitHubでpublic betaとなったMerge Queueを使うことを検討できそう 15

Slide 16

Slide 16 text

ジョブ管理ツールRundeck ● 乱暴に説明するとブラウザからスクリプトを実行するツール ● job同士を逐次・並列に実行、スケジュール実行も可能 ● GitHub Actionsでも可能だが、GitHubのアクセス権がある人とデプロイや コマンドの実行が可能な環境・人を分けたい事情で採用している

Slide 17

Slide 17 text

30時間/週→4時間に短縮!

Slide 18

Slide 18 text

運営作業の分担化編 18 ● 運営チームでもスクリプト実行できるようにする ○ Rundeckに権限を絞ったロールを用意する ○ 誤ってアイテム大量配布によるインフレなどが起きないように値チェックを挟む ● 運営チームだけでデータ変更ができる状態にする ○ 開発チームがCSVを目視でチェックするのをやめる ○ 運営チーム内のレビューとCIによるチェックで担保する

Slide 19

Slide 19 text

差し込み依頼の撲滅

Slide 20

Slide 20 text

スクリプトの自動化・管理画面化編 ● 特に理由のない手作業をやめる ○ オートスケーリングを手動から自動設定にする ○ 特定の時間に手動で叩いていたスクリプトをバッチ化 ● 手動が必要なものでもRundeckに置く ○ カジュアルに実行しても良いものはコンソールじゃなくてもいい ○ 大いなる力が伴うものはコンソールという意識分けにして置くほうが安全

Slide 21

Slide 21 text

出先でも対応可能に 土日の出勤対応がなくなった

Slide 22

Slide 22 text

うまくいかないこともある

Slide 23

Slide 23 text

● 進捗が出にくい ○ 1個1個解かないといけないが、表面上改善しない ○ そもそも手がつけれないことが発覚することもある ● 影響が甚大 ○ 具体的にはデプロイイメージを作るのに1時間程度かかるのが解消できていない ■ マスターデータの整合性チェックが1PRにつき15分 ■ 更新ファイルを生成するのにファイルを全部検査 ■ git自体が大きすぎてCIでcloneに時間がかかる ○ 運営・アプリチームにも影響があるため1大プロジェクトにせざるを得ない 技術的負債 23

Slide 24

Slide 24 text

● アプリチームとの連携が必要 ○ つまり自分以外を巻き込むので高コスト ● 運営チームとの合意が必要 ○ コンテキストを理解してもらうのに時間がかかる ○ 逆にこちらが理解するのも時間かかる チームが密結合 24

Slide 25

Slide 25 text

色々進めた結果としては…

Slide 26

Slide 26 text

● デプロイ関係 ○ 30時間/週→4時間に短縮! ● 運営作業の分担化 ○ 7時間/週→1時間に短縮 ○ 差し込み依頼の撲滅 ● スクリプトの自動化・管理画面化編 ○ 休みの日に人員を割り当てて実行する必要がなくなった ● 副産物 ○ 公開作業が早くなった ○ コードが読みやすくなった 結果どれくらい改善されたのか

Slide 27

Slide 27 text

よし、これで半日は昼寝できるな!

Slide 28

Slide 28 text

カイゼンしただけで終わらせない

Slide 29

Slide 29 text

● 感謝されよう ○ おこがましいと思わず、みんなが楽になるようにカイゼン したので褒められよう ○ 逆にやって当然だと思われてもお互いのためにならないの で苦労したならそれを言うべき ● 良くしていきたいという雰囲気にもっていける ○ 誰か一人が実践すると後の人がついてきやすい ○ そうなるとカイゼンに対する議論が活発になって好循環に なる カイゼンできたらでアピールをしよう 29

Slide 30

Slide 30 text

社内で発表 ● 他の部署でもやるぞという雰囲気を促すことが できる ○ できたということを聞くだけで人はモチベーションが 上がりやすい ● こういうことができる人ですよという属性を得 られる ○ 主張しないことには才能は埋没しやすい ● お悩み相談を受けやすくなる ○ それぞれの立場での悩みがあるので自分の場合ならど うするかという考えを研究することができる 30

Slide 31

Slide 31 text

そして社外にも… 31 ● ブログに投稿、カンファレンス登壇してみよう ○ 他の人にとって問題にアプローチをしてみたというのは面白いし参考になる ○ 発表した内容に対して人や知見が集まりやすいのでより次の活動が洗練されていきやすい ○ もちろん社外秘を含む場合があるのでリーダーやCTOに許可を取ろう なんか既視感ある

Slide 32

Slide 32 text

まとめ ● カイゼンは自分が楽になりたいという気持ちが大事 ● 面倒だと思っても関係者と相談を済ませよう ● やること・やったことをアピールして次につなげていこう 32