Warning
s3v は現在 alpha 版 です。基本的な動作は確認していますが、 予期しないバグや破壊的変更が含まれる可能性があります。 使用は自己責任でお願いします。Issue・PR は歓迎します。
Read-only な S3 ブラウザ TUI アプリケーション(Rust 製)
- S3 バケット・フォルダの 3 ペインブラウジング(親 / メイン / プレビュー)
- Vim スタイルナビゲーション (
j/k/h/lまたは矢印キー) - ファイルプレビュー(テキスト、画像、PDF)
- ファイル / フォルダのダウンロード(フォルダ構造保持・並列DL)
- フィルタ(
/で正規表現フィルタ) - SQL 検索(
?でメタデータ検索) - 複数ファイル選択(
Spaceで個別、aで全選択) - AWS プロファイル・カスタムエンドポイント対応
cargo install --path .cargo build --release# バケット一覧から開始
s3v
# 特定のバケットを開く
s3v my-bucket
# 特定のパスを開く
s3v my-bucket/path/to/folder
# S3 URI を指定
s3v s3://my-bucket/path
# AWS プロファイルを指定
s3v --profile myprofile
# リージョンを指定
s3v --region ap-northeast-1
# カスタムエンドポイント (MinIO, LocalStack)
s3v --endpoint http://localhost:9000起動すると 3 ペインレイアウトで S3 の中身を表示します。
- 左ペイン: 親ディレクトリの内容
- 中央ペイン: 現在のディレクトリの内容(カーソル操作対象)
- 右ペイン: カーソル上のアイテムのプレビュー
j/k でカーソル移動、Enter または l でフォルダに入る、Esc または h で戻ります。
ファイルにカーソルを合わせると右ペインに自動プレビューが表示されます。
- テキストファイル: シンタックスハイライト付きで表示
- 画像ファイル: ターミナル内に画像を描画
- PDF ファイル: ページ単位で表示(
h/lでページ送り)
Tab でプレビューペインにフォーカスを移すと、j/k でスクロール、PageUp/PageDown で高速スクロールできます。
- ダウンロードしたいファイルにカーソルを合わせて
dを押す - 複数ファイルの場合は
Spaceで選択してからd(aで全選択も可) - フォルダにカーソルを合わせて
dでフォルダ一括ダウンロード - 保存先パスを入力(
Tabで補完可能)してEnterで開始
ダウンロード中は Esc でキャンセルできます。
/ を押すとフィルタモードに入ります。正規表現で現在のディレクトリ内のアイテムを絞り込めます。
/\.json$ → JSON ファイルのみ表示
/config → 名前に "config" を含むアイテムのみ表示
Enter で適用、Esc でキャンセルします。
? を押すと SQL 検索モードに入ります。バケット内の全オブジェクトのメタデータを SQLite に取り込み、WHERE 句で検索できます。
name LIKE '%.log' → .log ファイルを検索
size > 1000000 → 1MB 以上のファイル
extension = '.json' AND size < 10000 → 10KB 未満の JSON ファイル
name LIKE '%config%' OR name LIKE '%env%' → config または env を含むファイル利用可能なカラム: key, name, prefix, extension, size, modified, is_folder
| キー | アクション |
|---|---|
↑ / k |
上に移動 |
↓ / j |
下に移動 |
Enter / l / → |
フォルダを開く / ファイルプレビュー |
Esc / h / ← |
戻る |
Tab |
プレビューペインにフォーカス切替 |
Space |
ファイル選択トグル |
a |
全選択トグル |
d |
ダウンロード |
/ |
フィルタモード |
? |
SQL 検索モード |
q / Ctrl+C |
終了 |
| キー | アクション |
|---|---|
↑ / k |
上にスクロール |
↓ / j |
下にスクロール |
PageUp |
10行上にスクロール |
PageDown |
10行下にスクロール |
← / h |
前のページ (PDF) |
→ / l |
次のページ (PDF) |
Tab / Esc / q |
メインペインに戻る |
- Rust 1.85+ (edition 2024)
- AWS 認証情報の設定(環境変数、
~/.aws/credentials、または IAM ロール)
# 単体テスト
cargo test
# 統合テスト(LocalStack が必要)
docker run -d --name s3v-localstack -p 4566:4566 localstack/localstack
# テストデータのセットアップ後:
cargo test -- --ignored統合テストは LocalStack を使用して S3 API をローカルでエミュレートします。
s3v は read-only 設計です。S3 の書き込み API(put_object, delete_object 等)は一切使用しません。
- パストラバーサル防止: ダウンロード先パスの正規化検証、Zip エントリの
..拒否 - SQL インジェクション防止: WHERE 句の allow-list 方式バリデーション(許可カラム・演算子のみ)
- エラーメッセージのサニタイズ: AWS アカウント ID をマスク表示
- リソース制限: プレビュー(PDF 200MB / 画像 50MB)、S3 リスト(100K件)、並列DL(4同時)
PDF プレビューに使用する mupdf クレートは C ライブラリ(MuPDF)の FFI バインディングです。MuPDF のセキュリティアドバイザリを定期的に確認することを推奨します。プレビュー対象のファイルサイズは 200MB に制限されています。