AI

セルフホストストレージ比較:MinIO vs SeaweedFS vs Garage でS3互換ストレージを構築する

オープンソースラボ編集部2026年6月14日

セルフホストストレージ比較:MinIO vs SeaweedFS vs Garage でS3互換ストレージを構築する

AWS S3($0.023/GB/月)・Google Cloud Storage・Azure Blob Storageなどのクラウドストレージに依存せず、S3互換APIでセルフホストできるOSSオブジェクトストレージは、大量ファイル・バックアップ・機械学習データセット・静的ファイル配信の基盤として重要です。MinIO(最大シェア・S3完全互換・Go製)・SeaweedFS(分散ファイルシステム特化・Go製)・Garage(Rust製・シンプル・地理分散対応)の3つが2026年のOSSオブジェクトストレージ主要選択肢です。

セルフホストストレージを使う理由

  • コスト削減: AWS S3($0.023/GB/月)→セルフホストで$0.002/GB/月以下(NAS/VPS利用)
  • S3互換API: 既存のS3 SDKをそのまま流用してコスト削減
  • レイテンシ改善: オンプレミスまたは近隣データセンターに配置してレイテンシを短縮
  • データ主権: EU・政府・医療等のデータ規制に対応した完全自社管理

主要ツールの概要

MinIO

2014年公開(MinIO Inc.)、Go製のOSSです。GitHubスター50k+。AWS S3と完全互換のOSSオブジェクトストレージで、世界最大シェアのS3互換セルフホストストレージです。マルチノードクラスタリング(イレイジャーコーディング)・バケットポリシー・ライフサイクル管理・レプリケーション・Lambda(イベント通知)・Web UIを完備しています。

# docker-compose.yml: MinIO(シングルノード・開発用)
version: "3.8"
services:
  minio:
    image: minio/minio:latest
    restart: unless-stopped
    ports:
      - "9000:9000"   # S3 API
      - "9001:9001"   # Web Console
    environment:
      MINIO_ROOT_USER: ${MINIO_ROOT_USER}
      MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
      MINIO_REGION: ap-northeast-1
      MINIO_SITE_NAME: my-minio
    command: server /data --console-address ":9001"
    volumes:
      - minio_data:/data
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s

volumes:
  minio_data:
# docker-compose.yml: MinIO 分散クラスター(4ノード・イレイジャーコーディング)
version: "3.8"
services:
  minio1:
    image: minio/minio:latest
    command: server http://minio{1...4}/data --console-address ":9001"
    environment:
      MINIO_ROOT_USER: ${MINIO_ROOT_USER}
      MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
    volumes: [minio1_data:/data]
  minio2:
    image: minio/minio:latest
    command: server http://minio{1...4}/data --console-address ":9001"
    environment:
      MINIO_ROOT_USER: ${MINIO_ROOT_USER}
      MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
    volumes: [minio2_data:/data]
  # minio3, minio4 同様に定義
  nginx:
    image: nginx:alpine
    ports: ["9000:9000"]
    # nginxでload balancing

volumes:
  minio1_data:
  minio2_data:
# Python: boto3でMinIOをS3互換APIとして操作
import boto3
from botocore.client import Config
import os

# MinIOのS3クライアント(endpoint_urlでMinIOを指定)
s3 = boto3.client(
    's3',
    endpoint_url='http://localhost:9000',  # MinIOエンドポイント
    aws_access_key_id=os.environ['MINIO_ROOT_USER'],
    aws_secret_access_key=os.environ['MINIO_ROOT_PASSWORD'],
    config=Config(signature_version='s3v4'),
    region_name='ap-northeast-1',
)

def upload_file(local_path: str, bucket: str, key: str) -> str:
    '''ファイルをMinIOにアップロードして公開URLを返す'''
    s3.upload_file(local_path, bucket, key,
                   ExtraArgs={'ContentType': 'application/octet-stream'})
    url = s3.generate_presigned_url('get_object', Params={'Bucket': bucket, 'Key': key},
                                    ExpiresIn=3600)
    return url

def list_files(bucket: str, prefix: str = '') -> list:
    '''バケット内のファイル一覧を取得(S3 API互換)'''
    paginator = s3.get_paginator('list_objects_v2')
    files = []
    for page in paginator.paginate(Bucket=bucket, Prefix=prefix):
        files.extend([o['Key'] for o in page.get('Contents', [])])
    return files

def setup_lifecycle_policy(bucket: str, days_to_expire: int = 365) -> None:
    '''バケットにライフサイクルポリシーを設定(古いファイルを自動削除)'''
    s3.put_bucket_lifecycle_configuration(
        Bucket=bucket,
        LifecycleConfiguration={
            'Rules': [{
                'ID': 'auto-expire',
                'Status': 'Enabled',
                'Prefix': 'temp/',
                'Expiration': {'Days': days_to_expire},
            }]
        }
    )

SeaweedFS

2014年公開、Go製のOSSです。GitHubスター22k+。分散ファイルシステムとS3互換レイヤーを統合したOSSストレージで、小さなファイルの大量保存(ユーザーアバター・サムネイル・ログファイル)に最適化されています。マスター/ボリュームサーバーの分離アーキテクチャで10億ファイル以上のスケールに対応します。

# docker-compose.yml: SeaweedFS
version: "3.8"
services:
  seaweed-master:
    image: chrislusf/seaweedfs:latest
    restart: unless-stopped
    command: master -ip=seaweed-master -port=9333
    ports:
      - "9333:9333"

  seaweed-volume:
    image: chrislusf/seaweedfs:latest
    restart: unless-stopped
    command: volume -mserver=seaweed-master:9333 -port=8080 -dir=/data
    ports:
      - "8080:8080"
    volumes:
      - seaweed_data:/data
    depends_on: [seaweed-master]

  seaweed-filer:
    image: chrislusf/seaweedfs:latest
    restart: unless-stopped
    command: filer -master=seaweed-master:9333 -port=8888 -s3
    ports:
      - "8888:8888"
      - "8333:8333"  # S3互換API
    depends_on: [seaweed-master, seaweed-volume]

volumes:
  seaweed_data:

Garage

2020年公開(Deuxfleurs)、Rust製のOSSです。GitHubスター2k+。Rust製で超軽量・地理分散対応のS3互換オブジェクトストレージで、シンプルな設定ファイルと低リソース消費が特徴です。複数拠点・自宅サーバー・Raspberry PiクラスターへのデプロイでS3互換ストレージを運用するホームラボ・スモールチームに適しています。

# garage.toml: Garage設定ファイル
[garage]
metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
db_engine = "sqlite"
replication_factor = 3  # 3拠点レプリケーション

[s3_api]
s3_region = "garage"
api_bind_addr = "0.0.0.0:3900"

[admin]
api_bind_addr = "0.0.0.0:3903"
metrics_token = "your-metrics-token"

[rpc_bind_addr]
addr = "0.0.0.0:3901"
# Garageのクラスター初期化とバケット作成
garage status  # ノード状態確認
garage layout assign -z dc1 -c 1G <node-id>  # ノードをゾーンに割り当て
garage layout apply  # レイアウトを適用

# バケット作成とアクセスキー発行
garage bucket create my-backup-bucket
garage key create my-app-key
garage bucket allow --read --write --key my-app-key my-backup-bucket

# Garage CLI でオブジェクトの管理
# S3 APIはboto3でendpoint_url='http://localhost:3900'として使用

機能比較表

比較項目MinIOSeaweedFSGarage
S3互換度✅ 完全✅ 高✅ 高
小さなファイル最適化
地理分散
メモリ使用量✅ 最低(Rust)
GitHub Stars50k+22k+2k+

オブジェクトストレージはDevOpsカテゴリ/categories/devopsのバックアップソリューション(Restic)と組み合わせてMinIOをResticのバックアップリポジトリとして使用し、S3互換API経由でデータを自社ストレージに安全に保存します。LLMツールカテゴリ/categories/llm-toolsの機械学習データセット管理(DVC)と組み合わせてMinIOをMLデータセットのリモートストレージとして使用してデータバージョン管理を実現します。

FAQ

Q. MinIOをNginxリバースプロキシで公開してHTTPS対応するには?

A. Nginxをリバースプロキシとして前段に置いてLet's EncryptでHTTPS化します。Nginx設定: server { listen 443 ssl; server_name storage.example.com; ssl_certificate /etc/letsencrypt/live/storage.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/storage.example.com/privkey.pem; location / { proxy_pass http://minio:9000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_buffering off; } }。重要ヘッダー: proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_forproxy_set_header X-Forwarded-Proto $scheme→MinIOがHTTPS対応URLを生成。コンソール(9001): server { listen 443 ssl; server_name console.storage.example.com; location / { proxy_pass http://minio:9001; } }でConsoleも独立したサブドメインで公開。MinIO SSL: MinIO自体のSSLは--certs-dir /certsで独自証明書も設定可能→内部通信にTLSを使うか、NginxのSSL終端のみかを選択。

Q. MinIOのイベント通知でS3バケットにファイルがアップロードされたらLambdaを実行するには?

A. MinIOのNotification機能でオブジェクト作成イベントをWebhook・SNS(AWS互換)・Kafkaに転送します。Webhook設定: MinIO Console→Events→Add Event Destination→Webhook→URL(n8n/Lambdaエンドポイント)を設定→バケットのEvent: s3:ObjectCreated:*→フィルター: prefix=uploads/suffix=.pdf。Python処理: n8nのWebhookノードがMinIOイベントを受信→JSONにバケット名・オブジェクトキー・サイズ→Lambda(Python関数)でPDFを処理(テキスト抽出・OCR・サムネイル生成)→処理結果を別バケット/DBに保存。Kafka連携: MinIO→Kafka(mc event add myminio/uploads arn:minio:sqs::kafka: --event put)→Kafkaコンシューマーで高スループット処理。

Q. SeaweedFSはMinIOとどう違い、どのユースケースに適していますか?

A. SeaweedFSは小さなファイルの大量保存(数億〜数十億ファイル)に特化しており、MinIOは大きなファイル(GB〜TB単位のオブジェクト)のS3互換ストレージに強みがあります。SeaweedFS優位: ①小さなファイル(100KB以下)をボリューム単位でまとめて格納→iノードの枯渇なし②10億ファイル以上のスケールでもマスターのメモリ使用量が少ない③ボリュームIDとファイルIDのマッピングで高速ルックアップ④GeoReplication対応→複数データセンターへのリアルタイムレプリケーション。MinIO優位: ①S3 APIの互換性が最高→AWS SDKそのままで動作②EC(イレイジャーコーディング)でデータ冗長性を確保③Web UI(MinIO Console)が充実→S3ブラウザとしても使いやすい④多くのOSSツール(Airbyte・DVC・Restic)がMinIOをデフォルトサポート。選択基準: SNSのプロフィール画像・サムネイル・ログファイル等の小さなファイルが数億個→SeaweedFS、データレイク・バックアップ・機械学習データセット等のGBサイズのオブジェクト→MinIO。

Q. GarageをRaspberry Piクラスターに構築するには?

A. 3台以上のRaspberry Piに各ノードのGarageバイナリをインストールしてクラスターを構成します。インストール: wget https://garagehq.deuxfleurs.fr/_releases/latest/aarch64-unknown-linux-musl/garagechmod +x garagemv garage /usr/local/bin/(ARMv8用バイナリ)。garage.tomlの設定: replication_factor = 3(3台冗長)・rpc_bind_addr.addr = "0.0.0.0:3901"data_dir = "/mnt/ssd/garage/data"(外付けSSD推奨)。ノード登録: 全ノードでgarage server起動後→garage node connect <other-node-id>@<ip>:3901でクラスター参加→garage statusで全ノード確認→garage layout assign -z home -c 500G <node-id>でゾーン・容量割り当て→garage layout apply。消費電力: 3台Raspberry Pi 4で合計15W→24時間稼働で月電気代100円以下→自宅ストレージ基盤として最低コスト。

まとめ

ユースケース推奨ツール
S3完全互換・大ファイル・エンタープライズMinIO
億単位の小ファイル・分散ファイルシステムSeaweedFS
地理分散・低リソース・自宅サーバーGarage

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。