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
96
恐怖!テストコードなき夜
つくぼし
July 27, 2025
Tweet
Share
More Decks by つくぼし
See All by つくぼし
Mastraに入門してみた ~AWS CDKを添えて~
tsukuboshi
0
760
Amazon Bedrock GenUハンズオン座学資料 #2 GenU環境でRAGを体験してみよう
tsukuboshi
0
380
Amazon Bedrock GenUハンズオン座学資料 #1 GenU環境で生成AIを体験してみよう
tsukuboshi
0
830
AWSエンジニアに捧ぐLangChainの歩き方
tsukuboshi
4
1.4k
世界の中心でApp Runnerを叫ぶ ~Aurora DSQLを添えて~
tsukuboshi
0
390
初めてのGPTs ~ネコ派を〇〇派に変える技術~
tsukuboshi
0
660
Amplify Gen 2ではじめる 生成AIアプリ開発入門
tsukuboshi
1
1.4k
AWSで構築するパターン別RAG構成解説
tsukuboshi
5
6.7k
AWS構成図から CloudFormationとパラメータシートを 自動生成するシステムを作ってみた
tsukuboshi
0
10k
Other Decks in Technology
See All in Technology
Expertise as a Service via MCP
yodakeisuke
1
160
LLMでAI-OCR、実際どうなの? / llm_ai_ocr_layerx_bet_ai_day_lt
sbrf248
0
120
【CEDEC2025】大規模言語モデルを活用したゲーム内会話パートのスクリプト作成支援への取り組み
cygames
PRO
1
320
M365アカウント侵害時の初動対応
lhazy
7
5.1k
今日からあなたもGeminiを好きになる
subaruhello
1
660
CSPヘッダー導入で実現するWebサイトの多層防御:今すぐ試せる設定例と運用知見
llamakko
1
270
AIを使っていい感じにE2Eテストを書けるようになるまで / Trying to Write Good E2E Tests with AI
katawara
3
1.9k
ファインディにおける Dataform ブランチ戦略
hiracky16
0
210
Webの技術とガジェットで那須の子ども達にワクワクを! / IoTLT_20250720
you
PRO
0
130
クマ×共生 HACKATHON - 熊対策を『特別な行動」から「生活の一部」に -
pharaohkj
0
190
会社もクラウドも違うけど 通じたコスト削減テクニック/Cost optimization strategies effective regardless of company or cloud provider
aeonpeople
2
370
増え続ける脆弱性に立ち向かう: 事前対策と優先度づけによる 持続可能な脆弱性管理 / Confronting the Rise of Vulnerabilities: Sustainable Management Through Proactive Measures and Prioritization
nttcom
1
210
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
Art, The Web, and Tiny UX
lynnandtonic
301
21k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Statistics for Hackers
jakevdp
799
220k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
390
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
The Language of Interfaces
destraynor
158
25k
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 バグをノーカンしないために テストコードを作りましょう!!!
護りたい。その想いを護る。 本資料には弊社の経営にかかわる重要な情報が含まれております。 これらの情報の第三者への開⽰または提供は、 弊社、そのパートナー、及びそれらの関連会社等に多⼤な損失をもたらす可能性があります。 本資料のお取扱いには、⼗分にご注意いただきますようお願い申し上げます。