この記事ではDevOps・自動化に特化して解説します。AI自動化・DevOps全般は AI自動化ツール完全ガイド2026|ノーコードからコードまで徹底比較 をご覧ください。
Floci の読み方と表記ゆれ — 日本語コミュニティでの呼称
Floci の公式リポジトリでは発音について明示されていないため、英語の音素則に従って読まれることが多い。日本語コミュニティでは表記ゆれがあり、検索クエリにも「floci 読み方」が継続的に発生している。
| 表記 | 想定発音 | 備考 |
|---|---|---|
| フローシ | /ˈfloʊʃi/ | 日本語のXやZennで散見される表記 |
| フロチ | /ˈflɒtʃi/ | “ci” を「チ」と読む英語圏寄りの読み方 |
| フロキ | /ˈflɒki/ | “ci” を「キ」と読む解釈(少数派) |
公式が定義していないため、ローマ字表記「Floci」のまま使うのが最も無難だ。日本語記事内で読み仮名を振るなら「フローシ」が最も普及している。発音問題でつまずく前に、29サービス対応・起動24msの実用性を体感する方が早い。
なお、AWS互換ローカル開発環境としての位置付けやLocalStack代替の判断基準はこの後のセクションで詳説する。
ツールの概要
FlociはGitHub Stars 3,300超(2026年4月時点)を獲得した、Go製のオープンソースAWSローカルエミュレータ。一言で表すなら「LocalStackの無料・軽量な代替」。
2026年3月にLocalStack Community Editionが認証トークン必須化・セキュリティアップデート凍結へ移行したことが、Floci開発の直接的な背景にある。MITライセンスで制限なし。起動24ms、アイドル時メモリ13MiB、Dockerイメージサイズ約90MB。
Flociの主要スペック(2026年4月時点)
- GitHub Stars: 3,369 / Forks: 189
- 対応サービス数: 29(ECS・EC2・ECR・SES・OpenSearch含む)
- 互換性テスト: 1,850件以上(Java/Node/Python/Go/Rust/Terraform/CDK)
- 起動時間: 約24ms、アイドルメモリ: 約13MiB、Dockerイメージ: 約90MB
AWSインフラのコスト管理にはInfracostによるデプロイ前可視化が有効だが、そもそもローカルで検証できればクラウド料金は発生しない。その役割を担うのがFlociだ。
29サービス対応:何ができるのか
対応サービスは29。コンテナ管理ツールと組み合わせた開発スタックを組む場合はPodman TUIも参照。以下はリクエスト処理の全体像を示す。
Python / Node.js / Java / Go / Rust"] --> B["Floci (port 4566)
HTTP Router"] B --> C["Stateless Services
SSM · SQS · SNS · IAM · STS · KMS
Cognito · Kinesis · EventBridge
CloudWatch · Step Functions
CloudFormation · EC2 · SES · ECR
OpenSearch · AppConfig · ACM"] B --> D["Stateful Services
S3 · DynamoDB · DynamoDB Streams"] B --> E["Container Services
Lambda · ElastiCache · RDS · ECS"] D --> F["StorageBackend
(memory / hybrid /
persistent / wal)"] E --> G["Docker Engine"]
主要サービスの対応状況(公式READMEより)。
| サービス | 動作方式 | 注目機能 |
|---|---|---|
| S3 | In-process | バージョニング、マルチパート、Object Lock、署名付きURL、イベント通知 |
| DynamoDB | In-process | GSI/LSI、トランザクション、TTL、Streams連携 |
| DynamoDB Streams | In-process | シャードイテレータ、Lambda ESMトリガー |
| Lambda | Dockerコンテナ | Warm Pool、エイリアス、Function URL、SQS/Kinesis/DDB Streams ESM |
| IAM | In-process | ユーザー、ロール、グループ、ポリシー、アクセスキー |
| API Gateway REST | In-process | リソース、メソッド、ステージ、Lambda proxy、MOCK/AWS統合 |
| API Gateway v2 (HTTP) | In-process | ルート、JWT認証、ステージ管理 |
| Cognito | In-process | ユーザープール、JWKS/OpenIDエンドポイント |
| ElastiCache | Dockerコンテナ | Redis/Valkey、IAM認証、SigV4検証 |
| RDS | Dockerコンテナ | PostgreSQL/MySQL、IAM認証、JDBC互換 |
| ECS | Dockerコンテナ | クラスター、タスク定義、サービス、キャパシティプロバイダー |
| EC2 | In-process | VPC、サブネット、セキュリティグループ、インスタンス、Elastic IP |
| ECR | In-process + OCI Registry | リポジトリ、docker push/pull、Lambdaイメージ |
| SES | In-process | 送信、本文検証、DKIM属性 |
| OpenSearch | In-process | ドメインCRUD、バージョン、タグ |
| AppConfig | In-process | アプリ、環境、プロファイル、ホスト設定バージョン |
| SQS | In-process | Standard/FIFO、DLQ、バッチ処理 |
| SNS | In-process | SQS/Lambda/HTTP配信 |
| Step Functions | In-process | ASL実行、タスクトークン |
| CloudFormation | In-process | スタック、チェンジセット |
LocalStack無料版で「Partial」とされていたDynamoDB Streams・IAM・STS・Kinesis・KMSは、Flociで完全対応。さらにLocalStack無料版が未対応のAPI Gateway v2・Cognito・ElastiCache・RDS・ECSも実装済みだ。
アーキテクチャと仕組み
アーキテクチャは3層構造。全サービスがポート4566で統一されているため、AWS SDKのendpoint_urlを1箇所変更するだけで既存コードがそのまま動作する。
Statelessサービス層 — SSM・SQS・SNS・IAM・STS・KMS・Secrets Manager・Cognito・Kinesis・EventBridge・CloudWatch・Step Functions・CloudFormation・EC2・SES・ACM・API Gatewayなど。HTTPリクエストを受け取り、StorageBackendに状態を委譲。
Statefulサービス層 — S3とDynamoDB(Streams含む)。StorageBackendは4種類:memory(揮発性・最速)、hybrid(頻出データをメモリ保持)、persistent(ディスク永続化)、wal(Write-Ahead Log方式)。
Containerサービス層 — Lambda・ElastiCache・RDS・ECS。実際のDockerコンテナを起動してエミュレーション。Lambda/ElastiCache/RDS/ECSはIAM認証とSigV4リクエスト署名に対応。ECRはOCIレジストリを共有コンテナとして起動し、通常のdocker push/pullで利用できる。
インストールと基本的な使い方
| 方法 | コマンド / 手順 | 前提条件 |
|---|---|---|
| Docker Compose | docker compose up | Docker Compose v2 |
| Docker | docker run -p 4566:4566 hectorvent/floci | Docker Engine |
| Go install | go install github.com/hoci-io/floci@latest | Go 1.21以上 |
| ネイティブバイナリ | GitHub Releasesからダウンロード(約40MB) | なし |
最も手軽なDocker Compose構成(公式テンプレート)。
# docker-compose.yml
services:
floci:
image: hectorvent/floci:latest
ports:
- "4566:4566"
volumes:
- ./data:/app/data
docker compose up
# 環境変数を設定
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
# 動作確認
aws s3 mb s3://my-bucket
aws sqs create-queue --queue-name my-queue
aws dynamodb list-tables
latest(ネイティブイメージ・サブ秒起動)が推奨。latest-jvm(JVMイメージ)はプラットフォーム互換性が最も広い。特定バージョンに固定する場合は x.y.z や x.y.z-jvm を使用する。
SDK別インテグレーション
既存のAWS SDKコードはendpoint_url(またはエンドポイントオーバーライド)を1箇所指定するだけで動作する。
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"
)
# 通常どおり操作
client.create_bucket(Bucket="my-bucket")
Node.js(AWS SDK v3)
import { S3Client, CreateBucketCommand } from "@aws-sdk/client-s3";
const client = new S3Client({
endpoint: "http://localhost:4566",
region: "us-east-1",
credentials: { accessKeyId: "test", secretAccessKey: "test" },
forcePathStyle: true,
});
await client.send(new CreateBucketCommand({ Bucket: "my-bucket" }));
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();
6言語(Java・Node.js・Python・Go・Rust・AWS CLI)と主要IaC(Terraform/OpenTofu/CDK)向けの互換性テストが公式リポジトリに含まれており、PR単位で自動検証される。
環境変数と設定
FLOCI_ プレフィックスの環境変数で全設定を上書きできる。
| 変数名 | デフォルト | 説明 |
|---|---|---|
QUARKUS_HTTP_PORT |
4566 |
Floci APIのリッスンポート |
FLOCI_DEFAULT_REGION |
us-east-1 |
デフォルトAWSリージョン |
FLOCI_DEFAULT_ACCOUNT_ID |
000000000000 |
デフォルトAWSアカウントID |
FLOCI_BASE_URL |
http://localhost:4566 |
SQS QueueURL等の返却ベースURL |
FLOCI_HOSTNAME |
(未設定) | Docker Compose内でURLを解決するホスト名 |
FLOCI_STORAGE_MODE |
memory |
ストレージモード(memory/persistent/hybrid/wal) |
FLOCI_STORAGE_PERSISTENT_PATH |
./data |
永続化ストレージのディレクトリ |
FLOCI_ECR_BASE_URI |
public.ecr.aws |
Lambdaイメージ取得元のECRベースURI |
アプリがFlociとは別コンテナで動作する場合、SQSの
QueueUrl に http://localhost:4566/... が返るとコンテナ間で解決できない。FLOCI_HOSTNAME=floci(サービス名)を設定することで、返却URLが http://floci:4566/... に変わり正しく解決される。
# マルチコンテナ構成の例
services:
floci:
image: hectorvent/floci:latest
ports:
- "4566:4566"
environment:
- FLOCI_HOSTNAME=floci # URLをコンテナ名で解決
- FLOCI_STORAGE_MODE=persistent
my-app:
environment:
- AWS_ENDPOINT_URL=http://floci:4566
depends_on:
- floci
互換性テスト
公式リポジトリの compatibility-tests/ ディレクトリに、6言語・3 IaCツール向けのテストスイートが含まれる。
| モジュール | 言語/ツール | テスト件数 |
|---|---|---|
sdk-test-java |
Java 17 / AWS SDK v2 | 889 |
sdk-test-node |
Node.js / AWS SDK v3 | 360 |
sdk-test-python |
Python 3 / boto3 | 264 |
sdk-test-awscli |
Bash / AWS CLI v2 | 138 |
sdk-test-go |
Go / AWS SDK v2 | 120 |
sdk-test-rust |
Rust / AWS SDK for Rust | 69 |
compat-terraform |
Terraform v1.10+ | 14 |
compat-opentofu |
OpenTofu v1.9+ | 14 |
compat-cdk |
AWS CDK v2+ | 5 |
| 合計 | 1,873 |
他ツールとの比較
| 項目 | Floci | LocalStack Community | Moto | ElasticMQ + DynamoDB Local |
|---|---|---|---|---|
| 認証トークン | 不要 | 必須(2026年3月〜) | 不要 | 不要 |
| セキュリティ更新 | 継続 | 凍結 | 継続 | AWS依存 |
| 起動時間 | 約24ms | 約3.3秒 | Python import時間 | 各サービス個別起動 |
| アイドルメモリ | 約13MiB | 約143MiB | テスト実行時のみ | サービスごとに数十MiB |
| Dockerイメージ | 約90MB | 約1.0GB | なし(pip) | 各サービス別イメージ |
| 対応サービス数 | 29 | 50+(Pro含む) | 多数(モック) | 個別 |
| API Gateway v2 | ✅ | ❌ | ❌ | ❌ |
| Cognito | ✅ | ❌ | ✅ | ❌ |
| ECS | ✅ | ❌ | ❌ | ❌ |
| EC2 | ✅ | ⚠️ Partial | ❌ | ❌ |
| ECR (OCI Registry) | ✅ | ❌ | ❌ | ❌ |
| DynamoDB Streams | ✅ | ⚠️ Partial | ✅ | ❌ |
| Lambda実行 | 実Dockerコンテナ | 実Dockerコンテナ | モック | なし |
| ライセンス | MIT | 独自制限 | Apache 2.0 | Apache 2.0 |
| 言語 | Go(ネイティブバイナリ) | Python | Python | Scala/Java |
Motoはユニットテスト向けモックであり、複数サービスの連携テストには不向き。ElasticMQ+DynamoDB Localはサービスごとにポート管理が煩雑になる。Flociは「1バイナリ・1ポートで29サービス」という統一性が強みだ。LocalStack Proの50以上のサービスが必要な場合はそちらが妥当。
FlociをLocalStack代替として導入する判断基準
2026年3月のLocalStack Community Edition認証トークン必須化を受け、多くのチームがLocalStack代替を検討している。FlociがLocalStack代替として適切かどうかの判断基準を整理する。
LocalStack代替としてFlociが適しているケース
| 判断基準 | Flociが適している | LocalStack Proを検討すべき |
|---|---|---|
| 必要サービス数 | 29サービスで十分 | 50以上のサービスが必要 |
| 予算 | 無料で使いたい | 商用サポートが必要 |
| 起動速度 | 24msの高速起動が重要 | 3秒の起動でも許容可能 |
| メモリ制約 | CI/CDでメモリ節約が重要 | メモリに余裕がある |
| API Gateway v2 | HTTP APIを使用 | REST APIのみ |
| ECS/RDS/ElastiCache | これらの統合テストが必要 | LocalStack Proで対応 |
| ライセンス | MITライセンスが必須 | 独自ライセンス許容 |
Floci AWSエミュレーション:CI/CDでの活用パターン
FlociのAWSエミュレーションをCI/CDパイプラインに統合する具体的な構成例を示す。GitHub ActionsとGitLab CIの両方に対応。
GitHub Actions構成例
# .github/workflows/integration-test.yml
name: Integration Tests with Floci
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
floci:
image: hectorvent/floci:latest
ports:
- 4566:4566
steps:
- uses: actions/checkout@v4
- name: Run integration tests
env:
AWS_ENDPOINT_URL: http://localhost:4566
AWS_DEFAULT_REGION: us-east-1
AWS_ACCESS_KEY_ID: test
AWS_SECRET_ACCESS_KEY: test
run: |
# S3バケット作成とテストデータ投入
aws s3 mb s3://test-bucket
aws s3 cp testdata/ s3://test-bucket/ --recursive
# DynamoDBテーブル作成
aws dynamodb create-table \
--table-name test-table \
--attribute-definitions AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--billing-mode PAY_PER_REQUEST
# アプリケーションテスト実行
npm test
GitLab CI構成例
# .gitlab-ci.yml
integration-test:
image: python:3.12
services:
- name: hectorvent/floci:latest
alias: floci
variables:
AWS_ENDPOINT_URL: http://floci:4566
AWS_DEFAULT_REGION: us-east-1
AWS_ACCESS_KEY_ID: test
AWS_SECRET_ACCESS_KEY: test
script:
- pip install boto3 pytest
- pytest tests/integration/ -v
CI/CDでFlociを使う最大のメリットは、Dockerイメージが約90MBと軽量なため、ジョブの起動時間が大幅に短縮される点。LocalStack(約1.0GB)と比較して約10分の1のダウンロードサイズで、CIランナーのキャッシュ効率も向上する。
Terraformの統合テストを含むインフラ管理にはInfracostによるコスト可視化と組み合わせると、開発段階からコスト最適化が可能になる。
制限事項・注意点
FlociはあくまでローカルAWS開発・テスト用エミュレータ。本番ワークロードの実行は非推奨。
- サービス数の上限: 29サービスに留まる。Redshift・Glue・Athenaなど分析系は未対応
- Lambda実行にDockerが必須: Lambdaエミュレーションは実際のDockerコンテナを起動するため、Docker Engineが動作している環境が前提
- API互換性の限界: AWSの全APIパラメータが忠実に再現されているわけではない。エッジケースでの挙動差異に注意
- 商用サポートなし: GitHub IssuesまたはSlackコミュニティで対応
関連記事: AI自動化ツール完全ガイド2026|ノーコードからコードまで徹底比較