Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
必殺技ロジックの実装を半自動化する機構を作った話
Search
akatsukinewgrad
March 05, 2021
Programming
0
1.9k
必殺技ロジックの実装を 半自動化する機構を作った話
akatsukinewgrad
March 05, 2021
Tweet
Share
More Decks by akatsukinewgrad
See All by akatsukinewgrad
2023/1/25_QAテスター meet up!
akatsukinewgrad
0
120
成果発表資料.pdf
akatsukinewgrad
0
1.9k
広大なフィールドを気持ちよく駆け抜けるための技術.pdf
akatsukinewgrad
0
510
正規表現とReDoS.pdf
akatsukinewgrad
0
500
Unityで大量のオブジェクト_を吹き飛ばしたい.pdf
akatsukinewgrad
0
530
新卒2年目が思う1年目の学び.pdf
akatsukinewgrad
0
470
障害訓練の取り組みについて.pdf
akatsukinewgrad
0
620
7分でわかるアカツキゲームス
akatsukinewgrad
0
510
Bitcoinだけでスマートコントラクト.pdf
akatsukinewgrad
1
800
Other Decks in Programming
See All in Programming
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.6k
CDKを使ったPagerDuty連携インフラのテンプレート化
shibuya_shogo
0
110
推しメソッドsource_locationのしくみを探る - はじめてRubyのコードを読んでみた
nobu09
2
330
良いコードレビューとは
danimal141
1
220
color-scheme: light dark; を完全に理解する
uhyo
7
500
技術を改善し続ける
gumioji
0
140
Unity Android XR入門
sakutama_11
0
180
SwiftUI Viewの責務分離
elmetal
PRO
2
280
負債になりにくいCSSをデザイナとつくるには?
fsubal
10
2.6k
データの整合性を保つ非同期処理アーキテクチャパターン / Async Architecture Patterns
mokuo
55
19k
バッチを作らなきゃとなったときに考えること
irof
2
530
未経験でSRE、はじめました! 組織を支える役割と軌跡
curekoshimizu
1
170
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
The Pragmatic Product Professional
lauravandoore
32
6.4k
YesSQL, Process and Tooling at Scale
rocio
172
14k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
Designing Experiences People Love
moore
140
23k
Statistics for Hackers
jakevdp
797
220k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
50k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
BBQ
matthewcrist
87
9.5k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
Transcript
必殺技ロジックの実装を 半自動化する機構を作った話 きょーま @Akatsuki
自己紹介 • 2018年 新卒入社(2021年4月で4年目) • クライアントエンジニア ◦ 新機能作ったり、バグ直したり、たまに企画書いたり • 趣味はゲームとお絵描き
最近は毎日1冊以上ラノベ読んでる
毎回エンジニア実装が必要な必殺技を どんなフローで運用しているのか という話をします
必殺技とは • 特定のキャラが持ってる • 条件を満たすと発動できる • 個性を出すためキャラごとに条件・効果が違う • 例 ◦
このキャラのターンの時、攻撃力+3000、速度+1000 ◦ このキャラのターンで敵を倒した場合、ターン終了時に特定のスキルを付与 ◦ ※ 実際には存在しない架空の必殺技です
必殺技ができるまで 1. 運用チームが大体の内容を議論 2. エンジニアと検証チームで実現方法を議論 3. エンジニアが実装、新機能がある場合は検証 4. バランス調整 5.
リリース! ίίͷ
なぜ毎回エンジニア実装が必要なのか • 必殺技は、ゲームロジックの中ならなんでもできるって思想で作られている • つまり、仕組みとしてあまり型が決まっていないので、 多少効果が変わろうが、毎回新しいことをしようが大体は実現できる • もし、実装無しでパラメータ入力だけでできるようすると、 ある程度型を固めないといけない =
できることが減る、望むところではない • とはいえ、毎回似るようなところは考えなくていいようにしたい
必殺技はどのように実装されているのか • 1つの必殺技につき1つのスクリプトファイルがあって、条件と効果を記述 ◦ 条件は既存のものの組み合わせだけである程度実現可能 ◦ 効果はベーシックな効果と今まで存在しなかった効果に分けられる • 本当に毎回考えないといけないのは、今まで存在していなかった効果の部分 ◦
スクリプトを生成して、条件とよく使う効果の部分は機械的に実装できる
どこを自動化するの? • ベーシックな部分を自動化 ◦ 条件は汎用的なものが多いので、ほぼ全てパラメータで対応可能 ◦ 効果は値をいじる系全般はパラメータで対応可能 • 例 ◦
このキャラのターンで、このスキルを発動させた時 : ここはパラメータで可能 ◦ 攻撃力+3000、速度+1000 : ここもパラメータで可能 ◦ この必殺技で敵を倒した場合、 ランダムな相手のキャラの全能力-20% : ここは幅が広すぎて無理
どうやって自動化したの? • Jenkinsでパラメータを入力したらリポジトリにPRが飛ぶように自動化 ◦ 元々Jenkinsを使った運用フローがあるのでメンバーが理解しやすい ◦ パラメータはどんな条件にするか、どの効果をどんな値にするかなど ύϥϝʔλ ʢखಈʣ 1VMM3FRVFTU
Ϛʔδखಈ
Jenkinsで何やってるの? • シェルスクリプトでコードジェネレート ◦ 雛形を元に、sedコマンドでパラメータに対応するタグを置換 ▪ Attack = <PARAM_ATTACK> みたいなのを
Attack = 3000 に置き換える • Github CLIでPR化 ◦ Githubをコマンドラインから操作できるようにする公式ツール ◦ 去年の9月にv1.0がリリースしたばかり! ▪ https://github.com/cli/cli ◦ gh pr create -t “タイトル” -b “説明文” -B “対象ブランチ” でPRを作れる
半自動化の恩恵 • エンジニアは新しく増える効果の実装に集中できる ◦ 他の作業と並行してやるので、コンテキストスイッチを切り替えるのが大変だった • ベーシックな必殺技の実装ならエンジニア不要 • コードジェネレートに使われるコードは全てテストされている ◦
生成時点でユニットテスト完了扱い、効果としての組み合わせに完全に注目できる ◦ ついでに人為ミスの可能性も減る
まとめ • 継続的になんらかのコストが発生するようなものは、 ◦ 専属の人がいないとどうしようもない部分はできるだけ減らそう! ◦ 減らせなくても負担が軽くなるようにしよう! ◦ 仕組みはドキュメント化しよう!