MinIOとS3の切り替えでテスト信頼性を向上|積み木開発テンプレート改善事例

坂下 竜馬
ソフトウェアエンジニア
2025-10-10
2025-10-10
坂下 竜馬
MinIOとS3の切り替えでテスト信頼性を向上|積み木開発テンプレート改善事例
#インフラ
#AWS
#Engineering
目次
こんにちは。株式会社Digeonでエンジニアをしている坂下です。
Digeonでは「積み木開発」という独自の開発手法を採用しています。これは、再利用可能な部品(コンポーネント)を積み木のように組み合わせていくことで、効率的かつ高品質なソフトウェアを開発するアプローチです。

※参考:積み木開発とは
新しいプロジェクトを始める際、Digeonでは「積み木開発テンプレートリポジトリ」をフォークしてスタートします。このテンプレートは、開発の初期段階から信頼性の高いコードを実装できるよう、常にアップデートを重ねています。
今回はその改善の中でも、MinIOを導入してS3互換環境をローカル・テスト環境に整備し、自動テストの信頼性を高めた取り組みについて紹介します。
テストとローカル開発における課題
積み木開発テンプレートでは、ファイルアップロードなどS3を利用する機能を共通コンポーネントとして提供しています。
以前は、これらのS3アクセス処理をモック化し、外部通信を行わない形で自動テストを実装していました。
しかしこの方法では、「処理が呼ばれたか」を確認するだけで実オブジェクトの操作は行っておらず、本番で重要となる挙動を十分に検証できないという問題がありました。
結果として、テストが通っても本番で想定外の不具合が発生するリスクを抱えていました。
また、ローカルでの開発や手動テストにも以下のような課題がありました。
- テスト用にS3バケットとIAMキーを都度発行する必要があり、手間である
- セキュリティ上、AWSキー発行権限を持つメンバーが限られている
- 「開発中はローカルで動かせないので、とりあえず後でやる」が発生しやすい
これらの課題を解決するために、MinIOを導入し、ローカル環境でも本番相当のS3互換環境を再現できるようにしました。
S3互換ストレージ(MinIO)をローカルに立てる
AWS S3互換のオープンソースストレージ「MinIO」を採用し、ローカルやテスト環境でもS3と同じAPIで動作させるようにしました。

これにより、実際のS3を利用しなくても本番に近い挙動を再現できるようになりました。
docker-composeでMinIOを自動起動
開発用の`docker-compose.yml`にMinIOのサービスを定義しています。
minio:image: minio/minio:RELEASE.2024-07-29T22-14-52Zports:- "9000:9000" # S3 API- "9001:9001" # Consoleenvironment: # 仮- MINIO_ROOT_USER=root- MINIO_ROOT_PASSWORD=passwordcommand: server /data --address :9000 --console-address :9001volumes:- ./minio/data:/datamc:image: minio/mc:RELEASE.2023-12-23T08-47-21Zdepends_on:- minioentrypoint: >/bin/sh -c "mc alias set myminio http://minio:9000 root password;mc mb myminio/sample;"
MinIO Client(`mc`)が初回起動時に`sample`バケットを自動作成します。
docker compose up
を実行するだけでMinIOが自動起動し、ローカル環境にS3互換ストレージが立ち上がります。
ブラウザから http://localhost:9001
にアクセスすると、Webコンソール上でバケットやオブジェクトの状態を確認できます。
ローカル開発では柔軟にS3とMinIOを切り替え
開発中は、環境変数によってストレージをS3またはMinIOに切り替えられるようにしています。
※これはローカル開発体験向上のための仕組みであり、自動テストでは常にMinIOが利用されます。
# true: MinIO / false: AWS S3IS_ON_PREMISE_STORAGE=true# 共通のS3互換設定AWS_ACCESS_KEY_ID=your_access_keyAWS_SECRET_ACCESS_KEY=your_secret_keyAWS_REGION=ap-northeast-1S3_BUCKET=sample# MinIO用設定MINIO_ENDPOINT=http://minio:9000MINIO_PRESIGN_ENDPOINT=http://localhost:9000
アプリケーションはこのフラグを参照して、S3クライアントまたはMinIOクライアントを自動的に選択します。
ローカルからS3へ接続したい場合は、アクセスキー等を設定した上でフラグを切り替えればOKです。プロダクション環境でも同じコードがS3へ接続するため、環境ごとの差異を気にせず開発できるようになっています。
MinIOを利用したテストで信頼性を強化
従来のMockテストでは、実際に署名付きURLを生成して検証することができず、一見通っているテストでも本番でエラーが発生する可能性がありました。
MinIOを利用したテストでは、署名付きURLの発行・有効期限・リクエスト検証など、実際のS3と同じ挙動を再現して動作確認が行えます。
改善によって得られた効果は以下の通りです:
- 署名付きURL発行やバケット操作を本番相当でテスト可能
- Mockコードを削減し、テストのメンテナンスコストを軽減
- テストの結果に対する信頼性が大幅に向上
MinIOの導入によって、「通ってはいるが安全ではないテスト」から、「本番同等の信頼を持てるテスト」になりました。
見かけ上の安心感ではなく、コードベースの実質的な信頼性が大きく向上しました。
ローカル開発の効率化とチーム全体への波及
MinIO導入によって、ローカル開発の準備作業も軽減されました。
S3バケットやIAMキーの発行を待つ必要がなくなり、開発初期からすぐにファイル機能を動かせるようになりました。
- 新規開発時にファイル機能をすぐ実装・テストできる
- IAMキー不要でローカル環境が動く
- テンプレートの改善が他プロジェクトにも波及
小さなことではありますが、開発者×プロジェクト数分ストレスが軽減されると考えれば、長期的に見てなかなかインパクトのある改善なのではないかと思います。
まとめ
MinIOを導入し、S3互換環境をローカルおよびテスト環境に整備することで、自動テストの信頼性向上とローカル開発の効率化を実現しました。
Digeonでは、こうした仕組み改善を通じてチーム全体の開発体験と品質を継続的に高めていく文化を大切にしています。
今後も「高品質なソフトウェアを爆速で提供する」ために、テンプレートの改善や積み木開発の推進を続けていきます。
開発基盤の改善や技術文化づくりに興味がある方、一緒に開発を進化させていきませんか?
まずはカジュアル面談から、ぜひお話ししましょう。
採用情報: https://digeon.co/jobs
Author

坂下 竜馬
ソフトウェアエンジニア
SIerで業務システム開発に1年間従事した後、2024年にDigeonへ入社。 ソフトウェアエンジニアとしてWebアプリ開発を担当。