WATAPEDIA
--
プログラミング
-- Ruby
Last updated Dec. 21, 2015
Home
Return
PDFを表示
記事が表示されない場合は,ブラウザが非対応です.
上のPDFを表示をクリックしてください.
comp -MYPEDIA Programing- Ruby 1 サンプルコード アクセサメソッドを定義 attr_accessor :<変数名 1>, :<変数名 2> サンプルコード class Car def initialize(carname) @name = carname end attr_accessor :name end car = Car.new("car1") car.name = "car2" puts car.name 参照のみのアクセサメソッドを定義 attr_reader :<変数名 1>, :<変数名 2> サンプルコード class Car def initialize(carname) @name = carname end attr_reader :name end car = Car.new("car1") puts car.name 1 Programing 一覧へ . ↰. comp -MYPEDIA Programing- 更新のみのアクセサメソッドを定義 attr_accessor :<変数名 1>, :<変数名 2> サンプルコード class Car def initialize(carname) @name = carname end attr_writer :name end car = Car.new("car1") car.name = "car2" クラス変数をクラス外から参照 def self.<変数名> サンプルコード class Car @@carNum = 0 def initialize @@carNum += 1 end def self.carNum @@carNum end end puts Car.carNum クラス内でトップレベルのクラスを new する ::<クラス名> サンプルコード class Car 2 Programing 一覧へ . ↰. comp -MYPEDIA Programing- def initialize @load = ::Load.new(10) end attr_accessor :load end class Load # 積み荷クラスを定義 def initialize(weight) @weight = weight end def to_s "weight: #{@weight}" end end aCar = Car.new puts aCar.load オブジェクトのインスタンス変数の一覧を取得する <オブジェクト>.instance_variables サンプルコード class Point def initialize(x,y) @x = x @y = y end end aPoint = Point.new(1.0, 2.0) puts aPoint.instance_variables クラスのクラス変数の一覧を取得する <クラス名>.class_variables サンプルコード 3 Programing 一覧へ . ↰. comp -MYPEDIA Programing- class Point @@pointNum = 0 def initialize(x,y) @x = x @y = y @@pointNum += 1 end end aPoint = Point.new(1.0, 2.0) puts Point.class_variables クラスの定数の一覧を取得する <クラス名>.constants サンプルコード class Point MAX_NUM = 10 @@pointNum = 0 def initialize(x,y) @x = x @y = y @@pointNum += 1 end end aPoint = Point.new(1.0, 2.0) puts Point.constants クラスのクラス変数名と値の一覧を表示する <ク ラ ス 名>.class_variables.each{|<変 数>| puts <ク ラ ス 名>.class\_variable\_get(<変数>).to\_s << " " << <変数>.to\_s} サンプルコード class Point 4 Programing 一覧へ . ↰. comp -MYPEDIA Programing- @@pointNum = 0 def initialize(x,y) @x = x @y = y @@pointNum += 1 end end Point.class_variables.each{|classVarName| puts Point.class_variable_get(classVarName).to_s << " " << classVarName.to_s } クラスの定数名と値の一覧を表示する <ク ラ ス 名>.constants.each{|<変 数>| puts <ク ラ ス 名>.const\_get(<変 数>).to\_s << " " << <変数>.to\_s} サンプルコード class Point MIN_NUM = 0 MAX_NUM = 10 @@pointNum = 0 def initialize(x,y) @x = x @y = y @@pointNum += 1 end end Point.constants.each{|constantName| puts Point.const_get(constantName).to_s << " " << constantName.to_s } オブジェクトのクラスを調べる puts <オブジェクト>.class 5 Programing 一覧へ . ↰. comp -MYPEDIA Programing- サンプルコード puts "あいうえお".class オブジェクトの ID を出力 puts <オブジェクト>.object_id サンプルコード aString = "test" puts aString.object_id ファイルを一行ずつ読み込む (イテレータを使う方法)
.each_line{|<変数>| <処理>} サンプルコード aFile = open("test.txt") aFile.each_line{|aLine| puts aLine + "行間\n"} aFile.close ファイルを一行ずつ読み込む (gets を使う方法)
.each_line{|<変数>| <処理>} サンプルコード aFile = open("test.txt") begin aLine = aFile.gets puts aLine end while aLine != nil aFile.close 6 Programing 一覧へ . ↰. comp -MYPEDIA Programing- ファイルを配列として読み込む
.readlines サンプルコード aFile = open("test.txt") aList = aFile.readlines puts "3 行目は" + aList[2] aFile.close 数値の型変換 <オブジェクト>.to_<型> サンプルコード puts 10.to_f#浮動小数点型に変換 puts 10.5.to_i#整数型に変換 (切り捨て) 数値を切り上げ・切り捨て・四捨五入で整数化
.ceil
.floor
.rount サンプルコード puts 10.5.ceil #切り上げ puts 10.5.floor #切り捨て puts 10.5.round #四捨五入 任意精度計算 BigDecimal::new("<数値>") サンプルコード require ’bigdecimal’ puts 0.123456789123456789 * 2#通常の浮動小数点で計算 puts BigDecimal::new("0.123456789123456789") * 2#bigdecimal で計算 7 Programing 一覧へ . ↰. comp -MYPEDIA Programing- 分数のまま計算をする Rational サンプルコード require ’rational’ puts Rational(2, 3) + Rational(5, 2) 文字コード変換
.toutf8 サンプルコード require ’kconv’ puts "あいうえお".tosjis puts "あいうえお".toutf8 puts "あいうえお".toutf16 puts "あいうえお".toeuc 文字列を URL エンコードに変換 CGI.escape(<文字列オブジェクト>) サンプルコード require ’cgi’ puts CGI.escape(’ あいうえお’) Kakasi を使って漢字をひらがなに変換 Kakasi.kakasi("-osjis -JH",<文字列オブジェクト>) サンプルコード require ’kakasi’ include Kakasi puts Kakasi.kakasi("-osjis -JH","漢字") 8 Programing 一覧へ . ↰. comp -MYPEDIA Programing- Kakasi を使ってひらがなをローマ字に変換 Kakasi.kakasi("-osjis -Ha",<文字列オブジェクト>) サンプルコード require ’kakasi’ include Kakasi puts Kakasi.kakasi("-osjis -Ha","ひらがな") Kakasi を使ってカタカナをローマ字に変換 Kakasi.kakasi("-osjis -Ka",<文字列オブジェクト>) サンプルコード require ’kakasi’ include Kakasi puts Kakasi.kakasi("-osjis -Ka","カタカナ") Kakasi を使って日本語をローマ字に変換 Kakasi.kakasi("-osjis -Ka",<文字列オブジェクト>) サンプルコード require ’kakasi’ include Kakasi puts Kakasi.kakasi("-osjis -Ja -Ha -Ka -Ea","漢字・ひらがな・カタカナ") 大文字を小文字化 <文字列オブジェクト>.downcase サンプルコード aString = "ABCabc" puts aString.downcase! 9 Programing 一覧へ . ↰. comp -MYPEDIA Programing- ランダム文字列を生成 <文字の配列オブジェクト>.sample(<文字数>).join サンプルコード puts ((0..9).to_a + ("a".."z").to_a + ("A".."Z").to_a).sample(10).join フォルダを作成 Dir::mkdir("<ディレクトリ名>") サンプルコード Dir::mkdir("test")#test というフォルダを作成 } フォルダを作成する際にフォルダが既に存在する場合の処理 rescue Errno::EEXIST サンプルコード begin Dir::mkdir("test") rescue Errno::EEXIST puts "Error: フォルダが既に存在します." end フォルダ内の条件に一致するファイル一覧を取得 Dir::glob("<ワイルドカードを含むパス>") サンプルコード puts Dir::glob("**/*.xlsx")#xlsx 形式のファイル一覧を表示 10 Programing 一覧へ . ↰. comp -MYPEDIA Programing- フォルダ内の条件に一致するすべてのファイルについて処理 Dir::glob("<ワイルドカードを含むパス>").each{|file| <処理>} サンプルコード Dir::glob("**/*.xlsx").each{|file| puts File.basename(file, ’.*’);#ファイル名 (拡張子なし) を取得 } ローカルサーバを起動 ruby -rwebrick -e ’WEBrick::HTTPServer.new ({:DocumentRoot => "./", :Port => <ポート番号>}).start’ サンプルコード ruby -rwebrick -e ’WEBrick::HTTPServer.new ({:DocumentRoot => "./", :Port => 8080}).start’ #カレントディレクトリに http://localhost:8080/にアクセスできる } 文字列中で最初にマッチする部分を置換 <文字列オブジェクト>.sub(<パターン>, <置換文字列>) サンプルコード aString = "AABBCC" puts aString.sub(/B/, "X") 文字列中でマッチする部分をすべて置換 <文字列オブジェクト>.gsub(<パターン>, <置換文字列>) サンプルコード aString = "AABBCC" puts aString.gsub(/B/, "X") 11 Programing 一覧へ . ↰. comp -MYPEDIA Programing- 配列に含まれるかを調べる
.include?(<パターン>) サンプルコード aList = ["AA","BB","CC"] puts aList.include?("BB") 2 次元配列を検索する
.assoc(<第 1 要素>) サンプルコード aList = [["AA", "1"], ["BB", "2"], ["CC", "3"], ] puts aList.assoc("BB") 文字列中でパターンにマッチする部分をすべて抽出 <文字列オブジェクト>.scan(<パターン>) サンプルコード aString = "AXBXCXDXE" puts aString.scan(/X.*?X/) 文字列中でパターンにマッチする部分の一部を抽出 <文字列オブジェクト>.scan(<パターン>(<パターン>)<パターン>) サンプルコード aString = "AXBXCXDXE" puts aString.scan(/X(.*?)X/) 文字列をカンマなどの区切り文字で分割 <文字列オブジェクト>.split(<パターン>) 12 Programing 一覧へ . ↰. comp -MYPEDIA Programing- サンプルコード aString = "AA,BB,CC" puts aString.split(",") 2 次元配列などを整形された (pp での出力と同じ) 文字列として得る. <オブジェクト>.pretty_inspect サンプルコード require ’pp’ aList = [["AAAAAAAAA","BBBBBBBBB"],["CCCCCCCCC","DDDDDDDDD"],["EEEEEEEEE","FFFFFFFF print aList.pretty_inspect 配列を each しながら回数を数える
.each_with_index{|<変数 1>, <変数 2>|} サンプルコード aList = ["AA","BB","CC"] aList.each_with_index{|temp, i| puts "#{i}\t#{temp}" } 配列の最後に要素を追加
.push(<追加要素>) サンプルコード aList = ["AA","BB","CC"] puts aList.push("DD") 13 Programing 一覧へ . ↰. comp -MYPEDIA Programing- 配列の最初に要素を追加
.unshift(<追加要素>) サンプルコード aList = ["AA","BB","CC"] puts aList.unshift("DD") 配列の最後の要素を取り出す
.pop サンプルコード aList = ["AA","BB","CC"] aList.pop puts aList 配列の最初の要素を取り出す
.shift サンプルコード aList = ["AA","BB","CC"] aList.shift puts aList 配列の重複を排除
.uniq サンプルコード aList = ["AA","BB","BB","CC"] puts aList.uniq 14 Programing 一覧へ . ↰. comp -MYPEDIA Programing- 複数の配列をマージ (
+
).uniq サンプルコード aList1 = ["AA","BB","CC"] aList2 = ["CC","DD", "EE"] puts (aList1 + aList2).uniq 配列の重複要素を取り出す
.uniq.each{|<変数>| puts <変数> if
.index(<変数>) <
.rindex(<変数>)} サンプルコード aList = ["AA","XX","BB","XX","CC"] aList.uniq.each{|temp| puts temp if aList.index(temp) < aList.rindex(temp)} 条件に一致する配列の要素を抜き出す
.select{|<変数>| <条件>} サンプルコード aList = ["AAX", "BBX", "CCY"] puts aList.select {|temp| temp =~ /..X/ } 配列を比較して一方にない要素を取り出す
-
サンプルコード aList1 = ["AA", "BB", "CC"] aList2 = ["AA", "BB", "DD"] puts aList1 - aList2 15 Programing 一覧へ . ↰. comp -MYPEDIA Programing- 配列の要素数を調べる
.length サンプルコード aList = ["AA","BB","CC"] puts aList.length 配列の要素を合計する
.inject(:+) サンプルコード aList = [1, 2, 4] puts aList.inject(:+) 配列を昇順に並べ替える
.sort サンプルコード aList = ["2","1","3"] puts aList.sort 配列を降順に並べ替える
.sort{|a,b| b <=> a} サンプルコード aList = ["2","1","3"] puts aList.sort{|a,b| b <=> a} 配列をランダムに並べ替える <配列オブジェクト>.sort_by{rand} 16 Programing 一覧へ . ↰. comp -MYPEDIA Programing- サンプルコード puts ["AA", "BB", "CC", "DD", "EE"].sort_by{rand} ハッシュの配列をハッシュのキーで並べ替える
.sort{|a, b| a[<ハッシュキ ー>] <=> b[<ハッシュ キー>]} サンプルコード aList = [{:key1 => 10, :key2 => 10}, {:key1 => 20, :key2 => 30}, {:key1 => 30, :key2 => 20},] puts aList.sort{|a, b| a[:key2] <=> b[:key2]} ハッシュの配列から条件に合うものの個数を調べる
.count{|temp| <条件式>} サンプルコード aList = [{:key1 => 10, :key2 => 10}, {:key1 => 20, :key2 => 30}, {:key1 => 30, :key2 => 10},] puts aList.count{|temp| temp[:key2]==10} 2 次元配列を昇順に並べ替える
.sort{|a, b| a[<列番号-1>] <=> b[<列番号-1>]} サンプルコード aList = [[1,2],[2,1],[3,3]] puts aList.sort{|a, b| a[1] <=> b[1]} 17 Programing 一覧へ . ↰. comp -MYPEDIA Programing- 2 次元配列の行と列を入れ替える
.transpose サンプルコード aList = [[1,2],[3,4],[5,6]] p aList.transpose 2 次元配列から特定の列を取り出す
.transpose[<列番号>] サンプルコード aList = [[1,2],[3,4],[5,6]] p aList.transpose[0] CGI でフォームからの入力を受け取る
.params[’<フォームの name>’] サンプルコード (sample.rb) require ’cgi’ formData = CGI.new aString = formData.params[’textData’]#name="textData"のフォームの入力を 受け取る puts "Content-Type: text/html" puts "#{aString}" サンプルコード (index.html)
18 Programing 一覧へ . ↰. comp -MYPEDIA Programing- CGI でファイルを受け取る
.params[’<フォームの name>’][0] サンプルコード (sample.rb) require ’cgi’ puts "Content-type: text/html\n" formData = CGI.new value = formData.params[’imputFile’][0]#ファイルを受け取る fileHandle = open("file.jpg", "w")#コピー用ファイルを開く fileHandle.write(value.read)#ファイルをコピー fileHandle.close サンプルコード (index.html)
画像ファイル
Mechanize で Web にアクセス
.get(
) サンプルコード require ’mechanize’ agent = Mechanize.new p agent.get("http://www.google.com/").body Mechanize でユーザエージェント偽装
.user_agent_alias = ’<ユーザエージェント>’ サンプルコード require ’mechanize’ agent = Mechanize.new 19 Programing 一覧へ . ↰. comp -MYPEDIA Programing- agent.user_agent_alias = ’Windows IE 7’ # 他に’Mac Safari’, ’iPhone’な ども指定可. p agent.get("http://www.google.com/").body capybara-webkit で Web にアクセス (Javascript を含んでも可) visit(’
’) サンプルコード require ’capybara-webkit’ include Capybara::DSL Capybara.current_driver = :webkit visit(’http://google.com’) # URL にアクセス puts current_url # 今の URL を表示 puts source # HTML を表示 capybara-webkit で Web でフォームに入力 fill_in("
", :with => "<入力テキスト>") サンプルコード require ’capybara-webkit’ include Capybara::DSL Capybara.current_driver = :webkit visit(’http://google.com’) # URL にアクセス fill_in("q", :with => "test") # 検索ワードを入力 find(’input[name="btnG"]’).click # input タグの btnG のボタンをクリック puts current_url # 今の URL を表示 puts source # HTML を表示 capybara-webkit で Web でボタンをクリック find(’<タグ>[<タグ属性>]’).click サンプルコード 20 Programing 一覧へ . ↰. comp -MYPEDIA Programing- require ’capybara-webkit’ include Capybara::DSL Capybara.current_driver = :webkit visit(’http://google.com’) # URL にアクセス fill_in("q", :with => "test") # 検索ワードを入力 find(’input[name="btnG"]’).click # input タグの btnG のボタンをクリック puts current_url # 今の URL を表示 puts source # HTML を表示 capybara-webkit で Web のスクリーンショ ットを保存 page.save_screenshot ’<ファイル名>’ サンプルコード require ’capybara-webkit’ include Capybara::DSL Capybara.current_driver = :webkit visit(’http://google.com’) # URL にアクセス fill_in("q", :with => "test") # 検索ワードを入力 find(’input[name="btnG"]’).click # input タグの btnG のボタンをクリック page.save_screenshot ’screenshot.png’ # スクリーンショ ットを保存 puts current_url # 今の URL を表示 puts source # HTML を表示 selenium で Web にアクセス (Javascript を含んでも可) visit(’
’) サンプルコード require ’capybara’ require ’selenium-webdriver’ Capybara.current_driver = :selenium include Capybara::DSL visit(’http://google.com’) # URL にアクセス puts current_url # 今の URL を表示 21 Programing 一覧へ . ↰. comp -MYPEDIA Programing- puts source # HTML を表示 # 他は capybara-webkit と同じ. シェルコマンドを実行 ‘<シェルコマンド>‘ サンプルコード result = ‘ls‘ puts result 正規表現で/をエスケープせずに使う %r<任意の記号><正規表現><任意の記号> サンプルコード aString = ’AAA/BBB/CCC’ aString =~ %r{/(.*)/} puts $1 後で参照しない正規表現のグループ化 /(?:<パターン>)/ サンプルコード aString = "A-B" aString =~ /(?:[A-Z])-([A-Z])/ puts $1 ネストされた括弧から対応する括弧の部分を正規表現でマッチさせて抜き出 す /<パターン>(?<<名前>><左括弧>[^<左括弧><右括弧>]*?\g<<名前>>*<右括 弧>[^<左括弧><右括弧>]*?)/ 22 Programing 一覧へ . ↰. comp -MYPEDIA Programing- サンプルコード # BB の後に来る括弧に対応する部分を抜き出す /BB(?
\([^\(\)]*?\g
*\)[^\(\)]*?)/ =~ ’(AA(BB(CC(DD)(EE)FF))))’ puts $~[:paren] 改行を含む任意文字列にマッチさせる <文字列オブジェクト>=~/<パターン>/m サンプルコード aString = "AAB\nBCC" aString=~/AA(.*)CC/m puts $1 無効な引数が与えられたときに例外を起こす raise "<メッセージ>" if <条件> サンプルコード def division(a, b) raise "Error!!" if b == 0 # b が 0 だとエラーを返す. a / b end puts division(3, 0) 例外 (エラー) を補足して例外処理をする begin <通常処理> rescue <例外処理> end 23 Programing 一覧へ . ↰. comp -MYPEDIA Programing- サンプルコード begin a = 1 b = 0 c = a / b rescue a = "infinity" end puts a すべての例外 (エラー) を補足して例外処理をする begin <通常処理> rescue Exception <例外処理> end サンプルコード begin a = 1 b = 0 c = a / b rescue Exception a = "infinity" end puts a ダブルクォーテーションをエスケープせずに使う %Q<任意の記号><文字列><任意の記号> サンプルコード 24 Programing 一覧へ . ↰. comp -MYPEDIA Programing- puts %Q{"test"} シングルクォーテーションをエスケープせずに使う %q<任意の記号><文字列><任意の記号> サンプルコード puts %q{’test’} 同じ操作を n 回繰り返す <整数オブジェクト>.times{<処理>} サンプルコード 10.times{puts ’AA’} require で呼び出すバージョンを変更 gem ’<ライブラリ名>’ ’<バージョン>’ サンプルコード gem ’capybara’, ’2.3.0’ require ’capybara’ ftp でファイルをダウンロード
.get(’<ファイル名>’) サンプルコード ftp = Net::FTP.new ftp.connect(’<ホストアドレス>’) ftp.login(’<ユーザ名>’, ’
’) ftp.binary = true ftp.chdir(’<ディレクトリ名>’) # 任意のディレクトリに移動 25 Programing 一覧へ . ↰. comp -MYPEDIA Programing- ftp.get(’index.html’) ftp.quit ftp でファイルをダウンロード
.put(’<ファイル名>’) サンプルコード ftp = Net::FTP.new ftp.connect(’<ホストアドレス>’) ftp.login(’<ユーザ名>’, ’
’) ftp.binary = true ftp.chdir(’<ディレクトリ名>’) # 任意のディレクトリに移動 ftp.put(’index.html’) ftp.quit 標準出力を書き換え printf "\e[<書き換え文字数>D" サンプルコード aString = "aaa" printf aString STDOUT.flush sleep(1) printf "\e[#{aString.size}D" # カーソルを文字数分だけ左に移動 aString = "bbb\n" printf aString STDOUT.flush 2 コマンド 26 Programing 一覧へ . ↰. comp -MYPEDIA Programing- ワンライナーで実行 ruby -e ’<コード>’ サンプルコード ruby -e ’puts "test"’ gem でパッケージをインストール sudo gem install <パッケージ名> サンプルコード sudo gem install capybara gem のすべてのパッケージをアップデート sudo gem update サンプルコード sudo gem install capybara gem 自体をアップデート sudo update_rubygems サンプルコード sudo gem install rubygems-update sudo update_rubygems 27 Programing 一覧へ . ↰.