[#45318] Windows コマンドプロンプトで UTF-8を出力するには — Yuumi Yoshida <yuumi3@...>

おつかれさまです、 Yuumi3です。

11 messages 2008/08/08

[ruby-list:45459] Re: やっぱりrubygemの仕組みがいまいち分かりません

From: Akira Hayakawa <ruby@...>
Date: 2008-08-31 08:18:37 UTC
List: ruby-list #45459
On Sun, 31 Aug 2008 17:10:04 +0900
rubikitch@ruby-lang.org wrote:

> From: Akira Hayakawa <ruby@i-mail.jp>
> Subject: [ruby-list:45454] Re: やっぱりrubygemの仕組みがいまいち分かりません
> Date: Sun, 31 Aug 2008 16:19:29 +0900
> 
> # メールには適宜改行を入れましょう。
> 
> > 同じディレクトリにあるRakefileというのは何か関係があるのでしょうか?
> > 例えばGNUmakeでしたら、configure.inだとか、Makefileなるものがあって、
> > それを使ってインストールするのでしょうけど、ruby setup.rb と単にやる
> > と、上記の3つが自動的に全部行われるという解釈で良いのでしょうか?
> 
> Rakefileとsetup.rbは独立した存在です。
> インストールに関してはsetup.rbを使えばよいです。
> 
> というか、Rubyスクリプトをリリースする場合はsetup.rbを入れておくのが
> 慣例となっています。ユーザーにとってはインストールが楽ですから。
> 
> 名前からわかるようにRakefileはMakefileのRuby版です。
> あくまでも開発者がパッケージングに使うものであることが多いです。
> 
> > > ここで「ruby」コマンドでsetup.rbを実行したため、which rubyが指す
> > > Rubyインタプリタ(MatzRuby)の設定でインストールされます。
> > つまり、あるgemコマンド(バイナリかと思ってたら、拡張子がついてないだ
> > けでrubyスクリプトでした。そういえば、こんな事も出来るのですね)がど
> > う振る舞うかは、それをどのインタプリタで動かすかに依るとうい事ですね。
> > つまり、単にgemとした場合、$PATHを先から読んでいって、gemを見つければ
> > それを一番上に書いてあるインタプリタで実行して、そのインタプリタのロー
> > ドパスに入れると。
> 
> ロードパスに入れるのではなくて、Rubyインタプリタが起動された時点でロー
> ドパスは決まっています。
> 
> > 私のPATH環境変数は
> > akira@akira-desktop:/usr/local/bin$ echo $PATH
> > /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/jruby/bin
> > となっていて、もうパスが必要ならなんでも書いてしまえ方式でやってるの
> > ですが、これならば先に/usr/local/bin/gemがヒットするので、そちらの方
> > を実行する。
> 
> そうです。
> 
> > 仮に、jruby -S gemとした場合は、その時にインタプリタが違うという風に
> > 判断して、先に進んで、/usr/local/jruby/bin/gemにヒットして、jrubyがイ
> > ンタプリタなので実行するという事になる。
> 
> 違う違う。 jruby -S gem とした場合でも PATH からスクリプトを検索するの
> で /usr/local/bin/gem が実行されます。
> #!とは食い違っているけど、jrubyで /usr/local/bin/gem が実行されます。

何も指定しなければ、#!にかかれたインタプリタで実行された事になって、
明示的にインタプリタを指定すれば、そのインタプリタで実行された事になり、
かつ、そのインタプリタのロードパスにgemがインストールされるという事ですね。

> 
> それは別に気持ち悪いことではありません。
> gemスクリプト自体インタプリタに依存しているわけではないので、gemスクリプトが
> Rubyインタプリタに合ったRubyGemsライブラリを読み込みます。
> 
> 同じスクリプトを複数のRubyインタプリタで動かすことはよくあります。
> 
> > > gemコマンドそのものはどのRubyインタプリタでも実行可能です。
> > > ただ、「sudo gem」と実行すると#!に書かれたRubyインタプリタで実行します。
> > これは未確認ですが、強引に実行する場合は、
> > $jruby -S /usr/local/bin/gem
> > という風に実行すれば、仮にそのgemに#!/usr/local/bin/rubyと書いてあっ
> > たとしても、そのgemを使って、自分のロードパスにインストール出来るとい
> > う事でしょうか?非常に危険な香りがしますが。
> 
> jruby -S /usr/local/bin/gem‥というか jruby /usr/local/bin/gem でも
> 普通に実行できます。 全然危険ではないです。
> 
> > linuxに関する知識もまばらなのでこういう話は混乱しやすいです。
> 
> たしかに最初のうちはそれがGNU/Linuxの問題なのか、Rubyの問題なのか切り分
> けが難しいです。
> 
> > rubygemは/usr/localに解凍して良かったのでしょうか?それとも、
> > /usr/local/srcに解凍すべきだったのでしょうか?jrubyなども同様にして、
> > /usr/localにsvnで引っ張ってきてしまっていますけど。
> > 
> > akira@akira-desktop:/usr/local/rubygems-1.2.0$ ls /usr/local/src
> > ruby  tijmp-0.7
> > 
> > C言語のmakeが必要なものは、/usr/local/srcに入れて、他は/usr/localに入
> > れようという方針ですが、これってやっぱり間違ってますか?
> 
> 解凍はどこでもいいです。
> 普通ならばユーザー権限でホームディレクトリの孫あたりに展開すると思います。
> 僕ならば ~/src とか ~/compile とかの下ですね。
eclipseのように、ただ展開しただけで使えるものや、setup.rbやmakeなどでインストールしないとダメなものといろいろあるので、
毎回迷ってしまいます。

> 
> 
> --
> rubikitch
> Blog: http://d.hatena.ne.jp/rubikitch/
> Site: http://www.rubyist.net/~rubikitch/
> 
> 


-- 
Akira Hayakawa <ruby@i-mail.jp>

In This Thread