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
150
恐怖!テストコードなき夜
つくぼし
July 27, 2025
Tweet
Share
More Decks by つくぼし
See All by つくぼし
Mastraに入門してみた ~AWS CDKを添えて~
tsukuboshi
0
980
Amazon Bedrock GenUハンズオン座学資料 #2 GenU環境でRAGを体験してみよう
tsukuboshi
0
510
Amazon Bedrock GenUハンズオン座学資料 #1 GenU環境で生成AIを体験してみよう
tsukuboshi
0
1k
AWSエンジニアに捧ぐLangChainの歩き方
tsukuboshi
5
1.6k
世界の中心でApp Runnerを叫ぶ ~Aurora DSQLを添えて~
tsukuboshi
0
460
初めてのGPTs ~ネコ派を〇〇派に変える技術~
tsukuboshi
0
730
Amplify Gen 2ではじめる 生成AIアプリ開発入門
tsukuboshi
1
1.5k
AWSで構築するパターン別RAG構成解説
tsukuboshi
5
7.3k
AWS構成図から CloudFormationとパラメータシートを 自動生成するシステムを作ってみた
tsukuboshi
0
10k
Other Decks in Technology
See All in Technology
about #74462 go/token#FileSet
tomtwinkle
1
270
VCC 2025 Write-up
bata_24
0
150
タスクって今どうなってるの?3.14の新機能 asyncio ps と pstree でasyncioのデバッグを (PyCon JP 2025)
jrfk
1
210
AIが書いたコードをAIが検証する!自律的なモバイルアプリ開発の実現
henteko
1
240
それでも私はContextに値を詰めたい | Go Conference 2025 / go conference 2025 fill context
budougumi0617
4
1.1k
Go Conference 2025: GoのinterfaceとGenericsの内部構造と進化 / Go type system internals
ryokotmng
3
590
非同期処理実行基盤 Delayed脱出 → Solid Queue完全移行への旅路。
srockstyle
3
1.6k
Optuna DashboardにおけるPLaMo2連携機能の紹介 / PFN LLM セミナー
pfn
PRO
1
820
OCI Network Firewall 概要
oracle4engineer
PRO
1
7.7k
自作LLM Native GORM Pluginで実現する AI Agentバックテスト基盤構築
po3rin
2
230
pprof vs runtime/trace (FlightRecorder)
task4233
0
150
AI Agentと MCP Serverで実現する iOSアプリの 自動テスト作成の効率化
spiderplus_cb
0
350
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
Balancing Empowerment & Direction
lara
4
670
Git: the NoSQL Database
bkeepers
PRO
431
66k
What's in a price? How to price your products and services
michaelherold
246
12k
The Pragmatic Product Professional
lauravandoore
36
6.9k
For a Future-Friendly Web
brad_frost
180
9.9k
Site-Speed That Sticks
csswizardry
11
870
Building a Scalable Design System with Sketch
lauravandoore
462
33k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
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 バグをノーカンしないために テストコードを作りましょう!!!
護りたい。その想いを護る。 本資料には弊社の経営にかかわる重要な情報が含まれております。 これらの情報の第三者への開⽰または提供は、 弊社、そのパートナー、及びそれらの関連会社等に多⼤な損失をもたらす可能性があります。 本資料のお取扱いには、⼗分にご注意いただきますようお願い申し上げます。