テストが楽しくない人のためのマインドセット
「さあ始まりましたひまじんプログラマーのお時間でございます時間が始まりましたよやってまいりましたはいというわけでこのラジオはひまじんの中級エンジニアが送る駆け出しエンジニアをキャリアアップさせるラジオということでやっておりますはいその通りですお願いしますじゃあ自己紹介中級エンジニアのカイチですはいノリです駆け出しエンジニアのじゅんぺいですはいこういうフォーメーションでやってますはいはいじゃあじゅんぺいくんが悩みがある程度」
「ブーブー言っブーブー言っ」
「小規模なアプリ開発みたいなのをチームでやってましてそれが一通りできてテストをやっていこうっていうタイミングで使用書とかも自分たちで作っていくような感じで実際にそのアプリを売ってやるっていう感じだったんですけどその使用書作りからがやっぱりこう」
「楽しさを感じれなくてうんそれはつまらんなと思ってそういうのにぶつかるタイミングで皆さんあったと思うんですけどこの意見というかぶつかった時の対処法つまらなさにぶつかった時の対処法っていうのはテストに限らずお聞きしたいなと思ってますはいなるほどね要するに何点だろうね楽しいことばっかりじゃないと仕事ってそういうもんですからねそうですね」
「なかなか気が乗らないと前のめりにいけないですからねどっちから何の話しましょうかノリさんそうですねどっちからっていうのはそうそうそういうことじゃあ僕からいきますかじゃあまずまずちょっとつまらないことにぶち当たったらっていうよりテストについて言わせてもらっていいですかはいお願いします先輩からいや」
「確かにテストつまらないのはねめっちゃわかりますわかるんですけどテストすらできない人にはなってほしくないなと思いますねなるほどあの開発だけやりたいっすってテストおろそかになってるやつほどダサいことはないっすからねなるほどダンスうまいけどファッションダサいササルそういう感じっすよめちゃくちゃダサいっすねテストできなかったらテストできなかったらダサいっす」
「めっちゃめちゃダサいことで踊ってんのはもう究極にダサいですね踊ってないですよねだから僕はテストちょっとだるいなと思ってたんだけどどの本読んでもテストってやっぱ大事だよねみたいなこと書いてるんですよ僕はそれに洗脳されまくった結果」
「俺テストあんま知らないなと思ってテストの本読んだりしてる中でテストも奥深いんだなってことが分かって今までテストをあまんじては自分ダサいって思うようにしてテストをやるようになりましたねちょっと割り込んでいいですかちょうど今朝」

「達人プログラマーのそこの章を読んでいいですか?おー!テストの章ちょうどテストの章というよりはプログラムの書き方の章なんですけど達人プログラマーの中のTipsにあなたは完璧なソフトウェアを作ることができないっていうのがあるんですよ達人でもできないんですよじゃあどうするかっていうところでソフトウェアを作る上でこれを守りましょうみたいな考え方があるんですよそれが」
「契約による設計っていう考え方どういうことかっていうと契約って事前にこういう条件で成果物を提供しましょう提供してくださいっていうのを決めてから成果物を作って受け取るみたいな考え方だとしてソフトウェアに当てはめるとどうかっていうとこういう事前条件を与えてその事前条件を満たしている時にこういう事後条件になります」
「でその時その事後条件になったら他のこういうところには影響及び及ぼしませんはいみたいなものを決めとくとソフトウェアとして誰が作っても何にも迷惑をかけず一定の成功をあげるようなものを作れるだろうみたいな考えたかったがあるんですよ期待値作っときゃってこと最初にそう事前条件とそれの期待値を作っときゃ」
「誰でもメンテナンスしやすいある程度いいソフトウェアが書けるコードが書けるだろうっていう考え方があるんですけどノリさんお気づきかもしれないですがそれってまさしく単体テストのテスト駆動開発の考え方ですよ事前条件これでこうなっていることそれを一つ一つ一つのメソッド一つのメソッド積み上げていくことによって集めてもぐじゃぐじゃにならない」
「まともに動くソフトが作れるなるほどだから完璧なソフトが作れない俺らでもある程度動くソフトウェアが作れるよねそういう考え方を保証するというかそういうことをやるための単体テストなんやねん達人プログラマーが言ってましたなるほど」
「すみません割り込みました僕の番になってからもう一回テストの話するのだるいなと思ってなるほどね確かにな入りましたお返ししますテストについてはそんなとこですよ君はきっとまだテストについてそんな知らないんですよ」
「はい同地クラステストって言われてわかりますか?わからないわからないやった気がするなやった気がする?あの教科1はいはいはいテストみたいなとかそこら辺の話ですか?あ、それその辺りのやつあ、じゃあナトラックふざけんなふざけんな台本的に知らねえとこだろこれごめんなさいうんまあでもいろんな技法がいっぱいあるんですよテストにははいテストの種類もいっぱいあるしね」
「ユーザーユーザビリティテストとか知らないですリフレッションテストとか知らないですよし本当に知らないあと何でマウント取れるかあとあれだわ何ですか負荷テストとかね知らないです雰囲気で分かるよねなんとなくはいいろんなテストがあるんでねあなたはもっとテストできるようになりなさいそうですね確かに」

「あれはつまらなさ簡単そりゃそうだろっていうことをやってるのもあってつまらないっていうのはあったんで確かにそれがそもそもできないならまあでも確かにテストの8割はそりゃそうだろってなるよねこの辺はちょっとね差し掛けがむずいと思うなんかテストって要は無限にできちゃうからうんうんわかりました本当に大事なところをテストしてバグを見つけていくってのがやっぱ一番効率いいんですよだからつってなんか」
「これはさすがにできるっしょみたいなの飛ばしてそこでバグ生んだら本当に罪深いけどね確かになだから本当に必要にここは絶対要件として必要だよねっていう部分は担保しつつここぶっ壊れそうだなっていうところを丁寧にテストしていくみたいなはいはいいいさじ加減なんですかねそこのさじ加減っていうのは経験値ですノーコメントはいということで間がありすぎてカットしてたかもしれないけどすごい間でしたね今」
「経験値しかないのかなと思いましたそれは経験値だよねっていう感じだなぶっ壊れやすい箇所なんて経験だよね経験ですだんだん先輩エンジニアがここはそんなやらなくていいでしょって言ってるに対しても本当かって思うこともあるしそれは経験値つまんないことをどうやって乗り越えればいいのかに関してなんですけどつまんないことはゲーム化してくださいタイムアタックだと思ってください」
「なるほどこれはねこれは作業だ作業だってなったらじゃああとはもうその作業を世界新記録出して終わらすみたいな気持ちでやった方がいい自分の中で遊びとしてそうそうそうそう自動化できることないかなとか考えたりとかこうやったら効率いいんじゃないかみたいな考えたりとかもっと便利なツールあるんじゃないかって探したりとかっていう工夫をしないと絶対つまんないと思いますね」
「なるほどですねつまんないつまんない言ってるだけじゃ気もないですねそう赤ちゃんと同じです赤ちゃんでした僕ベイビープログラマーまだまだベイビーでしたって思いましたね僕はつまんないところに関しての対処法ははいはいはいじゃあ勉強になります」
「なるほどありがとうございますじゃあ僕の話ですねはいまず大前提ですね僕は変態ですいやちょっと待って変態現れる大前提すいませんこのラジオに変態がいます変態ました僕の変態エピソードとしては日本地図日本全国に独自のメッシュの番号を振り分けるっていう地獄の作業があったんですけど十数キロ四方の」
「独自のメッシュ番号を割り当てて日本全国?日本全国やばくない?まあもう何メッシュの番号を割り当てたか覚えてませんか?はいはいはいしかも各都道府県ごとに微妙に規格が違うえ?それを47都道府県あ?40くらいかな?やりきるっていう変態作業をやって変態なんですけど手でやんのそれ?えっと人件人件は手ですやばくない?40パターンぐらいやりましたねはいはい」
「なんで変態です変態ですねなんで話半分で聞いていただければと思いますまずテストの話ですねじゅんぺい君のね超共感できるんですよ俺も同じこと思った当時はつまんないながらも別にそれはタスクだからやってたっす」

「変態だ変態別にまあ面白くないなぁまでは言わないですねなんか単体テストっていっぱい書けるじゃないですかはいはい何分でしょううーんって考えて書くよりもなんだろう書く時間のが長い単体テストはなんだろうテストケース考えるのはもちろんそうなんですけど書くのにめちゃめちゃ時間かかるんでまあそれは楽しくやるでも今考え方が変わって単体テスト楽しいって思ってますよおーで」
「単体テストの例で言うとなんでそう思うようになったかっていうと多分大きく行動に対する考え方が変わったのかなと思ってて僕の今までの僕3年目か2年目か2年目までの僕はプログラムって動かすために書いてるものだと思ってたんですよだから目の前に今作ってるものの要件を満たせばだからそりゃそうだろっていう単体テストやる必要があんまりよくわかんないしモチベーションが出ないから」
「なーんこれと思ってやつなんですけど最近思うのは長く生き続けるソフトを書くのが大事なんだなって気づき始めたんですよおーなるほど何が違うかっていうとその場で動くのが大事なんじゃなくてアプリってめちゃめちゃ長い間使われるべきものだし使われるうちにどんどん機能増えたりとかシステムの移行とかはい」
「再デプロイとか色々あるんでそういうのが身動きしやすいというかメンテナンスしやすいソフトを書くのがエンジニアの役割なんだってことに最近気づき始めそれ以来単体テストが楽しくなってきたなぜなら単体テストがまともに書いてあると機能追加した時とかにあのなんでしょう」
「依存性っていうんですか機能追加の影響範囲とかが分かりやすいし単体テストがきれいに書けるコードは素結合になってるというか機能を追加しやすいような作りになってるんで僕は単体テストを作ってるときテスト駆動でやってるんでテストコード書いてからコード書いてるんですけど設計してるんですよテストコード書きながらで今なんかきれいなやつ書いてるぞっていう気持ちになるようになったんで」
「単体テストでいうとそういう風にメンタルが変わったというか考え方が変わったんですよちょっとあれだよね視点が上がってるというか今まではテストばっか見てたけどソフトウェアを全体として見るようになったみたいなそうただそれについては1年目の俺何やってんだよとは別に思わないんですよしょうがないなって思って無理そんな資座高くできないだって必死だったもんコード書くのに」
「今はプロダクト全体を見ながらじゃあこのプロダクトを長い間売れるようにするためにはこういうソフトを書くべきだなとかこういうシステムであるべきだなみたいなことを考えられるようになったから今はそう思うけど当時の僕は絶対無理だったので今から順平に何回か言える言葉としてはいずれ楽しくなるその考え方マインドが変わればそうマインドが変われば」
「でも結局その良いものを作ろうっていうのはみんな一緒なんだよ気持ちとしては視点が違うだけで企画の人は良いものを作りたいと思ってるしコーディングしてるコーダーの人も良いものを作りたいと思っててただその資産が違うからはちゃめちゃな要求してきとるわみたいな風に思うこともあるんだけど多分結局最強なのはプロダクト全体を考えながら作れる人だと思うのではい」

「それに向けてどんどんいろんな経験して吸収していけばいいんじゃんだから今苦しいのは別にそんな気にしなくていいんじゃないっていうか我慢してやれとなるほどすら思っているのが変態の意見ですあれですねレンガ積む人の話が彷彿されますね有名なね知ってます?何ですか?街で3人のなんか」
「工事現場のおっさんがいてみんなレンガ積む作業してるんですよそれぞれの人にあなた何してるんですかって聞いたら一人目は今こうやってレンガ積む仕事してるんですよみたいな二人目は今こうやって制度を作ってるんですよみたいな三人目は歴史に残る偉大な建築物を作ってるんですよみたいな同じ作業してても今何をその」
「その仕事に対してどういうモチベーションを持っていってるかみたいなところが違うとやっぱりマインドというかモチベーション変わってくるよねみたいな話のやつですねなるほどその中でもカイチはレンガ積むのもできるし上も行けたっていう話を聞いてたすごいこれはねたまたま僕が一回企画側に行ったっていう経験がありますその影響だなとすごく」
「つまんないことに向き合ったとしてもそれに対する本っていっぱい出てるじゃん誰かがおもろいと思ってるんだよそれを」
「だからそんな気にせず我慢してやりなさい辛いことはもっとあるなるほどまだまだこれ5ヶ月目でこの話を聞けてるのはだいぶでかいでかいと思うよマジでさなんで言ってくんないのマジで現場経験したりテストの本読んだりして気づいたところを今聞けてるってことね」
「早っ!順平をキャリアアップさせようとしてんだからそうだようんそれを…じゃあこのポッドキャスト僕も同期にもうな…もう売りたいですもう流したい流したい同期にやばいでもそうそんぐらいやってもらってねほんとにで順平の周りがみんな強くなったらねうんうん僕も嬉しいですそうそしたら俺とのりさんがねこいつらは俺が育てたって言うからうんうん」
「別にこれこれ自体を流さなくても普通に同期に対してここで得た知識を使ってマウント取りに行くそれが一番気持ちいいのたぶん確かに嫌な奴かもしれないそれ知らないの?って嫌だなりたくね?それはなりたくね?ああまだそっち側なんだレンガ積んでんだそうだよねレンガ積むの楽しいもんね俺今歴史に残るもの作ろうとしてるよハブられますね完全にハブられる同期いなくなる」
「いい話ですねっていう先輩らしいことを言いましたいいですねちなみに言うと僕も単純にレンガ詰めるタイプの変態ですね変態でしたねプログラムは続けるんならレンガ詰めるの楽しいって思うやつじゃないとちょっと続かない説はあるねレンガ詰むのも結構楽しいけどなって思いながらやってる」

「ただその僕は日本地図のマッピングは楽しくやってたわけじゃないんでそれはちょっとシングルマジで辛かったっすあの時は大変さがわからないぐらい大変そうだったな本当に日本地図作ってただけだから本当にもっといいやり方あったんじゃないのと思うもん未だにないけどないかいないというわけでなんかのヒントになったらいいなっていうぐらいですね根本解決してないにしてもそうね」
「いやーこれはでも確実になんていうかこう成長のスピードとか他のテストに限らず今やってることとかに見方が変わりますすごいねなんか俺1年目の時この話聞いてもわーなんか言っとるわって思ってたかもしれないいやいやそんなことない確かになチームメイトなんだダンスのチームメイトって間柄は逆にいいのかもしれないですねその辺ね」
「しかも1年目ってなんか変に尖ってたなあそうだったんだよね尖り散らかしてる動機を見て引いてました僕はマジかどういう尖りですか?いやもう無敵だと思ってたできるぜって俺ですげえできるぜってそうだと思ってたでも何年かしてきたらそうでもなかったそうなんですか周りの他にすごい人がいっぱいいるからっていう気づき方なんですか?うーんとね」
「それもあるね社内でもやっぱ敵わない人がいるしもっとスコープ広げたら引くほどいるしねスコープ広げたら頑張んないとなと思ってマジで僕は同期のすごいエンジニアに一生勝たないと思ってるからマジで新卒入社した時にもうすでに技術書に書いてるやつがいたからね書?やばやばいですよねうわー真面目勉強しなかった俺って思ったうーん」
「まあでもね上輪っか見てもまあしょうがないというか何だろう別にね引っ張ってもらえればいいからそれでねそうそう結局ね周り関係ないんですかそうなんですねはいちょっと脱線しましたはいなんかじゅんぺいだけじゃなくて聞いてる方のなんかねまあその普通にプログラムに関係なく今の話有効だと思うんですよ神回神回ということであー本当だよねそう」
「もう本当に市役所から学校まで全部で使える全部で使えるマジでだってねもう学校の勉強でねこの数学何の意味があるのって思ってる人なんかあるかもしれんそうだよ膝を上げるとあるかもね膝を上げるとねあるかもねあるかもね逆に言うといい大学に入ると将来が開けるとそれはでもあるよね結局めっちゃある結局めっちゃあるんでそういうとこになんかやっぱ」
「面白い人集まるしねさあ本当にねっていうので今数学をやってる方頑張ってくださいもう来年かなもう受験終わるかな来年頑張ってくださいそうねこれから試験にプログラミングも始まるらしいからねえ?なんかニュースで言わなかったこれ次回でこれ別にしようじゃあ今回はこんな感じですごく勉強になりましたありがとうございます」
「またいつかまた次回変態目指しますバイバイ」
