Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
LocalStackを利用した単体テストのすすめ / First Steps in Unit ...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
osamu.arita
September 07, 2022
1.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
LocalStackを利用した単体テストのすすめ / First Steps in Unit Testing using LocalStack
osamu.arita
September 07, 2022
More Decks by osamu.arita
See All by osamu.arita
Organize your chaotic DynamoDB (with Node.js) / Organize your chaotic DynamoDB with Nodejs
osamu_arita
1
920
Flutter初心者が アニメーションを試してみる/try-flutter-animation
osamu_arita
2
2.2k
Featured
See All Featured
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
190
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Git: the NoSQL Database
bkeepers
PRO
432
67k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Facilitating Awesome Meetings
lara
57
7.1k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Building an army of robots
kneath
306
46k
The browser strikes back
jonoalderson
0
1.7k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
320
Evolving SEO for Evolving Search Engines
ryanjones
0
280
Transcript
LocalStackを利用した 単体テストのすすめ osamu.arita - LINE Fukuoka 夏休みの自由研究発表会 - 2022/09/06
ABOUT ME • LINE Fukuokaのエンジニア ◦ 「LINE SMART CITY GovTech
プログラム」の開発サポート全般 • 社会人歴16年 / 社歴2年目 ◦ AWS / Firebase / Ruby on Rails / PHP(Laravel、etc..) ◦ iOS(swift)/ Android(Kotlin / Java)/ Flutter(Dart) • スプラトゥーン3 予約しました • slack - #z_osamu osamu_arita osamu.arita
やりたいこと • AWSサーバレス構成のプロジェクトに単体テスト追加 • 開発メンバーによる単体テストの書き方のゆらぎを抑えたい エンジニアAさん ソースコード エンジニアBさん deploy (AWS
CloudFormation, AWS SAM) AWSサーバレス構成 ・Frontend ・Backend 単体テスト
技術スタック • Frontend ◦ Vue.js(TypeScript) ◦ S3 + CloudFront •
Backend ◦ Node.js(TypeScript) ◦ API Gateway + Lambda + DynamoDB • Infrastructure as Code(IaC) ◦ AWS CloudFormation, AWS SAM
技術スタック • Frontend ◦ Vue.js(TypeScript) ◦ S3 + CloudFront •
Backend ◦ Node.js(TypeScript) ◦ API Gateway + Lambda + DynamoDB • Infrastructure as Code(IaC) ◦ AWS CloudFormation, AWS SAM Node.js EOL(End Of Life) v12:2022-04-30 v14:2023-04-30 ★来年サポート切れ v16:2024-04-30 ★推奨 2022/11/14:LambdaランタイムNode.js 12 バージョンが廃止
テスト対象 • Frontend ◦ Vue.js(TypeScript) ◦ S3 + CloudFront •
Backend ◦ Node.js(TypeScript) ◦ API Gateway + Lambda + DynamoDB • Infrastructure as Code(IaC) ◦ AWS CloudFormation, AWS SAM デプロイのテスト API、DB操作、 バッチ処理のテスト コンポーネントや API通信のテスト
テスト対象 • Frontend ◦ Vue.js(TypeScript) ◦ S3 + CloudFront •
Backend ◦ Node.js(TypeScript) ◦ API Gateway + Lambda + DynamoDB • Infrastructure as Code(IaC) ◦ AWS CloudFormation, AWS SAM デプロイのテスト API、DB操作、 バッチ処理のテスト コンポーネントや API通信のテスト 複数メンバーで開発していると、 割とAPI周りでバグが起きることが多かった → Backendの単体テストを強化したい
テスト対象(Backend)を深堀り • ソースコード ◦ Lambda - Node.js(TypeScript) ▪ Hander
▪ Controllers • AWSリソース ◦ API Gateway ◦ Lambda ◦ DynamoDB
テスト対象(Backend)を深堀り • ソースコード ◦ Lambda - Node.js(TypeScript) ▪ Hander
▪ Controllers • AWSリソース ◦ API Gateway ◦ Lambda ◦ DynamoDB 単体テストする際、外部要因による依存を少なくしたい ・選択肢 ・Mockを利用 ・コンテナを利用
• メリット ◦ AWSリソースをMockとして利用可能 • デメリット ◦ aws-sdk-mock、JestのMockなど選択肢あり ▪ https://www.npmjs.com/package/aws-sdk-mock
▪ https://archive.jestjs.io/docs/ja/23.x/mock-functions ▪ https://jestjs.io/ja/docs/dynamodb ◦ 開発メンバーによる書き方のゆらぎが発生する Mockを利用する場合
• メリット ◦ AWSリソースをコンテナとして利用可能 • デメリット ◦ 単体テストに、コンテナ起動が伴う コンテナを利用する場合
テストピラミッド 引用: https://developer.android.com/training/testing/fundamentals https://testing.googleblog.com/2010/12/test-sizes.html ・Small Tests ローカルユニットテスト実行 Controllersや関連メソッドのテスト
不安定、低速、高コスト 安定、高速、低コスト ・Large Tests 実際にAWSデプロイ してテスト実行 Test Sizes Medium Testsとして考えれば違和感なし ・Medium Tests コンテナを利用したテスト実行 (dynamodb-localやLocalStack)
LocalStackとは • https://github.com/localstack/localstack • AWSの各リソースをコンテナ上でシミュレートしたもの • OSSとして提供 • 2022/7/25:バージョン1.0に到達、正式リリース ◦
https://localstack.cloud/blog/2022-07-13-announcing-localstack-v1-general-availability
コンテナサービス比較 一通りのAWSサービスを網羅
LocalStackを利用した単体テスト A. CloudFormationのStackをLocalStackにデプロイ deploy (AWS CloudFormation, AWS SAM) LocalStack
単体テスト 必要なStackだけデプロイ 単体テストから利用 複数Stackを持つプロジェクト
LocalStackを利用した単体テスト A. CloudFormationのStackをLocalStackにデプロイ deploy (AWS CloudFormation, AWS SAM) LocalStack
単体テスト 必要なStackだけデプロイ 単体テストから利用 複数Stackを持つプロジェクト ・メリット Mockを作成せずともAWSリソースにアクセス可能 ・デメリット DynamoDBのテーブルなど、Stack間でリソース 依存が存在する場合、全デプロイしないといけない
LocalStackを利用した単体テスト B. 関連リソースのみLocalStackにデプロイ deploy (AWS CloudFormation, AWS SAM) LocalStack
単体テスト 関連リソースだけデプロイ 単体テストから利用 複数Stackを持つプロジェクト
LocalStackを利用した単体テスト B. 関連リソースのみLocalStackにデプロイ deploy (AWS CloudFormation, AWS SAM) LocalStack
単体テスト 関連リソースだけデプロイ 単体テストから利用 複数Stackを持つプロジェクト ・メリット Mockを作成せずともAWSリソースにアクセス可能 ・デメリット 関連リソースだけ抜粋して先にデプロイする必要があ る
まとめ • LocalStackを利用することで、単体テストのAWSリソースアクセスは代替でき そう • プロジェクトの構成によっては、Stack単位、関連リソース単位で事前デプ ロイするかは要検討 • おまけ ◦
2022/11/14:LambdaランタイムNode.js 12バージョンが廃止。 Node.js16以降を利用しましょう!
Thank You ! ご清聴ありがとうございました!