そんな装備で大丈夫か?

2,751 views

Published on

そんな装備で大丈夫か?

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,751
On SlideShare
0
From Embeds
0
Number of Embeds
492
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

そんな装備で大丈夫か?

  1. 1. フリーランスプログラマ 高木 誠 Tokyu.rb azabu.gem
  2. 2. .rb とか書いてあるのに何でphpやってるの?  実はその正体はRubyの世界から来た刺客  CyberXにRubyとRailsの素晴らしさを伝えにきた。
  3. 3. そんな装備(言語,フレームワーク)で大丈夫か? 画像は権利上の都合で削除されました。
  4. 4. 大丈夫だ、問題ない 画像は権利上の都合で削除されました。
  5. 5. 大丈夫じゃない、問題ある!  日々のイベント運用でヘトヘト  イベントのコードなどが呼び出し元のロジックなどに
  6. 6. そんな装備(言語,フレームワーク)で大丈夫か? 画像は権利上の都合で削除されました。
  7. 7. 一番いいのをくれ 画像は権利上の都合で削除されました。
  8. 8. Ruby on Rails
  9. 9. Ruby の特徴  すべてがオブジェクト  柔軟な構文  ブロック  mixin
  10. 10. すべてがオブジェクト?
  11. 11. 配列もハッシュもオブジェクト [PHP] $value = array(1,12,123); foreach ($values as $value) { echo $value; } [ruby] values = [1,12,123] values.each do |value| p value End values.each {|value| p value } h = {‘2’ => 2,’3’ => 3,’4’ => 4} h.each {|k,v| p “%s %04d” % [k,v]}
  12. 12. 数値もオブジェクト [PHP] for ($cnt = 0 ;$cnt < 100;$cnt++) { echo $cnt; } [ruby] 100.times do |cnt| p cnt end
  13. 13. ActiveRecordの戻り値もオブジェクト [ruby on rails] @user.name = ‘<hogehoge>’ @user.save view でモデルクラスを扱えるので view 上で <?= user.name_escape ?> と表記できる。 [cakephp] $this->user[‘User’][‘name’] = ‘<hogehoge>’; $this->User->save($this->user); $this->set(‘name’ => $this->User->$name_escape($this->user));
  14. 14. すべてオブジェクトのメソッドでいける [PHP] $a = explode("," , "ThinkPad,Macbook,vaio"); $s = implode("|" , $a); foreach ($a as $value) { } [ruby] a = "ThinkPad,Macbook,vaio".split(/,/) s = a.join('|') (ibm,apple,sony) = "ThinkPad,Macbook,vaio".split(/,/) "ThinkPad,Macbook,vaio".split(/,/).each {|value| }
  15. 15. 変数の空などの判断もオブジェクト [PHP] if (empty($s)) {} if (s == NULL) {} [ruby] if s.empty? end if s.nil? end
  16. 16. 柔軟な構文?
  17. 17. いろいろ省略できる 括弧を省略できる def print(value) p value end print(“hogehoge”) print “hogehoge” 戻り値を省略できる def get_user(id) User.find(id) end
  18. 18. 戻り値を複数返せる def get_values return 1,2,3 end a,b,c = get_values
  19. 19. 条件式が後ろにあってもいける [PHP] if ($hoge) { foo($hoge); } if ($max) { for ($cnt = 0 ; $cnt < $max;$cnt++ ) { print $cnt; } } [ruby] foo(hoge) if hoge max.times do |cnt| p cnt end if max
  20. 20. ブロック?
  21. 21. メソッドに処理の一部分を引き渡せる [PHP] $value = array(1,12,123); $puts_array = array(); foreach ($value in $values) { array_push($puts_array,"!!" . $value . "!!") } [ruby] values = [1,12,123] a = [] values.each {|value| a << "!!%s!!" % [value] } puts_array = values.inject([]) {|value,a| a << "!!%s!!" % [value];a}
  22. 22. つまり?  呼び出し元で一部分のみ実装する処理がつくれる  似たような処理だけどちょっと違うような処理の実装に向 いている
  23. 23. Mix-in module SampleModule def square(n) n * n end end class SampleClass include SampleModule # 略 end o = SampleClass.new p o.square(3) #=> 9
  24. 24. Railsの特徴  設定より規約(cakeと似ている)  rubyをいろいろ拡張している  プラグインが充実  rubyだから簡潔、柔軟な処理が可能
  25. 25. rubyをいろいろ拡張している # Railsの日付拡張機能 Time.now + 1.day Time.now + 1.month Time.now.beginning_of_month Time.now.end_of_month Time.now.end_of_week Date.today.end_of_week
  26. 26. 複数のデータベースに接続 legary: adapter: mysql database: 192.168.0.33 username: user password: pass host: legary_host new: adapter: mysql database: 192.168.0.44 username: user password: pass host: new_host class LegacyClient < ActiveRecord::Base establish_connection "legary" end class Client < ActiveRecord::Base establish_connection "new" End
  27. 27. ActsAsReadonlyable  スレーブとマスターの自動切り替え  テーブル別に設定可
  28. 28. Single Table Inheritance  テーブルは同一だが別クラスとして定義できる  データの格納先は一つのテーブルだが複数の実装  アイテムやイベントの実装に最適 class RecoveryItem < Item def use(inventry) … end end class OffensiveItem < Item def use(inventry) … end end
  29. 29. ActiveScaffold(マスタメンテ)  Ajax  細かい権限制御  自動生成  カスタマイズ可  モデルを通した動作
  30. 30. これらを踏まえて  イベントが頻繁に追加されるソーシャルゲームに最適  ソースが頻繁に変更されるソーシャルゲームに最適  再利用しやすい
  31. 31. ご静聴ありがとうございました。

×