はじめに
RubyプロジェクトでAWSにサービスを使うとき、AWSの開発ガイド「AWS SDK for Ruby のインストール」を見て、AWS SDKをインストールしました。
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 に書いてあるようにします。
# -------- before --------
gem 'aws-sdk'
# -------- after --------
gem 'aws-sdk-s3'
# -------- 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に書いてありました。