[SSL]行政サービス用認証局が...久しぶりに特許の手続きをしたんですが、法務局の電子証明書が30分ぐらいで発行されてかなりびっくり。世の中便利になったもんです。その特許庁のインターネット出願ですが、利用可能な認証局がファイル形式のもので4つ、ICカード形式のものは11個とわけの分からない状況になってます。GPKIがコケちゃった影響でしょうか。そのリストの中身もかなりバラエティに富んでいるのですが、各認証局の対応システムが微妙に違うというのがなんとも...。red.「なんでこうもバラバラなんだ。http://www.yonden.co.jp/business/ninsho/list.htmlジャパンネット株式会社http://www.japannet.jp/ca/service/denshi_nyusatsu/index.html東北インフォメーション・システムズ株式会社https://www.toinx.net/ebs/service/area_map.htmlついでに各省庁の電子入札システムのページも一通り見てみたんですが、うん、まあ。[Ruby]Rubyライブラリのパスの謎に迫る前回のサーチパスの問題がどうにも気持ち悪いので調べてみました。先に結論を書いておくと、Ruby本体のコンパイル時のオプションによってライブラリのサーチパスが変わり、その影響でbundlerがgemを見つけられなくなるという不具合のようです。問題のおさらいですが、tDiaryのtarボールを展開するとgemのファイルが".bundle/ruby/1.9.1/"以下に置かれます。ところが、私の環境ではこのパスを見つけられずエラーになってしまいました。installすると動くようになるこの時、gemは".bundle/ruby/1.9/"以下にインストールされる元の".bundle/ruby/1.9.1/"を".bundle/ruby/1.9/"に変更したり、シンボリックリンクを張ればそれらのファイル群でもちゃんと動くという状況でした。@machuさんの環境では1.9.3でもそのままで問題無く動くということでした。とここまでが昨日の時点での話で、ライブラリのサーチパスがかなり怪しいです。${WRKSRC}/configureという記述がありました。ところが、これが原因かと思ってさらに追ってみてもどうにもおかしい。version.c.と2009年の2月にはconfigureから消されているようで、今現在は意味の無いコードのようでした。分からないのでsandboxを作ってRubyをportsを使わずにソースからインストールしてみると、ちゃんと(?)/usr/local/lib/ruby/1.9.1/以下にインストールされるので、ますます謎です。ここでいったんRubyの追跡をあきらめ、gemのサーチパスが変わってしまう原因を追ってみますが、こちらのportsはソースには全く手を入れておらずにsetup.rbを実行しているだけでした。深みにはまってきたなぁと思いつつgemのソースを追います。ここでかなり時間がかかりましたが、なんとか探し出したところ、gemのサーチパスはdefaults.rbというファイルの中のdefault_dirで定義されているようでした。:のように初期化されています。RbConfig::CONFIGってなんぞやとぐぐってみると、「RbConfigというのがあってビルド時の情報とかが取れる」というブログの記事が見つかりました。"rubylibprefix"=>"/usr/local/lib/ruby",おぉ、ruby_versionが"1.9"だ。:と、ちゃんと"1.9.1"になっています。核心に迫ってきています。--with-vendordir="${PREFIX}/lib/ruby/vendor_ruby"という記述を発見。(full|minor|STR)とあったのでビンゴ。FreeBSDのportsではこの"--with-ruby-version=minor"指定でライブラリのインストールパスを"1.9"にしておいて、最初のbsd.ruby.mkでパッケージ化する際のパスを調整しているようでした。残る疑問は、Rubyのバージョンが"1.9.3"でもライブラリのパスがデフォルトでは"1.9.1"になっている点ですが、こちらは、1.9.2のリリースノートのFAQに答えがありました。このバージョン番号は「ライブラリ互換バージョン」です。1.9.2は1.9.1とおおよそ互換なので、ライブラリはこのディレクトリにインストールされます。まとめると、Rubyには言語のバージョンと独立したライブラリ互換バージョンという概念が存在するデフォルトの状態ではライブラリ互換バージョンの値と同じ名前のディレクトリにライブラリがインストールされるライブラリのインストール先ディレクトリの名前は、configureスクリプトで"--with-ruby-version"オプションを指定する事により変更可能この"--with-ruby-version"をつかってディレクトリを変更してしまうと、gemのライブラリ検索パスも変わってしまうこのため、例え同じバージョンのRubyであっても異なる"--with-ruby-version"オプションで構築された環境間では、{gemやbundlerのパスに関して互換性が無くなってしまう}ということのようです。ライブラリの互換性を保証するために(も)使われる名前がコンパイルオプションで自由に変更できるようになってちゃ駄目なんじゃないでしょうか?途中まではFreeBSD固有の問題かなと思っていたんですが...。2.5.7-p206。