2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
リンクをコピー
記事をブックマーク
古川陽介氏(以下、古川):今、具体的にいくつかツールや考え方が出てきました。今聞いているみなさんはおそらく、「じゃあ、どれを使ったらいいんだろう?」とか「何をしたらいいんだろう?」となっているかもしれないですが、倉見さんにお聞きします。ずばり私たちは今何をやっているでしょうかというところで。例えば……。
倉見洋輔氏(以下、倉見):すごく話を誘導されている感もありますが(笑)。
古川:そうですね(笑)。誘導しているんだけど。
例えば、先ほど言っていたHTMLとかそういうのをスナップショットでテストしているとか、もしくは、見た目の部分でテストをしているとか、そういうところでどういうことをやっていますかと聞いてもいいですか?
倉見:宣伝の場をいただきありがとうございます(笑)。特に見た目に関する層のテストではいくつか活用しているツールがあります。
1つはやはり、「Storybook」ですね。これは、与えられた入力に対して与えられたHTMLを再現するためのテストコードとして使っています。
それに組み合わせて、自動テストをするためのツールとして自分で用意しているものがいくつかあります。「Storycap」と呼ばれる、Storybookを自動実行して、スナップショットを吐くためのツール「reg-cli」という、それらを比較してCIで通知をしたり、いわゆる普通のテストの開発ワークフローとして扱うためのツール。
これは僕が作ったというよりは、僕と昔の同僚で作っているツールなんですが、このあたりを組み合わせて、現場に導入しているケースがけっこう多いです。
あと、たまたまなんですが、今入っている現場に関しては、僕が行く前から、先ほどの画像のスナップショットを比較するツールが勝手に入っていて、けっこうありがたかったですね。
古川:そうですね、倉見さんが今、実際にやっている現場では入っていましたね。
倉見:勝手に入っていたのでびっくりした。
古川:勝手に入っていた(笑)。しかも倉見さんが使っているツール「reg-suit」「reg-cli」的なところが入ってくれていた。
倉見:そのあたりを使っています。
古川:出力のところはそれを使っているというところで、通信部分というか、データをモックしなきゃいけないというところは、今は何をやっているんですか?
倉見:一番根っこで使うツールとしては、いくつかはあるんですけど。僕が今やっている現場は、先ほどのスキーマの話で言うとGraphQLが大部分を占めています。GraphQLって、やはり型が最初からついているのがすごく特徴的で、間違ったJSONを書いた場合、TypeScriptが怒ってくれるんですね。
例えば、年齢というものは、数字なのか文字列なのか。1個間違うとけっこう悲しいことになるところも、GraphQLが守ってくれる。先ほどt-wadaさんがおっしゃた静的な型検証と組み合わせて、人間がJSONみたいなものを書いているという感じで作っていますね。一部、GraphQLじゃない通信もあって、そういうところはスキーマがけっこう弱かったりするので、先ほどのMSWみたいなものを使って、そのテストで「こういうリクエストとかを期待しているんだよ」ということをなるべく増やしていく感じで補助的に使っていますね。
古川:スキーマを定義するGraphQLとかって、モックとしてスキーマの例を出すのがMSWという位置付けで合っていますか?
倉見:あぁ、いえいえ。そこはぜんぜん分離しています。GraphQLとMSWは関係なくあって、すべての通信がGraphQLであればいいんですが、一部、GraphQLの手前で行わなきゃいけない通信は、そういう型のガードがなにもないので。
古川:あぁ、そういうことか。
倉見:MSWを使ってテストを書く時に、少なくともフロントエンドはこういう期待をしているんだよということを、なるべくコードでわかるようにしているぐらいの話です。
古川:今の現場が、全部GraphQLというわけじゃないということですね。一部は残って……。
倉見:そうですね、本当に一部、GraphQLじゃないものを使わなきゃいけないシーンが出てきた時に、という感じですね。
古川:その時に、GraphQLにできればいいけど、必ずしもできるものではなかったり。
倉見:そうです。
古川:既存のAPIが残っているとそうなっちゃいますよね。それが基幹的に使われているAPIだとなかなか難しいところもあり、そういうのはMSWとかと併用してやっていこうとしているという。なるほど。
私たちの開発の現場で言うと、だいたいそういう感じになってきている気がしていて。GraphQLを必ずしも入れているわけではありませんが、それに類するスキーマみたいなものを定義した上で、モックも含めて開発をして、わりとフロントエンドはフロントエンドの中だけで完結できるように作っていったり。
かつ、先ほど倉見さんの紹介にもあったとおり、Storybookというツールを使ってコンポーネントをカタログ化していて、そのカタログの内容に差分が出ないようにビジュアルリグレッションテスティングを、Storycapとreg-suit、reg-cliをうまく併用して実施しています。
それに加えて、スナップショットテスティングもおそらくやっているのかなと思います。
古川:ちなみに、今後でいくと、わりと倉見さんや、ここにはまだ来ていませんが、Takepepe(吉井健文氏)さんが、最近アクセシビリティをけっこう推している気がしています。
その部分について、テストの文脈でどうやって担保していこうとか、そういうことはあったりするんですか? これって、どっちに聞いたらいいかな? じゃあ、和田さんに聞いてみましょうか。
和田卓人氏(以下、和田):フロントエンドのテストの今後の話で言うと、ここまでで、再現性があって比較的安定するCIを回すという基盤はできてきたんですが、それでもやはりフロントエンドのテストというのは、基本的には「不安定さ、壊れやすさとの戦い」なんです。
不安定さというのは2つあって、1つは実行基盤による不安定さ。テストコードもプロダクトコードもまったく1行も変えていないのに、成功したり失敗したりするようなテスト。こういうテストを「フレーキーテスト」というんですが、そういうフレーキーさというのを、例えば全体としてどうやって1パーセント未満に抑えるかというような戦いであったり。
あと、もう1つは、プロダクトコードのほうがどんどんどんどん、いい意味で変わっていく、画面がどんどん変わっていくから、既存のテストコードが失敗してしまう。当たり前ですね。テスト対象が変わったから失敗する。
コードは悪くないのにテストが失敗するフレーキーさは、より安定した実行基盤や、タグを付けて別枠で管理するとか、そういったかたちで避ける努力をしていくわけですが、プロダクトがどんどんどんどん変わっていきたい時にテストが壊れちゃうと、「テストが壊れちゃうからこっちの画面を変えるのをやめようかな」って思ったり、「テストが壊れちゃうからそのまま放っておこうかな」って思ったり、そういった良くない力が働きます。
いい意味で変わっていくテスト対象に対して、どうやって影響されにくいテストコードを書いていくかがとても大事で、その観点で非常に今アクセシビリティに光が当たっています。
古川:そうですね。見た目だけテストしようとするとフレーキーになりがちなところを、見た目ではなく、きちんとアクセシビリティ上で意味のあるもののまとまりとして考えていくというところで、やはり、アクセシビリティにテストの光が当たっているんですね。
和田:従来、アクセシビリティはどうしても、大事なことにもかかわらず優先度が下がりがちな要素だったのですが、アクセシビリティの高い画面は、壊れにくいテストが書けるようになってきたんですよね。
そうなると、アクセシビリティが高いということは、つまりテスタビリティも高いということです。テスタビリティは、開発する速さや安定さに強く影響する要素ですから、回り回って、アクセシビリティを高めるということは、チームの開発を速くするし、安定させるというかたちになってきたというのは、とても大きいですね。
古川:アクセシビリティと聞くと、やはりどうしても目があまり見えない方とか、手があまり使えない不自由な方に向けてとか、そういう話になりがちではあるんですが、それだけじゃなく、単純にメンテナンス性能を上げるためにも、HTMLの意味の部分にきちんと沿った内容を組んでいけば、それに対してのフレーキーを防げるわけだから、加えて言うと、そういうところにも効果はある。
障がいを持っている方にも多少の効果はあるというところもあって、一挙両得なんだし、やっていくほうがいいよねという流れが今来ているのかなと思っていて、個人的にそれは、すごくいい流れだなと思っているんですよね。
古川:それはそれとして、今、倉見さんがやっている案件の中では、そういうこともやっているんでしょうか?
倉見:昨日、Storybookを自動で動かすテストをちょっとみんなで書いてみようぜと話をしていた時に、自動で動かすというところの技術要素に、いわゆるアクセシビリティに関するもの、「Aria」とかそういうやつを使おうとしていて。
それをやったメンバーはあまりそういう技術のことを知らなかったんですね。その人から「それを学んでみたいと思ったという気づきがありました」みたいなフィードバックをもらいました。
逆なんですよ。テスタビリティから攻めていったら、フロントエンドエンジニアがアクセシビリティを勉強する機会になったといういい話がちょっとあったので、紹介しておきます。
古川:そうですね。午前中のセッションの鉄平さん(佐藤鉄平氏)の話もすごくいい話だなと思いました。会社のビジョン、ミッションから、会社の哲学である「チームワークを大事にしよう」というところを踏まえて、そこからアクセシビリティという非機能要件に対してアプローチをしていった。そういうことがわかってくる。
それはそれですごく大上段からのアプローチで、メチャメチャいいアプローチだなと思う一方で、やはり戦い方は1つじゃないよなと思っていて。アクセシビリティを担保するためのもう1つのアプローチは、「開発の生産性を上げたり、そういうところにもすごくいい影響があるんですよ」というところから、ボトムアップに上げていくという活動。これができるようになると、結果、トータルも良くなってくるし、それが2種類の意味で良い影響があるなと思ってはいるんですよね。
だから、ボトムアップ、トップダウン、両方のアプローチできちんと、アクセシビリティという非機能要件だけではなく、開発の生産性を上げるというところですごくいい事例が作れていっているなと僕は感じていますね。リクルートの中ではというところではありますけど。
ありがとうございます。ちょっと時間がね(笑)、あと20秒になってしまって。もっと話したかったんですけど、ここでいったん切ろうかなと思います。
僕としては非常に、前半とはまたぜんぜん違うおもしろいトークができたなと思っています。引き続き、こういうかたちでまた話せればなと思います。
以上でいったんこの「テスト最前線」のセッションは終了いたします。どうもありがとうございました。
和田:ありがとうございました。
倉見:ありがとうございました。
関連タグ:
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.12
今までとこれからで、エンジニアに求められる「スキル」の違い AI時代のエンジニアの未来と生存戦略のカギとは
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05