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.7k
必殺技ロジックの実装を 半自動化する機構を作った話
akatsukinewgrad
March 05, 2021
Tweet
Share
More Decks by akatsukinewgrad
See All by akatsukinewgrad
2023/1/25_QAテスター meet up!
akatsukinewgrad
0
98
成果発表資料.pdf
akatsukinewgrad
0
1.7k
広大なフィールドを気持ちよく駆け抜けるための技術.pdf
akatsukinewgrad
0
380
正規表現とReDoS.pdf
akatsukinewgrad
0
380
Unityで大量のオブジェクト_を吹き飛ばしたい.pdf
akatsukinewgrad
0
400
新卒2年目が思う1年目の学び.pdf
akatsukinewgrad
0
350
障害訓練の取り組みについて.pdf
akatsukinewgrad
0
400
7分でわかるアカツキゲームス
akatsukinewgrad
0
390
Bitcoinだけでスマートコントラクト.pdf
akatsukinewgrad
1
620
Other Decks in Programming
See All in Programming
Ruby GitHub Packages
bkuhlmann
0
630
Ruby Function Composition
bkuhlmann
1
330
障害対応を起点としたもっといい開発と運用のサイクル作りのためにできること / Hatena Enginner Seminar #29
polamjag
0
180
Kotlin Multiplatform at Stable and Beyond (Android Makers 2024)
zsmb
0
270
SIMD Parallel Programming with the Vector API
josepaumard
0
180
スキーマ駆動開発による品質とスピードの両立 - 私達は何故、スキーマを書くのか
kentaroutakeda
0
170
try! Swift Tokyo 初参加報告LT
hinakko2
0
220
PHP8.3の機能を振り返る / Review of PHP 8.3 features
seike460
PRO
1
110
Blue/Greenデプロイの導入による 運用フローの改善
kudoas
1
380
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
800
⼤規模⾔語モデルの拡張(RAG)が 終わったかも知れない件について
nearme_tech
23
15k
Behind VS Code Extensions for JavaScript / TypeScript Linnting and Formatting
unvalley
5
920
Featured
See All Featured
Teambox: Starting and Learning
jrom
128
8.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
243
12k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
322
20k
Automating Front-end Workflow
addyosmani
1356
200k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
187
16k
Rebuilding a faster, lazier Slack
samanthasiow
73
8.2k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Optimising Largest Contentful Paint
csswizardry
8
2.4k
Fireside Chat
paigeccino
21
2.6k
Creatively Recalculating Your Daily Design Routine
revolveconf
210
11k
Robots, Beer and Maslow
schacon
PRO
155
7.9k
Debugging Ruby Performance
tmm1
70
11k
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を作れる
半自動化の恩恵 • エンジニアは新しく増える効果の実装に集中できる ◦ 他の作業と並行してやるので、コンテキストスイッチを切り替えるのが大変だった • ベーシックな必殺技の実装ならエンジニア不要 • コードジェネレートに使われるコードは全てテストされている ◦
生成時点でユニットテスト完了扱い、効果としての組み合わせに完全に注目できる ◦ ついでに人為ミスの可能性も減る
まとめ • 継続的になんらかのコストが発生するようなものは、 ◦ 専属の人がいないとどうしようもない部分はできるだけ減らそう! ◦ 減らせなくても負担が軽くなるようにしよう! ◦ 仕組みはドキュメント化しよう!