imog

主にUnityとかの事を書いています

テストコードについての文書を書いていた

色々決めごとをするときは社内にissueなりwikiなり残すのですが、これは外に公開してもいいんじゃない?と思ったので公開します。

今回は「Unityにテストコードを導入する」ときの文書です

なぜテストコードを導入するのか

往々にしてプロダクトの要件は常に変化します。一ヵ月前の仕様が変わることも珍しいことではありません。仕様が変わればコードの修正は必要です。つまり、コードは必ず変化するという前提で書く必要があります。

コードが変化すると、その周辺のコードに少なからず影響を与えます。場合によっては全然関係ないと思っていたところに飛び火することもあります。それらを予め人間がすべて把握するのは経験則からくる職人技に近いものなので、非常に難易度が高いです。

テストコードを書くと、変更を加えた際に起きる影響をある程度可視化してくれます。 プロダクトの規模が大きくなるほど開発速度は落ちていきますが、テストコードはその減速率を下げるのに役立ちます。

テストコードを書くメリットは以下の2点です

品質を把握する

テストそのものが品質を上げてくれるわけではありません。テストコードは現状のプロダクトの品質がどんなものなのかを可視化してくれます。この部分が適切に動いているのか、この部分に変更を加えるとどうなるのか、など。品質の可視化は機能追加、リファクタリングの判断材料となり、素早い意思決定が行えます。

テストがないコードは品質が悪いのではなく品質がわからないので、どこを直すべきか、どこの処理を手厚くすべきかという判断が難しくなり、結果的に開発効率が落ちてしまうと考えています。

精神的障壁の排除

影響範囲の見えないコードの修正はメンタル的によろしくないです。 根本原因を解決すべきとわかっていても、影響範囲が見えない場合、リスクを減らし最小工数で抑えるために一旦場当たり的な対応を取りがちです。これはもちろん有効に働く場合もありますが、上記のネガティブな理由から選択すると、未来で同じ問題にぶつかってしまいます。

テストコードにより影響範囲が可視化されていると、根本原因の解決はどのくらいの影響を与えるのかというのがある程度見えることで「なんだか大変そう・・」という精神的障壁を超えた上で判断ができるようになります。

導入するためには?

テストコードを書くためには、ビューとロジックが分離されている必要があります。(そうしないとめっちゃ書きづらい) これは別issueのMV(R)Pアーキテクチャ導入 #1125 によって実現できると考えてます。

また、シングルトンはテストするのが非常に面倒です。 refs シングルトンパターンの誘惑に負けない

この問題は、シングルトンをやめて依存性の注入(DI)を行うことで解決できます。UnityだとZenjectというライブラリが有名です。

ユニットテスト

Unityに依存しないPure Classのテストです。これはEditModeテストを導入します。実はいくつか実装済みです。 - 例 xxxxx

Zenjectを導入した場合、バインド処理が必要になるのでZenjectに付属の ZenjectUnitTestFixture を継承して書く

refs - Unity で ユニットテストをする http://blog.kakeragames.com/2016/02/17/unity-test-unit.html

インテグレーションテスト

MonoBehaviorなどUnityに依存したコードのPlayModeテストを書く。やり方はもうちょっと詰めていく。

unity-uitestというライブラリがあったのでこれを使えばアウトゲームのシーンUIの自動テストは書けそうな気がするが要調査

FaceRigとボイスチェンジャーでバーチャルの肉体を手に入れた

30手前の男性二人がチャットでボイチェンで美少女声出してキャッキャしてたら肉体も欲しいなという気持ちになり、FaceRigを購入しておばあちゃんの肉体を手に入れた

無駄にバーチャルの肉体で配信できる環境を整えてしまった。

しかしそうなると今度は身体を動かしたいなという感じになってきたので誰か僕にHTC VIVEを買ってください。

社内LT会に参加してきた

社内でLTやろうぜ!という流れができたので参加してきた。

お昼に行われるやつで、なんと1000円相当の弁当が出るコスパ高いLT大会だった。今回は牛たん御膳を選択。

僕は最近やってたUnityのでモッククライアントの実装など話していた。

speakerdeck.com

前回話したテストの延長で、通信が絡むユニットテストの解決方法を探すという感じのお話。 これはいずれ汎用的に使えるやつとして公開したいなーというお気持ち。

その他にもC++の黒魔術があったりとバラエティ豊かな発表だった。

www.slideshare.net

C++ => C プリプロセッサらしい。

全員基本的になんだかヤバそうなスキルを備えていて聞いてて飽きない話ばっかりだったので、こんな感じで表に出していけるような空気になっていけばいいなと思う。

試用期間が終わった

金曜日でちょうど三ヶ月だったので、無事に試用期間を終えることができたっぽい。

社内でやったこと

クライアント側の一部分にアーキテクチャ導入したり、テスト導入したり、その過程でDIツール入れたりなど。 割と開発基盤を整えていた感じある。 また、それとは別にふりかえりのファシリテートしたり、動きやすくするためのチームビルディングなどやっていた。 チームビルディングと敢えて言う内容でもなかったりするけど、行動に名前を付けることは大事なのでそう呼んでいる。

あと臨時会議室作るとかしてた

www.instagram.com

BARいも焼酎、席替えに伴いだいぶ土地を減らされました。

割と前職で得た知識や経験がそのまま適用できているので、業界関係なくエンジニアリングは大事だなあと感じた。特に人の巻き込み方に関してはそれはもうパクりまくっている。

最近はとりあえず考えてること全部垂れ流そうということでいもスレというスレッドを開発チャンネルに作ってる

https://i.gyazo.com/29cdb17fd4b211341a65b50c51cdeaef.png

コメントはないけど絵文字だけは付くので見てるんだと信じてる。

一方で、結構新しい概念や技術を立て続けに導入したため別の問題も発生しているので、それはそれで別途解決しないといけなさそう。今後優先する課題であった。

社外でやったこと

Gotanda.unityは定期的に登壇したりしてる。3月はZenjectのテストについて話してた。

speakerdeck.com

入社3日目にして社名を間違える失態を犯したけど無事試用期間終わりました。

あと、「Unityテスト完全に理解した」という勉強会の会場提供したり発表したりしていた。

connpass.com

僕はテストを導入した話をやっとりました。

speakerdeck.com

#Unityテスト理解した ハッシュタグがトレンド2位まで上がってたので驚いたのとともに、やっぱみんな気になってたんやな・・という気持ちになった。 懇親会でも、導入したいけどできなかったとか、一人で頑張ったけど燃え尽きたなど様々な苦労話を聞いたり。何か参考になればよさそう。

第二回やるときは是非とも各所で運用されているゲームの人たちに登壇してほしい。ほんと。

これからやること

有給が発生したので活用してぽん酒館行きたい

ponshukan-niigata.com

ボイストレーニングを始めた

突然のボイトレを始めた

なぜ

最近歌ってないなと思いカラオケに行ったら歌が下手になっていた。

でも冷静に考えたら普段仕事で歌ってるわけでもないし日頃トレーニングしてるわけでもないから、下がりこそすれ上がることは永遠にないことに気づいた。

歌うのは好きなのでそれは嫌だなあと思い何かしら動くことにした。

教室が近くにあることはわかったが、直近だと時間とお値段がつらいので断念。 その代わりamazonで好評だった本に倣って練習している

https://www.amazon.co.jp/gp/product/4905084180/

いずれはスタジオ行きたい

なにしている

本自体はCDの説明に沿って1日30分くらいのトレーニングだけ。 まだ一週間なので特に変化はないが、根気よく続けていくことにする。

あと、今までやってこなかったけど自分の声を録音して聴くようになった。 するとそこでようやく自分の音がやや低くずれていることに気づいた。やっと改善のための分かりやすい材料が出てきた。やったぜ。

翌日もう一度録音して少しずつ調整をかけていってそれっぽくなってきた。 何事においてもふりかえりは大事であることを改めて認識させられた。

それ以降、通勤時は録音した自分の声を聴くようにした。万が一イヤホンが外れたら自分の声を聴き続けるナルシストエンジニアと認識されるリスクを背負いながら僕は働いている。

ちなみに練習時の曲は聖飢魔Ⅱの「荒涼たる新世界」です

www.youtube.com

みなさんカラオケに行きましょう

GWふりかえり

大洗帰省

心の故郷である大洗に帰省した

www.instagram.com

www.instagram.com

いつも日帰りだったので今回は一泊二日にしたところ、みんなで帰りを気にせず飲めるので最高だった。ドルフィンで酒を飲み知らない人と一緒に「ジョジョ ~その血の運命~」をデュエットして、翌日はレンタサイクルで大洗を駆け回り非常に充実していた。そろそろまた行きたい。

MMBAR

メタルマックスに出てきた料理を食べながらメタルマックスについて語るイベントがあったので行ってきた。

twipla.jp

前職でも現職でもメタルマックスの話題は誰も伝わらないので10年分くらい喋った気がする。

あと、アリとアリの卵を使ったオムレツを食べた。 www.instagram.com

桜えびの味がした。

ノアフェス勉強会

友人に連れられてノアフェスと呼ばれるイベントの事前勉強会的なのに参加してきた。

noahfes.jp

ノベル&アドベンチャーゲームの祭典らしい。同人やインディーゲーム開発においてノベルやアドベンチャーってあまりプログラマというのを見かけないイメージがあり、案の定プログラマはほとんどいなかった。しかしプランナーやシナリオライター側の発表はあまり聞いたことがなかったのでそれはそれで新鮮で楽しかった。 ノベルやアドベンチャーは観測している範囲だと吉里吉里やティラノエディタをベースに作るのが主流なので、他のジャンルとはまた違った空気感なのかもしれない。

輝夜月にハマる

VTuberはもともと知ってたけど、輝夜月のShowroom生放送を観たらドハマりしてしまった。投げ銭すると即時にからあげやタライが降ってきたり1万円で竹がにょきにょき生えてくるのは絶対テンション上がる。承認欲求が満たされていく。 そのまま委員長の放送見始めたのでその勢いは留まるところを知らない。

割とGW満喫したので明日から一般社会人に戻ります。 ちなみに明日からUniteですが、僕は三日間終日参加しているので気軽にお声がけください。

events.unity3d.jp

当日はUnityできますよTシャツが目印です。

28歳になった

友人からプレゼントが届いたのでじっくり読ませていただきます

誕生日である本日は18本入り550円の焼き鳥パックとスーパードライを捕食しながらSkypeで雑談をしていました。ちなみに去年は家を買うために奔走していました。

秋口の両親の病気から始まり将来を考え始め色々動き回った年でした。選択が正しかったかはわかりませんが動き続けるしかないなあというお気持ちですね。

新しい職場はまだ一週間ほどですが、今までやったことない部分に触れる機会があるのは楽しいです。GC走らないようにチューニングするとかチート対策とかは中々個人ではやらなかったので。 あと趣味でやってたUnityもそれなりに役に立っています。チームの人がチリチリ好きなのもポイントです。

仕事に慣れつつ、引き続き勉強会とかブログでのアウトプットは続けて行きたいところ。 最近はGodotEngineも楽しいのでそっちで勉強会も楽しそうですね。

Godot Engine - Free and open source 2D and 3D game engine

例のアレ貼っておきますのでみなさんそこんところよろしくお願い申し上げます

http://amzn.asia/iuzBsta