つぶやきとプログラミング

アメトーーク好きなWebエンジニア芸人

余計なgemをVSCodeとbashでまとめて削除する

gem listを実行すると、以下のようにずらっと出てくる。

$ gem list

*** LOCAL GEMS ***

actioncable (5.2.0, 5.1.4, 5.1.2, 5.0.6)
actionmailer (5.2.0, 5.1.4, 5.1.2, 5.0.6, 4.2.5)
actionpack (5.2.0, 5.1.4, 5.1.2, 5.0.6, 4.2.5)
actionview (5.2.0, 5.1.4, 5.1.2, 5.0.6, 4.2.5)
activejob (5.2.0, 5.1.4, 5.1.2, 5.0.6, 4.2.5)
activemodel (5.2.0, 5.1.4, 5.1.2, 5.0.6, 4.2.5)
...

結果をコピペしていらないやつだけにしてgemList.txtで保存。 このとき表示されるバージョン一覧[ex). (5.2.0, 5.1.4, 5.1.2, 5.0.6)]が、gem uninstall GEMNAMEするときに不要なのでVSCodeを使って消す。 正規表現で"/ (.+)/" -> ""に置き換えれば済む。VSCodeがなかったらrubyとかでさくっと処理。

File.foreach('gemList.txt') do |line|
    puts line..gsub!(/ (.+)/, "")
  end

あとはbashでgem uninstall -aIx GEMNAMEを実行するファイルを書く。ここで-aIxオプションをつけておく。

    -a, --[no-]all                   Uninstall all matching versions
    -I, --[no-]ignore-dependencies   Ignore dependency requirements while
                                     uninstalling
    -D, --[no-]-check-development    Check development dependencies while uninstalling
                                     (default: false)
    -x, --[no-]executables           Uninstall applicable executables without
                                     confirmation
cat gemList.txt | while read line
do
sudo gem uninstall -aIx $line
done

疑問

試してないけど、もしかしたら途中のreplace処理いらないかもしれない。