                                                                           Rubyの概要




         Rubyの概要
         Summary of Ruby as Programming Language




                                              2011年05月26日
                                              鹿児島大学 学術情報基盤センター
                                              学術情報処理研究部門
                                              古屋 保
                                              furuya@cc.kagoshima-u.ac.jp

May 26, 2011                © Tamotsu FURUYA, All rights reserved.                1
                                                                   Rubyの概要



 内容
        1. Rubyとは
        2. Rubyの処理系
        3. Rubyのセットアップ
        4. スクリプトの作成と実行
        5. 基本文法
        6. クラスについて
        7. Ruby on Rails
        8. おわりに



May 26, 2011               © Tamotsu FURUYA, All rights reserved.         2
                                                                              Rubyの概要



 1. Rubyとは
    ●   Rubyとは
         –     まつもとゆきひろ(通称Matz)さんによって開発されたオブ
               ジェクト指向スクリプト言語
         –     1993年開発開始〜1995年12月にfj上で発表された.
         –     主な適用分野
               
                   テキスト処理
               
                   システム管理
               
                   ネットワーク・プログラミング
                  Webアプリケーション開発
                   (Ruby on Rails)
         –     もちろんフリーソフトウエア

    出典: オブジェクト指向スクリプト言語 Ruby, URL http://www.ruby-lang.org/ja/

May 26, 2011                          © Tamotsu FURUYA, All rights reserved.         3
                                                                       Rubyの概要



 1. Rubyとは
    ●   Rubyの特徴
         –     オブジェクト指向言語
               
                   数値などプリミティブなものも含めて,すべてのデータがオブ
                   ジェクトである.
                  多重継承に代わるMix-in機能を持つ
               
                   豊富なクラスライブラリ
         –     マルチスレッド,GC,正規表現のサポート
         –     簡潔な文法
               
                   型宣言が不要
               
                   ブロック付きメソッド,イテレータ

        「より良いPerl」,「ALGOLの皮を被ったLisp」などと呼ばれる
        「より良いPerl」,「ALGOLの皮を被ったLisp」などと呼ばれる
    参考: Yugui,初めてのRuby,オライリージャパン

May 26, 2011                   © Tamotsu FURUYA, All rights reserved.         4
                                                                       Rubyの概要



 2. Rubyの処理系
    ●   Rubyの処理系
         –     MRI(Matz's Ruby Implementation)
                  Matz自身によって開発されていた公式実装
                  C言語による実装(CRuby)で最も使用されている
                  バージョン1.8系統と1.9系統が混在中
         –     YARV(Yet Another Ruby VM)
               
                   笹田耕一氏(東大大学院)により開発された処理系
               
                   バイトコードインタプリタ
                    ●   JIT方式でバイトコードにコンパイルされ,VM上で実行
                  Ruby 1.9以降よりMRIに正式組込み



May 26, 2011                   © Tamotsu FURUYA, All rights reserved.         5
                                                                       Rubyの概要



 2. Rubyの処理系
    ●
        主なその他の実装
         –     JRuby
                  Javaベースの実装のためプラットフォーム非依存
                   (JavaでRubyランタイムインタプリタを実装)
                  JavaだけでRubyスクリプトが実行可能
                  RubyからJava APIが使用可能
         –     IronRuby
                  .NET Framework上で動作する実装(JScriptと同様)
                  DLR(Dynamic Language Runtime)上でRubyをサポート
         –     MacRuby
                  Objective-Cで書かれた実装(Mac OS X上で動作)

May 26, 2011                   © Tamotsu FURUYA, All rights reserved.         6
                                                                      Rubyの概要



 2. Rubyの処理系
    ●   MRIバージョン体系
         –     1.8系統
                  2003年8月に1.8.0をリリース,2011年5月現在1.8.7
                  現在広く利用されている,1.8系でしか動作しないライブラリも
                   存在
         –     1.9系統
                  2007年12月に1.9.0をリリース,2011年5月現在1.9.2
               
                   評価器を書き直すことで実行効率を向上
                  Multilingualization(M17N)多数の文字エンコーディング
                  RubyGems,Rakeが標準添付
                  「夢のRuby2.0」への足がかり


May 26, 2011                  © Tamotsu FURUYA, All rights reserved.         7
                                                                       Rubyの概要



 2. Rubyの処理系
    ●
        実行モデル
         –     1.8系統
               
                   ソースコードを解析して構文木を構築
               
                   構文木を巡りながらプログラムを実行
         –     1.9系統
               
                   ソースコードを解析して構文木を構築
               
                   構文木をバイトコードに変換する
                  独自の仮想マシン(YARV)で実行




    参考: Yugui,初めてのRuby,オライリージャパン

May 26, 2011                   © Tamotsu FURUYA, All rights reserved.         8
                                                                        Rubyの概要



 3. Rubyのセットアップ
    ●   Windows用 RubyInstaller
         –     サイトURL http://rubyinstaller.org/




May 26, 2011                    © Tamotsu FURUYA, All rights reserved.         9
                                                                            Rubyの概要



 3. Rubyのセットアップ
    ●   yum
         –     RPM系Linux(RedHat Linux,Fedora,CentOS等)
         –     # yum install ruby
    ●   apt
         –     Debian GNU Linux ,Ubuntu Linux,Vine Linux等
         –     $ sudo apt-get install ruby
    ●
        MacPorts
         –     $ sudo port install ruby19 +nosuffix
         –     $ /opt/local/bin/ruby -v             ==> Ruby 1.9
         –     $ /usr/bin/ruby -v ==> システムのRuby(Ver.1.8)

May 26, 2011                        © Tamotsu FURUYA, All rights reserved.        10
                                                                  Rubyの概要



 3. Rubyのセットアップ
    ●   RubyGems
         –     Rubyのパッケージ管理システム
         –     Ruby 1.9より標準添付(1.8系では別パッケージ)
         –     PerlのCPANに似ている
         –     外部ライブラリを簡単に導入,管理可能.

               #   Railsライブラリをインストールする
               $   gem install rails
               #   インストール済みのライブラリを表示する
               $   gem list
               #   ライブラリを検索する
               $   gem list -r sqlite


May 26, 2011              © Tamotsu FURUYA, All rights reserved.        11
                                                                       Rubyの概要



 3. Rubyのセットアップ
    ●   RVM(Ruby Version Manager)
         –     複数のRuby環境を構築できるツール
         –     1.8系統と1.9系統の環境を簡単に切り替え可能
         –     RVMのインストール方法
                  Webサイト(http://rvm.beginrescueend.com/)に記載

               #   RVMを使用して1.9系統をインストール
               $   rvm install ruby-1.9.2
               #   RVMを使用して1.8系統をインストール
               $   rvm install ruby-1.8.7
               #   1.9系統環境を利用する
               $   rvm use ruby-1.9.2
               #   1.8系統環境を利用する
               $   rvm use ruby-1.8.7
May 26, 2011                   © Tamotsu FURUYA, All rights reserved.        12
                                                                        Rubyの概要



 4. スクリプトの作成と実行
    ●
        簡潔な文法
         –     おまじない一切なし,いきなり書き始められる.
         –     Javaと異なり,必ずしもクラスを定義する必要はない.
         –     式と式の区切りは改行だけでOK.(一応,セミコロン「;」
               も利用可能)
         –     自動的にファイルを閉じる(ブロック付きメソッド).
             #!/usr/bin/ruby
             # -*- coding: utf-8 -*-

             puts "Hello World!"
             "こんにちは,世界!n".display
             ※1行目の「#!/usr/bin/ruby」はSheBang
             ※2行目は文字エンコーディングにUTF-8を指定している(マジックコメント)


May 26, 2011                    © Tamotsu FURUYA, All rights reserved.        13
                                                                      Rubyの概要



 4. スクリプトの作成と実行
    ●   Rubyの実行
         –     インタプリタの実行
               
                   シェル上で実行する
         –     対話的実行環境(irb: interactive ruby)

               # Rubyプログラムの実行
               $ ruby hello.rb

               # irbの実行
               $ irb
               irb(main):001:0> Time.now
               => 2011-05-23 11:22:55 +0900
               irb(main):002:0> quit
               $

May 26, 2011                  © Tamotsu FURUYA, All rights reserved.        14
                                                                              Rubyの概要



 4. スクリプトの作成と実行
    ●
        プログラムの簡潔さについて
         –     次の課題をJava,Rubyそれぞれで実現させる場合のソースを
               比較してみる.
                  課題1行ごとに数値が記録されている任意のテキストファイルを
                   読み込み,そこに記録されている数値をすべて2倍にした値を画
                   面に出力させなさい.

               テキストファイル例(data.txt)                          実行例
               10                                            $ PROG data.txt
               20                                            20
               30                                            40
               40                                            60
               50                                            80
                                                             100


May 26, 2011                 © Tamotsu FURUYA, All rights reserved.                 15
                                                               Rubyの概要



 4. スクリプトの作成と実行
    ●   プログラム例(Javaの場合)
    import java.io.*;
    class Hoge {
      public static void main(String[] args) {
        String fname = args[0];
        try{
          BufferedReader br = new BufferedReader(
                                new FileReader(fname));
          while ((String line = br.readLine()) != null)
             System.out.println(Integer.parseInt(line) * 2);
          br.close();
        } catch (IOException e) {}
      }
    }

May 26, 2011           © Tamotsu FURUYA, All rights reserved.        16
                                                                   Rubyの概要



 4. スクリプトの作成と実行
    ●   プログラム例(Rubyの場合)
           fname = ARGV[0]
           File::open(fname) { |f|
             f.each do |line|
               puts line.to_i * 2
             end
           }


                     $ ruby hoge.rb data.txt
                     20
                     40
                     60
                     80
                     100

May 26, 2011               © Tamotsu FURUYA, All rights reserved.        17
                                                                      Rubyの概要



 5. 基本文法
    ●
        型宣言が不要(動的型付け言語)
         –     ポリモーフィズム(多様性,多態性)
               
                   データ型が異なっても同様に処理が可能
               # 変数 i に整数を代入する
               i = 6

               # 文字列の代入も可能
               i = "Hello"

               # 文字列の長さを求める
               puts i.size                                 #=> 3

               # 配列の代入も可能
               i = [1, 2, 3, 4, 5]
               puts i.size                                 #=> 3
May 26, 2011                  © Tamotsu FURUYA, All rights reserved.        18
                                                                  Rubyの概要



 5. 基本文法
    ●
        すべてのデータがオブジェクト
         –     数値や文字列等の基本的なデータもオブジェクト

               # 通常の変数への文字列の代入
               str1 = "hello"
               str2 = "hello"

               # それぞれのオブジェクトIDを確認
               str1.object_id  #=> 2152236160
               str2.object_id  #=> 2152228620

               # 文字列の中身自体は等しい
               str1 == str2                            #=> true
               # オブジェクトは異なる
               str1.equal?(str2)                       #=> false

May 26, 2011             © Tamotsu FURUYA, All rights reserved.         19
                                                                      Rubyの概要



 5. 基本文法
    ●
        ブロック付きメソッド
         –     メソッドの呼び出しの後にブロックを付ける事が可能
             object.method名 ( 引数1, … ) do | 変数 |
                …中略…
             end

             object.method名 ( 引数1, … ) { | 変数 |
                …中略…
             }

             a = [1,2,3,4]
             a.each do |i|                         a = [1,2,3,4]
                puts i                             b = a.map {|i| i * 2}
             end
May 26, 2011                 © Tamotsu FURUYA, All rights reserved.         20
                                                                           Rubyの概要



 5. 基本文法
    ●
        データ型について
         –     基本的なデータ型に加えて,配列型,範囲型,ハッシュ型が
               ある.

         a     =   100         #   数値型
         b     =   "Hello"     #   文字列型
         c     =   [1, 2, 3]   #   配列型
         d     =   1..3        #   範囲型

         # ハッシュ型
         e = {"Apr" => 4, "May" => 5, "Jun" => 6}
         e = {:Apr => 4, :May => 5, :Jun => 6}
         puts e[:May]    #=> 5


May 26, 2011                       © Tamotsu FURUYA, All rights reserved.        21
                                                                  Rubyの概要



 5. 基本文法
    ●
        数値リテラルについて
         –     多倍長整数をサポート(メモリが許す限り幾らでも大きな整
               数を表現可能)
         –     実数値はIEEE754の倍精度浮動小数点数(少なくとも仮数部
               52bit,指数部11bitの精度)
         –     整数のサイズ,実数の精度,共にシステムに依存


         a = 2**64        # 2の64乗
         puts a           #=> 18446744073709551616

         a = 1.0 / 3
         printf("%.20fn", a) #=> 0.33333333333333331483

May 26, 2011              © Tamotsu FURUYA, All rights reserved.        22
                                                                  Rubyの概要



 5. 基本文法
    ●
        文字列リテラルとシンボル(唯一性を維持)

         # 結合と反復
         puts "hello " + "world!" #=> "hello world!"
         puts "hello " * 3        #=> "hello hello hello "

         # 通常の変数への文字列(シンボル)の代入
         str1 = :hello
         str2 = :hello

         # 値(文字列)は等しい
         str1 == str2      #=> true
         # オブジェクトも等しい(同一)
         str1.equal?(str2) #=> true

May 26, 2011              © Tamotsu FURUYA, All rights reserved.        23
                                                                    Rubyの概要



 5. 基本文法
    ●
        変数について
         –     接頭文字により,インスタンス変数やクラス変数等を識別.
         –     変数は値ではなくオブジェクトへの参照を保持する.

         VAR = "constant"                             #   定数
         $var = "global variable"                     #   グローバル変数
         var = "local variable"                       #   ローカル変数
         @var = "instance variable"                   #   インスタンス変数
         @@var = "class variable"                     #   クラス変数


               デフォルト値について
                ●
                  インスタンス変数とグローバル変数は,nil(値がないことを示す値)
                ●
                  他の変数はすべて参照する前に代入が必要


May 26, 2011               © Tamotsu FURUYA, All rights reserved.         24
                                                                      Rubyの概要



 5. 基本文法
    ●
        配列について
         –     配列は変数同様オブジェクトへの参照を保持する.
         –     v[0]は,実際はv[](0)というArray#[]メソッドである.
         v = [31,"foo",7,"hoge"]    # 配列リテラル
         p v[1]            #=> "foo" …添字参照
         p v[-2]           #=> 7 …負の添字も可能

         v[1] = "boo"        #=> [31,"boo",7,"hoge"]                 …添字代入
         v[1,2] = "zoo",5    #=> [31,"zoo",5,"hoge"]

         arr = ["C","D","B","A"]
         p arr.sort        #=> ["A","B","C","D"]
         arr.sort!         #=> ["A","B","C","D"] 破壊的メソッド

May 26, 2011                © Tamotsu FURUYA, All rights reserved.           25
                                                                      Rubyの概要



 5. 基本文法
    ●
        イテレータ
         –     for文,while文よりもイテレータを多用.
         –     each,times,upto,loop等がある.

        eachメソッド                                timesメソッド



         [1, 2, 3].each do |i|                   3.times do |i|
           puts "Hello.#{i}"                       puts "Hello.#{i}"
         end                                     end




May 26, 2011               © Tamotsu FURUYA, All rights reserved.           26
                                                                        Rubyの概要



 5. 基本文法
    ●
        メソッド
         –     すべてのメソッドは少なくとも1つのオブジェクトと対応



        メソッドの定義例                                 メソッドの定義例(多値の返却)


         def kasan(x, y)                          def my_method(x)
           x + y                                    return x, 1, 2
         end                                      end
         puts kasan(3, 5)                         a, *b = my_method(0)




May 26, 2011                © Tamotsu FURUYA, All rights reserved.            27
                                                                  Rubyの概要



 5. 基本文法
    ●
        メソッド
         –     ブロック付きメソッド
        ブロック付きメソッドの呼び出し例                       ブロック付きメソッドの定義例

         a, b = "apple", "banana"               def my_method
         [1,2,3].each do |a|                      yield "apple"
           a, b = 1, 2                            yield "banana"
         end                                    end
         puts a, b                              my_method do |i|
                                                  p i
         #=> "apple"                            end
              2
                                                #=> "apple"
                                                    "banana"

May 26, 2011              © Tamotsu FURUYA, All rights reserved.        28
                                                                            Rubyの概要



 6. クラスについて
    ●
        クラスの定義
         –     クラス階層は単一階層(トップはObjectクラス※)
         –     コンストラクタは initialize メソッド
                    class Person
                      def initialize
                        puts "INIT."
                        @b_year = 1986
                      end
                      def foo
                        puts @b_year
                      end
                    end
                    p1 = Person.new                            #=> "INIT."
                    p1.foo                                     #=> 1986
May 26, 2011                © Tamotsu FURUYA, All rights reserved.                29
                                                                     Rubyの概要



 6. クラスについて
    ●
        継承(サブクラス化)
         –     class文に「<」とスーパークラス名を追加

                 class Person
                   def foo
                     puts "Hello!"                        「Person」クラスの
                   end                                    サブクラス「Worker」
                 end                                      を定義

                 class Worker < Person
                 end

                 w1 = Worker.new
                 w1.foo                         #=> "Hello!"

May 26, 2011               © Tamotsu FURUYA, All rights reserved.          30
                                                                 Rubyの概要



 6. クラスについて
    ●
        (継承ではなく)クラス定義を追加可能.
               class Person
                 def foo
                   puts "Hello!"
                 end                                    以前のクラス定義を
               end                                      破棄する事なく,
               class Person                             新たな機能を追加定義
                 def foo                                することが可能
                   puts "Good bye"
                 end
               end

               p1 = Person.new
               p1.foo                         #=> "Good bye"

May 26, 2011             © Tamotsu FURUYA, All rights reserved.        31
                                                                      Rubyの概要



 6. クラスについて
    ●
        オープンクラス
         –     既に定義されているクラスに後から機能を追加可能.
         –     (場合によっては)標準クラスも書き換え可能.

                class String                              まずは「length」メソッド
                  undef length                            は無かったことにする.

                  def lengchu
                    return 12345                          新たに「lengchu」メソッ
                  end                                     ドを追加してみる.
                end
                p "hello".length               #=> エラー
                p "hello".lengchu              #=> 12345

May 26, 2011                 © Tamotsu FURUYA, All rights reserved.         32
                                                                        Rubyの概要



 6. クラスについて
    ●
        モジュール
         –     Mix-inとして使用される(多重継承の代わり)
             module SatsumaImo
                                                             モジュールの定義
               def msg                                       (インスタンス化は不可)
                 puts "..Imo.."
               end
             end                                             モジュールを使用する際は
                                                             include する
             class Shouchu < Osake
               include KomeKouji, SatsumaImo
             end

             s1 = Shouchu.new
             s1.msg                   #=> "..Imo.."

May 26, 2011                    © Tamotsu FURUYA, All rights reserved.        33
                                                                            Rubyの概要



 7. Ruby on Rails
    ●   Ruby on Rails(以下,Rails)とは
         –     RubyによるWebアプリケーションフレームワーク
         –     ライブラリとユーティリティプログラムのパッケージ
         –     デンマークのDavid Heinemeier Hansson氏(通称DHH)によっ
               て開発
         –     MVC(Model-View-Controller)アーキテクチャをサポート
         –     オープンソースウエアである
         –     RubyGemsにより配布されている
         –     Twitter※注,Groupon,楽天

    参考: Ruby on Rails URL http://rubyonrails.org/
    ※注 最近ではバックエンドやインフラを「Scala」に置き換えている


May 26, 2011                        © Tamotsu FURUYA, All rights reserved.        34
                                                             Rubyの概要



 7. Ruby on Rails
    ●   Railsの全体概要
                           Railsは,これら複数のライブラリからなる
                           フルスタックフレームワークである.




May 26, 2011         © Tamotsu FURUYA, All rights reserved.        35
                                                                 Rubyの概要



 7. Ruby on Rails
    ●   Railsアプリケーション作成概要
         –     まずは,railsコマンドでスケルトン作成
         –     コマンド「rails new アプリケーション名」で作成可能.
        # Railsアプリケーションのスケルトン作成
        $ rails new blog
         create
              create README
              create Rakefile
              create config.ru
              create .gitignore
              create Gemfile
              create app
              create app/controllers/
                :


May 26, 2011             © Tamotsu FURUYA, All rights reserved.        36
                                                                     Rubyの概要



 7. Ruby on Rails
    ●   Railsアプリケーション作成概要
         –     Webサーバ機能
                  コマンド「rails server」でRails付属のWebサーバが起動.

    # 作成されたディレクトリに移動
    $ cd blog
    # アプリに必要なGemをインストール
    $ bundle install
    # Webサーバの起動
    $ rails server
    => Booting WEBrick
    => Rails 3.0.4 application starting in ...
    => Call with -d to detach
    => Ctrl-C to shutdown server
      :                                      http://localhost:3000/



May 26, 2011                 © Tamotsu FURUYA, All rights reserved.        37
                                                                    Rubyの概要



 7. Ruby on Rails
    ●   Railsアプリケーション作成概要
         –     Scaffold
                   データベース内のデータの登録,読み込み,更新,削除(CRUD
                    操作)のために必要なコード(モデル,コントローラ,ビュー
                    のセット)を生成するしくみ

    # Railsコマンドでscaffoldを利用する
    $ rails generate scaffold Post name:string title:string 
    content:text
          invoke active_record
          create    db/migrate/20110309010212_create_posts.rb
          create    app/models/post.rb
          invoke    test_unit
          create                       15個程度のファイル(モデル
                      test/unit/post_test.rb
            :                          やビューなどのプログラム
                                       コード)を作成

May 26, 2011                © Tamotsu FURUYA, All rights reserved.        38
                                                                       Rubyの概要



 7. Ruby on Rails
    ●   Railsアプリケーション作成概要
         –     rake(ビルドツール,MakeのRuby版)でデータベースのマイ
               グレーションを行う.


               # rakeコマンドでDBマイグレーションの実行
               $ rake db:migrate
               == CreatePosts: migrating ================
               -- create_table(:posts)
                  -> 0.0021s
               == CreatePosts: migrated (0.0022s) =======

                              postsテーブルを自動生成




May 26, 2011                   © Tamotsu FURUYA, All rights reserved.        39
                                                                      Rubyの概要



 7. Ruby on Rails
    ●   O/Rマッピング
         –     DBのレコードとRubyのオブジェクトをマップする.
         –     テーブルのフィールドが,オブジェクトの属性となり,フィー
               ルド名がそのままアクセサとして定義される.
         –     ActiveRecord(DB抽象レイヤモジュール)の機能




    Postオブジェクト                                                     postsテーブル

May 26, 2011              © Tamotsu FURUYA, All rights reserved.               40
                                                                          Rubyの概要



 7. Ruby on Rails
    ●    Railsアプリケーション作成概要
          –    既にCRUDアプリケーションは完成している.




        http://localhost:3000/posts



May 26, 2011                      © Tamotsu FURUYA, All rights reserved.        41
                                                                   Rubyの概要



 7. Ruby on Rails
    ●   Railsアプリケーション作成概要
         –     既にCRUDアプリケーションは完成している.



                                                          実際のテーブルには,
                                                          レコード追加時のタイム
                                                          スタンプまで保存されて
                                                          いる.

    $ rails dbconsole
    SQLite version 3.7.4
    Enter ".help" for instructions
    Enter SQL statements terminated with a ";"
    sqlite> select * from posts;
    1|鹿児島太郎|はじめまして|こんにちは,初めての書き込み.|2011-05-24 09:43:31....
    2|薩摩花子|こんにちは|よろしくお願いします.|2011-05-24 09:44:02.458322|201....
    sqlite>

May 26, 2011               © Tamotsu FURUYA, All rights reserved.        42
                                                                                                                        Rubyの概要



 8. おわりに
    ●   Rubyの利用状況
         –     2010年10月現在,デプロイ
               されているRubyのバージョ
               ンの統計
         –     1.9系への移行メリット
                
                    多言語化
                   VMによる高速化
         –     懸念材料
                   1.9未対応のライブラリが
                    存在する.


    出典: RailsLab .:. State of the Stack: A Ruby on Rails Benchmarking Report - 05 October 2010
    URL http://railslab.newrelic.com/2010/10/05/state-of-the-stack-a-ruby-on-rails-benchmarking-report-05-october-2010


May 26, 2011                                      © Tamotsu FURUYA, All rights reserved.                                      43
                                                                                                                        Rubyの概要



 8. おわりに
    ●   Railsの利用状況
         –     2010年10月現在,デプロイ
               されているRailsのバージョ
               ンの統計
         –     Rails3への移行メリット
                   HTML5へのいち早い対応
                   jQueryも正式サポート
                   Ruby1.9への本格対応
                
                    パフォーマンスの向上
                
                    柔軟なカスタマイズ性

    参考: 松田明著「詳解Rails3」WEB+DB PRESS Vol.58 技術評論社
    出典: RailsLab .:. State of the Stack: A Ruby on Rails Benchmarking Report - 05 October 2010
    URL http://railslab.newrelic.com/2010/10/05/state-of-the-stack-a-ruby-on-rails-benchmarking-report-05-october-2010

May 26, 2011                                      © Tamotsu FURUYA, All rights reserved.                                      44
                                                                     Rubyの概要



 8. おわりに
    ●
        まとめ
         –     Rubyは純粋なオブジェクト指向言語である.
         –     すべてのデータがオブジェクトである.
         –     予約語あるいは演算子の様で実はメソッド
               (例 include, 1+2, a[0],等)
         –     Conversion over Configuration(設定より規約)
         –     Ruby1.8からRuby1.9へ,Rails2からRails3へのバージョン移行の
               問題
         –     公式実装MRI(cRuby)が先を行っているが,JRubyも気になる
               存在.
         –     とにかく,プログラミングしていて楽しい!

May 26, 2011                 © Tamotsu FURUYA, All rights reserved.        45
                                                                     Rubyの概要



 9. おまけ
    ●
        プログラミング例

         $ irb --simple-prompt

         >> p 3.14156.round(2)
         => 3.14

         >> require 'active_support/all'
         => true

         >>    Time.now
         =>    2011-05-24 19:16:52 +0900
         >>    p 2.weeks.ago
         =>    2011-05-10 19:17:03 +0900

May 26, 2011                 © Tamotsu FURUYA, All rights reserved.        46
                                                                  Rubyの概要



 9. おまけ
    ●
        プログラミング例

        >> "student".pluralize
        => "students"

        >> "ruby".pluralize
        => "rubies"

        >> %w[apple banana orange].sample(1)
        => ["orange"]

        >> %w[apple banana orange].sample(1)
        => ["apple"]



May 26, 2011              © Tamotsu FURUYA, All rights reserved.        47
                                                                       Rubyの概要



 9. おまけ
    ●
        プログラミング例
         def fact(n)
           if n == 1
             1
           else
             n * fact(n - 1)
           end
         end
         print "20!=", fact(20)
                                            #=> 20!=2432902008176640000

         (1..20).reduce{|s, x| s * x}
         (1..20).reduce(:*)

         参考: まつもとゆきひろ,Rubyビジネスの将来

May 26, 2011                   © Tamotsu FURUYA, All rights reserved.        48

Summary of Ruby

  • 1.
    Rubyの概要 Rubyの概要 Summary of Ruby as Programming Language 2011年05月26日 鹿児島大学 学術情報基盤センター 学術情報処理研究部門 古屋 保 furuya@cc.kagoshima-u.ac.jp May 26, 2011 © Tamotsu FURUYA, All rights reserved. 1
  • 2.
    Rubyの概要 内容 1. Rubyとは 2. Rubyの処理系 3. Rubyのセットアップ 4. スクリプトの作成と実行 5. 基本文法 6. クラスについて 7. Ruby on Rails 8. おわりに May 26, 2011 © Tamotsu FURUYA, All rights reserved. 2
  • 3.
    Rubyの概要 1. Rubyとは ● Rubyとは – まつもとゆきひろ(通称Matz)さんによって開発されたオブ ジェクト指向スクリプト言語 – 1993年開発開始〜1995年12月にfj上で発表された. – 主な適用分野  テキスト処理  システム管理  ネットワーク・プログラミング  Webアプリケーション開発 (Ruby on Rails) – もちろんフリーソフトウエア 出典: オブジェクト指向スクリプト言語 Ruby, URL http://www.ruby-lang.org/ja/ May 26, 2011 © Tamotsu FURUYA, All rights reserved. 3
  • 4.
    Rubyの概要 1. Rubyとは ● Rubyの特徴 – オブジェクト指向言語  数値などプリミティブなものも含めて,すべてのデータがオブ ジェクトである.  多重継承に代わるMix-in機能を持つ  豊富なクラスライブラリ – マルチスレッド,GC,正規表現のサポート – 簡潔な文法  型宣言が不要  ブロック付きメソッド,イテレータ 「より良いPerl」,「ALGOLの皮を被ったLisp」などと呼ばれる 「より良いPerl」,「ALGOLの皮を被ったLisp」などと呼ばれる 参考: Yugui,初めてのRuby,オライリージャパン May 26, 2011 © Tamotsu FURUYA, All rights reserved. 4
  • 5.
    Rubyの概要 2. Rubyの処理系 ● Rubyの処理系 – MRI(Matz's Ruby Implementation)  Matz自身によって開発されていた公式実装  C言語による実装(CRuby)で最も使用されている  バージョン1.8系統と1.9系統が混在中 – YARV(Yet Another Ruby VM)  笹田耕一氏(東大大学院)により開発された処理系  バイトコードインタプリタ ● JIT方式でバイトコードにコンパイルされ,VM上で実行  Ruby 1.9以降よりMRIに正式組込み May 26, 2011 © Tamotsu FURUYA, All rights reserved. 5
  • 6.
    Rubyの概要 2. Rubyの処理系 ● 主なその他の実装 – JRuby  Javaベースの実装のためプラットフォーム非依存 (JavaでRubyランタイムインタプリタを実装)  JavaだけでRubyスクリプトが実行可能  RubyからJava APIが使用可能 – IronRuby  .NET Framework上で動作する実装(JScriptと同様)  DLR(Dynamic Language Runtime)上でRubyをサポート – MacRuby  Objective-Cで書かれた実装(Mac OS X上で動作) May 26, 2011 © Tamotsu FURUYA, All rights reserved. 6
  • 7.
    Rubyの概要 2. Rubyの処理系 ● MRIバージョン体系 – 1.8系統  2003年8月に1.8.0をリリース,2011年5月現在1.8.7  現在広く利用されている,1.8系でしか動作しないライブラリも 存在 – 1.9系統  2007年12月に1.9.0をリリース,2011年5月現在1.9.2  評価器を書き直すことで実行効率を向上  Multilingualization(M17N)多数の文字エンコーディング  RubyGems,Rakeが標準添付  「夢のRuby2.0」への足がかり May 26, 2011 © Tamotsu FURUYA, All rights reserved. 7
  • 8.
    Rubyの概要 2. Rubyの処理系 ● 実行モデル – 1.8系統  ソースコードを解析して構文木を構築  構文木を巡りながらプログラムを実行 – 1.9系統  ソースコードを解析して構文木を構築  構文木をバイトコードに変換する  独自の仮想マシン(YARV)で実行 参考: Yugui,初めてのRuby,オライリージャパン May 26, 2011 © Tamotsu FURUYA, All rights reserved. 8
  • 9.
    Rubyの概要 3. Rubyのセットアップ ● Windows用 RubyInstaller – サイトURL http://rubyinstaller.org/ May 26, 2011 © Tamotsu FURUYA, All rights reserved. 9
  • 10.
    Rubyの概要 3. Rubyのセットアップ ● yum – RPM系Linux(RedHat Linux,Fedora,CentOS等) – # yum install ruby ● apt – Debian GNU Linux ,Ubuntu Linux,Vine Linux等 – $ sudo apt-get install ruby ● MacPorts – $ sudo port install ruby19 +nosuffix – $ /opt/local/bin/ruby -v ==> Ruby 1.9 – $ /usr/bin/ruby -v ==> システムのRuby(Ver.1.8) May 26, 2011 © Tamotsu FURUYA, All rights reserved. 10
  • 11.
    Rubyの概要 3. Rubyのセットアップ ● RubyGems – Rubyのパッケージ管理システム – Ruby 1.9より標準添付(1.8系では別パッケージ) – PerlのCPANに似ている – 外部ライブラリを簡単に導入,管理可能. # Railsライブラリをインストールする $ gem install rails # インストール済みのライブラリを表示する $ gem list # ライブラリを検索する $ gem list -r sqlite May 26, 2011 © Tamotsu FURUYA, All rights reserved. 11
  • 12.
    Rubyの概要 3. Rubyのセットアップ ● RVM(Ruby Version Manager) – 複数のRuby環境を構築できるツール – 1.8系統と1.9系統の環境を簡単に切り替え可能 – RVMのインストール方法  Webサイト(http://rvm.beginrescueend.com/)に記載 # RVMを使用して1.9系統をインストール $ rvm install ruby-1.9.2 # RVMを使用して1.8系統をインストール $ rvm install ruby-1.8.7 # 1.9系統環境を利用する $ rvm use ruby-1.9.2 # 1.8系統環境を利用する $ rvm use ruby-1.8.7 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 12
  • 13.
    Rubyの概要 4. スクリプトの作成と実行 ● 簡潔な文法 – おまじない一切なし,いきなり書き始められる. – Javaと異なり,必ずしもクラスを定義する必要はない. – 式と式の区切りは改行だけでOK.(一応,セミコロン「;」 も利用可能) – 自動的にファイルを閉じる(ブロック付きメソッド). #!/usr/bin/ruby # -*- coding: utf-8 -*- puts "Hello World!" "こんにちは,世界!n".display ※1行目の「#!/usr/bin/ruby」はSheBang ※2行目は文字エンコーディングにUTF-8を指定している(マジックコメント) May 26, 2011 © Tamotsu FURUYA, All rights reserved. 13
  • 14.
    Rubyの概要 4. スクリプトの作成と実行 ● Rubyの実行 – インタプリタの実行  シェル上で実行する – 対話的実行環境(irb: interactive ruby) # Rubyプログラムの実行 $ ruby hello.rb # irbの実行 $ irb irb(main):001:0> Time.now => 2011-05-23 11:22:55 +0900 irb(main):002:0> quit $ May 26, 2011 © Tamotsu FURUYA, All rights reserved. 14
  • 15.
    Rubyの概要 4. スクリプトの作成と実行 ● プログラムの簡潔さについて – 次の課題をJava,Rubyそれぞれで実現させる場合のソースを 比較してみる.  課題1行ごとに数値が記録されている任意のテキストファイルを 読み込み,そこに記録されている数値をすべて2倍にした値を画 面に出力させなさい. テキストファイル例(data.txt) 実行例 10 $ PROG data.txt 20 20 30 40 40 60 50 80 100 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 15
  • 16.
    Rubyの概要 4. スクリプトの作成と実行 ● プログラム例(Javaの場合) import java.io.*; class Hoge { public static void main(String[] args) { String fname = args[0]; try{ BufferedReader br = new BufferedReader( new FileReader(fname)); while ((String line = br.readLine()) != null) System.out.println(Integer.parseInt(line) * 2); br.close(); } catch (IOException e) {} } } May 26, 2011 © Tamotsu FURUYA, All rights reserved. 16
  • 17.
    Rubyの概要 4. スクリプトの作成と実行 ● プログラム例(Rubyの場合) fname = ARGV[0] File::open(fname) { |f| f.each do |line| puts line.to_i * 2 end } $ ruby hoge.rb data.txt 20 40 60 80 100 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 17
  • 18.
    Rubyの概要 5. 基本文法 ● 型宣言が不要(動的型付け言語) – ポリモーフィズム(多様性,多態性)  データ型が異なっても同様に処理が可能 # 変数 i に整数を代入する i = 6 # 文字列の代入も可能 i = "Hello" # 文字列の長さを求める puts i.size #=> 3 # 配列の代入も可能 i = [1, 2, 3, 4, 5] puts i.size #=> 3 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 18
  • 19.
    Rubyの概要 5. 基本文法 ● すべてのデータがオブジェクト – 数値や文字列等の基本的なデータもオブジェクト # 通常の変数への文字列の代入 str1 = "hello" str2 = "hello" # それぞれのオブジェクトIDを確認 str1.object_id #=> 2152236160 str2.object_id #=> 2152228620 # 文字列の中身自体は等しい str1 == str2 #=> true # オブジェクトは異なる str1.equal?(str2) #=> false May 26, 2011 © Tamotsu FURUYA, All rights reserved. 19
  • 20.
    Rubyの概要 5. 基本文法 ● ブロック付きメソッド – メソッドの呼び出しの後にブロックを付ける事が可能 object.method名 ( 引数1, … ) do | 変数 | …中略… end object.method名 ( 引数1, … ) { | 変数 | …中略… } a = [1,2,3,4] a.each do |i| a = [1,2,3,4] puts i b = a.map {|i| i * 2} end May 26, 2011 © Tamotsu FURUYA, All rights reserved. 20
  • 21.
    Rubyの概要 5. 基本文法 ● データ型について – 基本的なデータ型に加えて,配列型,範囲型,ハッシュ型が ある. a = 100 # 数値型 b = "Hello" # 文字列型 c = [1, 2, 3] # 配列型 d = 1..3 # 範囲型 # ハッシュ型 e = {"Apr" => 4, "May" => 5, "Jun" => 6} e = {:Apr => 4, :May => 5, :Jun => 6} puts e[:May] #=> 5 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 21
  • 22.
    Rubyの概要 5. 基本文法 ● 数値リテラルについて – 多倍長整数をサポート(メモリが許す限り幾らでも大きな整 数を表現可能) – 実数値はIEEE754の倍精度浮動小数点数(少なくとも仮数部 52bit,指数部11bitの精度) – 整数のサイズ,実数の精度,共にシステムに依存 a = 2**64 # 2の64乗 puts a #=> 18446744073709551616 a = 1.0 / 3 printf("%.20fn", a) #=> 0.33333333333333331483 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 22
  • 23.
    Rubyの概要 5. 基本文法 ● 文字列リテラルとシンボル(唯一性を維持) # 結合と反復 puts "hello " + "world!" #=> "hello world!" puts "hello " * 3 #=> "hello hello hello " # 通常の変数への文字列(シンボル)の代入 str1 = :hello str2 = :hello # 値(文字列)は等しい str1 == str2 #=> true # オブジェクトも等しい(同一) str1.equal?(str2) #=> true May 26, 2011 © Tamotsu FURUYA, All rights reserved. 23
  • 24.
    Rubyの概要 5. 基本文法 ● 変数について – 接頭文字により,インスタンス変数やクラス変数等を識別. – 変数は値ではなくオブジェクトへの参照を保持する. VAR = "constant" # 定数 $var = "global variable" # グローバル変数 var = "local variable" # ローカル変数 @var = "instance variable" # インスタンス変数 @@var = "class variable" # クラス変数 デフォルト値について ● インスタンス変数とグローバル変数は,nil(値がないことを示す値) ● 他の変数はすべて参照する前に代入が必要 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 24
  • 25.
    Rubyの概要 5. 基本文法 ● 配列について – 配列は変数同様オブジェクトへの参照を保持する. – v[0]は,実際はv[](0)というArray#[]メソッドである. v = [31,"foo",7,"hoge"] # 配列リテラル p v[1] #=> "foo" …添字参照 p v[-2] #=> 7 …負の添字も可能 v[1] = "boo" #=> [31,"boo",7,"hoge"] …添字代入 v[1,2] = "zoo",5 #=> [31,"zoo",5,"hoge"] arr = ["C","D","B","A"] p arr.sort #=> ["A","B","C","D"] arr.sort! #=> ["A","B","C","D"] 破壊的メソッド May 26, 2011 © Tamotsu FURUYA, All rights reserved. 25
  • 26.
    Rubyの概要 5. 基本文法 ● イテレータ – for文,while文よりもイテレータを多用. – each,times,upto,loop等がある. eachメソッド timesメソッド [1, 2, 3].each do |i| 3.times do |i| puts "Hello.#{i}" puts "Hello.#{i}" end end May 26, 2011 © Tamotsu FURUYA, All rights reserved. 26
  • 27.
    Rubyの概要 5. 基本文法 ● メソッド – すべてのメソッドは少なくとも1つのオブジェクトと対応 メソッドの定義例 メソッドの定義例(多値の返却) def kasan(x, y) def my_method(x) x + y return x, 1, 2 end end puts kasan(3, 5) a, *b = my_method(0) May 26, 2011 © Tamotsu FURUYA, All rights reserved. 27
  • 28.
    Rubyの概要 5. 基本文法 ● メソッド – ブロック付きメソッド ブロック付きメソッドの呼び出し例 ブロック付きメソッドの定義例 a, b = "apple", "banana" def my_method [1,2,3].each do |a| yield "apple" a, b = 1, 2 yield "banana" end end puts a, b my_method do |i| p i #=> "apple" end 2 #=> "apple" "banana" May 26, 2011 © Tamotsu FURUYA, All rights reserved. 28
  • 29.
    Rubyの概要 6. クラスについて ● クラスの定義 – クラス階層は単一階層(トップはObjectクラス※) – コンストラクタは initialize メソッド class Person def initialize puts "INIT." @b_year = 1986 end def foo puts @b_year end end p1 = Person.new #=> "INIT." p1.foo #=> 1986 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 29
  • 30.
    Rubyの概要 6. クラスについて ● 継承(サブクラス化) – class文に「<」とスーパークラス名を追加 class Person def foo puts "Hello!" 「Person」クラスの end サブクラス「Worker」 end を定義 class Worker < Person end w1 = Worker.new w1.foo #=> "Hello!" May 26, 2011 © Tamotsu FURUYA, All rights reserved. 30
  • 31.
    Rubyの概要 6. クラスについて ● (継承ではなく)クラス定義を追加可能. class Person def foo puts "Hello!" end 以前のクラス定義を end 破棄する事なく, class Person 新たな機能を追加定義 def foo することが可能 puts "Good bye" end end p1 = Person.new p1.foo #=> "Good bye" May 26, 2011 © Tamotsu FURUYA, All rights reserved. 31
  • 32.
    Rubyの概要 6. クラスについて ● オープンクラス – 既に定義されているクラスに後から機能を追加可能. – (場合によっては)標準クラスも書き換え可能. class String まずは「length」メソッド undef length は無かったことにする. def lengchu return 12345 新たに「lengchu」メソッ end ドを追加してみる. end p "hello".length #=> エラー p "hello".lengchu #=> 12345 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 32
  • 33.
    Rubyの概要 6. クラスについて ● モジュール – Mix-inとして使用される(多重継承の代わり) module SatsumaImo モジュールの定義 def msg (インスタンス化は不可) puts "..Imo.." end end モジュールを使用する際は include する class Shouchu < Osake include KomeKouji, SatsumaImo end s1 = Shouchu.new s1.msg #=> "..Imo.." May 26, 2011 © Tamotsu FURUYA, All rights reserved. 33
  • 34.
    Rubyの概要 7. Ruby on Rails ● Ruby on Rails(以下,Rails)とは – RubyによるWebアプリケーションフレームワーク – ライブラリとユーティリティプログラムのパッケージ – デンマークのDavid Heinemeier Hansson氏(通称DHH)によっ て開発 – MVC(Model-View-Controller)アーキテクチャをサポート – オープンソースウエアである – RubyGemsにより配布されている – Twitter※注,Groupon,楽天 参考: Ruby on Rails URL http://rubyonrails.org/ ※注 最近ではバックエンドやインフラを「Scala」に置き換えている May 26, 2011 © Tamotsu FURUYA, All rights reserved. 34
  • 35.
    Rubyの概要 7. Ruby on Rails ● Railsの全体概要 Railsは,これら複数のライブラリからなる フルスタックフレームワークである. May 26, 2011 © Tamotsu FURUYA, All rights reserved. 35
  • 36.
    Rubyの概要 7. Ruby on Rails ● Railsアプリケーション作成概要 – まずは,railsコマンドでスケルトン作成 – コマンド「rails new アプリケーション名」で作成可能. # Railsアプリケーションのスケルトン作成 $ rails new blog create create README create Rakefile create config.ru create .gitignore create Gemfile create app create app/controllers/ : May 26, 2011 © Tamotsu FURUYA, All rights reserved. 36
  • 37.
    Rubyの概要 7. Ruby on Rails ● Railsアプリケーション作成概要 – Webサーバ機能  コマンド「rails server」でRails付属のWebサーバが起動. # 作成されたディレクトリに移動 $ cd blog # アプリに必要なGemをインストール $ bundle install # Webサーバの起動 $ rails server => Booting WEBrick => Rails 3.0.4 application starting in ... => Call with -d to detach => Ctrl-C to shutdown server : http://localhost:3000/ May 26, 2011 © Tamotsu FURUYA, All rights reserved. 37
  • 38.
    Rubyの概要 7. Ruby on Rails ● Railsアプリケーション作成概要 – Scaffold  データベース内のデータの登録,読み込み,更新,削除(CRUD 操作)のために必要なコード(モデル,コントローラ,ビュー のセット)を生成するしくみ # Railsコマンドでscaffoldを利用する $ rails generate scaffold Post name:string title:string content:text invoke active_record create db/migrate/20110309010212_create_posts.rb create app/models/post.rb invoke test_unit create 15個程度のファイル(モデル test/unit/post_test.rb : やビューなどのプログラム コード)を作成 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 38
  • 39.
    Rubyの概要 7. Ruby on Rails ● Railsアプリケーション作成概要 – rake(ビルドツール,MakeのRuby版)でデータベースのマイ グレーションを行う. # rakeコマンドでDBマイグレーションの実行 $ rake db:migrate == CreatePosts: migrating ================ -- create_table(:posts) -> 0.0021s == CreatePosts: migrated (0.0022s) ======= postsテーブルを自動生成 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 39
  • 40.
    Rubyの概要 7. Ruby on Rails ● O/Rマッピング – DBのレコードとRubyのオブジェクトをマップする. – テーブルのフィールドが,オブジェクトの属性となり,フィー ルド名がそのままアクセサとして定義される. – ActiveRecord(DB抽象レイヤモジュール)の機能 Postオブジェクト postsテーブル May 26, 2011 © Tamotsu FURUYA, All rights reserved. 40
  • 41.
    Rubyの概要 7. Ruby on Rails ● Railsアプリケーション作成概要 – 既にCRUDアプリケーションは完成している. http://localhost:3000/posts May 26, 2011 © Tamotsu FURUYA, All rights reserved. 41
  • 42.
    Rubyの概要 7. Ruby on Rails ● Railsアプリケーション作成概要 – 既にCRUDアプリケーションは完成している. 実際のテーブルには, レコード追加時のタイム スタンプまで保存されて いる. $ rails dbconsole SQLite version 3.7.4 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> select * from posts; 1|鹿児島太郎|はじめまして|こんにちは,初めての書き込み.|2011-05-24 09:43:31.... 2|薩摩花子|こんにちは|よろしくお願いします.|2011-05-24 09:44:02.458322|201.... sqlite> May 26, 2011 © Tamotsu FURUYA, All rights reserved. 42
  • 43.
    Rubyの概要 8. おわりに ● Rubyの利用状況 – 2010年10月現在,デプロイ されているRubyのバージョ ンの統計 – 1.9系への移行メリット  多言語化  VMによる高速化 – 懸念材料  1.9未対応のライブラリが 存在する. 出典: RailsLab .:. State of the Stack: A Ruby on Rails Benchmarking Report - 05 October 2010 URL http://railslab.newrelic.com/2010/10/05/state-of-the-stack-a-ruby-on-rails-benchmarking-report-05-october-2010 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 43
  • 44.
    Rubyの概要 8. おわりに ● Railsの利用状況 – 2010年10月現在,デプロイ されているRailsのバージョ ンの統計 – Rails3への移行メリット  HTML5へのいち早い対応  jQueryも正式サポート  Ruby1.9への本格対応  パフォーマンスの向上  柔軟なカスタマイズ性 参考: 松田明著「詳解Rails3」WEB+DB PRESS Vol.58 技術評論社 出典: RailsLab .:. State of the Stack: A Ruby on Rails Benchmarking Report - 05 October 2010 URL http://railslab.newrelic.com/2010/10/05/state-of-the-stack-a-ruby-on-rails-benchmarking-report-05-october-2010 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 44
  • 45.
    Rubyの概要 8. おわりに ● まとめ – Rubyは純粋なオブジェクト指向言語である. – すべてのデータがオブジェクトである. – 予約語あるいは演算子の様で実はメソッド (例 include, 1+2, a[0],等) – Conversion over Configuration(設定より規約) – Ruby1.8からRuby1.9へ,Rails2からRails3へのバージョン移行の 問題 – 公式実装MRI(cRuby)が先を行っているが,JRubyも気になる 存在. – とにかく,プログラミングしていて楽しい! May 26, 2011 © Tamotsu FURUYA, All rights reserved. 45
  • 46.
    Rubyの概要 9. おまけ ● プログラミング例 $ irb --simple-prompt >> p 3.14156.round(2) => 3.14 >> require 'active_support/all' => true >> Time.now => 2011-05-24 19:16:52 +0900 >> p 2.weeks.ago => 2011-05-10 19:17:03 +0900 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 46
  • 47.
    Rubyの概要 9. おまけ ● プログラミング例 >> "student".pluralize => "students" >> "ruby".pluralize => "rubies" >> %w[apple banana orange].sample(1) => ["orange"] >> %w[apple banana orange].sample(1) => ["apple"] May 26, 2011 © Tamotsu FURUYA, All rights reserved. 47
  • 48.
    Rubyの概要 9. おまけ ● プログラミング例 def fact(n) if n == 1 1 else n * fact(n - 1) end end print "20!=", fact(20) #=> 20!=2432902008176640000 (1..20).reduce{|s, x| s * x} (1..20).reduce(:*) 参考: まつもとゆきひろ,Rubyビジネスの将来 May 26, 2011 © Tamotsu FURUYA, All rights reserved. 48