elixir 1.0.0-rc1のアップデート

Elixir 1.0.0-rc1がリリースされました。homebrewで0.15.1から1.0.0-rc1にアップグレードした手順です。

1. brewのアップデート

$ brew update

2. elixirのバージョン確認

$ brew info elixir
elixir: stable 0.15.1 (bottled), devel 1.0.0-rc1, HEAD
http://elixir-lang.org/
/usr/local/Cellar/elixir/0.15.1 (322 files, 4.2M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/elixir.rb

devel 1.0.0-rc1 が追加されていますね。

3. elixirのアップグレード

$ brew unlink elixir
$ brew install elixir --devel
$ elixir -v
Elixir 1.0.0-rc1

rebar

Elixirコンパイラコンパイルにはrebarが使われています。コンパイラ周りのコードリーディング中に調べた内容をまとめました。

rebarとは

rebarとは、Erlangアプリケーションやポートドライバの、コンパイル・テスト・リリースを簡単に行う事ができる統合ビルドツールです。

rebar自体にescriptを含んでいるので配布やプロジェクトに直接含める事が簡単にできます。またErlang/OTPの標準的な慣習に沿ったプロジェクト構成に従うので、ビルド時の設定作業が少なくて済みます。更にモジュール/ライブラリの依存関係管理もしてくれるので、ユーザーはGithub等のリポジトリからライブラリを簡単に再利用できます。

すばらです。

インストール

rebarのインストールはmacだとhomebrewでインストールできます。Windowsの場合はわかりません。Google先生に聞いて下さい。

$ brew install rebar

ソースからコンパイルしたい場合は以下の様にGithubからソースをとってきてビルドしてください。

$ git clone git://github.com/rebar/rebar.git
$ cd rebar
$ ./bootstrap
$ mv rebar /path/to/your/bin

Githubにバイナリがあるのでそれをパスの通ったフォルダに入れても良いです。

$ wget https://github.com/rebar/rebar/wiki/rebar
$ mv rebar /path/to/bin

使い方

https://github.com/rebar/rebar/wiki に詳細な情報があります。

前提

rebarは標準的なOTPアプリケーション構成の慣習に沿って実行されます。OTPアプリケーションのフォルダ構成は以下の様になります。

myapp
├── src
│       └── myapp.app.src
├── ebin
│       └── myapp.app
├── priv
├── include
├── (test)
└── (c_src)

ebin/myapp.app は src/myapp.app.src をテンプレートとして、rebarがコンパイル時に生成します。この時、ebin以下にあるモジュールをmyapp.appのモジュール指定(module)に追加してくれます。

rebar.config

rebar.configに実行時のオプションを記述する事ができます。オプションの詳細は https://github.com/rebar/rebar/wiki/Rebar-commands#options を参照してください。

ヘルプ関連

rebarについて調べたい時は、以下のオプションをつけてrebarを実行します。テンプレートについては後述します。

$ rebar -c # コマンド一覧を表示
$ rebar help <command> # commandの説明を表示
$ rebar --version # バージョンを表示
$ rebar list-templates # 使用可能なテンプレートとテンプレートに渡すパラメータ名を表示
よく使うコマンド

頻繁に使用されるであろうコマンドです。

  • rebar compile

srcファイル以下のソースコードコンパイルして、ebin以下にbeamファイルを配置します。また、src/myapp.app.srcをテンプレートに、ebin/myapp.appファイルを生成します。コンパイルをサポートしているファイルは https://github.com/rebar/rebar/wiki/Rebar-commands#supported-source-formats を参照してください。

  • rebar eunit

eunitテストを実行します。eunitについては http://www.erlang.org/doc/apps/eunit/index.html を参照してください。

  • rebar doc

edocを使ってドキュメントを生成します。edocについては http://www.erlang.org/doc/apps/edoc/index.html を参照してください。

  • rebar clean

コンパイル時にできた実行ファイルやテストモジュールを削除します。

依存関係管理に関するコマンド

rebarはアプリ/モジュール/ライブラリの依存関係管理をしてくれますが、その依存関係はrebar.configのdepsタプルに記述します。
depsタプルの構成は

{ deps, [ Dependency1, Dependency2, ... ] }.

となります。各Dependencyは更に

{ App, VsnRegex, Source }

と分解できます。各要素は以下の通りです。

  • App : OTPアプリケーション名のアトムか文字列
  • VsnRegex : OTPアプリケーションの対象バージョンにマッチする正規表現
  • Source : OTPアプリケーションのフェッチ先を表すタプル

Sourceは更に以下のタプルに分解できます。

{ ScmType, URL, Target }

さらに見ていくと、

  • ScmType : SCMの種類、git/hg(mercury)/bzr(bazzar)を指定できます
  • Target : 該当リポジトリ内のブランチ/タグ/リビジョン/コミット

となり、Targetは以下の3タイプあります。

  • ブランチ指定
{ branch, "master" }. % masterブランチ
{ branch, "hoge" }. % hogeブランチ

以下の2つは同じ意味となります。

{ git, Url, "" }.
{ git, Url, { branch, "HEAD" } }.
  • タグ指定
{ tag, "v1.0.0" }. % v1.0.0のタグ
  • リビジョン/コミット指定

コミットは文字列で指定します。

"15bc558d8222b011e2588efbd86c01d68ad73e60"

また、各Dependencyタプルの後ろに、[raw] を付ける事ができます。このrawオプションを付けると、標準的なOTPアプリの構造でないアプリも許容するようになります。(例えば、src/target_app.app.src や ebin/target_app.app ファイルがないものなど)

wikiにあるサンプルを見てみましょう。

{ deps, [
    % OTPアプリ名 : em
    % 対象バージョン : 全て
    % 取得先 : https://github.com/sheyll/erlymock.git のmasterブランチ
    { em, ".*", { git, "https://github.com/sheyll/erlymock.git" } },

    % OTPアプリ名 : nano_trace
    % 対象バージョン : 全て
    % 取得先 : https://github.com/sheyll/nano_trace.git の feature/rebar-migrationブランチ
    { nano_trace, ".*", { git, "https://github.com/sheyll/nano_trace.git", { branch, "feature/rebar-migration" } } },

    % OTPアプリ名 : mochiweb
    % 対象バージョン : 2.3.2
    % 取得先 : https://github.com/mochi/mochiweb.git の v2.3.2タグ
    { mochiweb, "2.3.2", {git, "https://github.com/mochi/mochiweb.git", {tag, "v2.3.2"}}},

    % mochiwebをコミットでの指定
    % 取得先 : https://github.com/mochi/mochiweb.git の
    %              masterブランチの 15bc558d8222b011e2588efbd86c01d68ad73e60 のコミット
    % {mochiweb, "2.3.2", {git, "https://github.com/mochi/mochiweb.git",
    %                                       "15bc558d8222b011e2588efbd86c01d68ad73e60"},

    % アプリ名 : rebar
    % 対象バージョン : 全て
    % 取得先 : git://github.com/rebar/rebar.git の masterブランチ
    % rawオプションがついているので標準的なOTPアプリの構成でなくても良い
    { rebar, ".*", {git, "git://github.com/rebar/rebar.git", {branch, "master"}}, [raw]}
   ]}.

それではコマンドを見ていきましょう。なお、以下のコマンドは全てrebar.configに指定してある関連OTPアプリケーションが対象となります。

  • rebar get-deps : 関連OTPアプリをdepsフォルダに配置する
  • rebar update-deps : 関連OTPアプリをupdateする
  • rebar check-deps : 関連OTPアプリを表示する
  • rebar list-deps : 関連OTPアプリの詳細を表示する
  • rebar delete-deps : 関連OTPアプリを削除する
雛形作成に関するコマンド

rebarは各種ソースファイルの雛形をテンプレートから作成する事もできます。アプリケーション、モジュール、ライブラリ、テスト等のテンプレートがあり、自分でテンプレートを作成する事もできます。(rebar list-templatesで確認できます)

雛形作成は以下の様にテンプレート名と、テンプレートに渡すパラメータと値のオプションを付けて実行します。

$ rebar create template=<テンプレート名> <パラメータ>=<>
  • rebar create template=simpleapp appid=<アプリ名>

OTPアプリケーションの雛形として、.app.srcファイル、アプリケーションビヘイビア、スーパバイザビヘイビアのソースファイルが生成されます。

$ rebar create template=simpleapp appid=myapp
==> sample (create)
Writing src/myapp.app.src
Writing src/myapp_app.erl
Writing src/myapp_sup.erl
  • rebar create template=simplelib libid=<ライブラリ名>

ライブラリの雛形として、.app.srcファイル、.erlファイルが生成されます。

$ rebar create template=simplelib libid=mylib
==> sample (create)
Writing src/mylib.app.src
Writing src/mylib.erl
  • rebar create template=simplenode nodeid=<ノード名>

Reltool関連ファイルの雛形が生成されます。リリースに関する制御については https://github.com/rebar/rebar/wiki/Release-handling を参照してください。

$ rebar create template=simplenode nodeid=mynode
==> sample (create)
Writing reltool.config
Writing files/erl
Writing files/nodetool
Writing files/mynode
Writing files/sys.config
Writing files/vm.args
Writing files/mynode.cmd
Writing files/start_erl.cmd
Writing files/install_upgrade.escript

これら3つのコマンドは、以下のエイリアスがあります。

# 以下の2つは同じ意味
$ rebar create template=simpleapp appid=myapp
$ rebar create-app appid=myapp

# 以下の2つは同じ意味
$ rebar create template=simplelib libid=mylib
$ rebar create-lib libid=mylib

# 以下の2つは同じ意味
$ rebar create template=simplenode nodeid=mynode
$ rebar create-node nodeid=mynode

その他のテンプレートとしては以下があります。

$ rebar create template=simplesrv srvid=mysrv # gen_serverビヘイビアのコールバックモジュール
==> sample (create)
Writing src/mysrv.erl

$ rebar create template=simplefsm fsmid=myfsm # gen_fsmビヘイビアのコールバックモジュール
==> sample (create)
Writing src/myfsm.erl

$ rebar create template=simplemod modid=mymod # モジュールとそのテスト
==> sample (create)
Writing src/mymod.erl
Writing test/mymod_tests.erl

$ rebar create template=ctsuite testmod=mytest # common test suite
==> sample (create)
Writing test/mytest_SUITE.erl

$ rebar create template=basicnif module=mymodule # CのNIF(Native Implemented Function)モジュール
==> sample (create)
Writing src/mymodule.erl
Writing c_src/mymodule.c
  • ユーザー定義テンプレート

テンプレートを追加したい場合は、 ~/.rebar/templates/ ディレクトリにテンプレートファイルを配置すれば使用できるようになります。ユーザー定義のテンプレートは https://github.com/mbbx6spp/rebar-templates あたりから探してくると良いでしょう。

リリース関連
  • rebar generate

reltoolを使ってリリースパッケージを生成します。 https://github.com/rebar/rebar/wiki/Release-handling を参照してください。また、 https://gist.github.com/voluntas/4243786Erlangのリリースについての解りやすい解説があります。

  • rebar generate-upgrade

アップグレードパッケージを生成します。https://github.com/rebar/rebar/wiki/Upgrades を参照してください。

その他
  • rebar ct

common test suiteを実行します。common testについては http://erlang.org/doc/man/common_test.html を参照してください。

  • rebar escriptize

ebinにescriptファイルを生成します。 escriptについては http://www.erlang.org/doc/man/escript.html を参照してください。

  • rebar xref

xrefを走らせます。xrefについては http://www.erlang.org/doc/man/xref.html を参照してください。

まとめ

rebarについて調べた事をまとめました、ほぼ https://github.com/rebar/rebar/wiki に書いてある事が全てですけどね。「統合」ビルドツールという事だけあって、かなり多機能です。
リリースやアップグレード周りのコマンドに関しては、本格的にリリース作業・アップグレード作業をやった事が無いのでいまいちピンときませんでした。きっとバリバリErlangを使ってみないとありがたみは解らないのかもしれません。精進します。

EHG

Elixirについて何か調べると、海外サイトの情報しか出てこない事が不満です。

日本語の情報は確かにあるんですが、チュートリアル・環境設定・WAFに関するものが多く、言語のコア部分に関するものはほとんどありません。

Elixirはまだ若い言語で、活発に開発が進められているため、ほぼ毎日結構なコミットがあります。また、Elixir自体、Erlang/OTP上に構築されたErlangアプリケーションという事もあって、Erlangのコードリーディング対象として丁度良いと思い、Elixir言語のコードリーディングを始めました。

自分なりにElixirの構造やコンパイル時の挙動について調べた結果を少しずつですが文章にしています。ある程度まとまったら、どこか適当なサイト(Qiitaあたり)にでも公開しようと思います。

https://github.com/ohr486/EHG

名前はちょっと大げさ過ぎました・・・。

RubyKaigi2011 #1日目 自分用レポート

参加してきました、自分用メモ
裏の講演も面白そうなのがいっぱい。ニコニコにあがる?と思うのでそれまで我慢。

[基調講演][Ruby Ruined My Life] by Aaron Patterson (tenderlove)

  • たこやき仮面
  • ruby-core, ruby-dev 2つのML
  • railsrubyの開発の違い
  • rails=全員がリリースマネージャ
  • ruby=各分野に専門家がいる
  • 講演の最後にプロポーズ、おめでとう

[Next Version of Ruby 1.8 and 1.9] by CRuby development Member

  • 1.8に今後はない、1.9を使ってね
  • 1.9.3からライセンス変わる、GPLv3非互換だったから
  • 1.9.3にprivate constatnt機能が追加される
class YourLib
  class InnerClass
  end
  private_constant :InnerClass
end
YourLib::InnerClass
#=> private constant YourLib::InnerClass referenced
  • テスト並列化
  • GVL関連、1Coreじゃ変わらない?マシンを買ってね
  • TimerThread関連、rb_reserved_fd_p()を使ってね
  • Q&A
    • お客様の中にmrknさんはいますか?
    • Matzが通訳
    • Lib作者 vs App作者、モジュラリティ大切だよね
    • 1.9.3のリリースは8月末を予定、でもわからん
    • cygwinでは動かない、メンテナー求む
    • リリースマネージング周りで紛糾w
    • 1.9.1は1.9.3出たらメンテやめる
    • Ruby井戸端Kaigi

[Rubyを利用した大規模ウェブサービスの開発,運用] by 舘野祐一

[Shipping at the Speed of Life] by Corey Donohoe(githubの中の人)

  • 監視重要
  • githubで使ってる社内tool

[組込みシステムのための動的コンポーネント機構とVMの最適化] by 池原 潔

[軽量Ruby] by 岡部浩太郎,Matz

  • 上2つは(軽量)VMについての話、聞き入っててメモわすれた

[CRubyGCの並列世界] by nari

[並列世界Ruby処理系] by ささだこういち

  • 夢が実現しちゃった
  • VMについてとか、聞き入ってたのでメモ忘れた

[闇RubyKaigi]

  • 本日のメインイベント
  • Rubyきゃいぎ

やる夫がRubyをはじめるようです(3)

ラストです。

-----------------------------------------------------------------------------------

╋━━━━━━━━━━━━━━━╋
┃やる夫がRubyをはじめるようです(3)┃
╋━━━━━━━━━━━━━━━╋



[41]
翌日
      |┃三 ガラッ
      |┃  ____
      |┃/⌒  ⌒\        やらない夫、早速Rubyの事おしえるお。
      |┃(●)  (●) \
───|┃:⌒(__人__)⌒:::::\     言われたとおり、やる夫の愛機持ってきたお。
      |┃  |r┬-|     |⌒)
      |┃   `ー'ォ     //
      (⌒ヽ・    ・ ̄ /
      |┃ノ       /
      |┃   つ   <
      |┃  (::)(::)   ヽ
      |┃/    >  )
      |┃     (__)



[42]
           / ̄ ̄\
         /   _ノ  \       おう、やる夫、よく来たな。
         |    ( ●)(●
.         |      (__人__)     じゃあ早速はじめるぞ。
           |,      ` ⌒´ノ
          │         }
           ヽ、      ソ
          イ斗┴r┐` .;
    / ̄`ーゞ、  / |__ 〈ー─r、
   /     \ ∨\  |,ベ._ / |
   {    . : : : . ヽ>ー\[ ̄{ 〉\|、_
   |        `丶}\  __\_]~∨'\`ヽ
   :|   ._    \_}/r‐-}\ ゙,`''く l ゙,
    ト、: :./ / ̄`` ぐ└f'二)::{  ',  | !,ゞ┐
    `、∨ ´ ,.、-''"~ ̄}_{‐''く:::{_  ', _|_|_,rー'、_
     }{ / _、-'''"~ ̄{_\;;;;;j;><;:::::\:::ヘ}\
      }∨: /  _、-''゙~ ̄ ̄     \::::},之_ ヽ
       〉∨   /           ,.、イ;;ノ_   `ヽ}
     {: \,/\  -‐ '"   /` ̄      :.:}



[43]
               /7
                 //
             //    まずは、Rubyの種類についてだ。
       __    //
.    /ノ ヽ\ .//      やる夫、Rubyってどれくらい種類があると思う?
.   / (●)(●〉/
  l    (__人_,//l
.  |    `⌒// ノ
   l       // ./
.   ヽ r-‐''7/)/
    / と'_{'´ヽ
    /  _.、__〉 ト,
    {  、__}  |.i
    ヽ _,.フ  .|.|



[44]
      _____     ━┓
    / ―   \    ┏┛   Rubyの種類?Versionの違いじゃなくてかお?
  /ノ  ( ●)   \  ・
. | ( ●)   ⌒)   |      Rubyは1つじゃないのかお?
. |   (__ノ ̄    /
. |             /
  \_    ⊂ヽ∩\
    /´     (,_ \.\
.    |  /     \_ノ



[45]
    / ̄ ̄\
  /   _ノ  \    ああ、実はRubyには色々な種類の実装があるんだ。
  |    ( ●)(●)
  |     (__人__)   もちろんVersionの違いもあるがな。
  |         ノ
  |     ∩ノ ⊃ }
  /ヽ   / _ノ }
 ( ヽ  /  / ノ
  ヽ “  /_|  |
   \__/__ /



[46]
             -‐ '´ ̄ ̄`ヽ、
             / /" `ヽ ヽ  \     Versionは大きく分けて1.8系と1.9系の2つあるにょろ。
         //, '/     ヽハ  、 ヽ
         〃 {_{ノ    `ヽリ| l │ i|    1.8系と1.9系は違いが大きくて、これから始めるなら1.9系を
         レ!小l●    ● 从 |、i|    お勧めするにょろ。
          ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│
        /⌒ヽ__|ヘ   ゝ._)   j /⌒i !
      \ /:::::| l>,、 __, イァ/  /│
.        /:::::/| | ヾ:::|三/::{ヘ、__∧ |
       `ヽ< | |  ヾ∨:::/ヾ:::彡' |



[47]
     / ̄ ̄\
   /   _ノ  \     Versionは大きく分けて1.8系と1.9系の2種類ある。
   |    ( ●)(●
   |      (__人__)    もうひとつは実装の種類だ。
.   |        ノ
    |      ∩ ノ ⊃    (ちゅるやさん、いつの間に来たんだ?)
  /     ./ _ノ
  (.  \ / ./_ノ │
  \  “ /___|  |
.    \/ ___ /



[48]
-------------------------------------------------------------------
・MRI (Matz' Ruby Implimentation)
 Rubyの公式な実装、まつもとゆきひろ氏によって開発された。
 C言語による実装なので、別名CRubyとも呼ばれる。

・JRuby
 Javaによって書かれた実装。Java仮想マシン(JVM)上で動くので、
 JVMさえあればどのプラットフォームでも動く。

・IronRuby
 マイクロソフトによるRubyの実装。
 .NET Framework上で動作する。

・MacRuby
 Objective-Cで書かれた実装。
 Mac OS X上で動作する。

・Rubinius
 大部分がRuby自身で書かれたRubyの実装。
-------------------------------------------------------------------
    -、
   (  ヽ
    ヽ,_ \
    /゙i、`゙""゙ヽ           -‐ '´ ̄ ̄`ヽ、
   /   `'i   ゙、       / /" `ヽ ヽ  \
   l,  _/ヽ  .入      //, '/     ヽハ  、 ヽ
    ヾ、   / .ノ      〃 {_{\    /リ| l │ i|
      `ー'く /.\.     レ!小l●    ● 从 |、i|
            \\_. ヽ|l⊃ 、_,、_, ⊂⊃  |ノ│
               ( __ノヽ__|ヘ   ゝ._)   j /⌒i !
   .             \\::| l>,、 __, イァ/  / │
                 /\\ | ヾ:::|三/::{ヘ、__∧. |
   .             `ヽ<\\  ヾ∨:::/ヾ:::彡' |
実装に関しては本当にいっぱいあるにょろ。
有名な実装を挙げるとこんな感じにょろ。
この他にも MagLev、GoRuby、RubyEE などがあるにょろ。
※詳しく知りたい人はキーワード「Ruby 実装」等で Google it!



[49]
         ____
       /   u \      いっぱいあって、どれを選べば良いか
      /  \    /\     わからないお・・・。
    /  し (○)  (○) \
     | ∪    (__人__)  J |
    \  u   `⌒´   /



[50]
   / ̄ ̄\
 /   _ノ  \        まあ、最初はMRIの1.9系を入れておけばいいだろ。
 |    ( ●)(●)
. |     (__人__)       他の実装を試したくなったらRVM (Ruby Version Manager)
  |     ` ⌒´ノ       みたいなツールがあるからそれを使えばいい。
.  |         }
.  ヽ        }        ※UNIX系の環境で複数のRuby処理系を
   ヽ     ノ  mm     インストール・共存させるツール
   /    ̄ ̄ ̄ つノ
   |    | ̄



[51]
             -‐ '´ ̄ ̄`ヽ、
             / /" `ヽ ヽ  \     それじゃあ、早速インストールするにょろ。
         //, '/     ヽハ  、 ヽ
         〃 {_{       リ| l.│ i|    やる夫くんのマシンのOSは何にょろ?
         レ!小l\   `ヽ 从 |、i|
          ヽ|l >   ●  | .|ノ│
           |ヘ⊃ 、_,、_,⊂⊃j  | ,|
           | /⌒l __, イァト |/ |
           | /  /::|三/:://  ヽ |
           | |  l ヾ∨:::/ ヒ::::彡, |



[52]
               ∩_
              〈〈〈 ヽ   やる夫のマシンはWindowsだお。
      ____   〈⊃  }
     /⌒  ⌒\   |   |
   /( ●)  (●)\  !   !
  / :::::⌒(__人__)⌒:::::\|   l
  |     |r┬-|       |  /
  \     ` ー'´     //
  / __        /
  (___)      /



[53]
   / ̄ ̄\
 /   _ノ  \          WindowsならWindows版のバイナリがあるから
 |    ( ●)(●)         それを入れるのが手っ取り早いな。
. |     (__人__)
  |     ` ⌒´ノ         MacならMacRubyのインストーラーかMacPortsから、
.  |         }          Linuxならソースコードからコンパイルして入れるといいだろ。
.  ヽ        }
   ヽ     ノ    ビシッ
   /    く__,-ュ__   て
   |    ___ 三)  (
    |    |      



[54]
             -‐ '´ ̄ ̄`ヽ、
             / /" `ヽ ヽ  \     それじゃあ、Rubyの公式サイトから
         //, '/     ヽハ  、 ヽ    Windows版Rubyバイナリをダウンロードするにょろ。
         〃 {_{ノ    `ヽリ| l │ i|
         レ!小l●    ● 从 |、i|    ※URL:http://www.ruby-lang.org/ja/downloads/
          ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│
        /⌒ヽ__|ヘ   ゝ._)   j /⌒i !    ActiveScriptRubyかRuby-mswin32がお勧めにょろ。
      \ /:::::| l>,、 __, イァ/  /│   バージョンは1.8.7じゃなくて1.9.2だから、
.        /:::::/| | ヾ:::|三/::{ヘ、__∧ |    間違えないよう注意するにょろ。
       `ヽ< | |  ヾ∨:::/ヾ:::彡' |



[55]
        ____
      /      \       おっし、インストールしたお。
     /  ─    ─\
   /    (●)  (●) \
    |       (__人__)    |   ___________
   \      ` ⌒´  ,/   .| |             |
   ノ           \   .| |  やる夫専用    |
. /´                   | |             |
 |    l              | |             |
 ヽ    -一ー_~、⌒)^),-、    .|_|___________|
  ヽ ____,ノγ⌒ヽ)ニニニニ   _|_|__|_



[56]
       / ̄ ̄\
     /  ヽ、_  \    あとRubyと一緒にRubyGemsっていうパッケージ管理ツールを
    (●)(● )   |    入れておくのが良いだろ。
    (__人__)     |
    (          |    1.9系のRubyなら標準で入っているからインストールは不要だがな。
.    {          |
    ⊂ ヽ∩     く
     | '、_ \ /  )
     |  |_\  “ ./
     ヽ、 __\_/



[57]
             -‐ '´ ̄ ̄`ヽ、
             / /" `ヽ ヽ  \     じゃあ、ちゃんとインストールされたか
         //, '/     ヽハ  、 ヽ    確認するにょろ!
         〃 {_{`ヽ   ノ リ| l │ i|
         レ!小l●    ● 从 |、i|    やる夫くん、コマンドプロンプトを起動するにょろ。
          ヽ|l⊃ r‐‐v ⊂⊃ |ノ│
        /⌒ヽ__|ヘ  ヽ ノ   j /⌒i !    ※Macならターミナル、Linuxならコンソールで確認してください
      \ /:::::| l>,、 __, イァ/  /│
.        /:::::/| | ヾ:::|三/::{ヘ、__∧ |
       `ヽ< | |  ヾ∨:::/ヾ:::彡' |



[58]
-------------------------------------------------------------------
C:\Users\yaruo>
-------------------------------------------------------------------
        ____
      /⌒  ⌒\        わかったお!
     / ( ●)  (●)\
   / ::::::⌒(__人__)⌒:::::\
    |      |r┬-|     |
   \     `ー'´    /
   ノ            \
. /´                 ヽ                 カ
 |    l   l||l 从人 l||l      l||l 从人 l||l   カ   タ
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.     タ
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
   ┌ ┌┬┬┐┌┬┬┬┐┌┬┬┬┐┌┬┬┬┐
  ,. - ''"| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ρ ̄`l
   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ ̄ ̄



[59]
   / ̄ ̄\
 /   _ノ  \        よし、それじゃあ「ruby -v」でRubyのバージョン、
 |    ( ●)(●)       「gem -v」でRubyGemsのバージョンを表示させてみろ。
. |     (__人__)
  |     ` ⌒´ノ
.  |         }
.  ヽ        }
   ヽ     ノ    ビシッ
   /    く__,-ュ__   て
   |    ___ 三)  (
    |    |      



[60]
-------------------------------------------------------------------
C:\Users\yaruo> ruby -v
'ruby' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

C:\Users\yaruo>
-------------------------------------------------------------------
         ____、′     、 ’、  ′
       /      \     . ’      ’、           うごかないお・・・。
      /  ─    ─\ 、′・” ”;  ”  ’、
    /    (●)  (●) \  ’、′・  ’、.・”;  ”  ’、
     |       (__人__)  ’、′  ’、  (;;ノ;; (′‘ ・. ’、′”;
     \      ` ⌒´ ’、′・  ( (´;^`⌒)∴⌒`.・   ” ;  ’、′
    ノ          、 ’、 ’・ 、´⌒,;y'VAIO;;;;;ノ、"'人      ヽ
   /           〃  、(⌒ ;;;:;´'从 ;'   ;:;;) ;⌒ ;; :) )、   ヽ
  (    ヽ、     ,.γ ー( ´;`ヾ,;⌒)´  从⌒ ;) `⌒ )⌒:`.・ ヽ
   |   ヽ     γ⌒ヽ)ニ`:::、 ノ  ...;:;_)  ...::ノ  ソ ...::ノ



[61]
             -‐ '´ ̄ ̄`ヽ、
             / /" `ヽ ヽ  \     たぶんRubyの実行プログラムにパスが通ってないにょろ。
         //, '/     ヽハ  、 ヽ
         〃 {_{`ヽ   ノ リ| l │ i|    Rubyをインストールしたディレクトリにある「bin」フォルダに
         レ!小l●    ● 从 |、i|    パスを設定するにょろ。
          ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│
        /⌒ヽ__|ヘ   ゝ._)   j /⌒i !
      \ /:::::| l>,、 __, イァ/  /│
.        /:::::/| | ヾ:::|三/::{ヘ、__∧ |
       `ヽ< | |  ヾ∨:::/ヾ:::彡' |



[62]
        ____
      /─   ─\       Rubyのインストール先が「C:\Program Files\Ruby-1.9.2」だから
     / (●)  (●).\      「C:\Program Files\Ruby-1.9.2\bin」にパスを通すお。
   /     (__人__)   \
    |      ` ⌒´     |
   \            /
   ノ            \
. /´                 ヽ                 カ
 |    l   l||l 从人 l||l      l||l 从人 l||l   カ   タ
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.     タ
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
   ┌ ┌┬┬┐┌┬┬┬┐┌┬┬┬┐┌┬┬┬┐
  ,. - ''"| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ρ ̄`l
   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ ̄ ̄



[63]
             -‐ '´ ̄ ̄`ヽ、
             / /" `ヽ ヽ  \     パスを通したらもう一度試すにょろ。
         //, '/     ヽハ  、 ヽ
         〃 {_{`ヽ   ノ リ| l │ i|
         レ!小l●    ● 从 |、i|
          ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│
        /⌒ヽ__|ヘ   ゝ._)   j /⌒i !
      \ /:::::| l>,、 __, イァ/  /│
.        /:::::/| | ヾ:::|三/::{ヘ、__∧ |
       `ヽ< | |  ヾ∨:::/ヾ:::彡' |



[64]
-------------------------------------------------------------------
C:\Users\yaruo> ruby -v
ruby 1.9.2p136 (2010-12-25 revision 30365) [i386-mswin32_100]

C:\Users\yaruo> gem -v
1.3.7

C:\Users\yaruo>
-------------------------------------------------------------------
          ____
        /_ノ  ヽ、_\                   やったお!
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ        これでやる夫もRubyistだお。
/⌒)⌒)⌒) ::::::⌒(__人__)⌒:::\     /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / //
| :::::::::::(⌒)    | |  |   /|^| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
|     ノ     | |  |   \| |              |
ヽ    /     `ー'´     | |              |
 |     |   l||l 从人 l||l.   | |  やる夫専用    |
 ヽ     .---一ー_~、⌒)、⌒)^),| |              |
  ヽ _____,ノ|二二二二|_|_______________|



[65]
               / ̄ ̄\
             / ノ  \ \    (いや、まだ起動させただけだろ・・・)
             |  (●)(●) |
.             | u.(__人__) .|    それじゃ次はお約束のアレをやるぞ。
        r、      |   ` ⌒´  .|
      ,.く\\r、   ヽ      ノ    やるお、コマンドプロンプトで
      \\\ヽ}   ヽ     /     「irb」ってうってみろ。
       rヽ `   ヽ  /   ァ'´ヽ
        └'`{  .   \.|   /   i
            ヽ、._   ヽ、_,r'   .|
            `ヽ、   /'  |
               `'ー'´



[66]
-------------------------------------------------------------------
C:\Users\yaruo> irb
irb(main):001:0>
-------------------------------------------------------------------
        ____
      /⌒  ⌒\        わかったお!
     / ( ●)  (●)\
   / ::::::⌒(__人__)⌒:::::\
    |      |r┬-|     |
   \     `ー'´    /
   ノ            \
. /´                 ヽ                 カ
 |    l   l||l 从人 l||l      l||l 从人 l||l   カ   タ
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.     タ
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
   ┌ ┌┬┬┐┌┬┬┬┐┌┬┬┬┐┌┬┬┬┐
  ,. - ''"| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ρ ̄`l
   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ ̄ ̄



[67]
             -‐ '´ ̄ ̄`ヽ、
             / /" `ヽ ヽ  \     irbは「interactive ruby」の略にょろ。
         //, '/     ヽハ  、 ヽ    rubyの式を標準入力から入力/実行する為のツールにょろ。
         〃 {_{ノ    `ヽリ| l │ i|
         レ!小l●    ● 从 |、i|    お約束の Hello World プログラムを実行してみるにょろ。
          ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│
        /⌒ヽ__|ヘ   ゝ._)   j /⌒i !
      \ /:::::| l>,、 __, イァ/  /│
.        /:::::/| | ヾ:::|三/::{ヘ、__∧ |
       `ヽ< | |  ヾ∨:::/ヾ:::彡' |



[68]
   / ̄ ̄\
 /   _ノ  \        標準出力に文字列を表示させるのは「puts」だ。
 |    ( ●)(●)       やる夫、あとはわかるな?
. |     (__人__)
  |     ` ⌒´ノ
.  |         }
.  ヽ        }
   ヽ     ノ    ビシッ
   /    く__,-ュ__   て
   |    ___ 三)  (
    |    |      



[69]
        ____
      /⌒  ⌒\        もちろんだお!
     / ( ●)  (●)\
   / ::::::⌒(__人__)⌒:::::\
    |      |r┬-|     |
   \     `ー'´    /
   ノ            \
. /´                 ヽ                 カ
 |    l   l||l 从人 l||l      l||l 从人 l||l   カ   タ
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.     タ
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
   ┌ ┌┬┬┐┌┬┬┬┐┌┬┬┬┐┌┬┬┬┐
  ,. - ''"| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ρ ̄`l
   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ ̄ ̄



[70]
-------------------------------------------------------------------
C:\Users\yaruo> irb
irb(main):001:0> puts "やる夫がRubyをはじめるようです 完"
やる夫がRubyをはじめるようです 完
=> nil
irb(main):002:0>
-------------------------------------------------------------------
-----------------------------------------------------------------------------------