Skip to content

daisuke8000/s3v

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

79 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

s3v - S3 Viewer TUI

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 で高速スクロールできます。

ダウンロード

  1. ダウンロードしたいファイルにカーソルを合わせて d を押す
  2. 複数ファイルの場合は Space で選択してから da で全選択も可)
  3. フォルダにカーソルを合わせて d でフォルダ一括ダウンロード
  4. 保存先パスを入力(Tab で補完可能)して Enter で開始

ダウンロード中は Esc でキャンセルできます。

フィルタ

/ を押すとフィルタモードに入ります。正規表現で現在のディレクトリ内のアイテムを絞り込めます。

/\.json$     → JSON ファイルのみ表示
/config      → 名前に "config" を含むアイテムのみ表示

Enter で適用、Esc でキャンセルします。

SQL 検索

? を押すと 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 に制限されています。

ライセンス

MIT

About

A read-only S3 browser TUI (Rust)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages