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
140
恐怖!テストコードなき夜
つくぼし
July 27, 2025
Tweet
Share
More Decks by つくぼし
See All by つくぼし
Mastraに入門してみた ~AWS CDKを添えて~
tsukuboshi
0
930
Amazon Bedrock GenUハンズオン座学資料 #2 GenU環境でRAGを体験してみよう
tsukuboshi
0
460
Amazon Bedrock GenUハンズオン座学資料 #1 GenU環境で生成AIを体験してみよう
tsukuboshi
0
950
AWSエンジニアに捧ぐLangChainの歩き方
tsukuboshi
5
1.6k
世界の中心でApp Runnerを叫ぶ ~Aurora DSQLを添えて~
tsukuboshi
0
430
初めてのGPTs ~ネコ派を〇〇派に変える技術~
tsukuboshi
0
710
Amplify Gen 2ではじめる 生成AIアプリ開発入門
tsukuboshi
1
1.5k
AWSで構築するパターン別RAG構成解説
tsukuboshi
5
7k
AWS構成図から CloudFormationとパラメータシートを 自動生成するシステムを作ってみた
tsukuboshi
0
10k
Other Decks in Technology
See All in Technology
ヘブンバーンズレッドにおける、世界観を活かしたミニゲーム企画の作り方
gree_tech
PRO
0
570
生成AI時代のデータ基盤
shibuiwilliam
6
3.7k
BPaaSにおける人と協働する前提のAIエージェント-AWS登壇資料
kentarofujii
0
120
250905 大吉祥寺.pm 2025 前夜祭 「プログラミングに出会って20年、『今』が1番楽しい」
msykd
PRO
1
500
2025年にHCP Vaultを学び直して見えた景色 / Lessons and New Perspectives from Relearning HCP Vault in 2025
aeonpeople
0
200
2025年になってもまだMySQLが好き
yoku0825
8
4.2k
AI エージェントとはそもそも何か? - 技術背景から Amazon Bedrock AgentCore での実装まで- / AI Agent Unicorn Day 2025
hariby
4
1.2k
落ちる 落ちるよ サーバーは落ちる
suehiromasatoshi
0
140
実践!カスタムインストラクション&スラッシュコマンド
puku0x
0
140
なぜSaaSがMCPサーバーをサービス提供するのか?
sansantech
PRO
8
2.5k
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
9
4.4k
機械学習を扱うプラットフォーム開発と運用事例
lycorptech_jp
PRO
0
190
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
45
7.6k
Into the Great Unknown - MozCon
thekraken
40
2k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Typedesign – Prime Four
hannesfritz
42
2.8k
Music & Morning Musume
bryan
46
6.8k
KATA
mclloyd
32
14k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Art, The Web, and Tiny UX
lynnandtonic
302
21k
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 バグをノーカンしないために テストコードを作りましょう!!!
護りたい。その想いを護る。 本資料には弊社の経営にかかわる重要な情報が含まれております。 これらの情報の第三者への開⽰または提供は、 弊社、そのパートナー、及びそれらの関連会社等に多⼤な損失をもたらす可能性があります。 本資料のお取扱いには、⼗分にご注意いただきますようお願い申し上げます。