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
420
Amazon Bedrock GenUハンズオン座学資料 #1 GenU環境で生成AIを体験してみよう
tsukuboshi
0
890
AWSエンジニアに捧ぐLangChainの歩き方
tsukuboshi
4
1.5k
世界の中心でApp Runnerを叫ぶ ~Aurora DSQLを添えて~
tsukuboshi
0
400
初めての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
[kickflow]20250319_少人数チームでのAutify活用
otouhujej
0
130
Foundation Model × VisionKit で実現するローカル OCR
sansantech
PRO
1
400
Amazon Q Developerを活用したアーキテクチャのリファクタリング
k1nakayama
2
220
[OCI Technical Deep Dive] OCIで生成AIを活用するためのソリューション解説(2025年8月5日開催)
oracle4engineer
PRO
0
110
薬屋のひとりごとにみるトラブルシューティング
tomokusaba
0
380
MCPサーバーを活用したAWSコスト管理
arie0703
0
100
AI時代の大規模データ活用とセキュリティ戦略
ken5scal
0
160
ユーザー課題を愛し抜く――AI時代のPdM価値
kakehashi
PRO
1
130
サイボウズフロントエンドの横断活動から考える AI時代にできること
mugi_uno
0
130
テストを実行してSorbetのsigを書こう!
sansantech
PRO
1
130
Mackerel in さくらのクラウド
cubicdaiya
1
120
AIエージェントを現場で使う / 2025.08.07 著者陣に聞く!現場で活用するためのAIエージェント実践入門(Findyランチセッション)
smiyawaki0820
7
1.2k
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Art, The Web, and Tiny UX
lynnandtonic
301
21k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Faster Mobile Websites
deanohume
309
31k
Designing for humans not robots
tammielis
253
25k
Documentation Writing (for coders)
carmenintech
73
5k
We Have a Design System, Now What?
morganepeng
53
7.7k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Visualization
eitanlees
146
16k
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 バグをノーカンしないために テストコードを作りましょう!!!
護りたい。その想いを護る。 本資料には弊社の経営にかかわる重要な情報が含まれております。 これらの情報の第三者への開⽰または提供は、 弊社、そのパートナー、及びそれらの関連会社等に多⼤な損失をもたらす可能性があります。 本資料のお取扱いには、⼗分にご注意いただきますようお願い申し上げます。