ラベル Ruby の投稿を表示しています。 すべての投稿を表示
ラベル Ruby の投稿を表示しています。 すべての投稿を表示

2014年6月29日日曜日

Shinosaka.rb & 西脇.rb & 東灘.rb 合同ペアプログラミングを開催したよヘ(^o^)ノ

先日、西脇.rb & 東灘.rbとの合同ペアプログラミングを開催しましたー

会場は弊社リバティフィッシュ株式会社


地域コミュニティ同士の交流を深めたいなーという事で、
西脇.rbの伊藤さんと東灘.rbのAkiさんの協力で実現しました!

Shinosaka.rbと西脇.rb & 東灘.rbメンバーのシャッフルでペアプロ開始!


僕は、みなさんを見守っていましたw (19人だった

あーだこーだとホントに楽しそうだし、真剣だった(当たり前w

終了後は、みんなでコードレビュー(写真とるの忘れた...

変数名やメソッド名の付け方とか、RSpec3のits使えないなぜだ?とか、
Rubyのコーディング規約的なとこや、もっと良い書き方はないかなどなど

勉強になりました(`・ω・´)ゞ

変数やメソッドの名前についてはこちらが参考になるかも
モデルやメソッドに名前を付けるときは英語の品詞に気をつけよう
アプリケーションをつくる英語

RSpec
Better Specs { rspec guidelines with ruby }
RSpecの最新の動向・RSpec 3へのアップグレードガイド
RSpec 3の重要な変更
Project: RSpec Core 3.0
Everyday Rails - RSpecによるRailsテスト入門

Ruby
ruby-style-guide (英語)
ruby-style-guide (日本語)

懇親会もみなさん参加していただきましたヘ(^o^)ノ

総勢18名の懇親会!

これだけRubyistがあつまると、なんでもできる気がしますw

ホントに楽しかった!

愚痴もいっぱい聞いてもらえたし... ( ̄▽ ̄;)

また、やりたいなー

参加していただいた皆さん!ホントにお疲れ様でしたヘ(^o^)ノ
そして、ありがとうございました!

このイベントの為に、Skypeミーティングで2ヶ月前から協力してくれた、
伊藤さん、Akiさんに心から感謝です!(これからも宜しくですw


イベント内容
Shinosaka.rb #6 with 東灘.rb & 西脇.rb 合同ペアプログラミング
西脇.rb & 東灘.rb ペアプログラミング In Action with Shinosaka.rb

みんなのコード(ペアごとにブランチ作成してます
pair-programming-in-action

勉強会
Minami.rb 第26回勉強会
東灘.rb Meetup #2
Shinosaka.rb #7


みなさんの参加お待ちしていますよー

( ̄(エ) ̄)彡☆

2014年6月12日木曜日

Rubyのancestorsメソッドヘ(^o^)ノ

ancestorsメソッドはクラスの親クラスを配列にして返します。

インクルードしたモジュールも含まれます。

ところで。。。

RailsでDate.tomorrowとすれば、明日の日付が取得できます。

RubyのDateクラスを拡張していますね−。

モンキーパッチは手軽で簡単に拡張できます。

Railsは。。。

調べてみましょう。

Railsコンソールで実行すると
$ Date.ancestors
=> [Date, DateAndTime::Calculations, Comparable, Object, ActiveSupport::Dependencies::Loadable, PP::ObjectMixin, JSON::Ext::Generator::GeneratorMethods::Object, Kernel, BasicObject]

注目すべきは
DateAndTime::Calculations

ちなみにRubyのirbで実行すると
$ Date.ancestors
=> [Date, Object, Kernel, BasicObject]

todayやtomorrowはDateAndTime::Calculationsに定義されています。
[参考] DateAndTime::Calculations

これModuleですねー。

なぜ、わざわざモジュールに定義してインクルードしているのか?
class date
  include DateAndTime::Calculations
end

それはオープンクラス拡張の可視化です。

モンキーパッチは手軽ですが、わかりずらいのです。

DateAndTime::Calculationsを見ればどんな拡張しているのか一目瞭然ですよね!

( ̄(エ) ̄)彡☆

2014年6月8日日曜日

Rails Girls Osaka #1 に行ってきたよーヘ(^o^)ノ

昨日はRails Girls Osaka #1にスポンサーとしてお邪魔しましたー。





















コーチのみなさんも、参加されたGirlsのみなさんも楽しそうなのが印象的でした。

楽しそうなみなさんを見ているとムズムズして、僕も途中から裏でコーディングを始めちゃったw

Heroku弁当うまかったー

みなさん無事、Herokuにpushできました。

プライベートでHeroku使ってますが、やっぱりいいですね

インストールも簡単 ⇒ heroku toolbelt

最後のつじたさんの挨拶は感動的でしたねー(>_<)

僕もShinosaka.rbを主催しているので、伝わるものがありました。

最初は不安でいっぱいでしたw

Rails Girls Kyoto #2の告知もありましたねー(楽しみや

ホントにみなさんお疲れ様でしたヘ(^o^)ノ

みなさんとすばらしい時間を共有できたことを幸せに思います。

僕の中で企画中のイベントもありますw

またお会いできることを楽しみにしています。

( ̄(エ) ̄)彡☆


2014年6月1日日曜日

Rubyの特異メソッドヘ(^o^)ノ

例えば。。。

murajunクラスでmurajun?メソッドを定義しているよねー

そのオブジェクトをnameクラス(名前アカンやつ)のhello_murajunメソッドに引数で渡してる。

murajun?メソッドだけなら、Stringクラスにモンキーパッチできるよねー

でも、このときだけmurajunかどうか判定したい場合は???

そんな時の特異メソッドですよ

murajun_name = "murajun"

def murajun_name.murajun?
  self == "murajun"
end

name = Name.new
p name.hello_murajun(murajun_name) # => Hello, murajun.


特定の条件下だけ、ある機能を実装したい場合に便利ですね。

( ̄(エ) ̄)彡☆

2014年5月31日土曜日

Rubyの無名クラスヘ(^o^)ノ


Classクラスの引数にクラスを渡すと継承と同じことができる

これと同じ
class Foo < String; end

11行目でクラス名を取得してるけど、nilなので名無しです

ちゃんと名前を付けてあげましょう
Foo = anonymous_class
p anonymous_class.name # => Foo

親クラスを確認
p anonymous_class.superclass # => String
p Foo.superclass # => String

helloメソッドの有無を確認
p Foo.instance_methods.grep(/hello/) # => [:hello]


( ̄(エ) ̄)彡☆

2014年5月30日金曜日

Rubyのinstance_evalヘ(^o^)ノ

昔VBとかやってた。

withとかでこんな感じで書けた
with foo
  .foo_method
end

これをinstance_evalを使ってRubyでやってみようヘ(^o^)ノ


こんな感じでfooを省略できる
foo.bar
foo.baz

インスタンス変数とかを条件に
メソッドコールしたりできるから便利

さらに17行目みたいに、
スコープを越えてローカル変数にアクセスできるのも便利

( ̄(エ) ̄)彡☆

2014年5月24日土曜日

Rubyのmethod_missingで動的メソッドヘ(^o^)ノ

method_missingで動的メソッドを作ってみよー

method_missingって...そうあれ!よく怒られるやつw

そいつをオーバーライドして、動的メソッドを作るよ

こんな感じ
例えば、17行目でmethod_missingの第1引数には「:name=」こんなハッシュが、
 第2引数には「アボ」って文字列が渡される。

参照する場合、19行目では第1引数には「:name」=のないハッシュが渡される。

その場合は、インスタンス変数のハッシュから値を取得する。

Rubyは楽しい!

ちなみにコードに出てくる「アボ」はこの子です




















Dragon Ball Wiki

戦闘力53万だけど、MAXは10億8千!


( ̄(エ) ̄)彡☆

参考
BasicObject#method_missing

2014年5月22日木曜日

Rubyのクラスインスタンス変数ヘ(^o^)ノ

Rubyではクラスで@valueとすることで、インスタンス変数として使うことができますよね?

んじゃ、ちょっと試してみましょう

class Foo
  def bar(val) 
    @value = val
  end
end

instance_variablesメソッドでインスタンス変数を取得しましょう
$ foo = Foo.new
$ p foo.instance_variables # => []

あれ?

barメソッドを呼び出してみましょう
$ foo.bar("murajun")
$ p foo.instance_variables # => [@value]

何が言いたいかというと、インスタンス変数はクラスにはいないよー

オブジェクトにいるんだよー














( ̄(エ) ̄)彡☆

参考
Object#instance_variables



2014年5月20日火曜日

RubyのArrayで条件式に一致する要素を抽出ヘ(^o^)ノ

Arrayでselectメソッドを使って、条件式に一致する要素を抽出してみましょう

普通にやっても味気ないので、2パターン書いてみました

どっちでもあんまり変わらないけど...(;・∀・)

こんな感じ


( ̄(エ) ̄)彡☆

Rubyで動的メソッド define_method編ヘ(^o^)ノ

Rubyでdefine_methodで動的にメソッドを作る

こんな感じ


共通部分をまとめるのに便利

( ̄(エ) ̄)彡☆

2014年5月16日金曜日

Rubyのネームスペースヘ(^o^)ノ

Rubyはオープンクラスのメソッドをオーバライドできます。

いわゆるモンキーパッチ〜


便利だけど、すべての振る舞いを変更してしまうので危険(;^ω^)

では、自分で定義したクラスをネームスペースで囲ってみましょう

オーバライドされなくなりましたー

ネームスペースで囲ったときは、10行目のように使用することができますー

( ̄(エ) ̄)彡☆

2014年5月14日水曜日

Rubyのincludeとextendヘ(^o^)ノ

Rubyのincludeとextendの違いについて


つまりはこういうことです





















ポイントは32行目と38行目

ancestorsメソッドでご先祖さんを取得しています。

includeしたbarクラスは、barとfooが取得できていますが、
extendしたbuzクラスは、fooが取得できていません。

extendはクラスに定義されるのではなく、
selfの特異メソッドとして定義されるのですねー


間違えてたら教えてw

( ̄(エ) ̄)彡☆

参考
instance method Module#ancestors
instance method Object#singleton_methods
instance method Enumerable#grep
instance method Module#instance_methods


2014年5月10日土曜日

RubiniusでRubyを学ぶヘ(^o^)ノ

@merborneさんのProcを制する者がRubyを制す(嘘)rubiniusを知ったw

こいつはRubyの学習にはもってこいと思い、コードリーディングしてみたヘ(^o^)ノ

Arrayクラスのeachがどんな処理をしているのか調べてみる。

コードリーディングにunite-grepを使ってみる。

パターン検索にはagを使います(早いらしい???)

agのインストール
$ brew install ag

Vimプラグインのunite.vimvimproc.vimをインストール

unite-grepでagを使いたいので
.vimrc
" unite grep
let g:unite_enable_start_insert = 1
let g:unite_enable_ignore_case = 1
let g:unite_enable_smart_case = 1
nnoremap  ,g  :Unite grep:. -buffer-name=search-buffer
nnoremap  ,cg :Unite grep:. -buffer-name=search-buffer
nnoremap  ,r  :UniteResume search-buffer
if executable('ag')
  let g:unite_source_grep_command = 'ag'
  let g:unite_source_grep_default_opts = '--nogroup --nocolor --column'
  let g:unite_source_grep_recursive_opt = ''
endif

vimを開いて,gとたたくとこんな感じで検索パターンを入力できる






結果がuniteで表示される












kernel/bootstrap/array.rb:1:class Array ← Enterでファイルを開く

eachメソッドを見てみる













要素の数だけループして、ブロックに要素の値を渡してる

引数にブロックがないときはなんか返してる

to_enumとは

そんな時はctagsヘ(^o^)ノ

rubiniusのルートディレクトリで
$ ctags -R

さっきのto_enumで<C-]>定義先へ

定義先から戻る場合は<C-o>

( ̄(エ) ̄)彡☆


参考ページ
unite.vimの使い方まとめ
ackを捨てて、より高速なag(The Silver Searcher)に切り替えた

2014年2月23日日曜日

Shinosaka.rb #2を開催したよーヘ(^o^)ノ

Shinosaka.rb #2を開催したヘ(^o^)ノ


参加費1,500円(゚д゚)!にも関わらず?意識高い皆さんが参加していただきましたー

次回は参加費見直しますw ごめんねー

内容はTDDハンズオン!

スライド

デモでプロ生ちゃんTDDを実践 ⇒ [GitHub]pronama_tdd

RSpecでみなさんと一緒にTDDを実践しました。

ライブコーディングはとっても緊張…(;・∀・)

でも、とても勉強になった。

こういう風に書いた方が良いとか、スペルミスのご指摘などなど

コードレビューの大切さを実感したよ

金井さんのLT
= 準備中 =

@kytiken_codeさんのテストコードをレビュー

Pryこみったーのyui-knkさんのお話。

普段ちょー便利に利用させていただいているPryの便利な使い方を教えていただきましたー

みなさんのこんな便利gemあるよー情報良かった!

知らないものばかり…まだまだですわw

rbenv-gemsetのお話

railsActiveRecordの便利な機能のお話

Autodocテスト結果をドキュメント化してくれるgem

その中でも…

コレ! git-svn

現場はsvn…

でもgitが使いたい!!!って人はこれ

ヤバいw

知らんかったーΣ(゚д゚lll)

Windowsでも使えるようですね ⇒ http://shinodogg.com/?p=4964

即採用決定ーヘ(^o^)ノ

やっぱり勉強会はいいよー

立ち上げてほんとによかった

次回は3月22日(土)予定です。「初めてのgem(仮)」

是非、参加してくださいねー

参加していただいたみなさん。お疲れ様でしたー( ̄(エ) ̄)彡☆

2013年6月2日日曜日

iPhoneさんさようなら、Androidさんこんにちわヘ(^o^)ノ

iPhone 4sからGalaxy S4へ

ウキウキ触ってると…















なんとminiなるものが…Σ(゚д゚lll)

miniの方が良かったなー

Simフリー版を買うかー?w

Android Studioで趣味アプリでも作りますか。

資格に興味が無かった私ですが、Ruby Association Certified Ruby Programmer Silverをパスしました。







普段使わないRubyの基礎を学ぶいい機会になりました。

今月中にRuby Association Certified Ruby Programmer Goldにチャレンジします。

受験料がちょっと高いwww

( ̄(エ) ̄)彡☆

2013年5月6日月曜日

Arrayクラス #Ruby

Class Array(Ruby 2.0)

Rubyの配列

foo = Array.new(2, "foo") # => ["foo", "foo"]
foo[0].replace("bar")
foo # => ["bar", "bar"]

ひえー、すべての要素の値が変更されました(;・∀・)

んじゃ…
foo = Array.new(2){"foo"} # => ["foo", "foo"]
foo[0].replace("bar")
foo # => ["bar", "foo"]

ほー、おもろいなーヘ(^o^)ノ

( ̄(エ) ̄)彡☆

2013年5月4日土曜日

比較演算子 #Ruby

Rubyの比較演算子

"foo" == "foo" # => true

eql?メソッド
"foo".eql? "foo" # => true

基本的には同じ振る舞いですねー

でも、eql?メソッドには少し注意が必要です

eql?メソッドは型の比較も行います

1 == 1.0 # => true
1.eql? 1.0 # => false

equal?メソッドは同じオブジェクトか判定します

"foo".equal? "foo" # => false

a = "foo"
b = a
a.equal? b # => true

( ̄(エ) ̄)彡☆

文字列からシンボルを生成する #Ruby

Rubyのシンボル

:foo ← こういうやつ

実は文字列からも生成できる

こんなかんじ
"foo".to_sym # => :foo

"foo".intern # => :foo

Class: String (Ruby2.0)

( ̄(エ) ̄)彡☆

2013年4月12日金曜日

Array#injectを使ってみたよヘ(^o^)ノ

Rubyで配列内の値をもごもごしたいときに使うやつ?

たとえば配列内の合計を取得してみる
[1,10,100].inject{|sum, value| sum + value} # => 111

実はこいつ…こんな風に書ける
[1,10,100].inject(:+) # => 111

知らんかった…Σ(゚д゚lll)

( ̄(エ) ̄)彡☆

2013年2月10日日曜日

rbenv BUILD FAILEDヘ(^o^)ノ

$ rbenv install 1.9.3-p385

BUILD FAILED…

またかよ…

$ brew tap homebrew/dupes
$ brew install apple-gcc42
$ export CC=/usr/local/bin/gcc-4.2
$ CONFIGURE_OPTS="--with-readline-dir=/usr/local --with-openssl-dir=/usr/local" rbenv install 1.9.3-p385

インストールできたヘ(^o^)ノ

( ̄(エ) ̄)彡☆