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
LocalStackを利用した単体テストのすすめ / First Steps in Unit ...
Search
osamu.arita
September 07, 2022
1
1.1k
LocalStackを利用した単体テストのすすめ / First Steps in Unit Testing using LocalStack
osamu.arita
September 07, 2022
Tweet
Share
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
860
Flutter初心者が アニメーションを試してみる/try-flutter-animation
osamu_arita
2
2k
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.5k
For a Future-Friendly Web
brad_frost
176
9.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
580
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Why Our Code Smells
bkeepers
PRO
335
57k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
3
360
How to Think Like a Performance Engineer
csswizardry
22
1.3k
Git: the NoSQL Database
bkeepers
PRO
427
64k
How GitHub (no longer) Works
holman
312
140k
Side Projects
sachag
452
42k
Mobile First: as difficult as doing things right
swwweet
222
9k
A Philosophy of Restraint
colly
203
16k
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 ! ご清聴ありがとうございました!