s3ry は Amazon S3 用の対話型ターミナルクライアントです。Go で書かれており、Bubble Tea を使っています。
このプロジェクトは AWS SDK for Go v2 上で再構築中です。v2.0.0 のリリースノートは 2026-09-03 に修正済みです。
- S3 バケットの一覧表示。
- バケットの階層ブラウズ:フォルダ(common prefix)は
Enterで開き、Escで戻ります。長い一覧はLoad more...行でページ単位に読み込みます。 /で任意のリストをその場でフィルタ(タイトルと説明文への大文字小文字を区別しない部分一致)。- オブジェクトの全メタデータをプレビュー(
p):HeadObjectから Content-Type、ストレージクラス、バージョン ID、ユーザーメタデータを表示します。 - 選択中オブジェクトの署名付き GET URL をコピー(
P)。有効期限は 1 時間 / 24 時間 / 7 日間から選択します。 - 選択したオブジェクトをカレントディレクトリへダウンロード。ダウンロードは AWS transfer manager による並列マルチパート転送です。
- カレントディレクトリ配下から、選択した非隠しファイルをバケットへアップロード(隠しファイル・隠しディレクトリはスキップ)。
- 選択したオブジェクトの削除、またはフォルダごとの削除 — 確認プロンプトには dry-run で取得した対象件数を先に表示します。削除モードでフォルダに
Enterを押すと配下の全オブジェクトを削除します。フォルダ内に入って個別のオブジェクトを削除したい場合はlまたは→を押してください。ローカルファイルの上書き時にも確認を求めます。 - 選択したバケットの全オブジェクト一覧をカレントディレクトリの
ObjectList-<timestamp>.txtへエクスポート。 - バケットや prefix を指定して直接起動:
s3ry s3://bucketはバケットの操作メニューを開き、s3ry s3://bucket/prefix(パス指定、または末尾スラッシュ付きのs3://bucket/)はその位置のオブジェクトブラウザを直接開きます。 - 転送中に
Escを押すとキャンセルします。 --endpoint、--path-style、--no-sign-requestで MinIO や LocalStack などの S3 互換エンドポイントに対応。
s3ry ls [s3://bucket[/prefix]] [-o json] # バケットまたはオブジェクトを一覧表示
s3ry cat s3://bucket/key # オブジェクトの内容を stdout へ出力
s3ry rm s3://bucket/key [--dry-run] # オブジェクトを削除
s3ry rm s3://bucket/prefix/ [--dry-run] # prefix 配下の全オブジェクトを削除
s3ry presign s3://bucket/key [--expires 2h] # 署名付き GET URL を出力すべてのサブコマンドはグローバルな AWS フラグ(--profile、--region、--endpoint、--path-style、--no-sign-request)を受け付けます。
- 対話型 TUI は TTY が必要です。TTY がない環境では
ls、cat、rm、presignの各サブコマンドを使ってください。
GitHub Releases からプラットフォーム向けのアセットをダウンロードしてください:
s3ry_Linux_x86_64.tar.gzs3ry_Linux_arm64.tar.gzs3ry_Darwin_arm64.tar.gzs3ry_Darwin_x86_64.tar.gzs3ry_Windows_x86_64.zips3ry_Freebsd_x86_64.tar.gz
brew install seike460/tap/s3ryGo 1.27 以降が必要です:
make build # dist/s3ry に出力対話型クライアントを起動します:
s3ryバイナリの --help 出力は次の通りです:
interactive terminal client for Amazon S3
Usage:
s3ry [s3://bucket/prefix] [flags]
s3ry [command]
Available Commands:
cat Print an object's contents to stdout
completion Generate the autocompletion script for the specified shell
help Help about any command
ls List buckets or objects without the TUI
presign Print a presigned GET URL for an object
rm Delete an object or a prefix without the TUI
version Show version information
Flags:
--config string Path to config file
--endpoint string S3 endpoint URL for S3-compatible services
-h, --help help for s3ry
--lang string Language (en, ja)
--log-level string Log level (debug, info, warn, error)
--no-sign-request Send unsigned requests for public endpoints
--path-style Force path-style S3 addressing (MinIO, LocalStack)
--profile string AWS profile to use
--region string AWS region to use
-v, --verbose Enable verbose logging
--version version for s3ry
Use "s3ry [command] --help" for more information about a command.
Usage 行と使用例の実行ファイル名は、起動時に使った名前に追従します。
s3ry version と s3ry completion <shell> のサブコマンドも利用できます。
- リストでは
↑/↓またはk/jで項目間を移動します。PgUp/PgDn、Ctrl+B/Ctrl+F、Home/Endでページ・位置ジャンプができます。EnterまたはSpaceで現在の項目を選択します。 - 操作ビューでは
dでダウンロード、uでアップロード、Deleteで削除を開始します。 - オブジェクトビューでは
/でリストをフィルタ、pでオブジェクトメタデータのプレビューを切り替え、Pで署名付き URL を発行、Enterでフォルダを開き、rでリストを再読み込み、?でヘルプ、sで設定を開きます。Escは親 prefix へ戻るか、操作ビューへ戻ります。 - バケットビューでは
rでバケットの読み込みを再試行、?でヘルプ、sで設定を開きます。 - アップロードビューでは
rでローカルファイルを再スキャン、Escで操作ビューへ戻ります。 - 全体共通で
Ctrl+HまたはF1でヘルプ、Ctrl+Sで設定を開きます。 qまたはCtrl+Cで終了します。
設定ローダーは次の変数を読み込みます:
AWS_REGIONAWS_DEFAULT_REGION(aws.regionとAWS_REGIONが未設定の場合)AWS_PROFILEAWS_ENDPOINT_URL(LocalStack などのカスタムエンドポイントは自動的にパススタイルアドレッシングになります)S3RY_LANGUAGES3RY_LOG_LEVEL
これらはすべて起動時に S3 セッションへ適用されます。
--config 指定がない場合、ローダーは次の相対パスを順に確認し、その後ホームディレクトリ配下のパスを確認します:
s3ry.ymls3ry.yaml.s3ry.yml.s3ry.yaml~/.s3ry.yml~/.s3ry.yaml~/.config/s3ry/config.yml~/.config/s3ry/config.yaml
--config PATH を指定した場合はその YAML ファイルを読み込み、その後に環境変数を適用します。
設定型が定義する YAML キーは次の通りです:
aws.region、aws.profile、aws.endpoint、aws.path_style、aws.no_sign_requestui.language、ui.themeperformance.concurrency、performance.part_size、performance.timeoutlogging.level、logging.format、logging.file
performance.concurrency はマルチパート転送と prefix 一覧取得で使う並列 S3 ワーカー数を設定します。performance.part_size はマルチパートのチャンクサイズ(バイト単位、最小 5 MiB)です。performance.timeout は TUI からの各ブロッキング S3 リクエストの上限秒数です。
| コード | 意味 |
|---|---|
| 0 | 成功 |
| 1 | 一般エラー |
| 2 | 使用法エラー(不明なフラグやコマンド、不正な引数) |
| 3 | バケットまたはオブジェクトが見つからない |
| 4 | アクセス拒否または認証情報なし |
| 130 | キャンセル(Ctrl+C、転送中の Esc、または SIGINT) |
Go ツールチェーンと開発ツールは .mise.toml にピン留めされています(mise install で導入されます)。標準のチェックは次の通りです:
go build ./...
go test -race ./...
go vet ./...
make lint # mise でピン留めされた golangci-lint 経由
make build # dist/s3ry へスタンプ付きバイナリを出力統合テストはローカルの MinIO コンテナに対して実行します。セットアップは
docs/testing.md を参照してください。make bench は
転送ベンチマークを記録し、リグレッション比較に使います。
- 起動時に 1 つの
s3.Session(AWS SDK for Go v2)を作成し、すべてのビューで共有します。バケットのリージョンごとに S3 クライアントと transfer manager をキャッシュするため、クロスリージョンのバケットでも再起動は不要です。 - アップロードとダウンロードは AWS transfer manager を経由し、
performance.concurrency個の goroutine でマルチパート処理を並列化します。 WalkはConcurrency1 では辞書順に一覧取得し、それ以上では delimiter の prefix を並列に巡回します。オブジェクトブラウザは階層ページングにListPage(delimiter + 継続トークン)を使います。- 転送の進捗コールバックはワーカー goroutine 上で動作します。有界なブローカーチャネルが Bubble Tea の更新ループへ渡すため、描画が遅くても転送ワーカーをブロックせず、進捗報告はレースフリーです。
- ダウンロードはまず同じディレクトリの一時ファイルへ書き込み、成功時のみ公開します。上書きモード(
fail、skip、always)に従い、Escでキャンセルすると中途半端なファイルを削除します。 - S3 キーは検証され、
LocalPathでローカルパスへマップされます。絶対パス、..トラバーサル、prefix エスケープは拒否します。 - UI は Bubble Tea のモデルツリーです。
cliがフラグを解析し、appがルートモデルとグローバルキーを持ち、viewsが責務ごとの画面を、componentsが再利用可能なウィジェットを保持します。
- 操作:
internal/ui/views/operation.goのoperationsテーブルに 1 エントリ追加するだけです(キー、ラベル、遷移先ビュー)。switch 文を編集する必要はありません。 - 言語:
internal/i18n/messages.goにカタログマップを 1 つ追加するだけです。すべてのビューは注入されたPrinter経由で描画します。 - ビュー:
tea.Modelを実装し、操作テーブルから構築して、views.Deps経由で依存を配線します。遷移と転送の後始末はアプリ側が汎用的に処理します。 - テーマ:色は
internal/ui/components/theme.goの名前付き定数で、すべてのウィジェットとビューで共有されます。
ROADMAP.md を参照してください。
CONTRIBUTING.md を参照してください。
このプロジェクトは MIT License でライセンスされています。LICENSE を参照してください。
