6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

はじめに

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

6
4
0

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
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?