ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

Rubyデビュー

スポンサードリンク

http://www.flickr.com/photos/28567825@N03/2925276567
photo by cliff1066™


開発を進めている中で最近悩みがあります。


俺)「修正しました!」


上司)「本当に大丈夫それ?」


俺)「はい!テストはしたので大丈夫です!」


私のいうテストとは、自分の手を使って確認していくスタンスです。なので、時間がめっちゃ掛かります。


ちょっとずつ自動化は進めています。ブラウザではiMacros。これめちゃくちゃ便利です。


しかし、ちょっとの修正を入れてもテストしないといけなくなる。でもテストするのに時間がかかる。。。


そして、、、やらなくなる。(今後のバグの可能性を生む)


これじゃ意味ないっすね。




冒頭長いんだけど、結局何がいいたいのか。



テストを自動化したいんです!!!



最近このスライドに発火させられました。


www.slideshare.net


なんとすばらしいことでしょう。


俺)「真似したい!(・∀・)!」


で、テストで使っているツールRubyだったので、おとなしくRubyを覚えることにしました。


目標は、Rubyの構文を覚える。⇒ テストのツールを使えるようになる。⇒ テストを書く


のステップで進む予定

ドットインストールで構文を学習


まずは読めるようにしなければ話になりません。本を買おうかなと思ったんだけど、外出るのがダルいので、ドットインストールで学習中です。今は1〜12まで終わったかな。


dotinstall.com

ドキュメント


一覧で見やすいので助かります。


Index of Files, Classes & Methods in Ruby 2.2.2 (Ruby 2.2.2)




メモ

出力

デバッグとかでよくつかうんだろうね。

print "hello world" # 終わったあとに改行がない
puts "hello world(puts)" # 改行がある
p "hello world(p)" # データの形式がわかるように表示
変数と定数

定数は先頭が大文字であればおkとのことですが、全部大文字で書いている人が多数なので、大文字にします。ちなみに、Rubyは全部オブジェクト型らしいです。

# 変数: データをつけるラベル
# 定数: 変更されないデータにつけるラベル

msg = "hello world"
p msg

ADMIN_EMAIL = "taguchi@gmail.com"
p ADMIN_EMAIL
文字列

単純な使い方ができます。(なんかPythonを学んでいる感じが)

# データ(オブジェクト)
# - メソッド(クラスで定義)

# 文字列 - String
# length 文字列をカウント
p "hello world".length # 11
シングル、ダブルクォーテーションの使いドコロ

文字列を囲うダブルクォーテーション、シングルクォーテーションで意味が変わります。PHPもそうだけど、ダブルクォーテーションで囲うクセつけようかな。。。(そもそもなんでシングルで囲うようになったんだろ? Pythonかな?)


個人的にビビったのは繰り返しになる点です。(グッバイforチュートリアル

# 
name = "taguchi"
x = "hel\tlo world, #{name}" # 変数展開、特殊文字 "hel\tlo world, taguchi"
y = 'hel\tlo world, #{name}' # 文字だけ "hel\\tlo world, \#{name}"

# 文字列連結 + *
puts "hello world" + " taguchi" # hello world taguchi

# 繰り返しになる(なん・・・だと・・・!?)
puts "hello " * 5 # hello hello hello hello hello 
!(ビックリマーク)と?(クエスチョンマーク)


「!」「 ?」 何ぞこれ(´・ω・`)!?


!が破壊的メソッド。これをつけるとメソッド実行時に変数の値も変更になります。


?は真偽値を返すメソッドです。メソッドの結果に真偽値で返します。


なんかSwiftでもみたような気がする。。。同じ意味だったのかな。

# ! 破壊的メソッド
# ? 真偽値を返すメソッド

# 通常メソッドは使用後、変数の値を変更しない
s = "taguchi"
puts s.upcase # TAGUCHI
puts s # taguchi

# 破壊的メソッドを使用すると、値も変更する
puts s.upcase! # TAGUCHI
puts s # TAGUCHI

# 真偽値を返す
p s.empty? # false
s = ""
p s.empty? # true
数値オブジェクト。Numeric

これまた単純でわかりやすい。

x = 10
y = 20.5
z = Rational(1, 3) # 1/3r <- これは動かなかった・・・?バージョン?

# こういう定義もできる。金額等見やすいようにコロン区切るするアレと同じこと
puts 100_000_000 # 100000000

# + - * / % **
# 演算
p x % 3 # 1
p x ** 3 # 1000
p z * 2 # 2/3
x = x + 5
p x # 15
x += 5 # 自己代入
p x # 20

# round 四捨五入のメソッド
p y.round # 21
配列オブジェクト。Array

やっぱりPythonと似ているな。どっちが先にリリースしたかわかりませんが、自分はPythonから入ったもので。。。


あと、ショートカットってなんだろう?

# 特に配列の中身の型は混じってもおk
sales = [5, 8, 4, "taguchi"]
p sales[0] # 5
p sales[3] # taguchi
p sales[0] = 10 # 書き換えもおk
p sales[0] # 10


# 範囲指定
# 0 - 2まで
p sales[0..2] # [5, 8, 4]

# コロン3つで未満指定(0から2未満)
p sales[0...2] # [5, 8]

# 一番後ろから
p sales[-1] # "taguchi"

# 複数指定
p sales[1, 2] # 8, 4

# 初期化
sales = []


# 複数要素の書き換え
sales = [5, 8, 4]
# 0 1が 1,2に変わります
sales[0...2] = [1, 2]
p sales # 1, 2, 4

# 要素を追加する
# 要素1のところから0個分追加(単純な追加になる)
sales[1, 0] = [10, 11, 12]
p sales # [1, 10, 11, 12, 2, 4]

# 要素の削除
sales[0, 2] = []
p sales # [11, 12, 2, 4]


# メソッド
# 要素をカウント
p sales.size

# 要素を逆にソート
p sales.sort.reverse

# 配列の最後に追加
p sales.push(100)

# ショートカット(?)もある
sales << 100 << 102
p sales # [11, 12, 2, 4, 100, 100, 102]
ハッシュ

Scalaの時にシンボルってのが一番意味不明でしたけど、やっとわかりました。Scalaのシンボルの意味とはまた違うのかね。


シンボルで記述すると読み込みのスピードが速くなるらしい。

# 他のプログラム言語と扱い方は同じ
# key value
sales = {"taguchi" => 200, "fkoji" => 300}
p sales["taguchi"] # 200


# シンボルキタ━(゚∀゚)━!
sales = {:taguchi => 200, :fkoji => 300}
p sales[:taguchi] # 200

# こういう書き方もできる
sales = {taguchi: 200, fkoji: 300}
p sales[:taguchi] # 200


# メソッド関連
# カウント
p sales.size # 2

# keyを全部出力
p sales.keys # taguchi, fkoji

# valueを全部出力
p sales.values # 200, 300

# keyに「taguchi」があればtrue
p sales.has_key?(:taguchi) # true
型変換

これまた便利だね。そういえば、PHPであんまり型変換したことないなぁ。

a = 10
b = "5"
p a + b.to_i # 15
p a + b.to_f # 15.0
p a.to_s + b # "105"

h = {taguchi: 100, fkoji: 200}
# ハッシュから配列に変換
p h.to_a # 配列になる [[:taguchi, 100], [:fkoji, 200]]

# Ruby 2.1以降です。(´;ω;`)ウッ…
# ハッシュから配列に変換してハッシュに変換
p h.to_a.to_h
%記法

これは初めてな感じがします。でもPerlでこんなのなかったっけ?


書き方に慣れてくれば便利になるかも。バックスラつけまくるの結構めんどいからね。

s = "he\"llo" # バックスラが必要
s = %Q(he"llo) # いらない
s = %q(he"llo) # 小文字でもおk
# s = %Q!hello! # 囲む記号は同じであれば問題ない

p s # "he\"llo"

# 配列の指定
# a = ["a", "b", "c"] と同じ意味
a = %W(a b c)

p a # ["a", "b", "c"]

感想


初めてRubyを勉強しましたが、わかりやすいですね。構文をマスターすれば、どんどん進むことができると思います。これは好きになりそうだわ。またRuby on Railsなんてフレームワークもあったらそれは増えていくと思いました!


周りは大体Ruby使っています。なんとなく気持ちはわかりました。


時間あるときに後編すすめますかね。がんばるお(^ω^ = ^ω^)