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
880
Flutter初心者が アニメーションを試してみる/try-flutter-animation
osamu_arita
2
2k
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1031
460k
Git: the NoSQL Database
bkeepers
PRO
431
65k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Fireside Chat
paigeccino
37
3.5k
How to Ace a Technical Interview
jacobian
278
23k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
GraphQLとの向き合い方2022年版
quramy
49
14k
Facilitating Awesome Meetings
lara
54
6.5k
The Invisible Side of Design
smashingmag
301
51k
A better future with KSS
kneath
238
17k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
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 ! ご清聴ありがとうございました!