← XeFM English | 日本語 · crftwr/xefm on GitHub · craftware

XeFM の AWS S3 対応

English | 日本語

概要

XeFM は AWS S3 とネイティブに連携しており、ターミナルの画面から直接 S3 バケット内のファイルをブラウズ、移動、管理できます。S3 のパスはローカルのディレクトリと同じように扱われるので、クラウドストレージを違和感なく扱えます。

機能

前提条件

AWS の認証情報

S3 対応は組み込みです。boto3 は XeFM に同梱されているので、設定が必要なのは認証情報だけです。

次のいずれかの方法で AWS の認証情報を設定してください。

方法 1:AWS CLI での設定(推奨)

aws configure

これで、アクセスキーを記録した ~/.aws/credentials が作成されます。

方法 2:環境変数

export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_DEFAULT_REGION="us-east-1"

方法 3:IAM ロール(EC2/ECS)

AWS のインフラ上で実行している場合は、IAM ロールを使います(設定は不要です)。

設定を確かめる

AWS の認証情報をテストします。

aws s3 ls

これが動けば、XeFM も S3 にアクセスできます。

クイックスタート

S3 バケットにアクセスする

XeFM を起動して S3 バケットに移動します。

xefm s3://my-bucket-name/

または XeFM の中から S3 に移動します。

  1. Jump to Path(jump_to_path)を開きます
  2. s3://my-bucket-name/ と入力します
  3. Enter を押します

S3 のパスの形式

S3 のパスは次の形式です。

s3://bucket-name/prefix/path/to/file.txt

例:

移動

バケットをブラウズする

S3 バケットはローカルのディレクトリと同じように移動できます。

仮想ディレクトリ

S3 はプレフィックスを使ってディレクトリを模倣します。

s3://my-bucket/
  ├── documents/          (prefix, acts like directory)
  │   ├── report.pdf
  │   └── notes.txt
  ├── photos/             (prefix, acts like directory)
  │   └── vacation.jpg
  └── readme.txt          (object)

XeFM はプレフィックスをディレクトリとして扱うので、自然に移動できます。

バケットの一覧

利用できるすべてのバケットを見るには、次のようにします。

  1. s3://(ルート)に移動します
  2. XeFM がアクセス権のあるすべてのバケットを一覧表示します
  3. バケットを選ぶと、その内容をブラウズできます

ファイル操作

ファイルをコピーする

XeFM は、アクティブなペインで選択したファイルを、反対側のペインの現在のディレクトリへ直接コピーします。クリップボードに入れて貼り付けるといった別の手順はありません。

S3 からローカルへ

  1. 片方のペインで S3 のファイルのディレクトリを、もう片方でローカルのコピー先を開きます
  2. S3 のペインでファイルを選択します
  3. File → Copy to Other Pane(反対側のペインへコピー、copy_files)を使うと、反対側(ローカル)のペインにコピーされます

ローカルから S3 へ

  1. 片方のペインでローカルのファイルのディレクトリを、もう片方で S3 のコピー先(例:s3://my-bucket/uploads/)を開きます
  2. ファイルを選択します
  3. File → Copy to Other Pane(copy_files)を使うと、S3 のペインにコピーされます

キーはキーマッププリセットによって異なります。キーマッププリセットを参照してください。

S3 上の場所の間で

両方のペインを S3 のパスにして、上と同じようにします。片方のペインで選択し、copy_files で反対側にコピーします。

ファイルを移動する

移動はコピーと同じように動作し、選択項目を反対側のペインのディレクトリに送ります。

  1. 反対側のペインで移動先を開きます
  2. ファイルを選択して move_files を実行します
  3. 移動を確認します

注意: S3 とローカルストレージの間の移動は、コピーと削除によって行われます。

ファイルを削除する

S3 のオブジェクトを削除します。

  1. ファイルに移動します(または選択します)
  2. File → Move to Trash…(delete_files、Delete キーでも実行できます)を使います。S3 にはゴミ箱がないので、完全に削除されます
  3. 削除を確認します

警告: バケットでバージョニングが有効になっていない限り、削除した S3 のオブジェクトは復元できません。

ファイルを表示する

S3 のファイルの内容を表示します。

  1. ファイルに移動します
  2. File → View File(view_file)を使います
  3. XeFM がファイルを一時的な場所にダウンロードし、ビューアーを開きます

注意: 大きなファイルはダウンロードに時間がかかることがあります。

パフォーマンスとキャッシュ

賢いキャッシュ

XeFM はパフォーマンスを高めるために S3 API の応答をキャッシュします。

キャッシュの設定

キャッシュは ~/.xefm/config.py で設定します。

# S3 cache TTL in seconds (how long directory listings are cached)
S3_CACHE_TTL = 60

キャッシュの動作

キャッシュを更新する

XeFM を通じて行った変更(アップロード、新しいディレクトリ、削除、名前変更)は、影響を受ける一覧をすぐに無効にするので、次に描画したときに反映されます。待つ必要はありません。

XeFM の外で行われた変更(別のクライアントやプロセスによるバケットへの書き込み)は、S3_CACHE_TTL の期限が切れたときに反映されます。既定では最大 60 秒です。

制限と注意点

S3 固有の制限

  1. 本当のディレクトリはない:S3 が使うのはプレフィックスで、本物のディレクトリではありません
  2. 名前変更はない:S3 は名前変更に対応していません(XeFM はコピーと削除で行います)
  3. 編集はコピーを通じて:File → Edit File(edit_file)はローカルのコピーを編集し、保存のたびにアップロードします(リモート編集を参照)。保存のたびにオブジェクト全体が書き直されます
  4. API のレート制限:大量の操作では、AWS がリクエストを抑制することがあります
  5. コスト:S3 の操作には AWS の料金(リクエストとデータ転送)がかかります

パフォーマンスについて

  1. レイテンシー:ネットワークの遅延が反応の速さに影響します
  2. 大きなファイル:大きなファイルのダウンロードには時間がかかります
  3. 多数のオブジェクト:数千のオブジェクトを持つバケットは一覧表示が遅いことがあります
  4. ページ分割:大きな一覧はページに分けて取得されます(複数のリクエストが必要になることがあります)

必要な権限

必要な S3 の権限:

トラブルシューティング

S3 にアクセスできない

問題: S3 のパスにアクセスすると XeFM がエラーを表示します。

解決策:

  1. boto3 がインストールされていることを確かめます:pip list | grep boto3
  2. AWS の認証情報を確認します:aws s3 ls
  3. バケット名が正しいことを確かめます
  4. バケットへのアクセスに必要な IAM 権限を確認します

パフォーマンスが遅い

問題: S3 の操作がとても遅いです。

解決策:

  1. ネットワーク接続を確認します
  2. 設定でキャッシュの有効期限を延ばします
  3. 自分のいる場所と同じリージョンの S3 を使います
  4. S3 Transfer Acceleration(AWS の機能)の利用を検討します

アクセスが拒否される

問題: バケットにアクセスすると “Access Denied” エラーが出ます。

解決策:

  1. そのバケットの IAM 権限を確かめます
  2. バケットポリシーがあなたの AWS アカウントを許可しているか確認します
  3. 認証情報が正しいことを確かめます:aws sts get-caller-identity
  4. バケットに特定の権限が必要かどうか確認します

ファイルが表示されない

問題: バケットの一覧にファイルが表示されません。

解決策:

  1. ディレクトリに入り直して一覧を取得し直します(キャッシュは S3_CACHE_TTL の経過後にも自動的に無効になります)
  2. ファイルが存在するか確認します:aws s3 ls s3://bucket-name/
  3. s3:ListBucket の権限があることを確かめます
  4. バケットに多数のオブジェクトがないか確認します(ページ分割で遅くなることがあります)

ダウンロードに失敗する

問題: S3 からファイルをダウンロードできません。

解決策:

  1. ネットワーク接続を確認します
  2. s3:GetObject の権限があることを確かめます
  3. ディスクの空き容量を確認します
  4. まず小さなファイルで試します
  5. AWS のサービスの稼働状況を確認します

高度な機能

リージョンをまたぐ操作

XeFM はどの AWS リージョンのバケットにも対応しています。

s3://us-east-bucket/file.txt
s3://eu-west-bucket/file.txt

注意: リージョンをまたぐ転送は遅くなることがあり、データ転送料金がかかります。

大きなファイルの扱い

大きなファイルについては次のとおりです。

バケットポリシー

XeFM はバケットポリシーに従います。

S3 のストレージクラス

XeFM はすべての S3 ストレージクラスで動作します。

注意: Glacier のオブジェクトは、アクセスする前に復元しておく必要があります。

おすすめの使い方

セキュリティ

  1. IAM ロールを使う:可能な場合は、アクセスキーよりも IAM ロールを使います
  2. 最小権限:必要な S3 の権限だけを付与します
  3. 認証情報のローテーション:AWS のアクセスキーを定期的に入れ替えます
  4. アクセスの監査:S3 のアクセスログを定期的に確認します

パフォーマンス

  1. キャッシュを使う:パフォーマンスのために既定のキャッシュ設定のままにしておきます
  2. 操作をまとめる:複数の操作を 1 つのセッションで行います
  3. 同じリージョン:可能な場合は自分のリージョンの S3 バケットを使います
  4. 大きな一覧を避ける:プレフィックスを使ってオブジェクトを整理します

コスト管理

  1. 使用量を監視する:S3 の API リクエストとデータ転送を把握します
  2. キャッシュを使う:API 呼び出しとコストを減らせます
  3. ライフサイクルポリシー:古いデータには S3 のライフサイクルポリシーを使います
  4. ストレージクラス:データに合った適切なストレージクラスを使います

整理

  1. プレフィックスを使う:プレフィックスの構造でオブジェクトを整理します
  2. 命名規則:オブジェクトには一貫した名前を付けます
  3. メタデータ:整理しやすいようにオブジェクトにメタデータを付けます
  4. タグ:分類やコスト配分に S3 のタグを使います

設定リファレンス

S3 対応の有効化と無効化

~/.xefm/config.py で次のように設定します。

# Enable S3 support
S3_ENABLED = True

キャッシュの設定

# S3 cache TTL in seconds
S3_CACHE_TTL = 60

パフォーマンスの調整

# Multipart upload threshold (bytes)
S3_MULTIPART_THRESHOLD = 5 * 1024 * 1024  # 5MB

# Multipart chunk size (bytes)
S3_MULTIPART_CHUNKSIZE = 5 * 1024 * 1024  # 5MB

例

例 1:ローカルのファイルを S3 にバックアップする

# Start XeFM
xefm

# Open the local directory in one pane and s3://my-backup-bucket/ in the other
# Select files in the local pane, then run copy_files to copy them to the S3 pane

例 2:S3 のファイルをダウンロードする

# Start XeFM with S3 path
xefm s3://my-bucket/downloads/

# Open the S3 directory in one pane and the local destination in the other
# Select files, then run copy_files to copy them to the local pane

例 3:S3 のオブジェクトを整理する

# Navigate to s3://my-bucket/
# Select files to move
# Run move_files
# Navigate to s3://my-bucket/organized/
# Confirm move

関連ドキュメント

まとめ

XeFM の S3 対応は AWS S3 と違和感なく連携し、ターミナルから直接クラウドストレージを管理できるようにします。賢いキャッシュ、仮想ディレクトリの移動、すべてのファイル操作への対応により、XeFM では S3 をローカルのファイルと同じくらい自然に扱えます。

最適なパフォーマンスを得るには、AWS の認証情報を適切に設定し、キャッシュをうまく使い、S3 のオブジェクトをわかりやすいプレフィックスの構造で整理してください。