Ruby

CODE TIPS

Encoding

# coding: utf-8

正規表現

# 抽出
"Hello, World".slice /W.+$/  #=> "World"
"Hello, World".slice /w.+$/i #=> "World"

# マッチ&抽出
"Hello, World. Hey, John.".match(%r{Hey, (.*).})[1] #=> "John"
"/path/to/article?q=hello".match(%r{.*/article\?q=(.*)})[1] #=> "hello"

# 含む
"Hello, World" =~ /Hello/  #=> 0
"Hello, World" =~ /hello/  #=> nil
"Hello, World" =~ /hello/i #=> 0
"Hello, World".include? "Hello" #=> true
["dog", "cat", "mouse"].include? "cat" #=> true

# 完全一致
"Hello, World" =~ /^Hello$/        #=> nil
"Hello, World" =~ /^Hello, World$/ #=> 0

String

str = %(Programming language "Ruby")
puts str
# => Programming language "Ruby"

ruby = "Ruby"
str2 = %(Programming language "#{ruby}")
puts str2
# => Programming language "Ruby"
%desc
%ダブルクオートで囲う場合と同等。式展開される。
%qシングルクオートで囲う場合と同等。式展開されない。
%Wスペース区切りで配列定義。式展開される。
%wスペース区切りで配列定義。式展開されない。
%I要素がシンボルの配列を作る。式展開される。
%i要素がシンボルの配列を作る。式展開されない。
%xコマンド出力を行う。バッククオートで囲った場合と同等。
%sシンボル。式展開されない。

true / false

!!(1)   #=> true
!!(0)   #=> true
!!(-1)  #=> true
!!(nil) #=> false
!!([])  #=> true
!!({})  #=> true

オブジェクトを JSON に変換

JSON.generate(obj)
JSON.pretty_generate(obj) # 整形

日付・時刻の計算

require 'active_support/time'

Time.now           #=> 2014-10-24 20:50:15 +0900
Time.now + 3.hours #=> 2014-10-24 23:50:15 +0900

via - Rubyで日付の計算するならactive_support使っとけって世間で言われてるけどマジだわ - yachibit.log

コマンドライン引数

puts ARGV[0]

例外

Debug

メソッド一覧

require 'pp'
pp [].methods.sort

pry

ブロックコメント

=begin
  :
  :
=end

File

出力

# r:読込 w:上書 a:追記
open("log.txt", "a"){|f| f.write("文字列")}

Path

File.basename("/home/gumby/work/ruby.rb")          #=> "ruby.rb"
File.basename("/home/gumby/work/ruby.rb", ".rb")   #=> "ruby"

CSV

CSV.table("data.tsv", { :col_sep => "\t", :quote_char => "\"" }) # needs header row

Array

要素数を指定して取得

[1,2,3,4,5].take(3)  #=> [1, 2, 3]
[1,2,3,4,5].first(3) #=> [1, 2, 3]

ActiveSupport

ActiveSupport による日時演算

gem 'activesupport'
require 'active_support/all'

Time.now                #=> 2014-10-06 21:39:10 +0900
Time.now.since(3.hours) #=> 2014-10-07 00:39:10 +0900

ActiveSupport による UTC(String) → JST(String) 変換

9時間進めて JST 表記にする

gem 'activesupport'
require 'active_support/all'

Time.strptime("2014-10-06 12:39:10 UTC", "%F %T UTC").since(9.hours).strftime("%F %T JST")
#=> "2014-10-06 21:39:10 JST"

blank?

require 'active_support/core_ext/object/blank'

Rubyワンライナー

ワンライナー基礎

-e
一番基本的なオプション。スクリプトを実行する。(他のオプションと組み合わせる時は必ず最後に記載する)
$ ruby -e 'puts "hoge"'

Windowsの環境変数Pathを改行して表示

echo %path% | ruby -F; -ane 'puts $F'

echo %path%で出力される内容を、rubyコマンドの引数として渡し、-nオプションによって行ごとに処理をループする。ループは Kernel.#gets により組込変数$_に格納される。echo %path%の場合は;区切りの1行文字列のため、ループは1回となる。次に、-aオプションによってループの先頭で自動的に $F = $_.split が実行され、結果の格納された$Fを puts で出力している。splitの区切り文字はデフォルトで半角スペースのようだが、オプション-F;;を区切り文字に指定している。

rubyを使って簡易webサーバー構築