狠狠撸

狠狠撸Share a Scribd company logo
ORMとの付き合い方
中国地方DB勉強会 in 岡山
@patorash
自己紹介
名前:尾古 豊明(おこ とよあき)
twitter:@patorash
株式会社リゾーム所属
普段はRuby on Railsでショッピングセンター向けのシステム開発をしてます。
SQLわからんマンだったのでCakePHPで初めてORMに触れたときはあまりの便利さに
衝撃を受けて全てORMになってくれ!と思ったものでした。
ORMの出すSQLを読んで、SQLがわかるようになってきたので、
今SQLが読めるのはORMのおかげと言っても過言ではありません。
最近は集計処理用のSQLを書くのが楽しい。
一昨年に息子が生まれ、子育てに奮闘中。
新支部長からの質問
RDBの新機能にORMって中々ついていけないものだと思っているんですが、普段、業
務でどこまでORMで使ってるんだろう?とか気になります。
会社の人に、「ORMってDBが変わっても、それなりに気にせず使える、ってメリットはあ
るものの、複雑なSQLの場合、ORMよりもSQLで書いた方が(工数的に)速い場合とか
あって、実際、どうすれば良いんですか?」って聞かれたりもして、ORMとどこまで付き
合うべきなんでしょうか。
ORMとは?
● Object-relational mapping(オブジェクト関連マッピング)
● データを取得したタイミングで、データを元にオブジェクトを生成する。
● 特定のテーブルとクラスが1対1になっていて、そのクラスのメソッド経由でデータ
を取得する(Rubyで使われるORMのActiveRecordなどの場合)
ORMの利点
1. 異なるDBの違いを吸収してくれる
2. SQLを書かなくてもいい(自動生成してくれる)
3. プレイスホルダーによってエスケープをよしなにしてくれる
(SQLインジェクション対策)
ORMのよくない点
1. 遅い(オブジェクト生成)
2. リソースを食う(メモリ消費が大きい)
3. 特定のDBの便利な機能が使えない
4. 複雑なデータを取得しようとするとSQLより難しい
5. 頑張れば1回で取得できるデータなのに、
何度もクエリを発行するような処理を書いてしまいがち。
結果、さらに遅くなる…。
6. ORMでのデータ取得にこだわりすぎる人が現れる
そもそも論として…SQL派の人へ
1. 速いのは正義ですが、そんなにスピード求められますか?
ORMでも高速にデータ取得する方法は準備されてたりしますが。
(マッピングせずに配列として取得するとか)
2. 特定のDBの機能、頻繁に使いますか?
3. 翱搁惭のプレイスホルダーを利用したエスケープって便利じゃないですか?
そもそも論として…ORM派の人へ
1. データベース自体の変更ってよくありますか?
(ビジネスがかなり拡大してきたらありえるとは思う)
2. なにがなんでもORMで処理しなければならないことってありますか?
3. ORMを使っててもDB制約は利用しますよね?
(ユニーク制約、NOT NULL制約、Indexなどなど…)
4. クエリ発行回数は意識してますか?
DBへのアクセス数が多いのは怠慢ですよ!(ウッ…
どうして二元論にしようとするのか?
1. ORMかSQLのどちらかに統一されてないと気持ち悪いですか?
2. 目的は、いいプロダクトを作ること
3. ORMを使ったほうが便利なものはORMで
4. SQLを書いた方が楽な場合はSQLで
5. とはいえ、9割方ORMを使ってます
ORMの利点(ActiveRecord)
1. 直感的なデータ検索
2. データの整合性チェックが容易
3. コールバックによる連携更新
4. 取得したデータがオブジェクトなのでさらに直感的に
5. 変更に強い
6. テスト可能になる
7. テーブル定義の変更の履歴が残る
SQLの利点
1. 方言はあるものの、だいたいどのDBでも同じ
2. ORMで表現しづらいことが比較的楽に書ける
SQLのよくない点
1. 直感的ではない
2. SQLがわかる人しか書けない
3. テストが(簡単には)できない
4. データの整合性チェックが(簡単には)できない
5. 変更に弱い
6. 作者の意図を表現できない(ORMだとメソッド名で表現できる)
ORMの利点(ActiveRecord)
1. 直感的なデータ検索
2. データの整合性チェックが容易
3. コールバックによる連携更新
4. 取得したデータがオブジェクトなのでさらに直感的に
5. 変更に強い
6. テスト可能になる
7. テーブル定義の変更の履歴が残る
1.直感的なデータ検索(ActiveRecord)
user = User.find 1 # => idが1のUserを取得する
user = User.find_by email: ‘admin@example.com’ # => メアドでUserを取得
users = User.admin.where(created_at: 1.month.ago..Time.zone.now)
# => 1ヶ月以内に作られた管理者を取得
articles = Article.joins(:user).merge(User.normal).published
.order(updated_at: :desc).limit(10)
# => 一般ユーザーが作った公開中の記事を更新日降順に10件取得
soft_destroyed_comments = Commnet.only_soft_destroyed
# => 論理削除されたコメントを取得
1.直感的なデータ検索(多少複雑なJOIN編)
User.joins(“INNER JOIN (#{Comment.group(:user_id).select(“user_id,
COUNT(user_id)”).to_sql}) AS comments ON users.id =
comments.user_id”).select(“*”)
# => ユーザー毎のコメント数を含むユーザー一覧を取得
複雑なJOINもto_sqlを使ってSQL化(サブクエリ化)してしまえば、
そこまで難しくない。
(INNER JOINとONを書くのがダサイという意見は当然ある)
2. データの整合性チェック
class User < ApplicationRecord
# 必須
validates :name, presence: true
# 必須かつカタカナのみ
validates :kana, presence: true, format: {with: /A[ァ-ー]+z/}
# 必須かつ3?20文字以内
validates :code_name, presence: true, length: { in: 3..20 }
# 必須かつ一意である
validates :email, presence: true, uniqueness: true
end
user = User.new
user.valid? # => false
2. データの整合性チェック
class User < ApplicationRecord
end
class Group < ApplicationRecord
end
class UserGroup < ApplicationRecord
# 1つのグループに1人の人が複数登録されるのを防ぐ
validates :user, presence: true, uniqueness: { scope: group_id }
end
user_group = UserGroup.new(user_id: 1, group_id: 1)
user_group.save # => true
user_group = UserGroup.new(user_id: 1, group_id: 1)
user_group.save # => false
6. テスト可能
● データの整合性チェック、本当に正しいものが定義できてる?
● 複雑な条件でのみ登録?更新できるパターンの検証は人力では難しい
例1)1人のユーザーが所有できるモンスターの上限は3000。
   3001番目が登録されたら…?
例2)メールアドレスの重複登録はできないが、退会済ユーザーの
   メールアドレスは再登録できるように。
例3)A,B,Cが登録されてようやくDが登録できる
● データの取得に関しても同様に、正しいデータが取得できてる?
例1)前回のログイン以降に更新されたデータ件数を取得
例2)公開フラグのあるデータのみを取得できているか?
ユニットテストで検証が可能!(RubyならRspecやMinitestなど)
※SQLも取得結果はプログラミング言語側でテスト可能
翱搁惭の検証と顿叠制约の利用
ORMとDB制約を使ってデータの整合性を担保
DBに保存
DB制約
ORMのデータ検証
入力データ
?外部キー制約
?ユニーク制約
?NOT NULL制約
?フォーマット検証
?外部キー制約
?ユニーク制約
?NOT NULL制約
?複雑なビジネスロジックの検証
翱搁惭と顿叠制约で冗长では?
ORMとDB制約を使ってデータの整合性を担保
DBに保存
DB制約
ORMのデータ検証
入力データ
?外部キー制約
?ユニーク制約
?NOT NULL制約
?フォーマット検証
?外部キー制約
?ユニーク制約
?NOT NULL制約
?複雑なビジネスロジックの検証
DB制約がないとSQL
で
更新されたら不正な
データができる!
ORMの利用シーン
1. Webアプリケーションのいたるところで利用
2. 不具合の調査(rails console、デバッガ)
3. 頻繁に変更がありうる処理
SQLの利用シーン
1. データ分析(主に集計。UNIONしたりとか、Window関数使うとか)
2. ORMで表現するのが難しい処理(whereの条件が複雑とか)
3. 灭多に変更がない処理
まとめ
1. 適材適所で付き合おう
2. ORM使ってたとしてもDBの勉強は必要
3. 翱搁惭と顿叠制约のダブルチェックで安全なデータ管理
Ad

Recommended

SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
?
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
?
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
?
搁别诲颈蝉の特徴と活用方法について
搁别诲颈蝉の特徴と活用方法について
Yuji Otani
?
奥别产アフ?リを并行开発する际のマイク?レーション戦略
奥别产アフ?リを并行开発する际のマイク?レーション戦略
Takayuki Shimizukawa
?
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
?
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
?
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
?
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
Shohei Koyama
?
何となく勉强した気分になれるパーサ入门
何となく勉强した気分になれるパーサ入门
masayoshi takahashi
?
色彩センスのいらない配色讲座
色彩センスのいらない配色讲座
Mariko Yamaguchi
?
良い?悪い?コードコメントの书き方
良い?悪い?コードコメントの书き方
Shigenori Sagawa
?
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
?
碍辞迟濒颈苍アンチパターン
碍辞迟濒颈苍アンチパターン
Recruit Lifestyle Co., Ltd.
?
開発速度か?速い #とは(LayerX社内資料)
開発速度か?速い #とは(LayerX社内資料)
mosa siru
?
オブジェクト指向プログラミングのためのモデリング入门
オブジェクト指向プログラミングのためのモデリング入门
増田 亨
?
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
?
メルカリ?ソウゾウでは どうGoを活用しているのか?
メルカリ?ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
?
滨罢系エンジニアのためのプレゼンテーション入门
滨罢系エンジニアのためのプレゼンテーション入门
Masahito Zembutsu
?
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
?
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
?
コンテナの作り方「顿辞肠办别谤は里方で何をしているのか?」
コンテナの作り方「顿辞肠办别谤は里方で何をしているのか?」
Masahito Zembutsu
?
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
?
ソーシャルゲームのためのデータベース设计
ソーシャルゲームのためのデータベース设计
Yoshinori Matsunobu
?
ドメイン駆动设计サンプルコードの彻底解説
ドメイン駆动设计サンプルコードの彻底解説
増田 亨
?
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
驰补丑辞辞!デベロッパーネットワーク
?
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
?
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
Tomohiko Himura
?
翱/搁マッパーによるトラブルを未然に防ぐ
翱/搁マッパーによるトラブルを未然に防ぐ
kwatch
?

More Related Content

What's hot (20)

インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
Shohei Koyama
?
何となく勉强した気分になれるパーサ入门
何となく勉强した気分になれるパーサ入门
masayoshi takahashi
?
色彩センスのいらない配色讲座
色彩センスのいらない配色讲座
Mariko Yamaguchi
?
良い?悪い?コードコメントの书き方
良い?悪い?コードコメントの书き方
Shigenori Sagawa
?
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
?
碍辞迟濒颈苍アンチパターン
碍辞迟濒颈苍アンチパターン
Recruit Lifestyle Co., Ltd.
?
開発速度か?速い #とは(LayerX社内資料)
開発速度か?速い #とは(LayerX社内資料)
mosa siru
?
オブジェクト指向プログラミングのためのモデリング入门
オブジェクト指向プログラミングのためのモデリング入门
増田 亨
?
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
?
メルカリ?ソウゾウでは どうGoを活用しているのか?
メルカリ?ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
?
滨罢系エンジニアのためのプレゼンテーション入门
滨罢系エンジニアのためのプレゼンテーション入门
Masahito Zembutsu
?
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
?
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
?
コンテナの作り方「顿辞肠办别谤は里方で何をしているのか?」
コンテナの作り方「顿辞肠办别谤は里方で何をしているのか?」
Masahito Zembutsu
?
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
?
ソーシャルゲームのためのデータベース设计
ソーシャルゲームのためのデータベース设计
Yoshinori Matsunobu
?
ドメイン駆动设计サンプルコードの彻底解説
ドメイン駆动设计サンプルコードの彻底解説
増田 亨
?
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
驰补丑辞辞!デベロッパーネットワーク
?
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
?
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
インフラエンシ?ニアの綺丽て?优しい手顺书の书き方
Shohei Koyama
?
何となく勉强した気分になれるパーサ入门
何となく勉强した気分になれるパーサ入门
masayoshi takahashi
?
色彩センスのいらない配色讲座
色彩センスのいらない配色讲座
Mariko Yamaguchi
?
良い?悪い?コードコメントの书き方
良い?悪い?コードコメントの书き方
Shigenori Sagawa
?
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
?
開発速度か?速い #とは(LayerX社内資料)
開発速度か?速い #とは(LayerX社内資料)
mosa siru
?
オブジェクト指向プログラミングのためのモデリング入门
オブジェクト指向プログラミングのためのモデリング入门
増田 亨
?
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
?
メルカリ?ソウゾウでは どうGoを活用しているのか?
メルカリ?ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
?
滨罢系エンジニアのためのプレゼンテーション入门
滨罢系エンジニアのためのプレゼンテーション入门
Masahito Zembutsu
?
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
?
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
?
コンテナの作り方「顿辞肠办别谤は里方で何をしているのか?」
コンテナの作り方「顿辞肠办别谤は里方で何をしているのか?」
Masahito Zembutsu
?
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
?
ソーシャルゲームのためのデータベース设计
ソーシャルゲームのためのデータベース设计
Yoshinori Matsunobu
?
ドメイン駆动设计サンプルコードの彻底解説
ドメイン駆动设计サンプルコードの彻底解説
増田 亨
?
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
?

Similar to 翱谤尘との付き合い方 (20)

O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
Tomohiko Himura
?
翱/搁マッパーによるトラブルを未然に防ぐ
翱/搁マッパーによるトラブルを未然に防ぐ
kwatch
?
よろしい、ならば惭颈肠谤辞-翱搁惭だ
よろしい、ならば惭颈肠谤辞-翱搁惭だ
Narami Kiyokura
?
Web技術勉強会 第25回
Web技術勉強会 第25回
龍一 田中
?
Oracle Database Cloud と無料の純正開発ツールで開発効率を改善しよう!(db tech showcase 2016 Oracle セッ...
Oracle Database Cloud と無料の純正開発ツールで開発効率を改善しよう!(db tech showcase 2016 Oracle セッ...
オラクルエンジニア通信
?
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lisp
fukamachi
?
12 13-lecture
12 13-lecture
Rindou Katsura
?
补肠迟颈惫别谤别肠辞谤诲-辞谤补肠濒别冲别苍丑补苍肠别诲-补诲补辫迟别谤のご绍介
补肠迟颈惫别谤别肠辞谤诲-辞谤补肠濒别冲别苍丑补苍肠别诲-补诲补辫迟别谤のご绍介
Kevin Toyoda
?
20100717tobesetu
20100717tobesetu
akitsukada
?
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
Narami Kiyokura
?
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
Takayuki Shimizukawa
?
PlaySQLAlchemyORM2017.key
PlaySQLAlchemyORM2017.key
泰 増田
?
Mongo dbを知ろう devlove関西
Mongo dbを知ろう devlove関西
Ryuji Tamagawa
?
S2dao Seminar in tripodworks
S2dao Seminar in tripodworks
tripodworks
?
リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version
Mikiya Okuno
?
実はとても面白い...Documentation library
実はとても面白い...Documentation library
Kouta Shiobara
?
调べ方讲座(入门)
调べ方讲座(入门)
stylefreeslide
?
Oracle R Enterprise の使い方
Oracle R Enterprise の使い方
オラクルエンジニア通信
?
Oracle Cloud Platform - クラクドにおける 新たなデータベース開発
Oracle Cloud Platform - クラクドにおける 新たなデータベース開発
オラクルエンジニア通信
?
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
O/R Mapping の話をするよ。ActiveRecord の話をしたかった。
Tomohiko Himura
?
翱/搁マッパーによるトラブルを未然に防ぐ
翱/搁マッパーによるトラブルを未然に防ぐ
kwatch
?
よろしい、ならば惭颈肠谤辞-翱搁惭だ
よろしい、ならば惭颈肠谤辞-翱搁惭だ
Narami Kiyokura
?
Web技術勉強会 第25回
Web技術勉強会 第25回
龍一 田中
?
Oracle Database Cloud と無料の純正開発ツールで開発効率を改善しよう!(db tech showcase 2016 Oracle セッ...
Oracle Database Cloud と無料の純正開発ツールで開発効率を改善しよう!(db tech showcase 2016 Oracle セッ...
オラクルエンジニア通信
?
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lisp
fukamachi
?
补肠迟颈惫别谤别肠辞谤诲-辞谤补肠濒别冲别苍丑补苍肠别诲-补诲补辫迟别谤のご绍介
补肠迟颈惫别谤别肠辞谤诲-辞谤补肠濒别冲别苍丑补苍肠别诲-补诲补辫迟别谤のご绍介
Kevin Toyoda
?
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
ADO.NETとORMとMicro-ORM -dapper dot netを使ってみた
Narami Kiyokura
?
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
Takayuki Shimizukawa
?
PlaySQLAlchemyORM2017.key
PlaySQLAlchemyORM2017.key
泰 増田
?
Mongo dbを知ろう devlove関西
Mongo dbを知ろう devlove関西
Ryuji Tamagawa
?
S2dao Seminar in tripodworks
S2dao Seminar in tripodworks
tripodworks
?
リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version
Mikiya Okuno
?
実はとても面白い...Documentation library
実はとても面白い...Documentation library
Kouta Shiobara
?
Oracle Cloud Platform - クラクドにおける 新たなデータベース開発
Oracle Cloud Platform - クラクドにおける 新たなデータベース開発
オラクルエンジニア通信
?
Ad

More from 豊明 尾古 (20)

OSS-DB 取得のススメ
OSS-DB 取得のススメ
豊明 尾古
?
贰肠尘补蝉肠谤颈辫迟2015とその周辺について
贰肠尘补蝉肠谤颈辫迟2015とその周辺について
豊明 尾古
?
础肠迟颈惫别搁别肠辞谤诲::贰苍耻尘のススメ
础肠迟颈惫别搁别肠辞谤诲::贰苍耻尘のススメ
豊明 尾古
?
便利なHerokuと active recordの 速度改善tips
便利なHerokuと active recordの 速度改善tips
豊明 尾古
?
ウェフ?アフ?リケーションのためのユニハ?ーサルテ?サ?インを読んだので共有する
ウェフ?アフ?リケーションのためのユニハ?ーサルテ?サ?インを読んだので共有する
豊明 尾古
?
惭颈诲诲濒别尘补苍による静的サイト作成术
惭颈诲诲濒别尘补苍による静的サイト作成术
豊明 尾古
?
碍辞迟濒颈苍の飞别产フレームワーク探访
碍辞迟濒颈苍の飞别产フレームワーク探访
豊明 尾古
?
Rails templateて?開発の初速を上け?よう
Rails templateて?開発の初速を上け?よう
豊明 尾古
?
碍辞迟濒颈苍础苍诲谤辞颈诲尝颈产を使ってみた
碍辞迟濒颈苍础苍诲谤辞颈诲尝颈产を使ってみた
豊明 尾古
?
搁耻产测颈蝉迟のための办辞迟濒颈苍绍介
搁耻产测颈蝉迟のための办辞迟濒颈苍绍介
豊明 尾古
?
碍辞迟濒颈苍の绍介
碍辞迟濒颈苍の绍介
豊明 尾古
?
厂濒颈尘の绍介
厂濒颈尘の绍介
豊明 尾古
?
颁补濒补产补蝉丑で产诲诲しようぜ
颁补濒补产补蝉丑で产诲诲しようぜ
豊明 尾古
?
搁耻产辞迟辞を试してみた
搁耻产辞迟辞を试してみた
豊明 尾古
?
アプリ内课金してみた
アプリ内课金してみた
豊明 尾古
?
奥别产デザイナーのための补苍诲谤辞颈诲用レイアウト讲座
豊明 尾古
?
Android 3.Xアプリを開発してみて
Android 3.Xアプリを開発してみて
豊明 尾古
?
骋补别开発入门
骋补别开発入门
豊明 尾古
?
ABC2011 Winter #jag4
ABC2011 Winter #jag4
豊明 尾古
?
OSS-DB 取得のススメ
OSS-DB 取得のススメ
豊明 尾古
?
贰肠尘补蝉肠谤颈辫迟2015とその周辺について
贰肠尘补蝉肠谤颈辫迟2015とその周辺について
豊明 尾古
?
础肠迟颈惫别搁别肠辞谤诲::贰苍耻尘のススメ
础肠迟颈惫别搁别肠辞谤诲::贰苍耻尘のススメ
豊明 尾古
?
便利なHerokuと active recordの 速度改善tips
便利なHerokuと active recordの 速度改善tips
豊明 尾古
?
ウェフ?アフ?リケーションのためのユニハ?ーサルテ?サ?インを読んだので共有する
ウェフ?アフ?リケーションのためのユニハ?ーサルテ?サ?インを読んだので共有する
豊明 尾古
?
惭颈诲诲濒别尘补苍による静的サイト作成术
惭颈诲诲濒别尘补苍による静的サイト作成术
豊明 尾古
?
碍辞迟濒颈苍の飞别产フレームワーク探访
碍辞迟濒颈苍の飞别产フレームワーク探访
豊明 尾古
?
Rails templateて?開発の初速を上け?よう
Rails templateて?開発の初速を上け?よう
豊明 尾古
?
碍辞迟濒颈苍础苍诲谤辞颈诲尝颈产を使ってみた
碍辞迟濒颈苍础苍诲谤辞颈诲尝颈产を使ってみた
豊明 尾古
?
搁耻产测颈蝉迟のための办辞迟濒颈苍绍介
搁耻产测颈蝉迟のための办辞迟濒颈苍绍介
豊明 尾古
?
碍辞迟濒颈苍の绍介
碍辞迟濒颈苍の绍介
豊明 尾古
?
颁补濒补产补蝉丑で产诲诲しようぜ
颁补濒补产补蝉丑で产诲诲しようぜ
豊明 尾古
?
搁耻产辞迟辞を试してみた
搁耻产辞迟辞を试してみた
豊明 尾古
?
アプリ内课金してみた
アプリ内课金してみた
豊明 尾古
?
奥别产デザイナーのための补苍诲谤辞颈诲用レイアウト讲座
豊明 尾古
?
Android 3.Xアプリを開発してみて
Android 3.Xアプリを開発してみて
豊明 尾古
?
Ad

翱谤尘との付き合い方