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
つくぼし
July 27, 2025
Technology
2
130
恐怖!テストコードなき夜
つくぼし
July 27, 2025
Tweet
Share
More Decks by つくぼし
See All by つくぼし
Mastraに入門してみた ~AWS CDKを添えて~
tsukuboshi
0
820
Amazon Bedrock GenUハンズオン座学資料 #2 GenU環境でRAGを体験してみよう
tsukuboshi
0
430
Amazon Bedrock GenUハンズオン座学資料 #1 GenU環境で生成AIを体験してみよう
tsukuboshi
0
890
AWSエンジニアに捧ぐLangChainの歩き方
tsukuboshi
4
1.5k
世界の中心でApp Runnerを叫ぶ ~Aurora DSQLを添えて~
tsukuboshi
0
410
初めてのGPTs ~ネコ派を〇〇派に変える技術~
tsukuboshi
0
690
Amplify Gen 2ではじめる 生成AIアプリ開発入門
tsukuboshi
1
1.4k
AWSで構築するパターン別RAG構成解説
tsukuboshi
5
6.9k
AWS構成図から CloudFormationとパラメータシートを 自動生成するシステムを作ってみた
tsukuboshi
0
10k
Other Decks in Technology
See All in Technology
AIは変更差分からユニットテスト_結合テスト_システムテストでテストすべきことが出せるのか?
mineo_matsuya
3
950
リモートワークで心掛けていること 〜AI活用編〜
naoki85
0
180
いま、あらためて考えてみるアカウント管理 with IaC / Account management with IaC
kohbis
1
120
React Server ComponentsでAPI不要の開発体験
polidog
PRO
0
330
Nx × AI によるモノレポ活用 〜コードジェネレーター編〜
puku0x
0
760
Cloud WANの基礎から応用~少しだけDeep Dive~
masakiokuda
3
110
GISエンジニアよ 現場に行け!
sudataka
1
140
MCPサーバーを活用したAWSコスト管理
arie0703
0
100
Telemetry APIから学ぶGoogle Cloud ObservabilityとOpenTelemetryの現在 / getting-started-telemetry-api-with-google-cloud
k6s4i53rx
0
160
Google Cloud で学ぶデータエンジニアリング入門 2025年版 #GoogleCloudNext / 20250805
kazaneya
PRO
24
5.9k
AIのグローバルトレンド 2025 / ai global trend 2025
kyonmm
PRO
1
160
マルチプロダクト×マルチテナントを支えるモジュラモノリスを中心としたアソビューのアーキテクチャ
disc99
1
630
Featured
See All Featured
A designer walks into a library…
pauljervisheath
207
24k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Faster Mobile Websites
deanohume
309
31k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Balancing Empowerment & Direction
lara
2
570
Testing 201, or: Great Expectations
jmmastey
45
7.6k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Music & Morning Musume
bryan
46
6.7k
Bash Introduction
62gerente
614
210k
Automating Front-end Workflow
addyosmani
1370
200k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Transcript
護りたい。その想いを護る。 🄫ZEST Inc. | Confidential 恐怖!テストコードなき夜
🄫ZEST Inc. | Confidential 2 ⾃⼰紹介 • ニックネーム ◦ つくぼし
• ポジション ◦ 現バックエンドエンジニア ◦ 元クラウドエンジニア • 最近よく触る技術 ◦ TypeScript/Fastify/Prisma/ Claude Code • SNS/ブログ ◦ X(@tsukuboshi0755) ◦ Zenn(つくぼし)
🄫ZEST Inc. | Confidential 3 ⽬次 1. テストコードなき夜 2. なぜテストコードは必要なのか?
3. 初⼼者がテストコードを考える際の注意点
🄫ZEST Inc. | Confidential 4 対象者 • 個⼈利⽤や検証でアプリ開発した事はあるが、初めて本番環境で アプリ開発に取り組むエンジニアの⽅ •
今までインフラのキャリアを歩んでいて、アプリの世界をあまり 知らないエンジニアの⽅ • テストコード?なにそれ美味しいの?というエンジニアの⽅
🄫ZEST Inc. | Confidential 護りたい。その想いを護る。 5 テストコードなき夜
🄫ZEST Inc. | Confidential 6 かつて新⽶開発エンジニアだった私はこんな案件を受けてしまった • 外部のログ保管SaaSのAPIをLambdaで叩いてS3に出⼒する案件 • 当時テストコード作成の⼯数を⾒積もりに⼊れてなかった→ここ⼤事!!!
• ⾒積もりになかったためテストコード作成まで⼿が回らず本番切替を迎えてしまった 外部 API
🄫ZEST Inc. | Confidential 7 最初の本番切り替え • 最初の本番環境切り替えでは、1度⽬は上⼿く動かなかったもののここは事前にお客様と握っ ていたため旧システムに切り戻しでき、2回⽬で無事新システムに切り替えが完了 •
切り替え後は問題なく新システムが動いていたので、テストコードなしでも問題ないじゃ ん!と勘違いし放置...
🄫ZEST Inc. | Confidential 8 その後⼤問題が起こる • 本番環境に対して⼩さい機能追加を繰り返す中で、ある時テストを実施して いたにも関わらずデプロイ後に新システムが突然⽌まってしまった!!! •
想定外の停⽌だったので⼤慌て、奇跡的に切り戻しができたものの復旧中は ほぼ綱渡りでした
🄫ZEST Inc. | Confidential 9 問題が起きた原因 • Lambdaのtmpに保存した⼀時ログを削除する関数があったが、機能改善時に間違えてコメ ントアウトしてしまい、本番環境のログ流量に耐えられなかったのが原因だった •
テストコードを実装して事前に関数単位で動作確認していればこの障害は防げたので⼤反省 (後⽇きっちりテストコードを実装しました)
🄫ZEST Inc. | Confidential 護りたい。その想いを護る。 10 なぜテストコードは必要なのか?
🄫ZEST Inc. | Confidential 14 3パターンで⽐較してみる 1. テスト仕様書もテストコードもないシステム 2. テスト仕様書があるがテストコードがないシステム
3. テストコードがあるシステム
🄫ZEST Inc. | Confidential 15 テスト仕様書もテストコードもないシステムの場合 • 最初にリリースした時だけでなく、その後機能追加等で何度もリリー スされる度に正常に動かなくなるリスクをはらむため安全性が低い •
「少しだけ...」と思ってアプリのコードをいじったら、今まで動いて いた機能が突然停⽌する可能性も全然ありえる
🄫ZEST Inc. | Confidential 16 テスト仕様書があるがテストコードがないシステムの場合 • テスト仕様書を実⾏すればアプリケーションのバグは少なくできるが、今度 はリリースの度に必ずテスト項⽬を⼿動で実⾏する必要がある •
原則アプリは何度もリリースを繰り返すので、⽐例してテスト仕様書を毎回 ⼿動で実⾏すると⼿間がかかる
🄫ZEST Inc. | Confidential 17 テストコードがあるシステムの場合 • テストコードを⾃動化し実⾏する事で事前にアプリケーションのバグを把握できる のでリリースの安全性と⼿間のコストパフォーマンスが⼀番⾼くなりやすい •
どうしてもテストコードに落とし込めない部分があるなら、代わりにテスト仕様書 に落とし込んで組み合わせる事も可能
🄫ZEST Inc. | Confidential 18 インフラでテストコードがあまり浸透していない気がする個⼈的意⾒ • インフラ(IaC)でテストコードを作るパターンは、全くないわけではないが⾃分が知る限り少ない気がしている • 個⼈的な意⾒ですが、クラウドだと責任共有モデルによって⼤半のサービスの動作が保証されている事が、ある意味テ
ストコードのコスパを感じにくくさせているのかも • インフラの世界しか知らない⼈がアプリの世界に踏み込むと、テストコードの重要性が全然違うので⾯⾷らわないよう 注意! ECSのオートスケール機能が突然動かなくなったら、 インフラエンジニアよりもAWSの責任になりやすい →テストコードを作る意味がそこまでないかも? ECSのコンテナのコードが突然動かなくなったら、AWS よりもソフトウェアエンジニアの責任になりやすい →テストコードを作る意味が⼤きい
🄫ZEST Inc. | Confidential 護りたい。その想いを護る。 19 初⼼者がテストコードを考える際の注意点
🄫ZEST Inc. | Confidential 20 個⼈的に考えるテストコードの3原則 1. 慣れない内はテストコードの作業を別の⼯数で⾒積もる 2. テストコードを作る前にテストケースを洗い出す
3. テストコードを⾃動実⾏する設定ファイルを作成する
🄫ZEST Inc. | Confidential 21 1. 慣れない内はテストコードの作業を別の⼯数で⾒積る • 本番環境で稼働するアプリケーションを開発する際は、それがどんなに簡易的なコードで あってもテストコードは必須である事を関係者全員で握るべき
• ⼯数⾒積もりを作る際に、慣れない内は本体コードとテストコードの開発を別の作業として 分離し明記しておいた⽅が、後で認識がズレにくくなる • 今ならAI駆動開発のおかげで、テストコード開発の⼯数が爆増する状況はそんなにないはず テストコードって 必要ですか? 今後起こりうるバグを ノーカンにするよ?
🄫ZEST Inc. | Confidential 22 2. テストコードを作る前にテストケースを洗い出す • 何となくテストコードを作ってもバグは防げない、必ずテストケースを洗い出して機能要件を網羅しているか確認する •
例:「特定の外部APIを叩いて出⼒されたデータをファイルとして保存したい」というアプリのテストケース ◦ 正しいAPIキーを⽤いて外部APIを叩くと、保存されたファイルが正しいファイルパスで保存される事(正常系) ◦ 正しいAPIキーを⽤いて外部APIを叩くと、保存されたファイルの中⾝が正しいデータ形式になっている事(正常系) ◦ 間違ったAPIキーを⽤いて外部APIを叩くと、ファイルは保存されずエラーコードが返却される事(異常系)
🄫ZEST Inc. | Confidential 23 3. テストコードを⾃動実⾏する設定ファイルを作成する • テストコードだけ作っても放置されたら意味がないので、⾃動実⾏する設定ファイル(ワークフローファ イル)も合わせて作成するべき
• 可能であればGitHub Actions⽤のワークフローファイルを作成し、リモートで⾃動テストするのが推奨 • GitHub Actions等のリモートサービスがどうしても使えない場合は、pre-commit⽤のワークフローファ イルを作成しでローカルでの⾃動テストを検討するのもあり(ただCIと⾔えるかは微妙なので注意)
🄫ZEST Inc. | Confidential 24 バグをノーカンしないために テストコードを作りましょう!!!
護りたい。その想いを護る。 本資料には弊社の経営にかかわる重要な情報が含まれております。 これらの情報の第三者への開⽰または提供は、 弊社、そのパートナー、及びそれらの関連会社等に多⼤な損失をもたらす可能性があります。 本資料のお取扱いには、⼗分にご注意いただきますようお願い申し上げます。