SlideShare a Scribd company logo
1 of 25
Download to read offline
マジックビーンズ 
Twitter: @a_suenami 
Github: a-suenami 
id: a_suenami
自己紹介 
• 末並晃(すえなみあきら) 
• @a_suenami 
• 髪切りました / 痩せました 
• RubyとかPHPとかJavaScriptとか 
• いわゆる”Web系”エンジニア 
• どちらかというと自然キー/複合キー容認派 
• どちらかというとNULL撲滅したい派
マジックビーンズとは 
MVC アーキテクチャにおいて、 
M ( モデル ) の設計や実装を単純化するために、 
すべてのモデルをアクティブレコードの 
継承クラスにするというアンチパターン
アクティブレコードとは 
データベーステーブルあるいはビューの1行が1つのクラスにラップさ 
れ、オブジェクトのインスタンスがそのデータベースの1つの行に結合 
される。このクラスはデータベースアクセスのカプセル化も行う。オブ 
ジェクトの生成後は、保存メソッドで新しい行がデータベースに追加 
される。 オブジェクトが更新されると、データベースの対応する行も 
また更新される。 
出典: http://ja.wikipedia.org/wiki/Active_Record
アクティブレコードとは 
# 1 件取得 
bug = Bug.find(1234) # SELECT * FROM bugs 
! 
# 新規作成 
bug = new Bug.new 
bug.summary = ‘保存時にクラッシュが発生’ 
bug.save # INSERT INTO bugs (summary) VALUES (‘保存時にクラッシュが発生’) 
! 
# 更新 
bug = Bug.find(1234) # SELECT * FROM bugs 
bug.summary = ‘保存時にクラッシュが発生’ 
bug.save # UPDATE bugs SET summary = ‘保存時にクラッシュが発生’ WHERE id = 1234 
! 
# 削除 
bug = Bug.find(1234) # SELECT * FROM bugs 
bug.delete # DELETE FROM bugs WHERE id = 1234
弊害1: モデルがデータベーススキーマに依存する 
• アクティブレコードを用いると、n 個のテーブルがある場合、n 個の 
モデルクラスが必要になる。 
• データベースをリファクタリングする際にモデルクラスだけでなく、 
それを使う側のコードまで変更する必要がある。
弊害2: CRUD 機能を公開してしまう 
• アクティブレコードを用いると find, create, update, delete などの 
メソッドを公開メソッドとして直接呼び出せてしまう。 
• ビジネスロジックとして実装されたメソッドを利用せず、公開 
CRUD メソッドを利用できてしまう結果、要件を満たさないコード 
が書かれる可能性がある。 
• 書籍中ではバグ担当者をアサインしたらメール通知するはずだが、 
メール通知が迂回されてしまうという例で紹介されている。 
• 仮に要件を満たせたとしても、公開 CRUD メソッドの利用はビジネ 
スロジックがアプリケーション層まで流出する結果になる。また、 
複数箇所に同じロジックが重複する可能性がある。
弊害3: ドメインモデル貧血症をもたらす 
• モデルがデータアクセスオブジェクトとしてしか利用されず、ビジ 
ネスロジックの多くがアプリケーション層にあるコントローラーオ 
ブジェクトやサービスオブジェクトに記述されている状態を「ドメ 
インモデル貧血症」という。 
• 参考: http://capsctrl.que.jp/kdmsnr/wiki/bliki/? 
AnemicDomainModel 
• CRUD メソッドを公開してしまった結果として起こりやすい。 
• ビジネスロジックを持たないモデルと巨大で手続き的なサービスオ 
ブジェクトで構成されることになり保守性が低下する。オブジェク 
ト指向のカプセル化の考え方に完全に違反している。
弊害4: ユニットテストが困難 
• モデル、ビュー、コントローラ、すべてのレイヤーにおいてユニット 
テストが困難になる。 
• モデル: データベースと密結合になるため、本番と同等のデータベー 
ススキーマを準備して実際に接続する必要がある。 
• ビュー: モデルが単なるデータコンテナとして使われると表示処理に 
も複雑なロジックが生じるため、実際のレスポンスとして返される 
HTML を生成し、それに対してテストする必要がある。 
• コントローラ: ビジネスロジックがアプリケーション層に漏れだして 
いるため、ビジネスロジックのテストのために HTTP リクエストとレ 
スポンスをエミュレートする必要があり煩雑になる。
“Railsの”アクティブレコードのさらなる弊害 
Rails のアクティブレコードの場合、データベースに加えてフォームと 
も密結合になる。 
<%= form_for(@bug) do |f| %> 
<div class="field"> 
<%= f.label :summary %><br> 
<%= f.text_field :summary %> 
</div> 
<div class="field"> 
<%= f.label :description %><br> 
<%= f.text_area :description %> 
</div> 
<div class="actions"> 
<%= f.submit %> 
</div> 
<% end %>
“Railsの”アクティブレコードのさらなる弊害 
• テーブルとフォームが綺麗に対応しない場合にはモデルにフォーム 
由来の実装が現れる。 
• (例) メールアドレスの確認入力 
• (例) 「利用規約に同意する」チェックボックス 
• バリデーションルールやエラーメッセージの管理もモデルの責務とし 
て実装される。 
• Rails でアンチパターンに陥ると、モデルにはバリデーションルール 
のみがあり、ビジネスロジックはコントローラに流出してしまう。
アンチパターンの見つけ方 
• 「モデルにカスタム SQL クエリを渡すにはどうすればいい?」 
• モデルにカスタム SQL を渡す必要はない。クエリをカプセル化し、アプリ 
ケーション層から隠ぺいする。 
• 「複雑なモデル操作をすべてのコントローラにコピーすればいいのだろうか、 
それとも、親の抽象コント ローラクラスに 1 回だけコーディングすればいいの 
だろうか」 
• どちらの方法でも安定性や保守性は得られない。複雑な手続きがあるのであ 
ればモデルのメソッドとして公開する必要がある。 
• 「モデルのユニットテストを行うために、データベースフィクスチャをもっと書 
かなければならない」 
• モデルのテストではなくデータアクセスのテストをしている可能性がある。
アンチパターンを用いてもよい場合 
• アクティブレコードそのものは優れたデータアクセスパターンであ 
り、それ自体はアンチパターンではない。 
• テーブルの各行に対してシンプルな CRUD 操作ができるだけで十分 
なアプリケーションも多く、その場合には DAO とモデルを同一の 
ものにすることで設計を単純化できる。 
• プロトタイプ作成においては作業省力化の役に立つ。
http://a-suenami.hatenablog.com/entry/2014/11/12/221805 
“何が必要か/本当に必要かがわかるまでは開発しないか最低限の開発で検証を 
重ねるのがいいと思いますし、その結果コアドメインが姿を表したらユビキタ 
ス言語を構築してモデリングをするべきでしょう。逆にノンコアドメインにつ 
いてはフレームワークや既存のパターンを使って低コストに済ませてしまうの 
がよいと思います。”
解決策 
• モデルがアクティブレコードを「持つ」ようにする 
• モデルを理解する 
• ドメインモデルの使用 
• プレーンなオブジェクトのテスト 
• 現実的に考える
レイヤー化アーキテクチャ 
• 「エリックエヴァンスのドメイン駆動設計」で紹介されているアー 
キテクチャパターン。 
• ある層の要素は同じ層の別の要素か、より下の層の要素にしか依存 
しないことを原則とする。 
ユーザ・インターフェース層ユーザへの情報の表示、ユーザからの入力の解釈を責務 
として負う。 
アプリケーション層 
ソフトウェアがやるべき仕事を定義し、問題を解決でき 
るようにドメインオブジェクト間の調整をする。ドメイ 
ンに対する知識を持たず、薄く保たれる層。 
ドメイン層ビジネス上の概念やビジネスルールを表す責務を負う。 
インフラストラクチャ層上位のレイヤを支える技術的機能を提供することを責務 
とする。
オブジェクトの責務の割当てパターン ( GRASP ) 
• 情報エキスパート ( Information Expert ) 
• 生成者 ( Creator ) 
• 疎結合性(Low Coupling) 
• 高凝集性(High Cohesion)
ドメインモデル 
• ドメインモデルについては「エリック・ 
エヴァンスのドメイン駆動設計」で詳し 
く述べられている。 
• ドメインモデルとは対象ドメインに関心 
事をアプリケーションで表現したもので 
あり、MVC アーキテクチャにおける本来 
の「モデル」もそうであるべきである。 
• エリック・エヴァンスの書籍では永続化 
層とドメイン層の仲介役としてリポジト 
リパターンが紹介されている。
プレーンオブジェクト 
• データベースの構造に依存しないプレーンなオブジェクトはテストしや 
すく、またテストの実行速度も速い。 
• 特に実装言語が Java の場合、それが特定のフレームワークやアーキテ 
クチャに依存してないことを強調するために POJO ( Plain Old Java 
Object ) と呼ばれる。 
• 他の言語でも同様に POXO ( X は言語の頭文字 ) と呼ぶケースはあ 
る。 
• ドメインモデルを正しく設計してビジネスロジックをそこに隠蔽すると、 
コントローラやビューのテストではそれらのモデルをモックやスタブに 
差し替えることができ、数多くの分岐をテストしなくてよくなる。
Before & After 
出典: 『SQLアンチパターン』P269, P276
ちなみに… 
若干古い書籍ですが、「エンタープライズ 
Rails」という書籍に models/physical と 
models/logical を作成して、同様のことを 
実現する方法が紹介されているのでご興味 
ある人はぜひ。 
※まわし者ではありません。 
※時間なくて詳細を資料に盛り込めません 
でした、すいません。
最後にちょっと小話。 
Rails を使ってる場合の現実的な 
落とし所について。
公開メソッドについて 
• モジュールの include で見た目の複雑性を下げる。 
• コードレビューによるチェックで基底クラスの公開メソッドを使わ 
ないようにする。
フォーム / サービスオブジェクトの利用 
http://a-suenami.hatenablog.com/entry/2013/12/06/092146
まとめ 
データベースとモデルは区別しましょう。 
! 
DOA の人とモデルの人は殴りあってないで 
もっと仲良くしましょう。(マジで)

More Related Content

What's hot

O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐkwatch
 
MySQLテーブル設計入門
MySQLテーブル設計入門MySQLテーブル設計入門
MySQLテーブル設計入門yoku0825
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークke-m kamekoopa
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南Mikiya Okuno
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐりKazuyuki TAKASE
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話ichirin2501
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニックinfinite_loop
 
データモデリング・テクニック
データモデリング・テクニックデータモデリング・テクニック
データモデリング・テクニックHidekatsu Izuno
 
SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料Hironori Miura
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)Yoshitaka Kawashima
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?ichirin2501
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門増田 亨
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法yoku0825
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)Satoshi Yamada
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計Mikiya Okuno
 
基本に戻ってInnoDBの話をします
基本に戻ってInnoDBの話をします基本に戻ってInnoDBの話をします
基本に戻ってInnoDBの話をしますyoku0825
 
SQL serverのデータ破損に備える
SQL serverのデータ破損に備えるSQL serverのデータ破損に備える
SQL serverのデータ破損に備えるokumar savurou
 

What's hot (20)

O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
Tackling Complexity
Tackling ComplexityTackling Complexity
Tackling Complexity
 
MySQLテーブル設計入門
MySQLテーブル設計入門MySQLテーブル設計入門
MySQLテーブル設計入門
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
データモデリング・テクニック
データモデリング・テクニックデータモデリング・テクニック
データモデリング・テクニック
 
SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
 
基本に戻ってInnoDBの話をします
基本に戻ってInnoDBの話をします基本に戻ってInnoDBの話をします
基本に戻ってInnoDBの話をします
 
SQL serverのデータ破損に備える
SQL serverのデータ破損に備えるSQL serverのデータ破損に備える
SQL serverのデータ破損に備える
 

Similar to マジックビーンズ

DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発Tomoharu ASAMI
 
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門normalian
 
Laravelの検索機能の実装方法
Laravelの検索機能の実装方法Laravelの検索機能の実装方法
Laravelの検索機能の実装方法yoshitaro yoyo
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~Yoshitaka Seo
 
型チェックのアノテーションによる保守・運用の改善
型チェックのアノテーションによる保守・運用の改善型チェックのアノテーションによる保守・運用の改善
型チェックのアノテーションによる保守・運用の改善gree_tech
 
はじめての ASP.NET MVC
はじめての ASP.NET MVCはじめての ASP.NET MVC
はじめての ASP.NET MVCjz5 MATSUE
 
はじめてのASP.NET MVC5
はじめてのASP.NET MVC5はじめてのASP.NET MVC5
はじめてのASP.NET MVC5Tomo Mizoe
 
MvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かうMvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かうShun Hikita
 
【アジャイル道場】Rails勉強会(view編)
【アジャイル道場】Rails勉強会(view編)【アジャイル道場】Rails勉強会(view編)
【アジャイル道場】Rails勉強会(view編)Sosuke Kimura
 
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...Akira Inoue
 
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsThe Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsKoichiro Ohba
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築Masashi Shinbara
 
Rubyで作るtwitter風webアプリケーション
Rubyで作るtwitter風webアプリケーションRubyで作るtwitter風webアプリケーション
Rubyで作るtwitter風webアプリケーションNaoto Hori
 
Jubatusでマルウェア分類
Jubatusでマルウェア分類Jubatusでマルウェア分類
Jubatusでマルウェア分類Shuzo Kashihara
 
オープンソースを利用したモデル駆動トライアル
オープンソースを利用したモデル駆動トライアルオープンソースを利用したモデル駆動トライアル
オープンソースを利用したモデル駆動トライアルAkira Tanaka
 
MVCのつぎは・・・
MVCのつぎは・・・MVCのつぎは・・・
MVCのつぎは・・・Net Penguin
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説Daisuke Nishino
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼうyouku
 

Similar to マジックビーンズ (20)

DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
 
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門
 
Laravelの検索機能の実装方法
Laravelの検索機能の実装方法Laravelの検索機能の実装方法
Laravelの検索機能の実装方法
 
Mvc conf session_1_osada
Mvc conf session_1_osadaMvc conf session_1_osada
Mvc conf session_1_osada
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
 
型チェックのアノテーションによる保守・運用の改善
型チェックのアノテーションによる保守・運用の改善型チェックのアノテーションによる保守・運用の改善
型チェックのアノテーションによる保守・運用の改善
 
はじめての ASP.NET MVC
はじめての ASP.NET MVCはじめての ASP.NET MVC
はじめての ASP.NET MVC
 
はじめてのASP.NET MVC5
はじめてのASP.NET MVC5はじめてのASP.NET MVC5
はじめてのASP.NET MVC5
 
MvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かうMvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かう
 
【アジャイル道場】Rails勉強会(view編)
【アジャイル道場】Rails勉強会(view編)【アジャイル道場】Rails勉強会(view編)
【アジャイル道場】Rails勉強会(view編)
 
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
 
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsThe Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in Corporations
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
Rubyで作るtwitter風webアプリケーション
Rubyで作るtwitter風webアプリケーションRubyで作るtwitter風webアプリケーション
Rubyで作るtwitter風webアプリケーション
 
Jubatusでマルウェア分類
Jubatusでマルウェア分類Jubatusでマルウェア分類
Jubatusでマルウェア分類
 
オープンソースを利用したモデル駆動トライアル
オープンソースを利用したモデル駆動トライアルオープンソースを利用したモデル駆動トライアル
オープンソースを利用したモデル駆動トライアル
 
MVCのつぎは・・・
MVCのつぎは・・・MVCのつぎは・・・
MVCのつぎは・・・
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
 
Tech fun rails_workshop
Tech fun rails_workshopTech fun rails_workshop
Tech fun rails_workshop
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼう
 

More from Akira Suenami

糖質とプログラミングと私
糖質とプログラミングと私糖質とプログラミングと私
糖質とプログラミングと私Akira Suenami
 
糖質制限超入門
糖質制限超入門糖質制限超入門
糖質制限超入門Akira Suenami
 
今年かかった麻疹まとめ2014
今年かかった麻疹まとめ2014今年かかった麻疹まとめ2014
今年かかった麻疹まとめ2014Akira Suenami
 
Symfony温泉2014 自己紹介LT
Symfony温泉2014 自己紹介LTSymfony温泉2014 自己紹介LT
Symfony温泉2014 自己紹介LTAkira Suenami
 
シュードキーニートフリーク
シュードキーニートフリークシュードキーニートフリーク
シュードキーニートフリークAkira Suenami
 
Tdd is really dead ?
Tdd is really dead ?Tdd is really dead ?
Tdd is really dead ?Akira Suenami
 
Wip prをやってみた
Wip prをやってみたWip prをやってみた
Wip prをやってみたAkira Suenami
 
俺がモデルだ!問題に立ち向かう
俺がモデルだ!問題に立ち向かう俺がモデルだ!問題に立ち向かう
俺がモデルだ!問題に立ち向かうAkira Suenami
 
今年かかった麻疹まとめ
今年かかった麻疹まとめ今年かかった麻疹まとめ
今年かかった麻疹まとめAkira Suenami
 
デザイナのためのGit講座
デザイナのためのGit講座デザイナのためのGit講座
デザイナのためのGit講座Akira Suenami
 
アジャイル開発振り返り
アジャイル開発振り返りアジャイル開発振り返り
アジャイル開発振り返りAkira Suenami
 
Xp祭りに行ってきた
Xp祭りに行ってきたXp祭りに行ってきた
Xp祭りに行ってきたAkira Suenami
 
テストとの上手な付き合い方
テストとの上手な付き合い方テストとの上手な付き合い方
テストとの上手な付き合い方Akira Suenami
 

More from Akira Suenami (13)

糖質とプログラミングと私
糖質とプログラミングと私糖質とプログラミングと私
糖質とプログラミングと私
 
糖質制限超入門
糖質制限超入門糖質制限超入門
糖質制限超入門
 
今年かかった麻疹まとめ2014
今年かかった麻疹まとめ2014今年かかった麻疹まとめ2014
今年かかった麻疹まとめ2014
 
Symfony温泉2014 自己紹介LT
Symfony温泉2014 自己紹介LTSymfony温泉2014 自己紹介LT
Symfony温泉2014 自己紹介LT
 
シュードキーニートフリーク
シュードキーニートフリークシュードキーニートフリーク
シュードキーニートフリーク
 
Tdd is really dead ?
Tdd is really dead ?Tdd is really dead ?
Tdd is really dead ?
 
Wip prをやってみた
Wip prをやってみたWip prをやってみた
Wip prをやってみた
 
俺がモデルだ!問題に立ち向かう
俺がモデルだ!問題に立ち向かう俺がモデルだ!問題に立ち向かう
俺がモデルだ!問題に立ち向かう
 
今年かかった麻疹まとめ
今年かかった麻疹まとめ今年かかった麻疹まとめ
今年かかった麻疹まとめ
 
デザイナのためのGit講座
デザイナのためのGit講座デザイナのためのGit講座
デザイナのためのGit講座
 
アジャイル開発振り返り
アジャイル開発振り返りアジャイル開発振り返り
アジャイル開発振り返り
 
Xp祭りに行ってきた
Xp祭りに行ってきたXp祭りに行ってきた
Xp祭りに行ってきた
 
テストとの上手な付き合い方
テストとの上手な付き合い方テストとの上手な付き合い方
テストとの上手な付き合い方
 

マジックビーンズ