SlideShare una empresa de Scribd logo
1 de 44
S tart!   Ruby
S tart!   Ruby 偉そうにしてる人 の自己紹介 名前 : 榎原 明生 P.N.   : MitiM (未知夢) 仕事 : 開発者やってます 主に業務系です 最近はホント何でも屋、 MP 以外はたいてい齧ってます 隠れ Agiler です Ruby 暦 : 出会いは 1998 年ごろ 当時は Unix で動かすのが当たり前という言語で、 Windows 上に環境を構築するのが難しかった プログラム:言語マニアの毛があります けっこう重度の TDDer かつ迷える TDDer です なんでお前が喋るの?:なりゆきです!
・ なぜ Ruby ? ・  Smalltalk の思想を模倣した設計思想 ・ 基本的な構文 ・  Ruby らしさ S tart!   Ruby
なぜ Ruby ? *  開発現場を効率良く回す * OSS フレームワークを効果的に採用する *  自動化できる部分はできうる限り自動化する 短期化 する開発 3 ヶ月 単位の開発が増えてきた! 開発者は黙って 徹夜 休出 を耐えるしかないのか?
なぜ Ruby ? 自動化 できる部分はできうる限り自動化する * Ci 等大きなツールは OSS を利用 * Db にリソースを放り込むとか細かい 糊的 ツールが必要 ->  つくらにゃ!
なぜ Ruby ? 自動化するためには ツール をつくらにゃ! *  ツールのキモは「 素早く実装 」「 使いながらメンテ 」 *  開発対象の言語で作る! -> c# にしても Java にしても重厚感はいなめない * Excel のマクロ! -> null と Nothing の嵐に眩暈が * WindowsScriptingHost を使う! -> Office は OLE で使えるけど、ライブラリ不足が否めない… *  LL は??
なぜ Ruby ? 開発用ツールを LL で書くことの 有用性 Perl 、 Python 、 Ruby とあるけれど…  *  糊 として手軽である *  開発効率 がとってもいい *  大抵の ライブラリ が揃っている ->  ライブラリマネージャ (cpan 、 egg 、 gem) で ネットから 楽々 インストール で、なんで Ruby なの?
趣味です!!   なぜ Ruby ?
Smalltalk の思想を模倣した設計思想 ほとんど全てが オブジェクト *  メソッドも オブジェクト *  クラス定義も オブジェクト *  詳しく: クラス構造の定義とグローバルオブジェクト化宣言を 同時に書いている * nil(Java の null) すらも オブジェクト * NullObject パタンが簡単に!
Smalltalk の思想を模倣した設計思想 全てが オブジェクト だとどうなの? *  全てが何かのクラスに所属している *  全てに操作のためのメソッドが存在する オブジェクト じゃないもの *  式 ( メソッド扱いを除く ) *  制御構文 ->  「式」として扱われる *  定義構文 *  シンタックス・シュガー
Smalltalk の思想を模倣した設計思想 式 ? *  値 を返すもの ・ メソッド ・ 演算 ・ 制御構文
Smalltalk の思想を模倣した設計思想 ほとんど全てが メソッド *  演算子もメソッド ・ 再定義が可能 ・  ValueObject の "==" は同値性を保証するのに大活躍 メソッドじゃない演算子 =  ?:  ..  ...  !  not  &&  and  ||  or  ::
Smalltalk の思想を模倣した設計思想 メッセージ・ドリブン DuckTyping  -  「もしもそれが アヒル のように歩き、 アヒル のように鳴くのなら、それは アヒル である」 *  メッセージ・パッシングした先のオブジェクトが ・ 「何のクラスか」が大事なのではない ・ 「 そのメソッドを持っている / 持っていない 」が大事 *  持ってなかったらどうなる? ・  NoMethodError   が飛ぶ
基本的な構文 命名規則 定数 大文字で始まる 変数 小文字で始まる 慣習 1.   クラス名はパスカル記法 2.  メソッド名、変数名は _ 区切りの小文字 3.  定数名は _ 区切りの大文字 class HogeHoge def hoge_hoge hoge_hoge = 0 HOGE_HOGE = "hoge"
基本的な構文 変数とシンボル 変数のスコープ ruby のスコープの思想「最小単位はブロック (not  メソッド、 not  式 ) 」 ruby の変数の思想「変数のスコープはなるべく局所化しろ」 スコープ= ブロック・ローカル スコープ= インスタンス スコープ= クラス スコープ= グローバル hoge @hoge @@hoge $hoge シンボル 同名の変数に対してリンクを張っている。   :hoge
基本的な構文 メソッド の定義 引数なし 引数あり 複数の引数あり、初期化付き 可変長引数 メソッドのスコープは基本的にパブリック def  bark end def  bark(time) end def  bark(time, voice=" ばう ") end def  bark(*voice) end
基本的な構文 クラス の定義 class  CurDog < Dog PEDIGREE = &quot; 雑種 &quot; attr_reader  :name def  initialize(name) @name = name end def  bark(voice=&quot; ばう &quot;) p voice end def  wait shit end def  self.cute p &quot; きゅぅーん &quot; end private  :shit def  shit p &quot; ポトリ &quot; end end ruby の面白いところ: クラスとは「クラスオブジェクトの定数」にしか過ぎない。 クラスオブジェクト?? クラス定義に従ってインスタンスを生成できる  インスタンス工場  のこと。
基本的な構文 クラス の定義 ポイント 1.  new は特別なメッセージ。メソッドとして独自定義できない。 2.  initialize は new した時に自動で呼ばれるメソッド。引数を加えることができる。 3.  継承したい時は   < [ 継承元 ]  と記述する。 4.  インスタンス変数を公開したい時は、 シンボルを使って、 attr_accessor 、 attr_reader 、 attr_writer  を指定する 5.  メソッドを非公開にしたいときは、シンボルを使って、 private 、 protected   を 指定する 6.  クラスメソッド (static なメソッド ) を書くときは self. をメソッド名の前に付ける ※  この self は、じつはクラスオブジェクト自身を指している 慣習 1.  クエリー系メソッドは、メソッド名の最後を &quot;?&quot; で終える。 2.  とくに ValueObject で、インスタンスの内容を変更するメソッドは、 メソッド名の最後を &quot;!&quot; で終える。
基本的な構文 クラス・オブジェクトのインスタンス ( メソッド / アトリビュート ) へのアクセス 基本は &quot; . &quot; を使う  dog = CurDog.new(&quot; ポチ &quot;) dog.bark(&quot; わおーん &quot;) dog.wait 定数にアクセスする場合は &quot; :: &quot; を使う p CurDog::PEDIGREE ちなみに メソッド呼び出し時の &quot; () &quot; は省略もできる dog = CurDog.new &quot; ポチ &quot; dog.bark &quot; わおーん &quot; ただし 引数括りの () は演算式括りの () よりも優先度が高い math.calc (a-b)+c なんてやるとハマるから、要注意
制御構文 基本的な構文 コメント #  コメント 使える演算子 |  ^  &  <=>  ==  ===  =~  >  >=  <  <=  <<  >> +  -  *  /  %  **  ~  +@  -@  []  []=  ` =+ =- =* =/ =% =** =  ?:  ..  ...  !  not  &&  and  ||  or  :: <=> 大小比較 === [ 左辺 ] に [ 右辺 ] が含まれるか =~ 正規表現で比較 += -= etc [ 左辺 ] に [ 右辺 ] を計算した結果を [ 左辺 ] に代入する (自己代入) ちなみに、 ++ や -- は無い。
制御構文 条件分岐 許容条件 if  条件式  then 実行文 elsif  条件式  then 実行文 else 実行文 end 実行文  if  条件式 否定条件 unless  条件式  then 実行文 else 実行文 end 実行文  unless  条件式 ケース条件 case  評価式 when  式  then 実行文 else 実行文 end 基本的な構文
基本的な構文 制御構文 繰り返し while while  条件式  do 実行文 end 実行文  while  条件式 until until  条件式  do 実行文 end 実行文  until  条件式 for for  変数  in  範囲式  do 実行文 end じつは for 文はほとんど使わない  10.times do |i| end した方が楽だしね  途中で制御を抜ける等 break 、 next 、 redo 、 retry が使える
制御構文 基本的な構文 例外構文 例外を発生させる raise  例外タイプ raise  例外タイプ ,  メッセージ raise  メッセージ 例外ブロック begin 実行文 rescue  例外タイプ  =>  変数  then レスキュー文 else 一般的なレスキュー文 ensure クローズ文 end
基本的な構文 制御構文 ほかのファイルを組み込む 組み込みたい位置で  拡張子 &quot;.rb&quot; は不要。 基本的には、カレントディレクトリからの相対パスで指定する。 ただし、 gems でインストールしたライブラリの場合、たいていはライブラリ名だけで大丈夫。 そのかわり、次の require を必ず入れること。 require  ' ファイル名 ' require  ' ディレクトリ / ファイル名 ' require  'rubygems'
制御構文 基本的な構文 シンタックス・シュガー Ruby は記述を簡便にするため、インスタンス生成に関する シンタックス・シュガー を用意している Array のインスタンス生成 Hash のインスタンス生成 String のインスタンス生成 Regexp のインスタンス生成 Fixnum のインスタンス生成 Float のインスタンス生成 array = [val1, val2] hash = {key1=>val1, key2=>val2} string = 'ruby' regexp = /ruby/ num = 1 float = 0.1
基本的な構文 ここまでできたら Java でフツーにできる事は できるようになる !
Ruby らしさ 文字列で遊ぼう! シンプルな文字列は '' を使う string = ' これは文字列です。 ' ん~~、普通!  ちょっとフォーマットしたい時には &quot;&quot; を使う 1.  バックスラッシュ記法でコントロール文字を埋め込みたい 2.  変数の値を文字列にフォーマッティングしたい こんな用途に。 age = 18 string = &quot; これは  文字列です。  ボク永遠の #{age} 歳!! &quot; &quot; #{} &quot; の中は、かならず「式」として評価されるので、変数名がそのまま表記できる。 ちなみに、単なる計算式でも OK
Ruby らしさ 文字列で遊ぼう! 主なバックスラッシュ記法 長文!ヒアドキュメント たとえば、 HTML のテンプレートな部分とか… たとえば、メールの長い典型文とか… そんな時はヒアドキュメント ちなみに、 <<'EOS' ~ EOS  と書けば、 '' 囲みの文字列と同等の扱いになり、 <<&quot;EOS&quot; ~ EOS   と書けば、 &quot;&quot; 囲みの文字列と同等の扱いになる。 STRING = <<&quot;EOS&quot; これは 文字列です。 ボク永遠の #{age} 歳!! EOS  タブ  改行  キャリッジリターン  改ページ  バックスペース  ベル  エスケープ  空白 nn 8  進数表記 nn 16  進数表記 x -x コントロール文字  (x  は  ASCII  文字 )  文字  x  そのもの
Ruby らしさ ここから先の前提知識: ブロック ブロック とは ? スコープ の最小単位  do 実行文 end { 実行文 } または { ~ } の方が do ~ end より少しだけ優先度が高い
Ruby らしさ ブロック付きメソッド(いわゆるクロージャ) 使い方 def hoge(ary) ret = &quot;result:&quot; ary.each do |i| ret += i end return ret end または def hoge(ary) ret = &quot;result:&quot; ary.each { |i| ret += i } return ret end 1.  hoge メソッドから ary の each を呼び出す 2.  each メソッド内から、ブロックが呼ばれる 2-1. |i| に each からの引数 (Array の内容 ) が渡る 2-2. ret に、渡された引数がどんどん連結される 3.  ary の内容をすべて連結した文字列を返す
ブロック付きメソッド(いわゆるクロージャ) Ruby らしさ イテレータ 10 回ループを普通にやると  ブロック付メソッドを使うと … あんまり変わらないかな? でも、じつはこんなやり方も for 文より自然っぽくない?  for i in [0..9] do p i end [0..9].each  do |i| p i end 10.times  do |i| p i end open/close 制御 ファイルを開いて閉じるを普通にやると ブロック付きメソッドを使うと  何が便利かって、 Java や C# で起きがちな「クローズするためだけに延々と try - finally 記述が感染していく」がないこと! 例外ブロックも最適化できる! file = nil begin file = File.open(&quot;hoge.txt&quot;) 実行文 ensure file.close unless file == nil end File.open(&quot;hoge.txt&quot;)  do |file| 実行文 end
Ruby らしさ ブロック付きメソッド(いわゆるクロージャ) ブロック付きメソッドの作り方 def hoge 実行文 yield 実行文 end def hoge 実行文 yield(item) 実行文 end 引数があるときは
Ruby らしさ 動性の高い Ruby のリフレクション リフレクションという認識すらないくらい、「普通のこと」になっている。 これもまた、動的言語で「すべてがオブジェクト」の世界観が成せる技。 次のような動的拡張が可能になっている。 既存のクラスにメソッドを拡張する 既存の Array クラスに hoge というメソッドを追加する場合、次のように書けば良い。 class Array def hoge end end これ、なんと組み込みクラスにも可能。 もちろん、 既存のメソッドを書き換える ことも可能!
Ruby らしさ 動性の高い Ruby のリフレクション 既存のオブジェクトにメソッドを拡張する クラスにメソッドを拡張すると、なにかとメンドクサイ問題が出る場合がある。 そんな時は、対象となる オブジェクト にだけメソッドを拡張する。 array = [] def array.hoge end
Ruby らしさ 動性の高い Ruby のリフレクション いちいち一個ずつメソッドを書き換えたり、メンドクサくない?って時には MixIn モジュールとは「 機能的に同じものをまとめて定義しておく 」機能のこと。 クラスとは違い、継承ができないし、インスタンスの生成もできない。 「 GUI でのコントローラをモジュールで表現」のような使い方をする。 「そのクラスの直接的な機能じゃないけれど、副次的に必要になるユーティリティ的機能」などをモジュール化しておくと、なにかと便利。
module KeyNameListItem def value @name = '' unless defined? @name @key = @name unless defined? @key if (@key == @name) return @name end return &quot;#{@key} - #{@name}&quot;  end attr_reader :key end 動性の高い Ruby のリフレクション Ruby らしさ というモジュールをつくっておいて たとえば
GUI で「このクラスをリスト表示したい!」というときにさらっと 動性の高い Ruby のリフレクション Ruby らしさ class Section include KeyNameListItem end というように、 クラス再定義 で組み込んでしまえる。  もちろん、オブジェクトにも MixIn section = Section.new section.extend KeyNameListItem
これらの再定義をうまく使っていくと… Java や C# にありがちな XxxUtil とか XxxHelper とかいったクラスが必要ないという事に気づくはず! Ruby らしさ 動性の高い Ruby のリフレクション
Ruby でもドキュメンテーション RDoc を使ってみよう! 修飾してみよう! RDoc の &quot; 書きどころ &quot; は、 JavaDoc などと同じ。 クラスの前 、 メソッドの前 、 シンボルの前 、 ファイルのトップ など。 #  ドキュメンテーション と、コメントのように書くだけで OK 。  作成者やライセンス情報などの書き方  #Authors::  MitiM #Version::  1.0 #Copyright:: Copyright (C) MitiM, 2010. All rights reserved. #License::  Ruby License 基本的に :: で区切れば、好きな項目を作成可能。
Ruby でもドキュメンテーション RDoc を使ってみよう! 修飾してみよう! 見出し <H1> ~ <H3> は #=  見出しレベル 1 #==  見出しレベル 2 #===  見出しレベル 3 箇条書きは、 -(*) で ・ 。 + でナンバリング。  #-  レベル 1 #  -  レベル 2 #+  レベル 1 #  +  レベル 2 RDoc 内でコメントにしたいなら  #-- #  この中はドキュメンテーションされない #++ RDoc として書き出すのは $ rdoc [ ソースファイル .rb]
コンソール! これだけは覚えておきたい!コマンド コンソールでいろいろ試す $  irb コンソール上でインタラクティブに実行できる Ruby 。 ソースの保存以外は何でも「 Ruby のソースのように」記述し、その場で実行できる。 こんな構文、できるの?この動きは何? 迷ったときは、まず irb ! ドキュメントを見る $  ri [ クラス名 ]#[ メソッド名 ] . 区切りでも OK 。 英語だけれど、知りたいクラスやメソッドがその場でわかる。
これだけは覚えておきたい!コマンド ライブラリをダウンロードする $  gem install [ ライブラリ名 ] 空白区切りで、複数ライブラリを一気にダウンロードすることも可能。 ちなみに、依存ライブラリがあった場合は、勝手にダウンロードされる。 $  gem list で、インストールされているライブラリの一覧も表示可能。  RSpec でテストをする $  spec -c -fs [ テストコード名 ] いちいちテストの説明を見なくてもいいときは、 -fs を外す。 Windows は win32console (gem でインストール ) が入っていないとカラー表示できないので、 注意! コンソール!
たくさんあるよ!ライブラリ ライブラリ! とても紹介しきれないので、いくつか絞って。 そのほとんどは宝石箱 (gems) の中に……  役割 ライブラリ名 URL XML ライブラリ  ( 標準添付 ) REXML http://www.germane-software.com/software/XML/rexml/docs/tutorial.html HTML パーサ Nokogiri http://route477.net/rubyscraping/?Nokogiri Oracle インタフェース ruby-oci8 http://ruby-oci8.rubyforge.org/ja/index.html Excel 操作ライブラリ spreadsheet http://rubyforge.org/projects/spreadsheet/ Ruby 製  Make rake http://rake.rubyforge.org/ ご存知、総合 Web フレームワーク Ruby on Rails http://rubyonrails.org/
最後に… さあ!いま、 Ruby という 自由の羽 を得た !! 飛び立とう !! めくるめく オブジェクト の世界へ !!   カッコイイ事言います

Más contenido relacionado

La actualidad más candente

JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみたKengo Toda
 
リテラル文字列型までの道
リテラル文字列型までの道リテラル文字列型までの道
リテラル文字列型までの道Satoshi Sato
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会Akihiko Matuura
 
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践LINE Corporation
 
Constexprとtemplateでコンパイル時にfizz buzz
Constexprとtemplateでコンパイル時にfizz buzzConstexprとtemplateでコンパイル時にfizz buzz
Constexprとtemplateでコンパイル時にfizz buzz京大 マイコンクラブ
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までMasahiro Wakame
 
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1耕平 谷口
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターンMoriharu Ohzu
 
Impractical Introduction of Boost Spirit Qi [PPT]
Impractical Introduction of Boost Spirit Qi [PPT]Impractical Introduction of Boost Spirit Qi [PPT]
Impractical Introduction of Boost Spirit Qi [PPT]yak1ex
 
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」Hiromu Shioya
 
第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向hakoika-itwg
 
第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向hakoika-itwg
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみたSatoshi Sato
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
Haskell Day2012 - 参照透過性とは何だったのか
Haskell Day2012 - 参照透過性とは何だったのかHaskell Day2012 - 参照透過性とは何だったのか
Haskell Day2012 - 参照透過性とは何だったのかKousuke Ruichi
 
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)Akihiko Matuura
 
C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料真一 北原
 
JavaScript 非同期処理 入門
JavaScript非同期処理 入門JavaScript非同期処理 入門
JavaScript 非同期処理 入門Ishibashi Ryosuke
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?kwatch
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライドkoturn 0;
 

La actualidad más candente (20)

JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみた
 
リテラル文字列型までの道
リテラル文字列型までの道リテラル文字列型までの道
リテラル文字列型までの道
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
 
Constexprとtemplateでコンパイル時にfizz buzz
Constexprとtemplateでコンパイル時にfizz buzzConstexprとtemplateでコンパイル時にfizz buzz
Constexprとtemplateでコンパイル時にfizz buzz
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
 
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
Impractical Introduction of Boost Spirit Qi [PPT]
Impractical Introduction of Boost Spirit Qi [PPT]Impractical Introduction of Boost Spirit Qi [PPT]
Impractical Introduction of Boost Spirit Qi [PPT]
 
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」
 
第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向
 
第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみた
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
Haskell Day2012 - 参照透過性とは何だったのか
Haskell Day2012 - 参照透過性とは何だったのかHaskell Day2012 - 参照透過性とは何だったのか
Haskell Day2012 - 参照透過性とは何だったのか
 
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
 
C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料
 
JavaScript 非同期処理 入門
JavaScript非同期処理 入門JavaScript非同期処理 入門
JavaScript 非同期処理 入門
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 

Destacado

ニコニコ超エンジニアミーティング Rubyの歩き方
ニコニコ超エンジニアミーティング Rubyの歩き方ニコニコ超エンジニアミーティング Rubyの歩き方
ニコニコ超エンジニアミーティング Rubyの歩き方tatsuo sakurai
 
Rubyをちょっと理解しよう
Rubyをちょっと理解しようRubyをちょっと理解しよう
Rubyをちょっと理解しようShun Hikita
 
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Ouka Yuka
 
Lymphatic And Immune System
Lymphatic And Immune SystemLymphatic And Immune System
Lymphatic And Immune Systemguest866fdd0d
 
Pengeualaran Daerah Efektif
Pengeualaran Daerah EfektifPengeualaran Daerah Efektif
Pengeualaran Daerah Efektifguest5fc123f
 
You can do this we can help
You can do this we  can helpYou can do this we  can help
You can do this we can helpThomas Jensen
 
How to change the obiee 11g browser title
How to change the obiee 11g browser titleHow to change the obiee 11g browser title
How to change the obiee 11g browser titleRavi Kumar Lanke
 
Конкурс "Социальная сеть будущего" в рамках Молодежного Фестиваля «Цифровой ...
Конкурс "Социальная сеть будущего" в рамках  Молодежного Фестиваля «Цифровой ...Конкурс "Социальная сеть будущего" в рамках  Молодежного Фестиваля «Цифровой ...
Конкурс "Социальная сеть будущего" в рамках Молодежного Фестиваля «Цифровой ...Fert
 
Cep1 (Fil Eminimizer)
Cep1  (Fil Eminimizer)Cep1  (Fil Eminimizer)
Cep1 (Fil Eminimizer)cvt2go
 
The Beginners Guide to VA Home Loans by Low VA Rates
The Beginners Guide to VA Home Loans by Low VA RatesThe Beginners Guide to VA Home Loans by Low VA Rates
The Beginners Guide to VA Home Loans by Low VA RatesEric Kandell
 

Destacado (20)

ニコニコ超エンジニアミーティング Rubyの歩き方
ニコニコ超エンジニアミーティング Rubyの歩き方ニコニコ超エンジニアミーティング Rubyの歩き方
ニコニコ超エンジニアミーティング Rubyの歩き方
 
Rubyをちょっと理解しよう
Rubyをちょっと理解しようRubyをちょっと理解しよう
Rubyをちょっと理解しよう
 
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!
 
Lymphatic And Immune System
Lymphatic And Immune SystemLymphatic And Immune System
Lymphatic And Immune System
 
1.1a rasional pengembangan k2013
1.1a    rasional pengembangan k20131.1a    rasional pengembangan k2013
1.1a rasional pengembangan k2013
 
Pengeualaran Daerah Efektif
Pengeualaran Daerah EfektifPengeualaran Daerah Efektif
Pengeualaran Daerah Efektif
 
Noticias Tel abr2011
Noticias Tel abr2011Noticias Tel abr2011
Noticias Tel abr2011
 
You can do this we can help
You can do this we  can helpYou can do this we  can help
You can do this we can help
 
Jiuzhou
JiuzhouJiuzhou
Jiuzhou
 
Michael Jackson Thriller
Michael Jackson ThrillerMichael Jackson Thriller
Michael Jackson Thriller
 
Noticias TEL diciembre 2011
Noticias TEL diciembre 2011Noticias TEL diciembre 2011
Noticias TEL diciembre 2011
 
Toelichting green lease toelichting - Jones Lang Lasalle
Toelichting green lease toelichting - Jones Lang LasalleToelichting green lease toelichting - Jones Lang Lasalle
Toelichting green lease toelichting - Jones Lang Lasalle
 
Duurzaam Onderhoud
Duurzaam OnderhoudDuurzaam Onderhoud
Duurzaam Onderhoud
 
How to change the obiee 11g browser title
How to change the obiee 11g browser titleHow to change the obiee 11g browser title
How to change the obiee 11g browser title
 
Trip of a lifetime
Trip of a lifetimeTrip of a lifetime
Trip of a lifetime
 
Конкурс "Социальная сеть будущего" в рамках Молодежного Фестиваля «Цифровой ...
Конкурс "Социальная сеть будущего" в рамках  Молодежного Фестиваля «Цифровой ...Конкурс "Социальная сеть будущего" в рамках  Молодежного Фестиваля «Цифровой ...
Конкурс "Социальная сеть будущего" в рамках Молодежного Фестиваля «Цифровой ...
 
Cep1 (Fil Eminimizer)
Cep1  (Fil Eminimizer)Cep1  (Fil Eminimizer)
Cep1 (Fil Eminimizer)
 
The Beginners Guide to VA Home Loans by Low VA Rates
The Beginners Guide to VA Home Loans by Low VA RatesThe Beginners Guide to VA Home Loans by Low VA Rates
The Beginners Guide to VA Home Loans by Low VA Rates
 
Venus
VenusVenus
Venus
 
Gi
GiGi
Gi
 

Similar a Start!! Ruby

Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門Yasuko Ohba
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テストKen Morishita
 
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行monglee
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライドkoturn 0;
 
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
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRubyemasaka
 
第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)Masanori Machii
 
Php in ruby
Php in rubyPhp in ruby
Php in rubydo_aki
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Ransui Iso
 
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道Shigeru UCHIYAMA
 
Ruby紹介(pdf)
Ruby紹介(pdf)Ruby紹介(pdf)
Ruby紹介(pdf)Gohryuh
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発emasaka
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Ransui Iso
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Kei IWASAKI
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタートShumpei Shiraishi
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3Masahiro Wakame
 
リーダブルコード 1.0'
リーダブルコード 1.0'リーダブルコード 1.0'
リーダブルコード 1.0'Yamamura Takashi
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 

Similar a Start!! Ruby (20)

Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
 
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライド
 
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をコンパイルしよう
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道
 
Ruby紹介(pdf)
Ruby紹介(pdf)Ruby紹介(pdf)
Ruby紹介(pdf)
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
 
WCO2012「PHP教室」
WCO2012「PHP教室」WCO2012「PHP教室」
WCO2012「PHP教室」
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
 
リーダブルコード 1.0'
リーダブルコード 1.0'リーダブルコード 1.0'
リーダブルコード 1.0'
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 

Último

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 

Último (9)

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 

Start!! Ruby

  • 1. S tart! Ruby
  • 2. S tart! Ruby 偉そうにしてる人 の自己紹介 名前 : 榎原 明生 P.N.   : MitiM (未知夢) 仕事 : 開発者やってます 主に業務系です 最近はホント何でも屋、 MP 以外はたいてい齧ってます 隠れ Agiler です Ruby 暦 : 出会いは 1998 年ごろ 当時は Unix で動かすのが当たり前という言語で、 Windows 上に環境を構築するのが難しかった プログラム:言語マニアの毛があります けっこう重度の TDDer かつ迷える TDDer です なんでお前が喋るの?:なりゆきです!
  • 3. ・ なぜ Ruby ? ・ Smalltalk の思想を模倣した設計思想 ・ 基本的な構文 ・ Ruby らしさ S tart! Ruby
  • 4. なぜ Ruby ? * 開発現場を効率良く回す * OSS フレームワークを効果的に採用する * 自動化できる部分はできうる限り自動化する 短期化 する開発 3 ヶ月 単位の開発が増えてきた! 開発者は黙って 徹夜 休出 を耐えるしかないのか?
  • 5. なぜ Ruby ? 自動化 できる部分はできうる限り自動化する * Ci 等大きなツールは OSS を利用 * Db にリソースを放り込むとか細かい 糊的 ツールが必要 -> つくらにゃ!
  • 6. なぜ Ruby ? 自動化するためには ツール をつくらにゃ! * ツールのキモは「 素早く実装 」「 使いながらメンテ 」 * 開発対象の言語で作る! -> c# にしても Java にしても重厚感はいなめない * Excel のマクロ! -> null と Nothing の嵐に眩暈が * WindowsScriptingHost を使う! -> Office は OLE で使えるけど、ライブラリ不足が否めない… * LL は??
  • 7. なぜ Ruby ? 開発用ツールを LL で書くことの 有用性 Perl 、 Python 、 Ruby とあるけれど… * 糊 として手軽である * 開発効率 がとってもいい * 大抵の ライブラリ が揃っている -> ライブラリマネージャ (cpan 、 egg 、 gem) で ネットから 楽々 インストール で、なんで Ruby なの?
  • 8. 趣味です!! なぜ Ruby ?
  • 9. Smalltalk の思想を模倣した設計思想 ほとんど全てが オブジェクト * メソッドも オブジェクト * クラス定義も オブジェクト * 詳しく: クラス構造の定義とグローバルオブジェクト化宣言を 同時に書いている * nil(Java の null) すらも オブジェクト * NullObject パタンが簡単に!
  • 10. Smalltalk の思想を模倣した設計思想 全てが オブジェクト だとどうなの? * 全てが何かのクラスに所属している * 全てに操作のためのメソッドが存在する オブジェクト じゃないもの * 式 ( メソッド扱いを除く ) * 制御構文 -> 「式」として扱われる * 定義構文 * シンタックス・シュガー
  • 11. Smalltalk の思想を模倣した設計思想 式 ? * 値 を返すもの ・ メソッド ・ 演算 ・ 制御構文
  • 12. Smalltalk の思想を模倣した設計思想 ほとんど全てが メソッド * 演算子もメソッド ・ 再定義が可能 ・ ValueObject の &quot;==&quot; は同値性を保証するのに大活躍 メソッドじゃない演算子 = ?: .. ... ! not && and || or ::
  • 13. Smalltalk の思想を模倣した設計思想 メッセージ・ドリブン DuckTyping - 「もしもそれが アヒル のように歩き、 アヒル のように鳴くのなら、それは アヒル である」 * メッセージ・パッシングした先のオブジェクトが ・ 「何のクラスか」が大事なのではない ・ 「 そのメソッドを持っている / 持っていない 」が大事 * 持ってなかったらどうなる? ・ NoMethodError が飛ぶ
  • 14. 基本的な構文 命名規則 定数 大文字で始まる 変数 小文字で始まる 慣習 1. クラス名はパスカル記法 2. メソッド名、変数名は _ 区切りの小文字 3. 定数名は _ 区切りの大文字 class HogeHoge def hoge_hoge hoge_hoge = 0 HOGE_HOGE = &quot;hoge&quot;
  • 15. 基本的な構文 変数とシンボル 変数のスコープ ruby のスコープの思想「最小単位はブロック (not メソッド、 not 式 ) 」 ruby の変数の思想「変数のスコープはなるべく局所化しろ」 スコープ= ブロック・ローカル スコープ= インスタンス スコープ= クラス スコープ= グローバル hoge @hoge @@hoge $hoge シンボル 同名の変数に対してリンクを張っている。 :hoge
  • 16. 基本的な構文 メソッド の定義 引数なし 引数あり 複数の引数あり、初期化付き 可変長引数 メソッドのスコープは基本的にパブリック def bark end def bark(time) end def bark(time, voice=&quot; ばう &quot;) end def bark(*voice) end
  • 17. 基本的な構文 クラス の定義 class CurDog < Dog PEDIGREE = &quot; 雑種 &quot; attr_reader :name def initialize(name) @name = name end def bark(voice=&quot; ばう &quot;) p voice end def wait shit end def self.cute p &quot; きゅぅーん &quot; end private :shit def shit p &quot; ポトリ &quot; end end ruby の面白いところ: クラスとは「クラスオブジェクトの定数」にしか過ぎない。 クラスオブジェクト?? クラス定義に従ってインスタンスを生成できる インスタンス工場 のこと。
  • 18. 基本的な構文 クラス の定義 ポイント 1. new は特別なメッセージ。メソッドとして独自定義できない。 2. initialize は new した時に自動で呼ばれるメソッド。引数を加えることができる。 3. 継承したい時は < [ 継承元 ] と記述する。 4. インスタンス変数を公開したい時は、 シンボルを使って、 attr_accessor 、 attr_reader 、 attr_writer を指定する 5. メソッドを非公開にしたいときは、シンボルを使って、 private 、 protected を 指定する 6. クラスメソッド (static なメソッド ) を書くときは self. をメソッド名の前に付ける ※ この self は、じつはクラスオブジェクト自身を指している 慣習 1. クエリー系メソッドは、メソッド名の最後を &quot;?&quot; で終える。 2. とくに ValueObject で、インスタンスの内容を変更するメソッドは、 メソッド名の最後を &quot;!&quot; で終える。
  • 19. 基本的な構文 クラス・オブジェクトのインスタンス ( メソッド / アトリビュート ) へのアクセス 基本は &quot; . &quot; を使う dog = CurDog.new(&quot; ポチ &quot;) dog.bark(&quot; わおーん &quot;) dog.wait 定数にアクセスする場合は &quot; :: &quot; を使う p CurDog::PEDIGREE ちなみに メソッド呼び出し時の &quot; () &quot; は省略もできる dog = CurDog.new &quot; ポチ &quot; dog.bark &quot; わおーん &quot; ただし 引数括りの () は演算式括りの () よりも優先度が高い math.calc (a-b)+c なんてやるとハマるから、要注意
  • 20. 制御構文 基本的な構文 コメント # コメント 使える演算子 | ^ & <=> == === =~ > >= < <= << >> + - * / % ** ~ +@ -@ [] []= ` =+ =- =* =/ =% =** = ?: .. ... ! not && and || or :: <=> 大小比較 === [ 左辺 ] に [ 右辺 ] が含まれるか =~ 正規表現で比較 += -= etc [ 左辺 ] に [ 右辺 ] を計算した結果を [ 左辺 ] に代入する (自己代入) ちなみに、 ++ や -- は無い。
  • 21. 制御構文 条件分岐 許容条件 if 条件式 then 実行文 elsif 条件式 then 実行文 else 実行文 end 実行文 if 条件式 否定条件 unless 条件式 then 実行文 else 実行文 end 実行文 unless 条件式 ケース条件 case 評価式 when 式 then 実行文 else 実行文 end 基本的な構文
  • 22. 基本的な構文 制御構文 繰り返し while while 条件式 do 実行文 end 実行文 while 条件式 until until 条件式 do 実行文 end 実行文 until 条件式 for for 変数 in 範囲式 do 実行文 end じつは for 文はほとんど使わない 10.times do |i| end した方が楽だしね 途中で制御を抜ける等 break 、 next 、 redo 、 retry が使える
  • 23. 制御構文 基本的な構文 例外構文 例外を発生させる raise 例外タイプ raise 例外タイプ , メッセージ raise メッセージ 例外ブロック begin 実行文 rescue 例外タイプ => 変数 then レスキュー文 else 一般的なレスキュー文 ensure クローズ文 end
  • 24. 基本的な構文 制御構文 ほかのファイルを組み込む 組み込みたい位置で 拡張子 &quot;.rb&quot; は不要。 基本的には、カレントディレクトリからの相対パスで指定する。 ただし、 gems でインストールしたライブラリの場合、たいていはライブラリ名だけで大丈夫。 そのかわり、次の require を必ず入れること。 require ' ファイル名 ' require ' ディレクトリ / ファイル名 ' require 'rubygems'
  • 25. 制御構文 基本的な構文 シンタックス・シュガー Ruby は記述を簡便にするため、インスタンス生成に関する シンタックス・シュガー を用意している Array のインスタンス生成 Hash のインスタンス生成 String のインスタンス生成 Regexp のインスタンス生成 Fixnum のインスタンス生成 Float のインスタンス生成 array = [val1, val2] hash = {key1=>val1, key2=>val2} string = 'ruby' regexp = /ruby/ num = 1 float = 0.1
  • 26. 基本的な構文 ここまでできたら Java でフツーにできる事は できるようになる !
  • 27. Ruby らしさ 文字列で遊ぼう! シンプルな文字列は '' を使う string = ' これは文字列です。 ' ん~~、普通! ちょっとフォーマットしたい時には &quot;&quot; を使う 1. バックスラッシュ記法でコントロール文字を埋め込みたい 2. 変数の値を文字列にフォーマッティングしたい こんな用途に。 age = 18 string = &quot; これは 文字列です。 ボク永遠の #{age} 歳!! &quot; &quot; #{} &quot; の中は、かならず「式」として評価されるので、変数名がそのまま表記できる。 ちなみに、単なる計算式でも OK
  • 28. Ruby らしさ 文字列で遊ぼう! 主なバックスラッシュ記法 長文!ヒアドキュメント たとえば、 HTML のテンプレートな部分とか… たとえば、メールの長い典型文とか… そんな時はヒアドキュメント ちなみに、 <<'EOS' ~ EOS と書けば、 '' 囲みの文字列と同等の扱いになり、 <<&quot;EOS&quot; ~ EOS と書けば、 &quot;&quot; 囲みの文字列と同等の扱いになる。 STRING = <<&quot;EOS&quot; これは 文字列です。 ボク永遠の #{age} 歳!! EOS タブ 改行 キャリッジリターン 改ページ バックスペース ベル エスケープ 空白 nn 8 進数表記 nn 16 進数表記 x -x コントロール文字 (x は ASCII 文字 ) 文字 x そのもの
  • 29. Ruby らしさ ここから先の前提知識: ブロック ブロック とは ? スコープ の最小単位 do 実行文 end { 実行文 } または { ~ } の方が do ~ end より少しだけ優先度が高い
  • 30. Ruby らしさ ブロック付きメソッド(いわゆるクロージャ) 使い方 def hoge(ary) ret = &quot;result:&quot; ary.each do |i| ret += i end return ret end または def hoge(ary) ret = &quot;result:&quot; ary.each { |i| ret += i } return ret end 1. hoge メソッドから ary の each を呼び出す 2. each メソッド内から、ブロックが呼ばれる 2-1. |i| に each からの引数 (Array の内容 ) が渡る 2-2. ret に、渡された引数がどんどん連結される 3. ary の内容をすべて連結した文字列を返す
  • 31. ブロック付きメソッド(いわゆるクロージャ) Ruby らしさ イテレータ 10 回ループを普通にやると ブロック付メソッドを使うと … あんまり変わらないかな? でも、じつはこんなやり方も for 文より自然っぽくない? for i in [0..9] do p i end [0..9].each do |i| p i end 10.times do |i| p i end open/close 制御 ファイルを開いて閉じるを普通にやると ブロック付きメソッドを使うと 何が便利かって、 Java や C# で起きがちな「クローズするためだけに延々と try - finally 記述が感染していく」がないこと! 例外ブロックも最適化できる! file = nil begin file = File.open(&quot;hoge.txt&quot;) 実行文 ensure file.close unless file == nil end File.open(&quot;hoge.txt&quot;) do |file| 実行文 end
  • 32. Ruby らしさ ブロック付きメソッド(いわゆるクロージャ) ブロック付きメソッドの作り方 def hoge 実行文 yield 実行文 end def hoge 実行文 yield(item) 実行文 end 引数があるときは
  • 33. Ruby らしさ 動性の高い Ruby のリフレクション リフレクションという認識すらないくらい、「普通のこと」になっている。 これもまた、動的言語で「すべてがオブジェクト」の世界観が成せる技。 次のような動的拡張が可能になっている。 既存のクラスにメソッドを拡張する 既存の Array クラスに hoge というメソッドを追加する場合、次のように書けば良い。 class Array def hoge end end これ、なんと組み込みクラスにも可能。 もちろん、 既存のメソッドを書き換える ことも可能!
  • 34. Ruby らしさ 動性の高い Ruby のリフレクション 既存のオブジェクトにメソッドを拡張する クラスにメソッドを拡張すると、なにかとメンドクサイ問題が出る場合がある。 そんな時は、対象となる オブジェクト にだけメソッドを拡張する。 array = [] def array.hoge end
  • 35. Ruby らしさ 動性の高い Ruby のリフレクション いちいち一個ずつメソッドを書き換えたり、メンドクサくない?って時には MixIn モジュールとは「 機能的に同じものをまとめて定義しておく 」機能のこと。 クラスとは違い、継承ができないし、インスタンスの生成もできない。 「 GUI でのコントローラをモジュールで表現」のような使い方をする。 「そのクラスの直接的な機能じゃないけれど、副次的に必要になるユーティリティ的機能」などをモジュール化しておくと、なにかと便利。
  • 36. module KeyNameListItem def value @name = '' unless defined? @name @key = @name unless defined? @key if (@key == @name) return @name end return &quot;#{@key} - #{@name}&quot; end attr_reader :key end 動性の高い Ruby のリフレクション Ruby らしさ というモジュールをつくっておいて たとえば
  • 37. GUI で「このクラスをリスト表示したい!」というときにさらっと 動性の高い Ruby のリフレクション Ruby らしさ class Section include KeyNameListItem end というように、 クラス再定義 で組み込んでしまえる。 もちろん、オブジェクトにも MixIn section = Section.new section.extend KeyNameListItem
  • 38. これらの再定義をうまく使っていくと… Java や C# にありがちな XxxUtil とか XxxHelper とかいったクラスが必要ないという事に気づくはず! Ruby らしさ 動性の高い Ruby のリフレクション
  • 39. Ruby でもドキュメンテーション RDoc を使ってみよう! 修飾してみよう! RDoc の &quot; 書きどころ &quot; は、 JavaDoc などと同じ。 クラスの前 、 メソッドの前 、 シンボルの前 、 ファイルのトップ など。 # ドキュメンテーション と、コメントのように書くだけで OK 。 作成者やライセンス情報などの書き方 #Authors:: MitiM #Version:: 1.0 #Copyright:: Copyright (C) MitiM, 2010. All rights reserved. #License:: Ruby License 基本的に :: で区切れば、好きな項目を作成可能。
  • 40. Ruby でもドキュメンテーション RDoc を使ってみよう! 修飾してみよう! 見出し <H1> ~ <H3> は #= 見出しレベル 1 #== 見出しレベル 2 #=== 見出しレベル 3 箇条書きは、 -(*) で ・ 。 + でナンバリング。 #- レベル 1 # - レベル 2 #+ レベル 1 # + レベル 2 RDoc 内でコメントにしたいなら #-- # この中はドキュメンテーションされない #++ RDoc として書き出すのは $ rdoc [ ソースファイル .rb]
  • 41. コンソール! これだけは覚えておきたい!コマンド コンソールでいろいろ試す $ irb コンソール上でインタラクティブに実行できる Ruby 。 ソースの保存以外は何でも「 Ruby のソースのように」記述し、その場で実行できる。 こんな構文、できるの?この動きは何? 迷ったときは、まず irb ! ドキュメントを見る $ ri [ クラス名 ]#[ メソッド名 ] . 区切りでも OK 。 英語だけれど、知りたいクラスやメソッドがその場でわかる。
  • 42. これだけは覚えておきたい!コマンド ライブラリをダウンロードする $ gem install [ ライブラリ名 ] 空白区切りで、複数ライブラリを一気にダウンロードすることも可能。 ちなみに、依存ライブラリがあった場合は、勝手にダウンロードされる。 $ gem list で、インストールされているライブラリの一覧も表示可能。 RSpec でテストをする $ spec -c -fs [ テストコード名 ] いちいちテストの説明を見なくてもいいときは、 -fs を外す。 Windows は win32console (gem でインストール ) が入っていないとカラー表示できないので、 注意! コンソール!
  • 43. たくさんあるよ!ライブラリ ライブラリ! とても紹介しきれないので、いくつか絞って。 そのほとんどは宝石箱 (gems) の中に…… 役割 ライブラリ名 URL XML ライブラリ ( 標準添付 ) REXML http://www.germane-software.com/software/XML/rexml/docs/tutorial.html HTML パーサ Nokogiri http://route477.net/rubyscraping/?Nokogiri Oracle インタフェース ruby-oci8 http://ruby-oci8.rubyforge.org/ja/index.html Excel 操作ライブラリ spreadsheet http://rubyforge.org/projects/spreadsheet/ Ruby 製 Make rake http://rake.rubyforge.org/ ご存知、総合 Web フレームワーク Ruby on Rails http://rubyonrails.org/
  • 44. 最後に… さあ!いま、 Ruby という 自由の羽 を得た !! 飛び立とう !! めくるめく オブジェクト の世界へ !! カッコイイ事言います