SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
Ruby紹介
         とみたまさひろ
           2010-08-21



Ruby紹介         Powered by Rabbit 0.6.5
自己紹介
     ✓ とみた まさひろ
     ✓ プログラマー
     ✓ mailto:tommy@tmtm.org
     ✓ http://d.hatena.ne.jp/tmtms
     ✓ http://twitter.com/tmtms
                                             1/55
Ruby紹介                            Powered by Rabbit 0.6.5
自己紹介

     ✓ 日本Rubyの会
     ✓ 日本MySQLユーザ会
     ✓ Ruby/MySQL ライブラリ
     ✓ Ruby歴, MySQL歴 十数年

                                      2/55
Ruby紹介                     Powered by Rabbit 0.6.5
自己紹介




         こんな本書きました

                                3/55
Ruby紹介               Powered by Rabbit 0.6.5
NSEG #1 で




                                4/55
Ruby紹介               Powered by Rabbit 0.6.5
NSEG #3 で




                                5/55
Ruby紹介               Powered by Rabbit 0.6.5
今回は
     Rubyの紹
Ruby紹介
        介            6/55
          Powered by Rabbit 0.6.5
Ruby

     ✓ http://www.ruby-lang.org
     ✓ オブジェクト指向スクリプト言語
     ✓ まつもとゆきひろ さん
     ✓ ひろゆき じゃないよ

                                             7/55
Ruby紹介                            Powered by Rabbit 0.6.5
Matz




                           8/55
Ruby紹介          Powered by Rabbit 0.6.5
歴史




     ✓ Ruby1.8 は 1.x の最終形
     ✓ Ruby1.9 は 2.0 に向けた助走
                                       9/55
Ruby紹介                      Powered by Rabbit 0.6.5
バージョン
     ✓ x.y.z-pNNN の形式
     ✓ 最新: 1.8.7-p302, 1.9.2-p0
     ✓ y が奇数のは開発版 (1.9を除く)
     ✓ z の違いでも互換がないことも
     ✓ pNNN はパッチリリース
     ✓ 1.9 は 2.0 に向けて大幅な変更
                                      10/55
Ruby紹介                        Powered by Rabbit 0.6.5
特徴
Ruby紹介
                 11/55
         Powered by Rabbit 0.6.5
楽しい
                 12/55
Ruby紹介   Powered by Rabbit 0.6.5
たのしいRuby




                            13/55
Ruby紹介              Powered by Rabbit 0.6.5
プログラマ
    にとって嬉
Ruby紹介
      しい         14/55
         Powered by Rabbit 0.6.5
余計なこと
   は考えたく
    ない
Ruby紹介
                 15/55
         Powered by Rabbit 0.6.5
ファイルコピー



         require 'fileutils'
         FileUtils.copy 'srcfile', 'destfile'




                                                 16/55
Ruby紹介                                   Powered by Rabbit 0.6.5
TCPサーバー

         require 'socket'
         Socket.tcp_server_loop(9999) do |sock|
           Thread.new sock do |s|
             s.each do |line|
               puts line
             end
           end
         end

                                                   17/55
Ruby紹介                                     Powered by Rabbit 0.6.5
HTTP GET



         require 'open-uri'
         open('http://nseg.jp').read


                                         18/55
Ruby紹介                           Powered by Rabbit 0.6.5
デーモン
         Process.daemon
   ✓ 制御端末を切り離し
   ✓ バックグラウンド化
   ✓ カレントディレクトリを / に移動
   ✓ 標準入出力,エラー出力を /dev/
     null にリダイレクト      19/55
Ruby紹介                    Powered by Rabbit 0.6.5
p

    人間にわかりやすい形で表示
         p Time.now #=> 2010-08-21 01:20:23 +0900
         p Array.new #=> []


    デバッグに便利

                                                     20/55
Ruby紹介                                       Powered by Rabbit 0.6.5
言語とし
  ての特徴           21/55
Ruby紹介   Powered by Rabbit 0.6.5
初めてのRuby
         ただし他のオブジェクト指向言語修
         得者向け




                               22/55
Ruby紹介                 Powered by Rabbit 0.6.5
型がない




                        23/55
Ruby紹介          Powered by Rabbit 0.6.5
変数に型がない
     ✓ どんなオブジェクトでも代入可能
     ✓ 自分が何かはオブジェクト自身が
       知っている
          a = 123
          a.class #=> Fixnum
          a = 'abc'
          a.class #=> String

                                       24/55
Ruby紹介                         Powered by Rabbit 0.6.5
代入というより…
    オブジェクトに貼ったラベル

         a = 'abc'
         b = a
         b.concat '123'
         a #=> "abc123"
         a.object_id == b.object_id
                                         25/55
Ruby紹介                           Powered by Rabbit 0.6.5
読みやすい


     ✓ Pで始まる言語に比べて
     ✓ 主観です


                             26/55
Ruby紹介               Powered by Rabbit 0.6.5
変数のスコープ

         1文字目     スコープ
     [a-z_]     メソッドローカル
     @          インスタンス内
     @@         クラス内
     $          グローバル
     [A-Z]      定数
                              27/55
Ruby紹介                Powered by Rabbit 0.6.5
オープ
   ンクラス
Ruby紹介
                 28/55
         Powered by Rabbit 0.6.5
定義済みのクラスを変更可能
         # Hoge クラス定義
         class Hoge
           def abc
           end
         end
         # xyz メソッド追加
         class Hoge
           def xyz
           end
         end
                                29/55
Ruby紹介                  Powered by Rabbit 0.6.5
すべてがオ
  ブジェクト
                 30/55
Ruby紹介   Powered by Rabbit 0.6.5
数値もオブジェクト

         class Numeric
           def neg
             -self
           end
         end
         123.neg #=> -123

                                    31/55
Ruby紹介                      Powered by Rabbit 0.6.5
Rails 界隈では

         require 'active_support/all'

         3.days.ago
           #=> 2010-08-18 10:38:13 +0900

    これは便利!
    ...っていうかキモい...
                                            32/55
Ruby紹介                              Powered by Rabbit 0.6.5
true, false, nil もオブジェクト


         true.class #=> TrueClass
         false.class #=> FalseClass
         nil.class   #=> NilClass


                                         33/55
Ruby紹介                           Powered by Rabbit 0.6.5
クラスもオブジェクト


         class Hoge
         end
         Hoge.class   #=> Class
         a = Hoge     # 変数への代入も可


                                      34/55
Ruby紹介                        Powered by Rabbit 0.6.5
演算子もメソッド


          123+456

          # これは実は
          123.+(456)

                               35/55
Ruby紹介                 Powered by Rabbit 0.6.5
再定義も可

         class Fixnum
           def +(a)
             self * a
           end
         end
         123+456 #=> 56088

                                     36/55
Ruby紹介                       Powered by Rabbit 0.6.5
特異メソッド

    特定のオブジェクトだけメソッド追加

         obj = Hoge.new
         def obj.hoge
           ...
         end

                                  37/55
Ruby紹介                    Powered by Rabbit 0.6.5
モジュール
    オブジェクトを持たないクラスのような
    もの
    名前空間をわけたり

         module MyProject
           class Hoge
           end
         end
                                    38/55
Ruby紹介                      Powered by Rabbit 0.6.5
モジュール
    メソッド定義しておいて、他のクラスに
    組み込んだり(Mix-in)
         module Abc
           def xyz
             ...
           end
         end
         class Hoge
           include Abc
           # xyz メソッドが使えるようになる
         end
                                         39/55
Ruby紹介                           Powered by Rabbit 0.6.5
ブロッ
Ruby紹介
          ク        40/55
           Powered by Rabbit 0.6.5
ブロック
         def hoge(arg)
           yield arg*2
         end
         def hoge(arg, &block)
           block.call arg*2
         end

         hoge 123 do |n|
           ...
         end
         hoge(123){|n|
           ...
         }
                                         41/55
Ruby紹介                           Powered by Rabbit 0.6.5
後処理


         File.open 'aaa.txt' do |f|
           f.read
         end
    ブロックを抜けると自動的にファイルが
    クローズされる
                                         42/55
Ruby紹介                           Powered by Rabbit 0.6.5
イテレータ

         # 10回繰り返し
         10.times{|i|
           ...
         }

         # 配列の要素を順番にブロックに渡す
         [1, 2, 3].each do |x|
           x * 2
         end
                                   43/55
Ruby紹介                     Powered by Rabbit 0.6.5
Enumerable
    each メソッドさえあれば
    Enumerable モジュールを include
    して
         [1,2,3].map{|x| x*2} #=> [2,4,6]
         [1,2,3].max #=> 3
         [3,2,1].sort #=> [1,2,3]
         [1,2,3].select{|x| x.odd?} #=> [1,3]

                                                 44/55
Ruby紹介                                   Powered by Rabbit 0.6.5
Ruby
Ruby紹介
          1.9       45/55
            Powered by Rabbit 0.6.5
1.9.2
         8/19 リ
Ruby紹介
         リース!         46/55
              Powered by Rabbit 0.6.5
1.8 と結構
    互換あり
                 47/55
Ruby紹介   Powered by Rabbit 0.6.5
VM


     ✓ バイトコード
     ✓ 高速化
     ✓ 数倍〜数十倍?


                             48/55
Ruby紹介               Powered by Rabbit 0.6.5
文字列
     ✓ 1.8 までは文字列はただのバイト
       列
     ✓ 文字単位の処理が可能
     ✓ 文字列オブジェクトが文字コード
       を持つ
     ✓ Code Set Independent
                                      49/55
Ruby紹介                        Powered by Rabbit 0.6.5
Encoding

     ✓ リテラル文字列は magic
       comment に依存
         # -*- coding: utf-8 -*-
         s = "あいう"
         s.encoding #=> #<Encoding:UTF-8>
         s2 = s.encode "cp932"
         s2.encoding #=> #<Encoding:Windows-31J>


                                                   50/55
Ruby紹介                                     Powered by Rabbit 0.6.5
IO は自動変換


         f = File.open('a.txt', 'r+:shift_jis:euc-jp')
         # SJIS ファイルから読んで EUC 文字列を生成する
         f.read
         # 文字列を SJIS に変換して書き込む
         f.write 'xxx'




                                                         51/55
Ruby紹介                                           Powered by Rabbit 0.6.5
2038年問題

         # Ruby 1.8
         Time.at 2147483647
              #=> Tue Jan 19 12:14:07 +0900 2038
         Time.at 2147483648
              # bignum too big to convert into `long' (RangeError)
         # Ruby 1.9
         Time.at 2147483648
              #=> 2038-01-19 12:14:08 +0900
         Time.at 9999999999
              #=> 2286-11-21 02:46:39 +0900
         Time.at 99999999999
              #=> 5138-11-16 18:46:39 +0900



                                                                    52/55
Ruby紹介                                                      Powered by Rabbit 0.6.5
その他便
         利な機能
Ruby紹介
          多数        53/55
            Powered by Rabbit 0.6.5
これから使
   うなら 1.9
                 54/55
Ruby紹介   Powered by Rabbit 0.6.5
ご清聴あり
   がとうござ
    いました
Ruby紹介
                 55/55
         Powered by Rabbit 0.6.5

Mais conteúdo relacionado

Mais procurados

play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西Shinichi Kozake
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」y torazuka
 
Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについてShinobu Okano
 
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javajava.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javaYuji Kubota
 
コンパイラ指向ReVIEW
コンパイラ指向ReVIEWコンパイラ指向ReVIEW
コンパイラ指向ReVIEWMasahiro Wakame
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Koichi Sakata
 
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews, Inc.
 
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24Kazuhiro Sera
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaNorito Agetsuma
 
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようKoichi Sasada
 
OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasualOpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasualYuji Kubota
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方Funato Takashi
 
minneで学ぶクラウド脳
minneで学ぶクラウド脳minneで学ぶクラウド脳
minneで学ぶクラウド脳Uchio Kondo
 
仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会
仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会
仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会Yukihiko SAWANOBORI
 
Clojureの発表など
Clojureの発表などClojureの発表など
Clojureの発表などKikuta Go
 
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsThe Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsKoichiro Ohba
 
第4回 インフラ勉強会@福岡 Fluentdハンズオン
第4回 インフラ勉強会@福岡 Fluentdハンズオン第4回 インフラ勉強会@福岡 Fluentdハンズオン
第4回 インフラ勉強会@福岡 Fluentdハンズオン学 松崎
 
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQLRyusuke Kajiyama
 
Java初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみたJava初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみたAya Ebata
 

Mais procurados (20)

play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
 
Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについて
 
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javajava.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷java
 
コンパイラ指向ReVIEW
コンパイラ指向ReVIEWコンパイラ指向ReVIEW
コンパイラ指向ReVIEW
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
 
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
 
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
 
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
 
OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasualOpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasual
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方
 
minneで学ぶクラウド脳
minneで学ぶクラウド脳minneで学ぶクラウド脳
minneで学ぶクラウド脳
 
仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会
仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会
仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会
 
Clojureの発表など
Clojureの発表などClojureの発表など
Clojureの発表など
 
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsThe Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in Corporations
 
第4回 インフラ勉強会@福岡 Fluentdハンズオン
第4回 インフラ勉強会@福岡 Fluentdハンズオン第4回 インフラ勉強会@福岡 Fluentdハンズオン
第4回 インフラ勉強会@福岡 Fluentdハンズオン
 
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL
 
Java初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみたJava初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみた
 

Destaque

The History of Ruby; 20th Anniversary Ed.
The History of Ruby; 20th Anniversary Ed.The History of Ruby; 20th Anniversary Ed.
The History of Ruby; 20th Anniversary Ed.masayoshi takahashi
 
Ruby開発が教えてくれたこと
Ruby開発が教えてくれたことRuby開発が教えてくれたこと
Ruby開発が教えてくれたことyukihiro_matz
 
MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版Masahiro Tomita
 
Ruby 1.9.2 is released
Ruby 1.9.2 is releasedRuby 1.9.2 is released
Ruby 1.9.2 is releasedYuki Sonoda
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情Masahiro Tomita
 

Destaque (6)

The History of Ruby; 20th Anniversary Ed.
The History of Ruby; 20th Anniversary Ed.The History of Ruby; 20th Anniversary Ed.
The History of Ruby; 20th Anniversary Ed.
 
進捗と品質
進捗と品質進捗と品質
進捗と品質
 
Ruby開発が教えてくれたこと
Ruby開発が教えてくれたことRuby開発が教えてくれたこと
Ruby開発が教えてくれたこと
 
MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版MySQLの文字コード事情 2017版
MySQLの文字コード事情 2017版
 
Ruby 1.9.2 is released
Ruby 1.9.2 is releasedRuby 1.9.2 is released
Ruby 1.9.2 is released
 
MySQLの文字コード事情
MySQLの文字コード事情MySQLの文字コード事情
MySQLの文字コード事情
 

Semelhante a Ruby紹介

はじめてのRuby拡張ライブラリ
はじめてのRuby拡張ライブラリはじめてのRuby拡張ライブラリ
はじめてのRuby拡張ライブラリMasahiro Tomita
 
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道Shigeru UCHIYAMA
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
phperを魅了するrubyの魅力(1)
phperを魅了するrubyの魅力(1)phperを魅了するrubyの魅力(1)
phperを魅了するrubyの魅力(1)tj-yoshino
 
capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活をRyunosuke SATO
 
Rabbit - 時間内に終われるプレゼンツール
Rabbit - 時間内に終われるプレゼンツールRabbit - 時間内に終われるプレゼンツール
Rabbit - 時間内に終われるプレゼンツールKouhei Sutou
 
Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話Masaya Konishi
 
Ruby&Rails入門講座-1
Ruby&Rails入門講座-1Ruby&Rails入門講座-1
Ruby&Rails入門講座-1Koji SHIMADA
 
RubyGems と Bundler について
RubyGems と Bundler についてRubyGems と Bundler について
RubyGems と Bundler についてTomoya Kawanishi
 
Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースNext GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースよしだ あつし
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングYuichi Tateno
 
Ruby と C# をつなぐ
Ruby と C# をつなぐRuby と C# をつなぐ
Ruby と C# をつなぐ107steps
 
実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選Drecom Co., Ltd.
 
Pry による repl 駆動開発について
Pry による repl 駆動開発についてPry による repl 駆動開発について
Pry による repl 駆動開発についてTomoya Kawanishi
 
JavascriptでRubyの作り方
JavascriptでRubyの作り方JavascriptでRubyの作り方
JavascriptでRubyの作り方Shuyo Nakatani
 

Semelhante a Ruby紹介 (20)

Rubyの黒魔術
Rubyの黒魔術Rubyの黒魔術
Rubyの黒魔術
 
はじめてのRuby拡張ライブラリ
はじめてのRuby拡張ライブラリはじめてのRuby拡張ライブラリ
はじめてのRuby拡張ライブラリ
 
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
phperを魅了するrubyの魅力(1)
phperを魅了するrubyの魅力(1)phperを魅了するrubyの魅力(1)
phperを魅了するrubyの魅力(1)
 
capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活を
 
Rabbit - 時間内に終われるプレゼンツール
Rabbit - 時間内に終われるプレゼンツールRabbit - 時間内に終われるプレゼンツール
Rabbit - 時間内に終われるプレゼンツール
 
Rubyな日々
Rubyな日々Rubyな日々
Rubyな日々
 
Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話
 
Ruby In Wheezy
Ruby In WheezyRuby In Wheezy
Ruby In Wheezy
 
Ruby&Rails入門講座-1
Ruby&Rails入門講座-1Ruby&Rails入門講座-1
Ruby&Rails入門講座-1
 
RubyGems と Bundler について
RubyGems と Bundler についてRubyGems と Bundler について
RubyGems と Bundler について
 
Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースNext GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリース
 
RubyGemsの落とし穴
RubyGemsの落とし穴RubyGemsの落とし穴
RubyGemsの落とし穴
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
 
Ruby と C# をつなぐ
Ruby と C# をつなぐRuby と C# をつなぐ
Ruby と C# をつなぐ
 
実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選
 
Pry による repl 駆動開発について
Pry による repl 駆動開発についてPry による repl 駆動開発について
Pry による repl 駆動開発について
 
Clojure
ClojureClojure
Clojure
 
JavascriptでRubyの作り方
JavascriptでRubyの作り方JavascriptでRubyの作り方
JavascriptでRubyの作り方
 

Mais de Masahiro Tomita

お前の罪を数えろ
お前の罪を数えろお前の罪を数えろ
お前の罪を数えろMasahiro Tomita
 
本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコルMasahiro Tomita
 
ネットワークこわい
ネットワークこわいネットワークこわい
ネットワークこわいMasahiro Tomita
 
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版Masahiro Tomita
 
「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャルMasahiro Tomita
 
アジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトアジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトMasahiro Tomita
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話Masahiro Tomita
 
MySQLのプロトコル解説
MySQLのプロトコル解説MySQLのプロトコル解説
MySQLのプロトコル解説Masahiro Tomita
 
Dockerイメージを作る
Dockerイメージを作るDockerイメージを作る
Dockerイメージを作るMasahiro Tomita
 

Mais de Masahiro Tomita (20)

お前の罪を数えろ
お前の罪を数えろお前の罪を数えろ
お前の罪を数えろ
 
Ruby 2.5
Ruby 2.5Ruby 2.5
Ruby 2.5
 
本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル本当はこわいMySQLプロトコル
本当はこわいMySQLプロトコル
 
ネットワークこわい
ネットワークこわいネットワークこわい
ネットワークこわい
 
CSV
CSVCSV
CSV
 
MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版MySQLの文字コード事情 2017春版
MySQLの文字コード事情 2017春版
 
MySQLを拡張する
MySQLを拡張するMySQLを拡張する
MySQLを拡張する
 
「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル
 
MyNAができるまで
MyNAができるまでMyNAができるまで
MyNAができるまで
 
文字化け
文字化け文字化け
文字化け
 
Crystal
CrystalCrystal
Crystal
 
メールの暗号化
メールの暗号化メールの暗号化
メールの暗号化
 
文字化け
文字化け文字化け
文字化け
 
進捗と品質
進捗と品質進捗と品質
進捗と品質
 
アジャイルジャパン長野サテライト
アジャイルジャパン長野サテライトアジャイルジャパン長野サテライト
アジャイルジャパン長野サテライト
 
🍣=🍺
🍣=🍺🍣=🍺
🍣=🍺
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話
 
Sequelのすすめ
SequelのすすめSequelのすすめ
Sequelのすすめ
 
MySQLのプロトコル解説
MySQLのプロトコル解説MySQLのプロトコル解説
MySQLのプロトコル解説
 
Dockerイメージを作る
Dockerイメージを作るDockerイメージを作る
Dockerイメージを作る
 

Ruby紹介

  • 1. Ruby紹介 とみたまさひろ 2010-08-21 Ruby紹介 Powered by Rabbit 0.6.5
  • 2. 自己紹介 ✓ とみた まさひろ ✓ プログラマー ✓ mailto:tommy@tmtm.org ✓ http://d.hatena.ne.jp/tmtms ✓ http://twitter.com/tmtms 1/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 3. 自己紹介 ✓ 日本Rubyの会 ✓ 日本MySQLユーザ会 ✓ Ruby/MySQL ライブラリ ✓ Ruby歴, MySQL歴 十数年 2/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 4. 自己紹介 こんな本書きました 3/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 5. NSEG #1 で 4/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 6. NSEG #3 で 5/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 7. 今回は Rubyの紹 Ruby紹介 介 6/55 Powered by Rabbit 0.6.5
  • 8. Ruby ✓ http://www.ruby-lang.org ✓ オブジェクト指向スクリプト言語 ✓ まつもとゆきひろ さん ✓ ひろゆき じゃないよ 7/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 9. Matz 8/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 10. 歴史 ✓ Ruby1.8 は 1.x の最終形 ✓ Ruby1.9 は 2.0 に向けた助走 9/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 11. バージョン ✓ x.y.z-pNNN の形式 ✓ 最新: 1.8.7-p302, 1.9.2-p0 ✓ y が奇数のは開発版 (1.9を除く) ✓ z の違いでも互換がないことも ✓ pNNN はパッチリリース ✓ 1.9 は 2.0 に向けて大幅な変更 10/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 12. 特徴 Ruby紹介 11/55 Powered by Rabbit 0.6.5
  • 13. 楽しい 12/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 14. たのしいRuby 13/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 15. プログラマ にとって嬉 Ruby紹介 しい 14/55 Powered by Rabbit 0.6.5
  • 16. 余計なこと は考えたく ない Ruby紹介 15/55 Powered by Rabbit 0.6.5
  • 17. ファイルコピー require 'fileutils' FileUtils.copy 'srcfile', 'destfile' 16/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 18. TCPサーバー require 'socket' Socket.tcp_server_loop(9999) do |sock| Thread.new sock do |s| s.each do |line| puts line end end end 17/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 19. HTTP GET require 'open-uri' open('http://nseg.jp').read 18/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 20. デーモン Process.daemon ✓ 制御端末を切り離し ✓ バックグラウンド化 ✓ カレントディレクトリを / に移動 ✓ 標準入出力,エラー出力を /dev/ null にリダイレクト 19/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 21. p 人間にわかりやすい形で表示 p Time.now #=> 2010-08-21 01:20:23 +0900 p Array.new #=> [] デバッグに便利 20/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 22. 言語とし ての特徴 21/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 23. 初めてのRuby ただし他のオブジェクト指向言語修 得者向け 22/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 24. 型がない 23/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 25. 変数に型がない ✓ どんなオブジェクトでも代入可能 ✓ 自分が何かはオブジェクト自身が 知っている a = 123 a.class #=> Fixnum a = 'abc' a.class #=> String 24/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 26. 代入というより… オブジェクトに貼ったラベル a = 'abc' b = a b.concat '123' a #=> "abc123" a.object_id == b.object_id 25/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 27. 読みやすい ✓ Pで始まる言語に比べて ✓ 主観です 26/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 28. 変数のスコープ 1文字目 スコープ [a-z_] メソッドローカル @ インスタンス内 @@ クラス内 $ グローバル [A-Z] 定数 27/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 29. オープ ンクラス Ruby紹介 28/55 Powered by Rabbit 0.6.5
  • 30. 定義済みのクラスを変更可能 # Hoge クラス定義 class Hoge def abc end end # xyz メソッド追加 class Hoge def xyz end end 29/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 31. すべてがオ ブジェクト 30/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 32. 数値もオブジェクト class Numeric def neg -self end end 123.neg #=> -123 31/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 33. Rails 界隈では require 'active_support/all' 3.days.ago #=> 2010-08-18 10:38:13 +0900 これは便利! ...っていうかキモい... 32/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 34. true, false, nil もオブジェクト true.class #=> TrueClass false.class #=> FalseClass nil.class #=> NilClass 33/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 35. クラスもオブジェクト class Hoge end Hoge.class #=> Class a = Hoge # 変数への代入も可 34/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 36. 演算子もメソッド 123+456 # これは実は 123.+(456) 35/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 37. 再定義も可 class Fixnum def +(a) self * a end end 123+456 #=> 56088 36/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 38. 特異メソッド 特定のオブジェクトだけメソッド追加 obj = Hoge.new def obj.hoge ... end 37/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 39. モジュール オブジェクトを持たないクラスのような もの 名前空間をわけたり module MyProject class Hoge end end 38/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 40. モジュール メソッド定義しておいて、他のクラスに 組み込んだり(Mix-in) module Abc def xyz ... end end class Hoge include Abc # xyz メソッドが使えるようになる end 39/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 41. ブロッ Ruby紹介 ク 40/55 Powered by Rabbit 0.6.5
  • 42. ブロック def hoge(arg) yield arg*2 end def hoge(arg, &block) block.call arg*2 end hoge 123 do |n| ... end hoge(123){|n| ... } 41/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 43. 後処理 File.open 'aaa.txt' do |f| f.read end ブロックを抜けると自動的にファイルが クローズされる 42/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 44. イテレータ # 10回繰り返し 10.times{|i| ... } # 配列の要素を順番にブロックに渡す [1, 2, 3].each do |x| x * 2 end 43/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 45. Enumerable each メソッドさえあれば Enumerable モジュールを include して [1,2,3].map{|x| x*2} #=> [2,4,6] [1,2,3].max #=> 3 [3,2,1].sort #=> [1,2,3] [1,2,3].select{|x| x.odd?} #=> [1,3] 44/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 46. Ruby Ruby紹介 1.9 45/55 Powered by Rabbit 0.6.5
  • 47. 1.9.2 8/19 リ Ruby紹介 リース! 46/55 Powered by Rabbit 0.6.5
  • 48. 1.8 と結構 互換あり 47/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 49. VM ✓ バイトコード ✓ 高速化 ✓ 数倍〜数十倍? 48/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 50. 文字列 ✓ 1.8 までは文字列はただのバイト 列 ✓ 文字単位の処理が可能 ✓ 文字列オブジェクトが文字コード を持つ ✓ Code Set Independent 49/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 51. Encoding ✓ リテラル文字列は magic comment に依存 # -*- coding: utf-8 -*- s = "あいう" s.encoding #=> #<Encoding:UTF-8> s2 = s.encode "cp932" s2.encoding #=> #<Encoding:Windows-31J> 50/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 52. IO は自動変換 f = File.open('a.txt', 'r+:shift_jis:euc-jp') # SJIS ファイルから読んで EUC 文字列を生成する f.read # 文字列を SJIS に変換して書き込む f.write 'xxx' 51/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 53. 2038年問題 # Ruby 1.8 Time.at 2147483647 #=> Tue Jan 19 12:14:07 +0900 2038 Time.at 2147483648 # bignum too big to convert into `long' (RangeError) # Ruby 1.9 Time.at 2147483648 #=> 2038-01-19 12:14:08 +0900 Time.at 9999999999 #=> 2286-11-21 02:46:39 +0900 Time.at 99999999999 #=> 5138-11-16 18:46:39 +0900 52/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 54. その他便 利な機能 Ruby紹介 多数 53/55 Powered by Rabbit 0.6.5
  • 55. これから使 うなら 1.9 54/55 Ruby紹介 Powered by Rabbit 0.6.5
  • 56. ご清聴あり がとうござ いました Ruby紹介 55/55 Powered by Rabbit 0.6.5