#プログラミングの勉強日記
2020年8月5日 Progate Lv.226
RailsのアプリをGitHubにプッシュしたら「One of your dependencies has a security vulnerability」というメールがたくさんきて、GitHubを見てみたら警告が出ていた。この対処法をまとめる。
#セキュリティアラートの確認
「We found potential security vulnerabilities in your dependencies.
Only the owner of this repository can see this message.」
という警告が出ている。
(メールにもセキュリティ警告のメールがたくさん届いた。)
「See Dependabout alerts」をクリックすると詳細がわかる。(スクショを取り忘れてしまった、、)
私の場合は「Gemfile.lock」を書きかえるよう言われていた。Gemfile.lockなんていじったことないのに、なんで…?という感じだったのでいろいろ調べてみた。
#対処法
ネットで調べてみた結果、コマンドでbundle update
を実行すれば解決するらしい。
bundle update
いくつかの警告は減ったが、それでも警告が残ってしまっていた。
警告内容を詳しく見てみると、railsとpumaを最新のバージョンにアップデートすればいいみたいだったので、Gemfileを書きかえた。(バージョンを指定しないと最新のgemがインストールされる)
#gem 'rails', '5.0.3'
#以下に書きかえる
gem 'rails'
#gem 'puma', '3.6.2'
#以下に書きかえる
gem 'puma'
Gemfileを書きかえたあとにbundle update
を実行する。
bundle update
実行したら、Gemfile
とGemfile.lock
をプッシュする。
警告が消えた!!
以上が解決方法である。
Gemfileはこちらの記事で触れているので、なんとなく理解しているが、Gemfile.lockがよくわからないので調べてみた。
#GemfileとGemfile.lockの違い
##Gemfileとは
インストールしたいgemを記述するファイル。
gem 'gemの名前'
と記述する。rails new
コマンドで生成されたGemfileにはすでにいくつかのgemが書かれてインストールされている。
gem 'gemの名前', 'gemのバージョン'
とすると、そのバージョンがインストールされる。バージョンを指定しないと、最新のgemがインストールされる。
##Gemfile.lockとは
bundle install
した時に作られるもの。Gemfileと似ているが、Gemfileに書いていたgemが必要としている別のgemも含め、動作に必要な全てのgemが展開される。つまり、Gemfile.lockはGemfile には書いてなくても,依存している gem は書かれている。
gem 自体がインストールされたかされていないかに関わらず、bundle install
したときに「Gemfile」に書かれたgemについてのバージョンや名前は「Gemfile.lock」に書かれている。
###Bundlerについて
Bundlerはgemを管理するためのgemのこと。bundle install
やbundle update
などを使用することができる。
Bundlerは「Gemifile」に書かれてあるgemの他に必要なgemもあり、それらを自動でインストールして「Gemifile.lock」に記述する。
##違い
- Gemfileは、インストールするgemを指定するファイル。
- Gemfile.lockは、実際にインストールされたものを記載したファイル(全部のgemが書かれている)。Bundlerでインストールされるgemパッケージの依存関係の解決結果とバージョンを固定する役割がある。単にgemだけ書いてあるGemfileと違って、バージョンまで書いてある。
#gem updateとbundle updateの違い
gem コマンドは「Gemfile」や「Gemfile.lock」とは無関係である。gem update はシステムにインストールされている gem について、それより新しいバージョンがあればその最新版をインストールする。
bundleコマンドは「Gemfile」と「Gemfile.lock」と関係している。「Gemfile.lock」は、bundle installすることで書き込まれる。(インストールを行った後に更新されている)
##bundle install と bundle updateについて
bundle install:「Gemfile.lock」を元にgemのインストールを行う。新しい環境や、gemfileに新しくgemを記述したときに使う。
bundle update:「Gemfile」を元にgemのインストールを行う。
#参考文献
GitHubでセキュリティ脆弱性のアラートが来てビビりながら対応した話
Githubから脆弱性を指摘されたのでメモ
Gemfile.lock が更新されるタイミングはいつなのか?
bundle installとupdateの使い方について