この記事では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も参照。以下はリクエスト処理の全体像を示す。

graph TD A["️ AWS CLI / SDK
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.zx.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の QueueUrlhttp://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|ノーコードからコードまで徹底比較

参照ソース