Lambda関数の小さな修正を確認するだけでデプロイ待ちが数分発生し、その間にクラウド利用料が加算される。AWS上での開発で避けがたかったこの構造的な問題に、LocalEmuというオープンソースのエミュレータが正面から取り組んでいます。
「モック」と「エミュレータ」の設計上の違い
まず整理しておくべきは、モック(mock)とエミュレータ(emulator)の違いです。モックはAPIのインターフェースだけを模倣し、固定のレスポンスを返す仕組みです。一方エミュレータは、実際のサービスと同等の動作を内部で再現します。この差は非機能要件のテストに直結します。
たとえばIAMポリシー(AWSのアクセス権限を定義する仕組み)の検証をモックで行うと、権限エラーが実際の条件を反映していない可能性があります。LocalEmuはオプションでIAMポリシーの強制適用をサポートしており、本番環境に近い認可ロジックをローカルで確認できます。これはセキュリティ要件の検証を開発サイクルの早い段階に前倒しできるという設計上の利点です。
LocalEmuは132のAWSサービスに対応しています。Lambda関数はAWSの公式ランタイムイメージで実行され、EC2インスタンスは仮想ネットワーク上の実コンテナとして動作し、セキュリティグループ(トラフィックの許可・拒否を制御するルールセット)も適用されます。RDSについても、実際のPostgreSQLおよびMySQLエンジンが使われます。
LocalStackとの設計的な比較
AWSローカル開発環境として先行して普及しているツールにLocalStackがあります。LocalStackも同様のエミュレーション方針を持ち、多くのAWSサービスをローカルで再現します。ただしLocalStackのフル機能版(LocalStack Pro)は有料プランが前提で、CI/CDパイプライン(コードの統合・テスト・デプロイを自動化する仕組み)での利用コストが問題になる場面があります。
LocalEmuはこの文脈でオープンソースとして提供されており、CI環境での無制限利用を設計上の前提に置いています。エントリーポイントはlocalhost:4566で、既存のAWS CLI、boto3(PythonのAWS SDK)、Terraform、CDKといったツールの向き先をlocalhostに変えるだけで利用を開始できます。新しいSDKの導入や設定の大幅な変更は必要ありません。
pip install localemu[runtime]
localemu start起動後はAWS CLIの--endpoint-urlオプションかTerraformのprovider設定でエンドポイントを変更するだけです。
aws s3 ls --endpoint-url http://localhost:4566アーキテクチャ選定における「シフトレフト」の実践
シフトレフト(shift left)とは、テストや検証を開発工程の左側、つまり早い段階に移動させる考え方です。セキュリティであればDevSecOps(開発・運用・セキュリティを統合する手法)の文脈で語られることが多く、IAMポリシーの検証やネットワーク設定の確認をCI実行前に済ませることが目標になります。
LocalEmuはCloudTrail(AWSの操作ログを記録するサービス)のイベント履歴とリアルタイムのアクティビティフィードをダッシュボードで提供します。これにより、どのサービスがどの順序でAPIを呼び出しているかをローカルで追跡できます。マイクロサービス構成(機能ごとに独立したサービスを組み合わせるアーキテクチャ)では、サービス間の依存関係を実際のAWS環境に繋がずに可視化できる点が、設計検証の観点で有効に働きます。
日本の開発現場では、本番AWSアカウントへのアクセス権を開発者に絞る運用が広まっています。その場合、開発用の検証アカウントを別途用意するか、ローカルエミュレータを使うかという選択が生まれます。前者は別アカウントの維持コストと権限管理の複雑さを伴います。LocalEmuのようなエミュレータは、アカウントなしで132サービスに対する動作確認を完結できるため、その構造的なトレードオフの解消策として検討の余地があります。
- IAMポリシー検証をローカルで完結させ、認可バグの発見を前倒しできる
- Lambda・RDS・EC2がそれぞれ実ランタイム・実DBエンジン・実コンテナで動作する
- CloudTrailログとアクティビティフィードでサービス間の呼び出し順序を追跡できる
- localhost:4566へのエンドポイント変更だけで既存ツールをそのまま使える
ローカルエミュレータは「本番と完全に同一の環境」ではなく、あくまで設計上の仮説を素早く検証するための装置です。最終的な負荷特性やネットワークレイテンシはクラウド上でしか測定できません。ツールの限界を理解した上で適切な検証フェーズに組み込むことが、継続的な設計品質の維持につながります。