LocalStack有料化の代替はFloci!軽量AWSローカルエミュレータ徹底比較【2026年版】

目次
この記事でわかること
- LocalStackコミュニティ版が2026年3月から実質有料化された背景
- 代替候補「Floci(フロチ)」の特徴とLocalStackとの定量比較
- Flociへの移行手順(docker-compose・環境変数・CI連携)
- Moto・DynamoDB Localなど他の代替ツールとの使い分け
- 本番環境との差異など移行時の注意点
AWSローカル開発のデファクトだった LocalStack のコミュニティ版が、2026年3月に認証トークン必須となり、事実上無料利用が終了しました。本記事では、無料・軽量・MITライセンスで注目を集める代替ツール Floci を中心に、LocalStack代替の選択肢を実用面から徹底比較します。
LocalStackコミュニティ版が「実質有料化」された経緯
2026年3月のアップデートで、LocalStack Community版はAuth Token(ログイン必須)が標準化されました。無料枠は残るものの、以下の制約が追加されています。
- 起動時にアカウント認証が必要(匿名利用の廃止)
- 匿名Dockerイメージの利用制限、商用利用範囲の縮小
- 一部サービス(高度なIAM・高度なモック挙動)がPro専用に移行
CI/CD 環境でのシードレス利用や、オフライン開発、OSS配布用のテスト環境構築など、従来の自由度の高い使い方がしづらくなりました。これを受けて「LocalStack 有料化 代替」「awslocal 代替」といった検索需要が一気に高まっています。
Floci(フロチ)とは? — LocalStack代替の第一候補
Floci は Quarkus ベースで実装された軽量なAWSローカルエミュレータです。LocalStackとAPI互換を意識しており、エンドポイントURL http://localhost:4566 をそのまま利用可能で、既存のboto3/AWS SDKコードをほぼ変更ゼロで移行できます。
Flociの強み
- MITライセンスで商用利用・改変・再配布が自由
- Quarkusネイティブビルドにより、起動24ms・メモリ13MiBの極薄フットプリント
- Dockerイメージ90MB — LocalStackの約1/10以下
- AWS認証トークン不要、オフライン起動可能
- S3 / DynamoDB / Lambda / SQS / SNS など主要24サービスをサポート
Floci vs LocalStack 徹底比較
| 項目 | Floci | LocalStack Community(2026年3月以降) |
|---|---|---|
| 認証トークン | 不要 | 必須(Auth Token) |
| 起動時間 | ~24ms | ~3.3秒 |
| アイドル時メモリ | ~13 MiB | ~143 MiB |
| Dockerイメージ | ~90 MB | ~1.0 GB |
| ライセンス | MIT(商用可) | Community版にも制限あり |
| オフライン利用 | 可 | トークン認証があるため制限あり |
| ネイティブバイナリ | あり(Quarkus GraalVM) | なし |
| 対応サービス | 24サービス | 80+ サービス(Pro含む) |
| ステートフル永続化 | memory/persistent/hybrid/wal | 設定で可 |
| エンドポイントURL | http://localhost:4566 | http://localhost:4566 |
どちらを選ぶべきか? 対応サービス数ではLocalStackに軍配が上がりますが、ほとんどのローカル開発で必要なS3・DynamoDB・SQS・Lambda・SNS・IAM は Floci で十分カバーできます。起動の速さ・CI消費リソース・ライセンス条件を重視するなら Floci が最有力です。
Flociの対応AWSサービス(24サービス)
インプロセス(ステートレス)
- SSM Parameter Store
- SQS / SNS
- IAM / STS
- Cognito
- KMS
- Kinesis
- Secrets Manager
- Step Functions
- CloudFormation
- EventBridge
- CloudWatch
- ACM / SES
- API Gateway(REST & HTTP v2)
インプロセス(ステートフル)
- S3(Object Lock対応)
- DynamoDB(トランザクション・Streams対応)
Dockerコンテナベース
- Lambda(ウォームプール・エイリアス・Function URL対応)
- ElastiCache(Redis/Valkey・IAM認証対応)
- RDS(PostgreSQL/MySQL・IAM認証対応)
Flociのセットアップ手順
1. 最小構成の docker-compose.yml
services:
floci:
image: hectorvent/floci:latest
ports:
- "4566:4566"
volumes:
- ./data:/app/data
docker compose up -d
2. AWS CLI / SDK 用の環境変数
export AWS_ENDPOINT_URL=http://localhost:4566
export AWS_DEFAULT_REGION=us-east-1
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
3. アプリコンテナと同時起動する構成
services:
floci:
image: hectorvent/floci:latest
ports:
- "4566:4566"
environment:
- FLOCI_HOSTNAME=floci
my-app:
environment:
- AWS_ENDPOINT_URL=http://floci:4566
depends_on:
- floci
各言語でのSDK接続例
Python(boto3)
import boto3
client = boto3.client(
"s3",
endpoint_url="http://localhost:4566",
region_name="us-east-1",
aws_access_key_id="test",
aws_secret_access_key="test",
)
Node.js(AWS SDK v3)
import { S3Client } from "@aws-sdk/client-s3";
const client = new S3Client({
endpoint: "http://localhost:4566",
region: "us-east-1",
credentials: { accessKeyId: "test", secretAccessKey: "test" },
forcePathStyle: true,
});
Java(AWS SDK v2)
DynamoDbClient client = DynamoDbClient.builder()
.endpointOverride(URI.create("http://localhost:4566"))
.region(Region.US_EAST_1)
.credentialsProvider(StaticCredentialsProvider.create(
AwsBasicCredentials.create("test", "test")))
.build();
Go(AWS SDK v2)
cfg, _ := config.LoadDefaultConfig(context.TODO(),
config.WithRegion("us-east-1"),
config.WithCredentialsProvider(
credentials.NewStaticCredentialsProvider("test", "test", "")),
config.WithEndpointResolverWithOptions(
aws.EndpointResolverWithOptionsFunc(func(service, region string, opts ...interface{}) (aws.Endpoint, error) {
return aws.Endpoint{URL: "http://localhost:4566"}, nil
})),
)
LocalStackからの移行もエンドポイントURLはそのまま http://localhost:4566 なので設定変更なしで切り替えられます。
Terraform との連携
LocalStackで使っていた Terraform の設定は、エンドポイントを変えずに Floci にも流用できます。
provider "aws" {
region = "us-east-1"
access_key = "test"
secret_key = "test"
skip_credentials_validation = true
skip_metadata_api_check = true
skip_requesting_account_id = true
s3_use_path_style = true
endpoints {
s3 = "http://localhost:4566"
dynamodb = "http://localhost:4566"
sqs = "http://localhost:4566"
lambda = "http://localhost:4566"
}
}
tflocal の代わりに通常の terraform apply が使えます。
GitHub Actions でのCI活用例
軽量なため、CIでの毎回起動コストが小さいのが Floci の大きな利点です。
name: test
on: [push]
jobs:
test:
runs-on: ubuntu-latest
services:
floci:
image: hectorvent/floci:latest
ports:
- 4566:4566
env:
AWS_ENDPOINT_URL: http://localhost:4566
AWS_DEFAULT_REGION: us-east-1
AWS_ACCESS_KEY_ID: test
AWS_SECRET_ACCESS_KEY: test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install -r requirements.txt
- run: pytest
LocalStackで数分かかっていたCIジョブの初期化が数秒で終わるケースもあります。
主要な環境変数
| 変数名 | デフォルト | 説明 |
|---|---|---|
QUARKUS_HTTP_PORT | 4566 | HTTPポート |
FLOCI_DEFAULT_REGION | us-east-1 | デフォルトリージョン |
FLOCI_DEFAULT_ACCOUNT_ID | 000000000000 | アカウントID |
FLOCI_BASE_URL | http://localhost:4566 | レスポンスURL |
FLOCI_HOSTNAME | (未設定) | Dockerホスト名上書き |
FLOCI_STORAGE_MODE | memory | memory / persistent / hybrid / wal |
FLOCI_STORAGE_PERSISTENT_PATH | ./data | データ保存先 |
ストレージモードを persistent にするとコンテナ再起動後もデータが残ります。CIで状態をリセットしたい場合は memory で十分です。
LocalStackからの移行手順(チェックリスト)
docker-compose.ymlのイメージをlocalstack/localstack→hectorvent/floci:latestに変更AWS_ENDPOINT_URLはそのままhttp://localhost:4566awslocalコマンドをaws --endpoint-url=http://localhost:4566に置換(またはalias awslocal='aws --endpoint-url=http://localhost:4566')- LocalStack Pro 限定機能(高度なIAM・XRay・一部Lambdaレイヤ機能)を使っていないか確認
- 永続化が必要なら
FLOCI_STORAGE_MODE=persistentを設定
S3の動作確認
aws s3 mb s3://test-bucket --endpoint-url=http://localhost:4566
echo "hello" > test.txt
aws s3 cp test.txt s3://test-bucket/ --endpoint-url=http://localhost:4566
aws s3 ls s3://test-bucket/ --endpoint-url=http://localhost:4566
Floci以外のLocalStack代替候補
| ツール | 特徴 | 向いている用途 |
|---|---|---|
| Floci | Quarkusベース、24サービス、MIT | 一般的なローカル開発・CI |
| Moto | Pythonライブラリ、サーバー機能も提供 | Python単体テスト、スタンドアロン検証 |
| DynamoDB Local | AWS公式、DynamoDBのみ | DynamoDB専用の深い検証 |
| MinIO | S3互換、本番利用実績豊富 | S3互換ストレージのみ必要な場合 |
| ElasticMQ | SQS互換の軽量Javaサーバ | キュー処理のユニットテスト |
汎用なら Floci、Python単体テストなら Moto、単一サービスの深い検証なら公式ツール、という使い分けがおすすめです。
Floci利用時の注意点・既知の制限
- 対応サービス数はLocalStack Proに及ばない(XRay、AppSync、RedShiftなど未対応)
- Lambdaはコンテナ起動のため、初回コールドスタートはそれなりに時間がかかる
- 本番AWSのIAMポリシー細部や整合性制約は完全再現されない
- DynamoDB Streams のイベント順序など、タイミング依存のテストは本番と挙動が異なる場合がある
- 本番リリース前には実AWSでの結合テストを必ず実施する
ローカルは「機能確認」、本番相当環境で「整合性確認」という二段構えを推奨します。
よくある質問(FAQ)
Q1. LocalStackは完全に使えなくなったのですか?
いいえ。2026年3月以降もAuth Tokenを取得すれば Community版は利用可能ですが、匿名利用やオフラインCIなど従来の自由な使い方は制限されます。ライセンス条項・商用利用条件を必ず確認してください。
Q2. Flociは商用プロダクトのCIで使えますか?
はい。MITライセンスで再配布・商用利用が可能なため、企業内CI/CDや商用プロダクトでも自由に使えます。
Q3. LocalStackで書いたテストコードはそのまま動きますか?
エンドポイントURL http://localhost:4566 が同じため、S3・DynamoDB・SQS・Lambda・SNSなどの主要サービスは基本的にそのまま動作します。Pro限定機能やXRayなど未対応サービスを使っている場合のみ修正が必要です。
Q4. CI/CDでのおすすめの使い方は?
GitHub Actions や GitLab CI の services: として直接起動するのが最もシンプルです。イメージが90MB・起動数十msのため、ジョブ全体の時間短縮に直結します。
Q5. Flociとminio/DynamoDB Localの違いは?
MinIOはS3のみ、DynamoDB LocalはDynamoDBのみに特化しています。Flociは複数AWSサービスを1コンテナで再現するため、S3とDynamoDBとSQSを同時に使うような典型的なWebアプリ開発には Floci が便利です。
Q6. 永続化はできますか?
FLOCI_STORAGE_MODE=persistent を設定し、/app/data をボリュームマウントすれば、コンテナ再起動後もS3オブジェクトやDynamoDBのデータが残ります。
まとめ
- LocalStack Community版は2026年3月から認証必須となり、従来の匿名・オフライン利用は困難に
- Flociは MIT・無料・軽量で、LocalStackのフットプリントを1/10以下に圧縮
http://localhost:4566のエンドポイント互換で、移行コストはほぼゼロ- S3・DynamoDB・Lambda・SQS・SNSなど主要24サービスをカバー
- CI/CD消費リソースを大幅削減でき、GitHub Actionsやコンテナ環境と相性が良い
- 本番AWSとの挙動差異だけは注意し、結合テストは実AWSで
LocalStackの有料化に困っている開発チームにとって、Flociは最小コストでローカルAWS開発を取り戻す現実解です。