この記事の目的
以下の手順通り、Rubyの開発環境構築を自動化しました。方法としましては、シェルスクリプトを用いて、Homebrewによるパッケージのインストールの段階からコードで管理するようにしました。
その際に、シェルスクリプトの冪等性を確保する為に、このスクリプトを用いた環境構築のテストを行う必要がありました。
そしてそのテストの為に、一度ローカルにあるパッケージやGemを削除しましたが、少し面倒だったので忘れないようここに記しておきます。
Homebrewでインストールしたパッケージを削除する
私はローカルの環境構築の自動化をテストしたかった為、出来る限りローカルを初期状態に戻す必要がありました。その為私は、自身でインストールしたパッケージと、依存関係によりインストールされたパッケージ全てを削除しようと考えました。その方法を下に記載します。
一覧を表示
Homebrewでは、パッケージのことをformulaeと呼びます。以下formulaeの部分は任意のパッケージに置き換えて読んでください。
$ brew list
==> Formulae
formulae1 formula2 formula3 formula4
アンインストール
$ brew uninstall formula1
$ brew uninstall formula2 formula3 # 複数一括削除も可能
依存関係の確認
$ brew deps ruby
libyaml
openssl@1.1
readline
インストール方法の確認
ここで言うインストール方法と言うのは、以下の2通りのことを指します。
「私自身の指示でインストールする方法」もしくは
「依存関係によりインストールされる方法」
上記の例で言うと、ruby
は前者であり、libyaml
やopenssl@1.1
は後者に当たります。
これを確認するの為には以下のコマンドを実行し、"installed"
の項目を確認します。
$ brew info --json=v1 ruby
#(前略)
"installed": [
{
#(中略)
}
{
"installed_as_dependency": false,
"installed_on_request": true
}
],
#(後略)
"installed_as_dependency"
が依存関係によりインストールされたもので、
"installed_on_request"
がユーザーの指示でインストールされたものです。
上の4つのコマンドを駆使し、追加でインストールされたパッケージを全て削除しました。
Rubyの外部ライブラリGemを全て削除する
rubyのgemを削除する手法は2stepに分かれています。
- インストールしたgemを削除する
- 上位で削除できないdefault設定のgemも削除する
これら2ステップにより、ローカル内のgemを全て削除しました。
① インストールしたgemを削除する
# default以外のgemを削除する
$ gem uninstall -I -a -x --user-install --force
:
# defaultのgemが残る
$ gem list
*** LOCAL GEMS ***
benchmark (default: 0.1.0)
bigdecimal (default: 2.0.0)
:
zlib (default: 1.1.0)
② default設定のgemも削除する
# gemの環境設定を確認する
$ gem environment
RubyGems Environment:
- INSTALLATION DIRECTORY: /Users/****/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0
# gemのdefault設定を確認する
$ cd ~/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0
$ ls
build_info bundler cache doc extensions gems specifications
$ cd specifications
$ ls
default # このディレクトリがgemのデフォルト設定を管理する場所
# 上で確認したgemのdefault設定を削除
$ rm -rf ~/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/specifications/default
# defaultも含む全てのgemが削除されている
$ gem list
*** LOCAL GEMS ***
これによりgemを全て削除することができた。なおこの操作の後、ルートディレクトリ配下の.rbenv
やruby-version
なども削除し、初期設定に近づけた。