行動すれば次の現実

テック中心の個人ブログ

AWS SDK for Rubyを使ってS3上のファイル存在チェックをする方法

AWS SDK for Rubyを使用して、S3上に特定のファイルが存在するかどうかチェックする方法をまとめました。

前提

AWS SDK for Ruby Version 3のaws-sdk-s3を使用します。

github.com

実装

# 事前に初期化しておく
@s3_client = Aws::S3::Client.new

def exists?(key)
  @s3_client.head_object(key)
  true
rescue StandardError
  false
end

Aws::S3::Client#head_objectというメソッドを使用します。 head_objectとはオブジェクトのメタ情報のみを取得するメソッドです。 get_objectだとオブジェクト自体を取得してしまいますが、head_objectだと取得するのはファイルのメタ情報のみですので軽量でオススメです。

rescue StandardErrorしているのは、ファイルが存在しない場合にAws::S3::Errors::NotFoundが発生するためです。権限エラー時は別の例外クラスが発生したりしますので、一律StandardErrorとしてキャッチしています。

迷ったら公式リファレンスをチェックしよう

「Aws::S3::Clientを使用して他のことをやりたいんだけど、サンプルソースが見つからない」という場合は公式リファレンスをチェックすると良いでしょう。

https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html にアクセスすると、使用できるメソッドの一覧が表示されます。単語でページ内検索をして、やりたいことに近いメソッドを検索しましょう。

AWS SDKはS3:Client以外のもさまざまなクラスが存在します。他のクラスの仕様を確認したい場合は、URLのAws/S3/Client.htmlのところを該当のクラスに変更すればAPIリファレンスが確認できます。