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
Lambda(Python)の リファクタリングが好きなんです
Search
komakichi
April 21, 2025
Programming
5
360
Lambda(Python)の リファクタリングが好きなんです
Event: Toranomon Tech Hub 第三回
Event URL:
https://toranomon-tech-hub.connpass.com/event/344781/
komakichi
April 21, 2025
Tweet
Share
More Decks by komakichi
See All by komakichi
JAWS-UG千葉支部 x 彩の国埼玉支部 LTバトル形式勉強会 〜目黒より愛をこめて〜
komakichi
3
61
JAWS DAYS 2025 re_Cheers: WEB
komakichi
0
200
JAWS Days 2025のインフラ
komakichi
1
540
Amazon Bedrock + AWS Chatbot ノーコードでAIボット作成
komakichi
0
180
マルチエージェントで AWSサービスと会話がしたい
komakichi
1
68
Amazon BedrockとIoTで 実家情シスを卒業する
komakichi
3
140
もう実家に手頃な情シス娘は不要!Bedrockでもう一人の娘を作る
komakichi
2
300
AWS SAMとX-Rayで Lambdaの遅延を可視化
komakichi
0
82
CloudWatch Logs Insightsで 定期業務をスマートに
komakichi
1
680
Other Decks in Programming
See All in Programming
How Android Uses Data Structures Behind The Scenes
l2hyunwoo
0
480
Oracle Database Technology Night 92 Database Connection control FAN-AC
oracle4engineer
PRO
1
470
250830 IaCの選定~AWS SAMのLambdaをECSに乗り換えたときの備忘録~
east_takumi
0
400
JSONataを使ってみよう Step Functionsが楽しくなる実践テクニック #devio2025
dafujii
1
630
楽して成果を出すためのセルフリソース管理
clipnote
0
180
私の後悔をAWS DMSで解決した話
hiramax
4
210
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
410
そのAPI、誰のため? Androidライブラリ設計における利用者目線の実践テクニック
mkeeda
2
1.8k
Cache Me If You Can
ryunen344
2
3k
個人軟體時代
ethanhuang13
0
330
Updates on MLS on Ruby (and maybe more)
sylph01
1
180
奥深くて厄介な「改行」と仲良くなる20分
oguemon
1
560
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.4k
We Have a Design System, Now What?
morganepeng
53
7.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
920
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Building an army of robots
kneath
306
46k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
850
What's in a price? How to price your products and services
michaelherold
246
12k
Transcript
Lambda(Python)の リファクタリングが好きなんです Toranomon Tech Hub 第三回 Kumi Komaki 2025/04/21
WHO AM I ? X:@komakichidev 6 所属:某SIer (ご近所ですf 6 職種:
Webエンジニア(バックエンドメインf 6 最近ハマってること: テトリス。むずい。 小巻 玖美(こまきち) 実は AWS と Figma が一番好きなサービス このスライドもFigmaの機能で作成
早速ですが…
早速ですが… バックエンド開発しているよ!!! という方
Lambdaを使って絶賛開発中だぞ!! という方
AWS Lambdaのリファクタリングについて ver. Python 今回コードベースの話、というよりはマインド的な話の方が多めです 今日のお話
AWS Lambdaのリファクタリングについて ver. Python 今日のお話 結論 日々の開発の中で、Lambdaをリファクタリングしましょう 今回コードベースの話、というよりはマインド的な話の方が多めです
ざっくりアジェンダ GC なぜリファクタリングをした方がいいの0 2C AWS Lambda のリファクタリングの具体 C リファクタリングしましょ( @C
まとめ 「あーリファクタリングってやっぱり大事だな」って思ってもらえたら嬉しい
あるプロジェクトの課題 (アーキテクチャにはLambdaがあると仮定) この機能開発して欲しい。どのくらいでできますか? え、そんなにかかるんですか? xxヶ月かかってしまいそうです 既存のコードの改修が辛くて、 単純な機能追加でも多くかかってしまう
リファクタリングはいつやる? 来たときよりもきれいにして終わる 「リファクタリングしなきゃ」とは思っており、一部やっている部分もあるが 負債が多く取り除けていない状態 → リファクタリングは、いつやるのが適切か? A. 駄目なコードを見かけるたびに、少しずつ改善していく 機能の追加やバグ修正の最中にリファクタリングをする
どうやって顧客に説明すべきか? “管理者や顧客によっては、コードの健康状態 が生産性にどれだけ影響を与えるのか、技術的 に認識できないこともあるでしょう。 そうしたときのために、いささか問題発言的な アドバイスをしておきます。 「彼らにはだまってリファクタリングする」で す。” Martin Fowler
著, 児玉公信・友野晶夫・平澤章・梅澤真史 訳, 『リファクタリング(第2版):既存のコードを安全に改善する』p55 OBJECT TECHNOLOGY SERIES, 2019年12月1日
最初のスライド この機能開発して欲しい。どのくらいでできますか? え、そんなにかかるんですか? xxヶ月かかってしまいそうです 既存のコードの改修が辛くて、 単純な機能追加でも多くかかってしまう
最初のスライド この機能開発して欲しい。どのくらいでできますか? え、そんなにかかるんですか? xxヶ月かかってしまいそうです 既存のコードの改修が辛くて、 単純な機能追加でも多くかかってしまう こういう場合、 大抵他の問題も併発している
6@ FatなLambda関数になってい$ "@ テストコードが無く、修正後に不具合が出ることがある WR デプロイ/ロールバック手順が複雑 課題を整理する なぜ既存のコードの改修が辛いのか? それによる他への影響 k@
Lambdaのパフォーマンスが悪い s~ 開発速度の低下でリリースまでのリードタイム増加
FatなLambda関数になっている 50 デプロイ/ロールバック手順が複雑 Y テストコードが無く、修正後に不具合が出ることがある 課題を整理する なぜ既存のコードの改修が辛いのか? それによる他への影響 m
Lambdaのパフォーマンスが悪い u 開発速度の低下でリリースまでのリードタイム増加 コード出てくるのこの1だけです
1-1 FatなLambda関数改善 A 関数分割して意味付けす7 A docstringもつければ、関連づいた関数 から概要を確認することもできる
1-1 FatなLambda関数改善 handler の見通しが少しだけ良くなった
環境変数は関数外で取得する(パフォーマンス対策) Lambdaの初期化時にのみ実行される (コールドスタート時のみ) コールドスタート / ウォームスタート 関係なく毎回実行される 1-2 FatなLambda関数改善 環境変数とクライアントの初期化などは関数外に
1-2 FatなLambda関数改善 パフォーマンスの対応したら、コードも 少し読みやすくなった
1-3 よりパフォーマンスや運用を意識するなら Powertools for AWS Lambda (Python) を検討する (CloudWatchの費用はかかるので注意) Powertools
for AWS Lambda とは? AWS Lambda関数の開発を効率化するためのユーティリティライブラリのセット 簡単にトレース、構造化ロギング、カスタムメトリックスなどの導入可能 https://docs.powertools.aws.dev/lambda/python/latest/ Á Lambdaのコンテキストログなどを自動で含め¶ Á X-Rayへの自動キャプチË Á コールドスタート時にカスタムメトリクスを仕込む
1-4 コールドスタートを削減するなら in Python 関数側の改善を進めても、最終的にコールドスタートが壁になる でも、今は試せる方法がたくさんある(以下一例) https://tmokmss.hatenablog.com/entry/analyze-and-improve-lambda-python-coldstart あまり使わないimportは関数内で使用す q
Lambda SnapStart を使用す s Provisioned Concurrency を設定す コンテナLambdaに変え j Rustバインディングをしてみる 個人的には上から順に 考える
1-4 ざっくり紹介 )( あまり使わないimportは関数内で使用する 頻繁に使わないが、初期化時に読み込むと時間がかかるライブラリを内部で定義
1-4 ざっくり紹介 ' Lambda SnapStart を使用する 名前から察せるように Lambda の SnapShot
を裏側で作ってくれる機能 2024年11月 に Python (Python 3.12 以降) に対応! ' Provisioned Concurrency を設定する 決めた数(同時並行数)で Lambda を事前に立ち上げておく機能 使用にはプラスで費用がかかるので、コストは注 コンテナランタイムでは使えない 使用にはプラスで費用がかかる (リクエスト数、メモリ、同時実行数次第でコスト増加)
1-4 ざっくり紹介 % Rustバインディングをしてみる Rust の関数やロジックを Python から直接利用可能にする仕組み (他の言語からも可能) Python
と Rust を組み合わせて、良いとこどりみたいにできるらしい (私はまだ実際には試したことがない②) l% コンテナLambdaに変える キャッシュやデータ転送を効率化し、コールドスタートの時間が短縮される仕組み。 pandasなどの大きめのライブラリをimportしている時などに特に有効。 (私はまだ実際には試したことがない①) https://developers.cyberagent.co.jp/blog/archives/44067/ https://qiita.com/dera_p/items/477292201a36e0859f0f
FatなLambda関数になっている 50 デプロイ/ロールバック手順が複雑 Y テストコードが無く、修正後に不具合が出ることがある 課題を整理する なぜ既存のコードの改修が辛いのか? 話は戻り それによる他への影響
q Lambdaのパフォーマンスが悪い y 開発速度の低下でリリースまでのリードタイム増加
# テストコードが無く、修正後に不具合が出ることがある これはテストを少しずつ増やしていくしかない じゃあ、どうやって増やしていくか?
# テストコードが無く、修正後に不具合が出ることがある これはテストを少しずつ増やしていくしかない じゃあ、どうやって増やしていくか? 不具合が発生した処理のテストコードから 追加することを徹底する 不具合が出たときに、 該当箇所だけ修正して終わりにしていないか?
FatなLambda関数になっている 50 デプロイ/ロールバック手順が複雑 Y テストコードが無く、修正後に不具合が出ることがある 課題を整理する なぜ既存のコードの改修が辛いのか? それによる他への影響 m
Lambdaのパフォーマンスが悪い u 開発速度の低下でリリースまでのリードタイム増加 リファクタリングに絞った話
Lambdaのパフォーマンスが悪い リファクタリングの優先度が下がった結果、修正しづらいコードが残り パフォーマンスチューニングがしにくい状態 リファクタリング ≠ 他に優先したいことがたくさんある 量が多いので特別期間を取って対応する、となると足踏みしてしまう 未来への投資? 息をするのと同じように
リファクタリングすることの大切さ
今後の機能追加や開発の選択肢を持てるようにTidyへ “「次にどのような振る舞いを実装できるか」 は、実装する前から、それ自体に価値がある。 これには驚いた。終わらせたことに対して対価 が支払われるのだと思っていた。そうではな かったのだ。次にできることに対して支払われ ることがほとんどだった。” Kent Beck 著,
吉羽龍太郎・永瀬美穂・細澤あゆみ 訳 『Tidy First?―個人で実践する経験主義的ソフトウェア設計』, p90 System/Network, 2024年12月発行
まとめ 5 AWS Lambda のリファクタリングは、小さい対応から大きい対応ま 5 開発しながら少しずつリファクタリングしましょう 見たときよりもきれいにして終わる
Thank You