Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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

taki4227
中小企業のSIer、ベンチャー企業を経て、今はSHOWROOMのエンジニアをしています。Android・iOS・Flutterでアプリ開発をしてきました。良いものを作って届けたい、良いものを作ることに携わりたい。
https://note.com/taki4227
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away