SlideShare una empresa de Scribd logo
1 de 48
Descargar para leer sin conexión
                                                                           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

Más contenido relacionado

Similar a Summary of Ruby

Management of Gems using Bundler.
Management of Gems using Bundler.Management of Gems using Bundler.
Management of Gems using Bundler.Tamotsu Furuya
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Koichi Shimozono
 
Integration Technology of Ruby and DB.
Integration Technology of Ruby and DB.Integration Technology of Ruby and DB.
Integration Technology of Ruby and DB.Tamotsu Furuya
 
Ruby on RedHat Enterprise Linux
Ruby on RedHat Enterprise LinuxRuby on RedHat Enterprise Linux
Ruby on RedHat Enterprise LinuxTomoya Kawanishi
 
2017年3月13日勉強会発表資料
2017年3月13日勉強会発表資料2017年3月13日勉強会発表資料
2017年3月13日勉強会発表資料shogo yamada
 
Ruby Enterprise Environment
Ruby Enterprise EnvironmentRuby Enterprise Environment
Ruby Enterprise EnvironmentTomoya Kawanishi
 
mrubyでゲームを書いてみた
mrubyでゲームを書いてみたmrubyでゲームを書いてみた
mrubyでゲームを書いてみたYousuke Kuroda
 
ペパボ福岡支社におけるRubyの活用事例
ペパボ福岡支社におけるRubyの活用事例ペパボ福岡支社におけるRubyの活用事例
ペパボ福岡支社におけるRubyの活用事例Uchio Kondo
 
クラウドカンファレンスIn静岡 r cloud
クラウドカンファレンスIn静岡 r cloudクラウドカンファレンスIn静岡 r cloud
クラウドカンファレンスIn静岡 r cloudKazuki Aranami
 
Ruby Introduction
Ruby IntroductionRuby Introduction
Ruby IntroductionYushiroDodo
 
20080730-WelcomeToLifeWithRuby
20080730-WelcomeToLifeWithRuby20080730-WelcomeToLifeWithRuby
20080730-WelcomeToLifeWithRubyKoji SHIMADA
 
VMを改めて学んで見る
VMを改めて学んで見るVMを改めて学んで見る
VMを改めて学んで見るkishima7
 
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナーRuby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナーTomoya Kawanishi
 
Ruby on Rails3 Tutorial Chapter1
Ruby on Rails3 Tutorial Chapter1Ruby on Rails3 Tutorial Chapter1
Ruby on Rails3 Tutorial Chapter1Sea Mountain
 
mruby/c機能紹介20160329
mruby/c機能紹介20160329mruby/c機能紹介20160329
mruby/c機能紹介20160329shimane-itoc
 
PHPer のための Ruby 教室
PHPer のための Ruby 教室PHPer のための Ruby 教室
PHPer のための Ruby 教室higaki
 
Rumpを使ってみる
Rumpを使ってみるRumpを使ってみる
Rumpを使ってみるMasaru Oki
 

Similar a Summary of Ruby (20)

Management of Gems using Bundler.
Management of Gems using Bundler.Management of Gems using Bundler.
Management of Gems using Bundler.
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
 
Integration Technology of Ruby and DB.
Integration Technology of Ruby and DB.Integration Technology of Ruby and DB.
Integration Technology of Ruby and DB.
 
Ruby on RedHat Enterprise Linux
Ruby on RedHat Enterprise LinuxRuby on RedHat Enterprise Linux
Ruby on RedHat Enterprise Linux
 
2017年3月13日勉強会発表資料
2017年3月13日勉強会発表資料2017年3月13日勉強会発表資料
2017年3月13日勉強会発表資料
 
Ruby Enterprise Environment
Ruby Enterprise EnvironmentRuby Enterprise Environment
Ruby Enterprise Environment
 
mrubyでゲームを書いてみた
mrubyでゲームを書いてみたmrubyでゲームを書いてみた
mrubyでゲームを書いてみた
 
ペパボ福岡支社におけるRubyの活用事例
ペパボ福岡支社におけるRubyの活用事例ペパボ福岡支社におけるRubyの活用事例
ペパボ福岡支社におけるRubyの活用事例
 
クラウドカンファレンスIn静岡 r cloud
クラウドカンファレンスIn静岡 r cloudクラウドカンファレンスIn静岡 r cloud
クラウドカンファレンスIn静岡 r cloud
 
mruby for embedded systems
mruby for embedded systemsmruby for embedded systems
mruby for embedded systems
 
Ruby Introduction
Ruby IntroductionRuby Introduction
Ruby Introduction
 
20080730-WelcomeToLifeWithRuby
20080730-WelcomeToLifeWithRuby20080730-WelcomeToLifeWithRuby
20080730-WelcomeToLifeWithRuby
 
VMを改めて学んで見る
VMを改めて学んで見るVMを改めて学んで見る
VMを改めて学んで見る
 
Mrubyの始め方
Mrubyの始め方Mrubyの始め方
Mrubyの始め方
 
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナーRuby ビジネス創出展 Ruby初心者向けプログラミングセミナー
Ruby ビジネス創出展 Ruby初心者向けプログラミングセミナー
 
Ruby on Rails3 Tutorial Chapter1
Ruby on Rails3 Tutorial Chapter1Ruby on Rails3 Tutorial Chapter1
Ruby on Rails3 Tutorial Chapter1
 
JRuby on Rails
JRuby on RailsJRuby on Rails
JRuby on Rails
 
mruby/c機能紹介20160329
mruby/c機能紹介20160329mruby/c機能紹介20160329
mruby/c機能紹介20160329
 
PHPer のための Ruby 教室
PHPer のための Ruby 教室PHPer のための Ruby 教室
PHPer のための Ruby 教室
 
Rumpを使ってみる
Rumpを使ってみるRumpを使ってみる
Rumpを使ってみる
 

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