SlideShare una empresa de Scribd logo
1 de 59
Descargar para leer sin conexión
Rails あるある
現場での悩みとアンチパターン

http://www.nce.co.uk/features/transport/network-rail-changing-track/8622890.article

札幌市中央区Ruby会議01
2014.02.08

Ruby札幌
佐藤 竜之介(Ryunosuke SATO)
提供
From Sapporo, with Love for Ruby.

Ruby札幌
自己紹介
@tricknotes
I am a software developer who
love JavaScript and Ruby.

http://tricknotes.hateblo.jp/
I love OSS
札幌市中央区Ruby会議01
Sapporo.js
http://sapporojs.org/
よろしく
お願いします
Rails あるある
現場での悩みとアンチパターン

http://www.nce.co.uk/features/transport/network-rail-changing-track/8622890.article

札幌市中央区Ruby会議01
2014.02.08

Ruby札幌
佐藤 竜之介(Ryunosuke SATO)
今日の話
Rails には便利で魅力的な機能がたくさんあります
それらを使えば、簡単にアプリケーションを作ること
ができます
しかし、使いどころを間違えると、あとで変更に弱く
なってしまい開発が苦しくなることがあります。

自分が体験した あるある ネタを紹介しつつ、
メンテナンスしやすいアプリケーションについて
考えてみます
すでに Rails をやっているひと、これからやろう
としているひとにとって、快適に開発をするため
のヒントになれば嬉しい

* 状況設定は架空のものです *
対象バージョン

* Ruby 2.0, 2.1
* Rails 3.2, 4.0
あるある集
あるある①

‘

社員レコードは論理削除で...
default_scope
状況

* 社員の勤怠システムを考える
* 社員は退職することができる
* 社員が退職した場合、社員は社員一覧に表示されない
* ただ、社員の勤怠履歴を参照することはできる必要がある
* そのため、社員レコードに対しては論理削除を適用する
* `default_scope` !!
default_scope とは
“デフォルト” の検索条件を指定できる機能
User.where(deleted_at: nil)

class User < ActiveRecord::Base
default_scope lambda {
where(deleted_at: nil)
}
end
User.all
default_scope とは
“デフォルト” の検索条件を指定できる機能

@user.destroy

@user.update_attribute :deleted_at,
DateTime.now

http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Default/ClassMethods.html#method-i-default_scope
Staff

1

n

Attendance
問題

@attendance.staff #=> nil

Staff.unscoped {
@attendance.staff #=> <#Staff>
}

そもそも、”削除” ではないのでは...??
解決1
退会/移動などを state で持っておいて、必要に
応じて scope をかける
class Staff < ActiveRecord::Base
scope :only_tenured, lambda {
where(state: :tenured)
}
end
Staff.all
Staff.only_tenured
解決2

まったく参照しない = 不要なデータ
不要なデータは実際に消してしまう

Staff.destroy
ポイント
*

“default” は “default”

*

ある条件のときに解除したくなるものは
“default” ではない

*

まったく参照しないなら DB に残っている
必要はない
あるある②

‘

ブログ記事にタグをつけたい
serialize
状況

* ブログシステムを考える
* 記事にはタグを登録することができる
* タグは自由入力のテキストで、
ひとつの記事に複数のタグを付けることができる
* すでに多くのテーブルが存在していて、
極力テーブルを増やしたくない
* `serialize` !!
serialize
Ruby のオブジェクトを YAML にシリアライズし
て、データベースのカラムに保存する
class Post < ActiveRecord::Base
serialize :tags
end
@post = Post.new
@post.tags = ['Ruby', 'chuork01']
@post.save
Post.last.tags #=> ['Ruby', 'chuork01']

http://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Serialization/ClassMethods.html#method-i-serialize
問題

特定のタグをもっている記事だけを取得したい
タグ毎に記事を一覧したいときに不便
YAML なので、 SQL で検索できない
Post.where(tags: 'LIKE %Ruby%')

Text 型なので Like 検索はできるけど...
解決1
タグを別のテーブルに分ける

Post

1 n

Tagging

n

1

Tag
解決1
タグを別のテーブルに分ける
class Post < ActiveRecord::Base
has_many :taggings
has_many :tags, through: :taggings
end
class Tagging < ActiveRecord::Base
belongs_to :post
belongs_to :tag
end
class Tag < ActiveRecord::Base
has_many :taggings
has_many :posts, through: :taggings
end
@tag.posts
解決2
配列型を利用する
(データベースがサポートしていれば)
PostgreSQL の例
class AddTagsToPosts < ActiveRecord::Migration
def change
add_column :posts, :tags, :array
end
end
Post.where("'Ruby' = ANY (tags)")
ポイント

*

Ruby の世界でしか扱えないデータは扱いづらい

*

適切なデータモデルを選択しましょう
あるある③

‘

一時保存のときは入力チェック
をしたくない
save(validate: false)
状況

* 会員登録できるサービスを考える
* Email だけあれば仮登録できるが、
本登録では名前などその他の情報が必要
* ひとまずレコードだけ作りたい
* `save(validate: false)`
save(validate: false)

validation をスキップして保存することができる

http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-save
問題
*

不完全な状態のデータが保存される

*

一部の validation だけ実行するのが困難

*

データベースに制約をかけられなくなる
解決1
* 状況に応じた validation を行なう
class Staff < ActiveRecord::Base
validates :name, presence: {
on: :registration
}
end
@staff.save(context: :registration)
解決2
* “仮登録”/”本登録” 状態を持たせて validation
class Staff < ActiveRecord::Base
validates :name, presence: {
if: :registration?
}
def registration?
state == 'registration'
end
end
@staff.state = 'registration'
@staff.save
ポイント

*

データを保存するために、
チェックが必須な項目をスキップしてしまう

*

不完全なデータが登録されてしまう
あるある④

‘

他のシステムと連携するための
JSON の API を提供したい
as_json
状況

* 人事評価システムを考える
* 社員の評価を他システムに対しても提供する
* 連携のためのデータを JSON で出力する
* `as_json`
as_json
モデルを JSON へに変換した場合のデータフォ
ーマットを定義する
Rails が as_json を呼び出して JSON に出力して
くれる

http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html#method-i-as_json
as_json
class User < AvtiveRecord::Base
def as_json
{
id: id,
name: name,
evaluations: evaluations.as_json
}
end
end
class UsersController < ApplicationController
def index
@users = User.all
end
end
as_json

GET /users.json
[{

}]

“id”:
1,
“name”: “tricknotes”,
“evaluations”: [{
...
}, {
...
}]

http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html#method-i-as_json
問題
データの表示/非表示の扱いが難しい
*

ログインしていると見える情報

*

本人だけ見える情報

*

権限によって見える情報

*

一覧だと不要で、詳細画面だと必要な情報

例: 部長は部下の評価を閲覧できるが、部員は
本人の評価のみを閲覧できる
問題

current_user を参照したくなるので、
Model#as_json だと扱いが難しい
context に依存する変換はモデルの仕事ではな
い
JSON とはデータの表現形式
-> View 層の仕事
問題

その他のデータ形式をサポートしたくなった場合、
似たようなメソッドが並ぶ
as_csv
* as_json
...
*
解決
View として JSON を出力する
jbuilder
* app/views/users/index.json.jbuilder

json.array!(@users) do |user|
json.extract! user,
:id,
:name,
:evaluations
end
ポイント

*

Context によって変化するロジックを
モデルに持たせない

*

データの表示形式はモデルに含めない
他にもまだまだ...
*
*
*
*
*
*

STI
session にオブジェクトを保存
最終更新日 = updated_at
monkey patch
before/after callback
gem の version 固定
...
for more information...
もっと複雑な現実問題に対応するためのヒント
Rails AntiPatterns
http://www.amazon.co.jp/dp/0321604814
Ruby on Rails: The Bad Parts
http://magazine.rubyist.net/?0041-RailsTheBadParts
まとめ
最初から完璧な設計をするのは困難

アカンと思ったら引き返す/直す勇気を!
機能自体が悪かというとそうでもなくて、
使いドコロを間違うと辛い、という話
Rails の機能自体を理解すること、
作るものを理解することが大事!!
パッと見て便利そうな機能でも、
その機能の意味と、
ドメインを考えて組み立てるの大事!!

状況によって適切な選択かどうかは変わってくる
Rails の機能自体への理解
対象領域への理解
作ってわかることもある
変更する勇気
http://www.flickr.com/photos/sakura-kame/479871795/

一歩、一歩

Más contenido relacionado

La actualidad más candente

マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころTakuto Wada
 
Java によるクラウドネイティブ の実現に向けて
Java によるクラウドネイティブ の実現に向けてJava によるクラウドネイティブ の実現に向けて
Java によるクラウドネイティブ の実現に向けてShigeru Tatsuta
 
小さく始める大規模スクラム
小さく始める大規模スクラム小さく始める大規模スクラム
小さく始める大規模スクラムKeisuke Tsukagoshi
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話Daichi Koike
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていることonozaty
 
JSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方についてJSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方についてAya Ebata
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢apkiban
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてShigeru Tatsuta
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyYahoo!デベロッパーネットワーク
 
Spring fest2020 spring-security
Spring fest2020 spring-securitySpring fest2020 spring-security
Spring fest2020 spring-security土岐 孝平
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48Preferred Networks
 
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)株式会社MonotaRO Tech Team
 
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPIAkihiro Ikezoe
 
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-Shinichiro Yoshida
 
AWS における Microservices Architecture と DevOps を推進する組織と人とツール
AWS における Microservices Architecture と DevOps を推進する組織と人とツールAWS における Microservices Architecture と DevOps を推進する組織と人とツール
AWS における Microservices Architecture と DevOps を推進する組織と人とツールAmazon Web Services Japan
 

La actualidad más candente (20)

マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころ
 
Java によるクラウドネイティブ の実現に向けて
Java によるクラウドネイティブ の実現に向けてJava によるクラウドネイティブ の実現に向けて
Java によるクラウドネイティブ の実現に向けて
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
小さく始める大規模スクラム
小さく始める大規模スクラム小さく始める大規模スクラム
小さく始める大規模スクラム
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
 
JSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方についてJSRとJEPとJBSの見方や調べ方について
JSRとJEPとJBSの見方や調べ方について
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
 
nginxの紹介
nginxの紹介nginxの紹介
nginxの紹介
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行について
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
 
Spring fest2020 spring-security
Spring fest2020 spring-securitySpring fest2020 spring-security
Spring fest2020 spring-security
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
 
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
 
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
 
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
 
AWS における Microservices Architecture と DevOps を推進する組織と人とツール
AWS における Microservices Architecture と DevOps を推進する組織と人とツールAWS における Microservices Architecture と DevOps を推進する組織と人とツール
AWS における Microservices Architecture と DevOps を推進する組織と人とツール
 

Destacado

伝わるプレゼンをする方法
伝わるプレゼンをする方法伝わるプレゼンをする方法
伝わるプレゼンをする方法Hideaki Miyake
 
綺麗なプレゼン資料の作り方、10のテクニック
綺麗なプレゼン資料の作り方、10のテクニック綺麗なプレゼン資料の作り方、10のテクニック
綺麗なプレゼン資料の作り方、10のテクニックManabu Uekusa
 
魅せるPowerPointビジネスプレゼン【実践編】 
魅せるPowerPointビジネスプレゼン【実践編】 魅せるPowerPointビジネスプレゼン【実践編】 
魅せるPowerPointビジネスプレゼン【実践編】 schoowebcampus
 
素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2
素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2
素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2Shoe-g Ueyama
 
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識Tsutomu Sogitani
 
色彩センスのいらない配色講座
色彩センスのいらない配色講座色彩センスのいらない配色講座
色彩センスのいらない配色講座Mariko Yamaguchi
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版MOCKS | Yuta Morishige
 

Destacado (12)

gem の探し方
gem の探し方gem の探し方
gem の探し方
 
プレゼンの基本
プレゼンの基本プレゼンの基本
プレゼンの基本
 
伝わるプレゼンをする方法
伝わるプレゼンをする方法伝わるプレゼンをする方法
伝わるプレゼンをする方法
 
プレゼンテーションの考え方20140628
プレゼンテーションの考え方20140628プレゼンテーションの考え方20140628
プレゼンテーションの考え方20140628
 
綺麗なプレゼン資料の作り方、10のテクニック
綺麗なプレゼン資料の作り方、10のテクニック綺麗なプレゼン資料の作り方、10のテクニック
綺麗なプレゼン資料の作り方、10のテクニック
 
良いプレゼン 良いスライド
良いプレゼン 良いスライド良いプレゼン 良いスライド
良いプレゼン 良いスライド
 
魅せるPowerPointビジネスプレゼン【実践編】 
魅せるPowerPointビジネスプレゼン【実践編】 魅せるPowerPointビジネスプレゼン【実践編】 
魅せるPowerPointビジネスプレゼン【実践編】 
 
素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2
素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2
素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2
 
しょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedeeしょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedee
 
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
ビジネスマン必見!キレイな提案書を作るためのデザインの基礎知識
 
色彩センスのいらない配色講座
色彩センスのいらない配色講座色彩センスのいらない配色講座
色彩センスのいらない配色講座
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版
 

Similar a Rails あるある

Ruby札幌2008年の活動に向けて
Ruby札幌2008年の活動に向けてRuby札幌2008年の活動に向けて
Ruby札幌2008年の活動に向けてKoji SHIMADA
 
Long Life RailsApp in the case of REJOB
Long Life RailsApp in the case of REJOBLong Life RailsApp in the case of REJOB
Long Life RailsApp in the case of REJOBDaisuke Yamasaki
 
Ruby on Railsではじめるrspecテスト
Ruby on RailsではじめるrspecテストRuby on Railsではじめるrspecテスト
Ruby on RailsではじめるrspecテストKanako Kobayashi
 
Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Takuya Mukohira
 
Railsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるRailsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるHirata Tomoko
 
Sinatraで鼻歌まじりのWeb開発
Sinatraで鼻歌まじりのWeb開発Sinatraで鼻歌まじりのWeb開発
Sinatraで鼻歌まじりのWeb開発Yoji Shidara
 
Ruby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてRuby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてTomoya Kawanishi
 
Railsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてRailsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてHirata Tomoko
 
20081220 Rubybonenkai2008 Sapporo
20081220 Rubybonenkai2008 Sapporo20081220 Rubybonenkai2008 Sapporo
20081220 Rubybonenkai2008 SapporoKoji SHIMADA
 
Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01Yutaka Tachibana
 
地域Ruby会議に参加してきた話とか
地域Ruby会議に参加してきた話とか地域Ruby会議に参加してきた話とか
地域Ruby会議に参加してきた話とかKen Muryoi
 
How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~Ryunosuke SATO
 
RubyとRailsのおいしい使い方
RubyとRailsのおいしい使い方RubyとRailsのおいしい使い方
RubyとRailsのおいしい使い方Satomi Tsujita
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Koichi Shimozono
 
Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207Kanako Kobayashi
 

Similar a Rails あるある (20)

Ruby札幌2008年の活動に向けて
Ruby札幌2008年の活動に向けてRuby札幌2008年の活動に向けて
Ruby札幌2008年の活動に向けて
 
すこやかRails
すこやかRailsすこやかRails
すこやかRails
 
Long Life RailsApp in the case of REJOB
Long Life RailsApp in the case of REJOBLong Life RailsApp in the case of REJOB
Long Life RailsApp in the case of REJOB
 
Gemの話 紹介編
Gemの話 紹介編Gemの話 紹介編
Gemの話 紹介編
 
RubyKaja 2013
RubyKaja 2013RubyKaja 2013
RubyKaja 2013
 
Ruby on Railsではじめるrspecテスト
Ruby on RailsではじめるrspecテストRuby on Railsではじめるrspecテスト
Ruby on Railsではじめるrspecテスト
 
Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1
 
Railsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるRailsのフロントエンド開発を考える
Railsのフロントエンド開発を考える
 
Sinatraで鼻歌まじりのWeb開発
Sinatraで鼻歌まじりのWeb開発Sinatraで鼻歌まじりのWeb開発
Sinatraで鼻歌まじりのWeb開発
 
Ruby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてRuby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構について
 
Application Bootstrap
Application BootstrapApplication Bootstrap
Application Bootstrap
 
Railsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてRailsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えて
 
20081220 Rubybonenkai2008 Sapporo
20081220 Rubybonenkai2008 Sapporo20081220 Rubybonenkai2008 Sapporo
20081220 Rubybonenkai2008 Sapporo
 
Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01
 
Railsの今昔
Railsの今昔Railsの今昔
Railsの今昔
 
地域Ruby会議に参加してきた話とか
地域Ruby会議に参加してきた話とか地域Ruby会議に参加してきた話とか
地域Ruby会議に参加してきた話とか
 
How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~How to relaunch "sapporojs.org" ~Introduction to middleman~
How to relaunch "sapporojs.org" ~Introduction to middleman~
 
RubyとRailsのおいしい使い方
RubyとRailsのおいしい使い方RubyとRailsのおいしい使い方
RubyとRailsのおいしい使い方
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
 
Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207
 

Más de Ryunosuke SATO

Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたしRyunosuke SATO
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときRyunosuke SATO
 
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~Ryunosuke SATO
 
はじめる Ember.js!! ~ Getting started with ember.js ~
はじめる Ember.js!! ~ Getting started with ember.js ~はじめる Ember.js!! ~ Getting started with ember.js ~
はじめる Ember.js!! ~ Getting started with ember.js ~Ryunosuke SATO
 
Introduction for Browser Side MVC
Introduction for Browser Side MVCIntroduction for Browser Side MVC
Introduction for Browser Side MVCRyunosuke SATO
 
コミュニティのある風景
コミュニティのある風景コミュニティのある風景
コミュニティのある風景Ryunosuke SATO
 
capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活をRyunosuke SATO
 
Social coding をもっと楽しみたいあなたへ
Social coding をもっと楽しみたいあなたへSocial coding をもっと楽しみたいあなたへ
Social coding をもっと楽しみたいあなたへRyunosuke SATO
 
Node.jsってどうなの?
Node.jsってどうなの?Node.jsってどうなの?
Node.jsってどうなの?Ryunosuke SATO
 
アジャイル的アプローチから見えてきたこと
アジャイル的アプローチから見えてきたことアジャイル的アプローチから見えてきたこと
アジャイル的アプローチから見えてきたことRyunosuke SATO
 
脱レガシー化計画
脱レガシー化計画脱レガシー化計画
脱レガシー化計画Ryunosuke SATO
 
Pusherとcanvasで作るリアルタイムグラフ
Pusherとcanvasで作るリアルタイムグラフPusherとcanvasで作るリアルタイムグラフ
Pusherとcanvasで作るリアルタイムグラフRyunosuke SATO
 

Más de Ryunosuke SATO (16)

片手間JS on Rails
片手間JS on Rails片手間JS on Rails
片手間JS on Rails
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたし
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
 
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
もっとはじめる Ember.js !! ~ Getting started with Ember.js more ~
 
はじめる Ember.js!! ~ Getting started with ember.js ~
はじめる Ember.js!! ~ Getting started with ember.js ~はじめる Ember.js!! ~ Getting started with ember.js ~
はじめる Ember.js!! ~ Getting started with ember.js ~
 
Introduction for Browser Side MVC
Introduction for Browser Side MVCIntroduction for Browser Side MVC
Introduction for Browser Side MVC
 
コミュニティのある風景
コミュニティのある風景コミュニティのある風景
コミュニティのある風景
 
capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活を
 
Testable JavaScript
Testable JavaScriptTestable JavaScript
Testable JavaScript
 
Social coding をもっと楽しみたいあなたへ
Social coding をもっと楽しみたいあなたへSocial coding をもっと楽しみたいあなたへ
Social coding をもっと楽しみたいあなたへ
 
Clean Javascript
Clean JavascriptClean Javascript
Clean Javascript
 
Node.jsってどうなの?
Node.jsってどうなの?Node.jsってどうなの?
Node.jsってどうなの?
 
アジャイル的アプローチから見えてきたこと
アジャイル的アプローチから見えてきたことアジャイル的アプローチから見えてきたこと
アジャイル的アプローチから見えてきたこと
 
脱レガシー化計画
脱レガシー化計画脱レガシー化計画
脱レガシー化計画
 
Pusherとcanvasで作るリアルタイムグラフ
Pusherとcanvasで作るリアルタイムグラフPusherとcanvasで作るリアルタイムグラフ
Pusherとcanvasで作るリアルタイムグラフ
 
ServerSideJavaScript
ServerSideJavaScriptServerSideJavaScript
ServerSideJavaScript
 

Último

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Último (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

Rails あるある