概要
- s3mini は超軽量・高速なTypeScript製S3クライアント
- Node.jsやEdge環境(Cloudflare Workers等)で動作、ブラウザ非対応
- 主要なS3互換ストレージ(Cloudflare R2, Backblaze B2等)で動作確認済み
- 必要最小限のS3 APIのみを搭載、依存パッケージゼロ
- セキュリティや貢献方法も明記、MITライセンス採用
s3miniとは
- s3mini は Node.js や Edgeプラットフォーム 向けの超軽量S3クライアント
- 約 14 KB (minified)で、平均 15%高いops/s を実現
- TypeScript 製、依存パッケージなしの設計
- AWS SigV4 署名をサポート(プリサインリクエスト不要)
- Cloudflare Workers や Bun、 MinIO など幅広いS3互換サービスに対応
- ブラウザ環境では非対応 (Node.js APIやpolyfill利用のため)
主な特徴
- パフォーマンス重視 :軽量かつ高速、リソース制約環境に最適
- BYOS3 (Bring Your Own S3):任意のS3互換バケット利用可能
- 実装APIを厳選 :list/put/get/deleteなど基本機能に絞り込み
- 環境対応 :Node.js、Bun、Cloudflare Workersなどエッジ環境向け
- 依存ゼロ :外部パッケージ未使用、シンプル設計
サポートされる主な操作
- バケット操作
- HeadBucket (bucketExists)
- createBucket
- オブジェクト操作
- ListObjectsV2 (listObjects)
- GetObject (getObject, getObjectWithETag等)
- PutObject (putObject)
- DeleteObject (deleteObject)
- HeadObject (objectExists, getEtag等)
- Multipart Upload (list/create/complete/abort/uploadPart)
- CopyObject は未実装(今後対応予定)
インストール方法
-
npm:
npm install s3mini -
yarn:
yarn add s3mini -
pnpm:
pnpm add s3mini -
注意 :Node.js/Bun/Cloudflare Workers専用、ブラウザ非対応
-
Cloudflare Workers利用時 :wrangler設定で
nodejs_compatフラグを有効化推奨
基本的な使い方
- インポート例
import { s3mini, sanitizeETag } from 's3mini';
- クライアント初期化
- アクセスキー・シークレット・エンドポイント・リージョンを指定
- バケット存在確認
await s3client.bucketExists();
- バケット作成
await s3client.createBucket();
- オブジェクト操作
- 存在確認:
await s3client.objectExists(key); - アップロード:
await s3client.putObject(key, content); - 取得:
await s3client.getObject(key); - 削除:
await s3client.deleteObject(key);
- 存在確認:
- リスト取得
await s3client.listObjects();- プレフィックスや最大件数指定も可能
- マルチパートアップロード
- アップロードID取得:
await s3client.getMultipartUploadId(key); - パートアップロード:
await s3client.uploadPart(key, uploadId, buffer, partNumber); - 完了:
await s3client.completeMultipartUpload(key, uploadId, parts); - アボート:
await s3client.abortMultipartUpload(key, uploadId);
- アップロードID取得:
- 詳細な使用例やテスト :USAGE.md・examples・tests参照
セキュリティに関する注意点
- ログ出力時 にアクセスキー等の機密情報を自動でマスク
- 認証情報は環境変数や安全な保管場所で管理 (ハードコーディング厳禁)
- S3バケットへのアクセス権限 を必ず確認
- マルチパートアップロード はコスト増加の可能性に注意
- 利用上の責任 :データ損失やセキュリティ事故は自己責任
- 脆弱性報告 はメールで開発者へ直接連絡
- 詳細 :SECURITY.md参照
コントリビューションについて
- バグ報告・機能要望 :GitHub Issuesで受付
- 環境・エラーメッセージ・再現手順等をできるだけ詳しく記載
- プルリクエスト歓迎 :新機能追加やバグ修正時はdevブランチへ
- 大きな変更は事前にIssueで相談推奨
- 軽量性重視 :依存パッケージ追加は最小限に
- 機能追加時はサイズ増加に見合う価値が必要
- コミュニティ行動規範 :建設的・敬意あるコミュニケーションを推奨
- 詳細はCODE_OF_CONDUCT.md参照
- 自己解決した場合 :Issueに経緯や解決策を記載してクローズ推奨
ライセンスとスポンサー
- MITライセンス 採用(LICENSE.md参照)
- スポンサーシップ :開発支援を希望する場合は寄付も歓迎
- 継続的な開発・改善の原動力
公式リポジトリやドキュメント