S3にファイルを置く処理や、DynamoDBへの書き込みを含むアプリをテストするとき、本番のAWSを呼び出すと、テスト1回ごとに料金と待ち時間がかかる。手元のパソコンだけでAWSの動きを再現できれば、この悩みは消える。そういうツールを「LocalStack」という名前で知っている人は多いはずだ。
ところが、今のLocalStackを無料で使おうとすると、まずアカウント登録とログインを求められる。そのすぐ後に見つけたのが、登録なしで無料のまま動く「MiniStack」というツールだった。なぜ無料で登録なしに成り立つのか、そして「エミュレータ」としての再現度はどこまで本物に近いのか、確かめてみた。
無料のはずが、ログインを求められる
LocalStackを使おうとして、まず引っかかるのがここだ。公式ドキュメントによれば、推奨の起動方法であるlstkコマンドを初めて実行すると、ブラウザでのログイン画面が開く。LocalStackのインストール手順には「LocalStackのAWS機能にはAuth Tokenが必要」と明記されている。クレジットカードは要らないが、アカウントは要る。
無料プランは「Hobby」という名前で提供されており、LocalStackの料金ページによれば対応サービスは30以上、利用は個人の非商用利用に限られる。同じページには「LocalStackのコミュニティ版は今後、セキュリティパッチを含む製品アップデートを受け取らなくなる」という告知もある。つまり、登録なしで誰でも使えた従来の無料版は、更新が止まる方向に置かれている。
自分はLocalStackを「登録なしでさっと試せるツール」だと思い込んでいたので、ドキュメントを読み直してこの仕様に気づいたときは意外だった。登録そのものは数分で終わる手間だが、「ちょっと試したいだけ」のときにブラウザでのログインを挟む煩わしさは残る。では、登録なしで動く無料の選択肢はないのか。
登録なしで動く新顔、MiniStack
MiniStack公式サイトに答えがあった。docker run -p 4566:4566 ministackorg/ministackという1行を実行するだけでよい。立ち上がったポート4566に、AWS CLIやSDKの接続先を向ければ動き出す。アカウント登録もAPIキーの発行も要らない。
GitHubリポジトリはMITライセンスで公開されている。2026年10月3日時点の最新バージョンはv1.5.21で、数日おきに更新が続いている現役のプロジェクトだ。
対応するAWSサービスは60以上あり、主要な分野を横断している。
- ストレージ: S3、EBS、EFS
- メッセージング: SQS、SNS、Kinesis
- データベース: DynamoDB、RDS、ElastiCache、Aurora DSQL
- コンピュート: Lambda、ECS、EC2、EKS
- ネットワーク: API Gateway、CloudFront、Route53
- セキュリティ: IAM、KMS、Cognito
軽さを示す数字もある。MiniStack公式サイトの比較表によれば、起動時間と待機中のメモリ使用量で次の差があるという。
この数値はMiniStackの運営者自身が作った比較表によるもので、第三者が測り直したものではない。ただし、起動コマンドが1行で済み、アカウント登録の画面を経由しない分だけ「試すまでの手数」が少ないのは、こちらで確認した事実だ。登録の有無と対応サービス数を含めて整理すると、次のようになる。
| 項目 | LocalStack(無料のHobbyプラン) | MiniStack |
|---|---|---|
| 利用開始に必要なもの | アカウント登録とログイン(Auth Token) | docker runコマンド1行 |
| 商用利用 | 非商用利用に限定 | 制限の記載なし(MITライセンス) |
| 対応サービス数 | 30以上 | 60以上 |
| RDS・ElastiCache相当 | API互換のモック | 本物のPostgreSQL・Redisコンテナ |
表の最後の行にある「本物のPostgreSQL・Redisコンテナ」が、もう一つの引っかかりどころだった。「エミュレータ」と聞くと、API呼び出しにそれらしい返事を返すだけの作り物を想像しがちだが、MiniStackの中身はそれだけではない。
中身は作り物ではない、本物のデータベースが動く
多くのAWSモックは、たとえばDynamoDBへの書き込み要求に対して、成功したことだけを示す決まった形の応答を返すだけだ。裏でデータベースエンジンが実際に動いているわけではない。これは軽くて速い代わりに、複雑なクエリや細かな制約まで本物と同じに動くとは限らない。
MiniStackのRDSとElastiCacheは違う設計になっている。公式サイトの機能説明によれば、RDSを起動すると裏でDocker上に実際のPostgreSQL・MySQL・MariaDBのコンテナが立ち上がる。ElastiCacheを起動すると、同じように本物のRedisコンテナが立ち上がる。ECSのタスクも、実際のDockerコンテナとして動く。タスク定義に書いた内容がそのまま動くかどうかを、クラウドへ上げる前にローカルで確かめられるということだ。
つまり、アプリからクエリを送ると、作り物の返事ではなく本物のPostgreSQLやRedisが実際に処理して返す。SQLの細かい挙動や、Redisのコマンドの振る舞いまで、本番のAWSに近い形で確かめられる。
「エミュレータ」という言葉から、自分はもっと簡易な作り物を想像していた。サインアップなしという手軽さと、中身が本物のデータベースだという点が同時に成り立っているのは、調べていて一番驚いた部分だ。
この設計がすべてのサービスに及ぶわけではない。S3やDynamoDBなど大半のサービスはAPI互換のモック実装で、「本物のエンジンが動く」のはRDS・ElastiCache・ECSなど一部にとどまる。それでも、データベースの挙動を確かめたい場面でこの差は大きい。では、実際に自分の環境で試すには何をすればいいのか。
試す前に知っておきたい制限
今すぐ試すなら、手順は2つだけだ。
- Dockerが入った環境で
docker run -p 4566:4566 ministackorg/ministackを実行する - AWS CLIやSDK、Terraform・AWS CDK・Pulumiの接続先を、ポート4566へ向ける
公式サイトには、Python(Boto3)・Node.js・Java・Goの各SDKから接続できると記載がある。JUnit 5やSpring Bootでよく使う「Testcontainers」からも、同じように接続できるという。普段使っている開発ツールの接続先を変えるだけで、AWSの代わりに使い始められる。
一つだけ、本文で触れておきたい制限がある。GitHubリポジトリの既知の制限に「地域ごとの状態分離に未対応」とあり、S3とAurora DSQLは複数のリージョンを指定しても状態を共有してしまう。複数リージョンにまたがる構成をローカルで検証したい場合は、この点がそのままでは再現できない。
まとめ
LocalStackの無料版は、登録なしで誰でも使えた従来の形から、アカウント登録を前提とするHobbyプランへ移っている。MiniStackはdocker runコマンド1行で、登録なしに60以上のAWSサービスを無料で動かせる、という形でその隙間に入ってきた。RDSとElastiCacheは本物のPostgreSQL・Redisコンテナとして動く点も確かめられた。複数リージョンの状態分離には未対応という制限はあるが、単一リージョンでAWSに依存するアプリをローカルでテストする用途には、今すぐ試せる選択肢になる。
コメント
気づきや感想をどうぞ記事への補足や、読んで考えたことをお寄せください。個人情報や、他の人を傷つける内容の投稿はお控えください。
投稿にはGoogleログインが必要です。
Googleでログイン投稿にはGoogleアカウントの表示名が公開されます。メールアドレスは取得・公開しません。
コメントを読み込んでいます…