Rubyがインストールされていない環境下でRubyのirbをなんとか使う方法

 Rubyのマニュアルを読んでいると、サンプルとして掲載されているプログラムを実行して挙動を確認したいということがままあり、そういう時にirbは非常に重宝しています。しかし、移動している時などいつも手元にRubyがインストールされている環境があるわけではありません。そんなときでもirbを使う方法をまとめてみました。
 

Web

 Webベースのirbです。ネットに接続された環境下ならブラウザ上でirbを使用することができます。
try ruby! (in your browser)
http://tryruby.org/

 

For iOS

 私はiPhoneユーザーですので、一番よく利用しているのが以下のアプリです。移動中にRubyのマニュアルを読みながらメソッドの挙動などを確かめるのに非常に重宝しています。これもネット経由でリモートにirbを利用するサービスです。
irb for iPhone
http://itunes.apple.com/jp/app/irb/id409540962?mt=8
irb for iPhone
 
 Googleで「irb for iPhone」で検索するとiOSでirbを使えるようにしようという試みはいくつもされているみたいです。ここういうのがどんどん生まれてくるといいですね。できれば、ローカルで実行できるものが欲しい。 
 

For Android

 これはもしかするとAndroidにJRubyをインストールするものなのでしょうか。ならば正確には「Rubyがインストールされていない環境下」とはいえませんが、趣旨としては同じなので紹介してみます。とはいえ、私はAndroidユーザーではないので使用したことがありませんが、対話的に実行するirbが使えるだけではなく、Editorも用意されているようですので、コピペなどを駆使すればローカルで書いたスクリプトを実行もできるんではないでしょうか。正直、これは非常にうらやましい。
Ruboto IRB : 過去最大の衝撃。これは凄い!!AndroidでRubyが動く!!Androidアプリ427
Ruboto (JRuby on Android)
http://ruboto.org/

 

Ruby(1.8.7〜1.9.0)の配列の末尾には見えない要素があるらしい。

 少し細かい話を・・・・。
 『プログラミング言語Ruby』の「9.5.2.3 配列要素の書き換え」(p353)にsliceメソッドの解説に以下のようなサンプルコードが掲載されています。


<h1>slice!で要素、部分配列を削除</h1>

a = [1,2,3,4,5,6,7,8]
a.slice!(0)

<h1>=> 1: 添字 0 の要素を削除: a は[2,3,4,5,6,7,8]</h1>

a.slice!(-1,1)

<h1>=> [8]: 末尾の部分配列を削除: aは[2,3,4,5,6,7]</h1>

a.slice!(2..3)

<h1>=> [4,5]: 範囲を受け付ける: aは[2,3,6,7]</h1>

a.slice!(4,2)

<h1>=> []: 末尾の位置にある空配列: a は変更されず</h1>

a.slice!(5,2)

<h1>=> nil: a は [2,3,6,7,nil]に</h1>

1行目から8行目まではよくわかるのですが、9行目と11行目がよく理解できませんでした。同じ配列の範囲外を指定しているのに、なぜ9行目が空の配列を返し、11行目がnilを返してくるのかと。
 当然ですが、クラスも異なります。

a.slice!(4,2).class
#⇒ Array
a.slice!(5,2).class
#⇒ Nilclass

 
 う~ん、よくわからん。配列の末尾には

[2,3,5,6,(nil)]

 
という感じで見えないnilの値でも入っているのだろうかと、眠れない夜が続いていた(嘘)のですが、Rubyに詳しい方にこの件についてお尋ねする機会があったので伺ってみると、配列には見えない形で末尾に配列の末端であることを示すデータが入っているらしいのだそうです。C言語で書かれているのでその実装上の問題とか・・。C言語はよくわかりませんが、そうなんですか・・・。
つまり、

a ⇒[2,3,5,6,(配列の末尾であることを示す見えない要素)]

であるので、

a.slice!(4,2)

<h1>=> []</h1>

 
 と、空の配列を返すのだそうです。なるほど!そして、以下の場合

slice!(5,2)

 
 以下の■の部分のような配列の外を第一引数が指してしまうので、nilが返ってくるということになるらしい。なるほどぉぉお。

a ⇒[2,3,5,6,(配列の末尾であることを示す見えないデータ)] ■←ココ!

 
ちなみに
 『プログラミング言語Ruby』では以下のようにa配列の5番目の要素に”nil”が追加されますが、

a.slice!(5,2)

<h1>=> nil: a は [2,3,6,7,nil]に</h1>

 
 私のMacでは以下のようになります。a配列に5番目の要素に”nil”が追加されたりはしません。ちなみに私はRuby 1.8.7を使用しています。『プログラミング言語Ruby』は1.9.0までフォローしています。

a.slice!(5,2)

<h1>=> nil: a は [2,3,6,7]に</h1>

 
 この辺はRubyの実装環境の違いなんでしょうか・・・。
 ちなみにWebベースのirbであるtry ruby!で試したRuby 1.9.2だとArgumentErrorを返すようです。バグとして修正されたのでしょうか。

a = [2,3,6,7]
=> [2,3,6,7]

<blockquote>
  <blockquote>
    a.slice[4,2]
    ArgumentError: wrong number of arguments (0 for 1..2)
    a.slice[5,2]
    ArgumentError: wrong number of arguments (0 for 1..2)
    

 

W3CのTracking Protection Working GroupとWeb Payments Group

W3Cでは最近、おもしろそうなWorking Groupいろいろと立ち上がっているようだが、先日、立ち上がった「Tracking Protection Working Group」と「Web Payments Community Group」は特に興味深い。とくに後者のCGで検討されるらしいWeb上での少額課金は、標準化が進めば特定のプラットフォームに課金を依存する必要がなくなる。どちらもおもしろそうなのでMLには加入して議論を追ってみることにした。
ところですいません、Working GroupとCommunity Groupの違いはよくわかっておりません・・・。

■W3C Tracking Protection Working Group

W3C Tracking Protection Working Group
http://www.w3.org/2011/tracking-protection/
W3C Tracking Protection Working Group public-tracking@w3.org Mail Archives
http://lists.w3.org/Archives/Public/public-tracking/
W3C Launches Work on “Do Not Track” Standards for the Web–W3C

■Web Payments Community Group

Web Payments Community Group
http://www.w3.org/community/webpayments/
Web Payments Group Launched at W3C! | Web Payments Community Group
 twiter上だと”#payswarm“というハッシュタグで関係者がやり取りをしているらしい。
以下のPaySwarmというものをベースに議論を進めていくらしい。私は「PaySwarm?、なにそれ?初めて知った」という段階で何も分かっていないのだがこういうものもあるんですね。Web上の課金について関心をもっていながら全く知らなかった。勉強不足だ。
PaySwarm @ Digital Bazaar
http://payswarm.com/