Ruby
Rails
AWS
Gem
aws-sdk

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に書いてありました。