BETA

gem コマンドで依存関係を調べ、 特定の gem だけ bundle update する

投稿日:2018-11-08
最終更新:2018-11-08
※この記事は外部サイト(https://mittsu-blog.com/gem-dependencies-a...)からのクロス投稿です

今回は、依存関係にある gem の調べ方と、bundle update コマンドの使い方をご紹介します。

脆弱性のあるライブラリに依存しているものを調べる

脆弱性のあるライブラリを使っていると警告を出してくれる GitHub 大先生

個人開発中の Rails アプリケーションについて GitHub を確認していたところ

"We found a potential security vulnerability in one of your dependencies."

と、ご丁寧に指摘してくださいました。ありがたい限りです。

gem コマンドを叩いて依存関係を調べる

脆弱性のあるライブラリ自体は、GitHub 上で警告表示されている箇所からリンクを辿ればすぐにわかります。

しかし私は、脆弱性のあるライブラリは一体どのライブラリに依存されているのか、という点がちょっと気になったのでそれを調べました。

調べる方法は簡単でした(今回脆弱性があるから更新してねと言われたのは "loofah" という gem でした)。

$ gem dependency -R loofah

上記コマンドを Rails アプリケーションのルートディレクトリで叩くだけです。すると、

Gem loofah-2.2.2
 concourse (>= 0.15.0, development)
 crass (~> 1.0.2)
(中略)
 Used by
   rails-html-sanitizer-1.0.4 (loofah (>= 2.2.2, ~> 2.2))

このような出力が返ってきました。

"rails-html-sanitizer-1.0.4" という gem が "loofah" に依存していた

ということがわかりました。

ちなみに、"loofah" が依存している gem は Used by より上に書いてある gem です。

bundle update で特定の gem だけ更新する

bundle update すると全ての gem が更新される

私は、ソフトウェアはできる限り早急にアップデートした方が良いと考えているので、今回も全てアップデートされるように bundle update を使いました。

しかし、世の中には個別にしたい人もいたり、個別にやらないとうまく動かなくなるなんていうことも聞きますから、後学のために調べておきました

(シンプルに疑問なのですが、安易に bundle update するな、やったらアプリが動かなくなるかもしれんぞって、それはそうなんですが、じゃああんた作ったやつは永遠にアップデートしねえのかい?って思うんですがどうなんですか?どうせするならさっさとやれよと思いますが。)

bundle update loofah

$ bundle update loofah

で、loofah とそれが依存する gem が更新されます。

またひとつ賢くなれました。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@edihasamの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!