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
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Music & Morning Musume
bryan
46
6.6k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Typedesign – Prime Four
hannesfritz
42
2.7k
Balancing Empowerment & Direction
lara
1
430
Facilitating Awesome Meetings
lara
54
6.4k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.7k
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
For a Future-Friendly Web
brad_frost
179
9.8k
GitHub's CSS Performance
jonrohan
1031
460k
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 ! ご清聴ありがとうございました!