search
LoginSignup
2

More than 3 years have passed since last update.

posted at

AWS SDK for Ruby のインストールを早くする

はじめに

RubyプロジェクトでAWSにサービスを使うとき、AWSの開発ガイド「AWS SDK for Ruby のインストール」を見て、AWS SDKをインストールしました。

Gemfile
gem 'aws-sdk'

これを追加して、Gem installすると、インストールにかなり時間がかかってしまいます。

なぜ時間がかかるのか?

Gemfile.lockの中を見てみました。

...
aws-partitions (1.76.0)
aws-sdk (3.0.1)
  aws-sdk-resources (~> 3)
aws-sdk-acm (1.5.0)
  aws-sdk-core (~> 3)
  aws-sigv4 (~> 1.0)
...

上記のような、AWSに関する記述が500行くらいあり、100くらいのGemがインストールされていることがわかりました。

これを減らすことはできないのか?

AWS SDKではAWSサービスすべてが使えるように、多くのGemがインストールされます。
しかし、実際のプロジェクトではその中のS3のサービスしか使わないとなると、その他はインストールするのは無駄です。
AWSの特定サービスのSDKだけをインストールできないか AWS-SDK-Ruby の GitHubを見てみました。

すると、Upgrading Guideこんな記述がありました。

Version 3 modularizes the monolithic SDK into service specific gems.

AWS SDK Version3からSDKがモジュール化されており、特定サービスのGemをインストールできそうです。

特定サービスのGemだけをインストールしてみた

例として、S3のサービスだけを使えるように修正してみます。
やり方は、 Upgrading Guide Options に書いてあるようにします。

Gemfile
# -------- before --------
gem 'aws-sdk'

# -------- after --------
gem 'aws-sdk-s3'
s3.rb
# -------- before --------
require 'aws-sdk'

# -------- after --------
require 'aws-sdk-s3'

この状態で、Gem installを行って、Gemfile.lockを見たところ、その差は歴然でした!

  • コード行数
    • 539行 -> 15行
  • インストールGem数
    • 138個 -> 6個

CHANGELOGはどうやって確認すればよいか?

aws-sdk-ruby/gems/ から特定のサービスのSDKの中に、CHANGELOG.mdがありました。
AWS-SDK-S3を例にすると、以下のURLになります。
https://github.com/aws/aws-sdk-ruby/blob/master/gems/aws-sdk-s3/CHANGELOG.md

S3以外はどうやって記述できるのか?

Upgrading Guide Options には、S3とEC2の例が書いてありますが、他の場合はどう記述すればいいのでしょうか。
Supported Servicesに書いてありました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2