SlideShare a Scribd company logo
1 of 31
フリーランスプログラマ高木誠 Tokyu.rbazabu.gem
.rbとか書いてあるのに何でphpやってるの? 実はその正体はRubyの世界から来た刺客 CyberXにRubyとRailsの素晴らしさを伝えにきた。
そんな装備(言語,フレームワーク)で大丈夫か? 画像は権利上の都合で削除されました。
大丈夫だ、問題ない 画像は権利上の都合で削除されました。
大丈夫じゃない、問題ある! 日々のイベント運用でヘトヘト イベントのコードなどが呼び出し元のロジックなどに
そんな装備(言語,フレームワーク)で大丈夫か? 画像は権利上の都合で削除されました。
一番いいのをくれ 画像は権利上の都合で削除されました。
Ruby on Rails
Ruby の特徴 すべてがオブジェクト 柔軟な構文 ブロック mixin
すべてがオブジェクト?
配列もハッシュもオブジェクト [PHP] $value = array(1,12,123); foreach($values as $value) {       echo $value;  } [ruby] values = [1,12,123] values.eachdo |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]}
数値もオブジェクト [PHP] for ($cnt= 0 ;$cnt< 100;$cnt++) {      echo $cnt;  } [ruby] 100.times do |cnt| pcnt end
ActiveRecordの戻り値もオブジェクト [cakephp] $this->user[‘User’][‘name’] = ‘<hogehoge>’; $this->User->save($this->user); $this->set(‘name’ => $this->User->$name_escape($this->user)); [ruby on rails] @user.name = ‘<hogehoge>’ @user.save view でモデルクラスを扱えるので view 上で <?= user.name_escape ?> と表記できる。
すべてオブジェクトのメソッドでいける [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| }
変数の空などの判断もオブジェクト [PHP] if (empty($s)) {} if (s == NULL) {} [ruby] ifs.empty? end if s.nil? end
柔軟な構文?
いろいろ省略できる 括弧を省略できる def print(value)   p value end print(“hogehoge”) print “hogehoge”  戻り値を省略できる def get_user(id)   User.find(id) end
戻り値を複数返せる def get_values   return 1,2,3 end a,b,c = get_values
条件式が後ろにあってもいける [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
ブロック?
メソッドに処理の一部分を引き渡せる [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}
つまり? 呼び出し元で一部分のみ実装する処理がつくれる 似たような処理だけどちょっと違うような処理の実装に向いている
Mix-in module SampleModule def square(n)     n * n end end class SampleClass include SampleModule   # 略 end o = SampleClass.new p o.square(3) #=> 9
Railsの特徴 設定より規約(cakeと似ている) rubyをいろいろ拡張している プラグインが充実 rubyだから簡潔、柔軟な処理が可能
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
複数のデータベースに接続 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
ActsAsReadonlyable スレーブとマスターの自動切り替え テーブル別に設定可
Single Table Inheritance テーブルは同一だが別クラスとして定義できる データの格納先は一つのテーブルだが複数の実装 アイテムやイベントの実装に最適 class RecoveryItem < Item def use(inventry)     … end end class OffensiveItem < Item def use(inventry)     … end end
ActiveScaffold(マスタメンテ) Ajax 細かい権限制御 自動生成 カスタマイズ可 モデルを通した動作
これらを踏まえて イベントが頻繁に追加されるソーシャルゲームに最適 ソースが頻繁に変更されるソーシャルゲームに最適 再利用しやすい
ご静聴ありがとうございました。

More Related Content

What's hot

Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
 
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」
Hiromu Shioya
 
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
xibbar
 
プログラミング・パラダイム
プログラミング・パラダイムプログラミング・パラダイム
プログラミング・パラダイム
Yusuke Matsushita
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
emasaka
 

What's hot (20)

メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
 
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 
C++の黒魔術
C++の黒魔術C++の黒魔術
C++の黒魔術
 
PCさえあればいい。
PCさえあればいい。PCさえあればいい。
PCさえあればいい。
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
 
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」
 
VBCPP - ICT+R 2012
VBCPP - ICT+R 2012VBCPP - ICT+R 2012
VBCPP - ICT+R 2012
 
Scalaのオブジェクトの話
Scalaのオブジェクトの話Scalaのオブジェクトの話
Scalaのオブジェクトの話
 
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
 
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
 
プログラミング・パラダイム
プログラミング・パラダイムプログラミング・パラダイム
プログラミング・パラダイム
 
Elm overview
Elm overviewElm overview
Elm overview
 
Introduction to cython
Introduction to cythonIntroduction to cython
Introduction to cython
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
 
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作るGoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
 
Go言語のスライスを理解しよう
Go言語のスライスを理解しようGo言語のスライスを理解しよう
Go言語のスライスを理解しよう
 
メタプログラミングってなに?
メタプログラミングってなに?メタプログラミングってなに?
メタプログラミングってなに?
 

Viewers also liked

Viewers also liked (6)

そんな装備で大丈夫か?
そんな装備で大丈夫か?そんな装備で大丈夫か?
そんな装備で大丈夫か?
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
 
「Python 機械学習プログラミング」 の挫折しない読み方
「Python 機械学習プログラミング」の挫折しない読み方「Python 機械学習プログラミング」の挫折しない読み方
「Python 機械学習プログラミング」 の挫折しない読み方
 
Grafana datasource plugin
Grafana datasource pluginGrafana datasource plugin
Grafana datasource plugin
 
社内でアジャイルと出会った新卒2年目がインフラ部隊でタスク可視化をやってみた話
社内でアジャイルと出会った新卒2年目がインフラ部隊でタスク可視化をやってみた話社内でアジャイルと出会った新卒2年目がインフラ部隊でタスク可視化をやってみた話
社内でアジャイルと出会った新卒2年目がインフラ部隊でタスク可視化をやってみた話
 
From AMP to PWA
From AMP to PWAFrom AMP to PWA
From AMP to PWA
 

Similar to そんな装備で大丈夫か?

WordPressで始めるphp入門
WordPressで始めるphp入門WordPressで始めるphp入門
WordPressで始めるphp入門
Hiroaki Murayama
 
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
サイボウズ・ラボユース 最終成果報告会プレゼンテーションサイボウズ・ラボユース 最終成果報告会プレゼンテーション
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
sn_monochr
 
ラボユース 最終成果報告会
ラボユース 最終成果報告会ラボユース 最終成果報告会
ラボユース 最終成果報告会
shiftky
 
10min r study_tokyor25
10min r study_tokyor2510min r study_tokyor25
10min r study_tokyor25
Nobuaki Oshiro
 
10min r study_tokyor25
10min r study_tokyor2510min r study_tokyor25
10min r study_tokyor25
Nobuaki Oshiro
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
 
Decades around here
Decades around hereDecades around here
Decades around here
Akio Tajima
 

Similar to そんな装備で大丈夫か? (20)

WordPressで始めるphp入門
WordPressで始めるphp入門WordPressで始めるphp入門
WordPressで始めるphp入門
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
Rails基礎講座 part.1
Rails基礎講座 part.1Rails基礎講座 part.1
Rails基礎講座 part.1
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
 
PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5
 
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
サイボウズ・ラボユース 最終成果報告会プレゼンテーションサイボウズ・ラボユース 最終成果報告会プレゼンテーション
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
 
ラボユース 最終成果報告会
ラボユース 最終成果報告会ラボユース 最終成果報告会
ラボユース 最終成果報告会
 
10min r study_tokyor25
10min r study_tokyor2510min r study_tokyor25
10min r study_tokyor25
 
10min r study_tokyor25
10min r study_tokyor2510min r study_tokyor25
10min r study_tokyor25
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語R
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
Material
MaterialMaterial
Material
 
Decades around here
Decades around hereDecades around here
Decades around here
 
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
 

Recently uploaded

Recently uploaded (10)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

そんな装備で大丈夫か?