トップ «前の日記(2023/03/09 (木) ) 最新 次の日記(2023/03/11 (土) )» 編集 RSS feed

HsbtDiary


2023/03/10 (金) [長年日記]

gem pristine コマンドをちょっと使いやすくした

RubyGems には gem pristine というインストール済みのキャッシュを使ってもう一度インストールしなおす pristine コマンドがあり、この pristine に --extensions をつけると C ext な gem だけ再インストールというか再ビルドすることができる。

つまり、rbenv each gem pristine --extensions などと実行すると、インストールしている Ruby のバージョンすべてでリビルドができるようになる。そんなことしてどうすんの、というのは後日説明するとして、とにかく一度インストールした C ext をもう一度ビルドしたいというときに、ビルドされてない、または壊れているものだけをビルドしたいと思ってもそういうオプションがないので追加した。

https://github.com/rubygems/rubygems/pull/6446

内部を知っていれば割と簡単な方法なんだけど、意外となかったのが面白かった。誰も使っていない疑惑。なお、gem pristine の本体じゃない方法でやるとしたら以下のようなコードになる。

#!/usr/bin/env ruby

require "rubygems/commands/pristine_command"

Gem::Specification.select { |spec|
  spec.platform == RUBY_ENGINE && spec.missing_extensions?
}.each do |s|
  puts s.full_name
  cmd = Gem::Commands::PristineCommand.new
  cmd.options[:args] = [s.name]
  cmd.options[:version] = s.version
  cmd.execute
rescue Gem::Ext::BuildError, Gem::Package::FormatError, Gem::InstallError, Zlib::BufError
end

今週はこの辺の C ext な gem のインストールや $LOAD_PATH の解決方法などをガッツリ調べたのでだいぶ理解が進んだ気がする。頑張ろう。

地球の歩き方 ベトナム 2021~2022 を読んだ

地球の歩き方、日替わりの500円セールであったり、kindle unlimited にやたら出てくるので最近良く読んでいるのだけど、今回はベトナムを読んだ。

ベトナム、ハノイ、ホーチミンに加えて最近はダナンも盛り上がっていて、縦断で行ってみたいとは思うものの飛行機前提ぽくなかなか大変そう。勤務先のANDPADにはベトナムにブランチオフィスがあるので、なんかの機会があれば行きたい。Rubyのカンファレンス、誰かお願いします。


D21 地球の歩き方 ベトナム 2021~2022 (地球の歩き方D アジア)
地球の歩き方編集室
学研プラス
¥1,870