📁 Go Remote IO

🚀 概要 (About) - ユニバーサル・クラウドI/O インターフェース
Go Remote IO は、Google Cloud Storage (GCS)、Amazon S3、および ローカルファイルシステムを、統一的なインターフェースで扱うための Go 言語製 I/O ライブラリです。
gs://、s3://、ローカルパス(/path/to/...)といった path に応じて適切なストレージ実装を選択できるため、アプリケーション側は保存先の違いを過度に意識せず、データの読み書き、一覧取得、リソースの管理に集中できます。
✨ 提供機能 (Features)
- ユニバーサル I/O: path に応じて、GCS、S3、ローカルファイルシステムへのアクセスを自動的に振り分けます。
- フル機能のリソース操作: 単なる読み書きだけでなく、リソースの存在確認 (Exists) や 削除 (Delete) も統一インターフェースでサポート。
- Functional Options による書き込み制御:
Content-Type や Content-Disposition を型安全かつ柔軟に指定可能。ブラウザでのインライン再生や強制ダウンロードの制御が容易です。
- プラグイン可能な実装:
- GCS サブパッケージ: Google Cloud Storage 公式クライアントを利用した I/O 実装。
- S3 サブパッケージ: AWS SDK for Go v2 を利用した S3 向け I/O 実装。
- 統一されたインターフェース:
InputReader: 読み込み (Open)、一覧取得 (List)、存在確認 (Exists) を統合。
OutputWriter: 書き込み (Write)、削除 (Delete) を統合。
- 署名付き URL (Signed URL) の生成: GCS および S3 リソースに対して、期限付きの署名付き URL を生成できます。
- 効率的なリスティング: 一覧取得にはコールバック方式を採用しており、大量のオブジェクトに対してもメモリ消費を抑えながら処理できます。
🏗 プロジェクトレイアウト (Project Layout)
go-remote-io/
└── remoteio/ # I/Oの核となる抽象化レイヤー
├── gcs/ # GCS 具象実装
│ └── factory.go # GCS クライアントの管理と初期化
├── s3/ # S3 具象実装
│ └── factory.go # S3 クライアントの管理と初期化
├── interfaces.go # IOFactory / InputReader / OutputWriter 等の定義
├── reader.go # UniversalInputReader の振り分け
├── reader_local.go # ローカルファイルの読み込み/一覧/存在確認
├── reader_gcs.go # GCS の読み込み/一覧/存在確認
├── reader_s3.go # S3 の読み込み/一覧/存在確認
├── write_options.go # Functional Options (WithContentType, etc.) の定義
├── writer.go # UniversalIOWriter の振り分け
├── writer_local.go # ローカルファイルの書き込み/削除
├── writer_gcs.go # GCS の書き込み/削除
├── writer_s3.go # S3 の書き込み/削除
├── signer.go # URLSigner (署名付きURL生成の抽象化)
└── uri.go # URIの判定・解析ユーティリティ
🧩 主要インターフェース (Key Interfaces)
Go Remote IO は、役割ごとに細分化されたインターフェースを提供しています。
| インターフェース |
メソッド |
説明 |
| Reader |
Open |
リソースを io.ReadCloser として開く |
| Writer |
Write |
リソースへデータを書き込む |
| Exister |
Exists |
リソースの存在を確認する |
| Remover |
Delete |
リソースを削除する |
| Lister |
List |
指定パス配下のリソースを一覧取得する |
これらを組み合わせた InputReader (Reader + Lister + Exister) および OutputWriter (Writer + Remover) を通じて、高レベルな操作を実現します。
🛠️ 主要な依存関係 (Dependencies)
📜 ライセンス (License)
このプロジェクトは MIT License の下で公開されています。