SlideShare ist ein Scribd-Unternehmen logo
1 von 24
~入門から慣れるまで~	


      2011年8月26日	
  
         三原 俊介	
  
自己紹介	
三原 俊介 (みはら しゅんすけ)	
  
Twi*erID	
  @asaborake	
  



(1)	
  岡山の大学でグループウェアを研究中	
  
(2)	
  Rails歴	
  
 (A) 研究室に入り初めてRailsに触れる	
  
  (B)	
  Railsを元にしてWebフレームワークを勉強 	
  
  (C)	
  使い始めて2年半	
  
           そろそろ慣れてきたって言っても恥ずかしくない!	
  はず...	
  
 (D)	
  研究室でRailsを利用して研究成果物を作成	
  
     勉強してきたことを共有	
  
                                             2
今回の内容	
第一条 モデルの作成は慎重にするべし!

第二条 テストしやすいコードを心がけるべし!

第三条 国際化は多国語未対応でも使うべし!

第四条 ビジネスロジックはモデルに書くべし!

第五条 安易な継承をするべからず!




                         3
今回の内容	
第一条 モデルの作成は慎重にするべし!

第二条 テストしやすいコードを心がけるべし!

第三条 国際化は多国語未対応でも使うべし!

第四条 ビジネスロジックはモデルに書くべし!

第五条 安易な継承をするべからず!




                         4
事例	
機能の追加と拡張を(場当たり的に)続けてきた
    統一性がないモデルが多く存在
 例1) フラグを管理するカラム名
     english,is_english,english_flag
 例2) 省略の使い方
     ML?モデルとMailinglist?モデル.abbrevとabbreviation
 例3) 同じもの別の名称
    ? Filterモデルと?Scopeモデル,noteとdescription
リファクタリングすることを決める
 Railsにはマイグレーションがあるから簡単にやれるだろう
     そんなふうに考えていた時期が僕にもありました
                                              5
トラブル	
ビューやコントローラを大量の修正箇所が!
一見動くけど,実はデータが変更されていない!

[原因]
Conven@on	
  over	
  Configura@onのために,モデルに関連する名前
は,ビューとコントローラ内に大量に使用されている
    モデル名とカラム名のリファクタリングに伴なう修正点が
    アプリケーション中に散在していた




                                              6
教訓	
マイグレーションがあっても簡単にモデルの変更はできない

   モデルを作る際は慎重に

   あとで名前に手を加えるのは大変



テストも重要だと認識!




                              7
今回の内容	
第一条 モデルの作成は慎重にするべし!

第二条 テストしやすいコードを心がけるべし!

第三条 国際化は多国語未対応でも使うべし!

第四条 ビジネスロジックはモデルに書くべし!

第五条 安易な継承をするべからず!




                         8
事例	
モデルのリファクタリングを通してテストの重要性に気がつく

Rails(Ruby)はテストコードで動作を保証しないと,スペルミスを
していても例外を発生させず動くことがよくある
   意図しない挙動を見つけるのが手間


意図した通りに動いていることを保証する仕組みが必要
   Cucumber(受け入れテスト用ツール)導入




                                  9
トラブル	
Cucumberでは一部のページのテストができない!

[原因]
CucumberではCapybara(Rackアプリケーションのテストツール)
を利用してテストを実行

    JavaScriptを利用したページ遷移はテストができない


JavaScriptがoffの時にページ遷移する手段がない




                                     10
教訓	
Rubyはテストコードによって動作を保証するもの

テストを書くこと前提でコードを書く
 (1)JavaScriptを多用しすぎない(Unobtrusive	
  JavaScript)
 (2)RESTを意識したページ遷移をする




                                                    11
今回の内容	
第一条 モデルの作成は慎重にするべし!

第二条 テストしやすいコードを心がけるべし!

第三条 国際化は多国語未対応でも使うべし!

第四条 ビジネスロジックはモデルに書くべし!

第五条 安易な継承をするべからず!




                         12
事例	
Cucumberではシナリオを利用してテストを実行
Scenario:	
 メンバの作成:正常系	
 
	
 	
 	
 	
 When	
 "新規登録"リンクをクリックする	
 
	
 	
 	
 	
 And	
 以下の項目を入力する:	
 
	
 	
 	
 	
 	
 |	
 member_name	
 	
 	
 	
 	
 	
 	
 	
 	
 |	
 岡大	
 三郎	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 |	
 
	
 	
 	
 	
 	
 |	
 member_login_name	
 	
 	
 |	
 saburo	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 |	
 
	
 	
 	
 	
 	
 |	
 member_mail_address	
 |	
 saburo@exmaple.com	
 |	
 
	
 	
 	
 	
 And	
 "作成"ボタンをクリックする	
 
	
 	
 	
 	
 Then	
 /successfully	
 created/と表示されていること	
 

Scenario:	
 計算機の作成:正常系	
 
	
 	
 	
 	
 When	
 “新規追加"リンクをクリックする	
 
	
 	
 	
 	
 And	
 以下の項目を入力する:	
 
	
 	
 	
 	
 	
 |	
 machine_name	
 	
 	
 	
 	
 	
 	
 	
 |	
 岡大PC	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 |	
 
	
 	
 	
 	
 	
 |	
 os	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 |	
 Windows	
 Vista	
 	
 	
 	
 	
 	
 |	
 
	
 	
 	
 	
 And	
 "	
 create"ボタンをクリックする	
 
	
 	
 	
 	
 Then	
 /正しく登録されました/と表示されていること	
 
                                                                                                                       13
トラブル	
表示されている文字に統一性が無い!
例1) 新規作成画面のsubmitボタン => 「作成」「登録」「Create」
例2) Productモデルのcodeカラム
   一覧画面では,「コード」
   詳細画面では,「商品コード」
   新規作成画面では,「製品番号」

[原因]
(1) 対応する日本語を決めずに実装
(2) 様々なタイミングで様々な人がviewのファイルを追加



                                      14
教訓	
国際化(i18n)は多国語未対応でも使うほうが良い

i18nとは
  Rails 2.2から導入された国際化を支援する機能
 config/locales/translation_ja.yml
  ja:	
 
  	
 	
 common:	
 
  	
 	
 	
 	
 word:	
 
  	
 	
 	
 	
 	
 	
 create:	
 “作成"	
 
  	
 	
 activerecord:	
 
  	
 	
 	
 	
 attributes:	
 
  	
 	
 	
 	
 	
 	
 product:	
 
  	
 	
 	
 	
 	
 	
 	
 	
 code:	
 “商品コード”	
 
                                               15
今回の内容	
第一条 モデルの作成は慎重にするべし!

第二条 テストしやすいコードを心がけるべし!

第三条 国際化は多国語未対応でも使うべし!

第四条 ビジネスロジックはモデルに書くべし!

第五条 安易な継承をするべからず!




                         16
事例	
Railsを使ってショッピングアプリケーションを作成
(1)Productモデルを作成
(2)ShopコントローラにProductを操作するsellアクションを作成
ポイントカード機能を付けよう
 (3)Cardモデルを作成
 (4)sellアクションにCardモデルを操作する処理を追加
特売日機能を付けよう
 (5)Calenderモデルを作成
 (6)sellアクションでCalenderモデルを参照して割引処理
予約販売機能を付けよう
 (7)sellアクションをコピペして・・・
              やってしまいがち
                                     17
トラブル	
コントローラに手を加えるとデータの整合性が
崩れる!
単体テストでデータの整合性がテストできない!
コードの再利用がしづらい!
[原因]
コントローラに多くのデータの整合性を取る処理が記述

ActiveRecordを利用すると,データベースのオブジェクトのように
扱えるため,複数のモデルの複数のカラムを操作する処理をコン
トローラに書きがちになる


                                  18
教訓	
整合性を処理するビジネスロジックはモデル側に実装する
 MVCモデルに沿った形でRailsを利用
  データの整合性はモデルが管理

 モデルに比べてコントローラは頻繁に手を加える
  手を加えた影響が広範囲に広がらないように




                             19
今回の内容	
第一条 モデルの作成は慎重にするべし!

第二条 テストしやすいコードを心がけるべし!

第三条 国際化は多国語未対応でも使うべし!

第四条 ビジネスロジックはモデルに書くべし!

第五条 安易な継承をするべからず!




                         20
事例	
文書管理システムを作成
扱う文書の種別
 (A)日報
 (B)検討資料
 (C)議事録
(1) 文書(Document)モデルを作成
(2) 文書モデルを継承して、種別のモデルを作成



 単一テーブル継承(SIT)を使ってきれいにコードが書ける
                  ・・・と喜んでいました

                                21
トラブル	
間違えて「提出資料」としてアップロードした文
書を,「議事録」に変更することができない!

[原因]
単一テーブル継承(STI)が便利なので,振る舞いの違いを安易に
継承を利用して実装したこと




                             22
教訓	
「継承よりも委譲」の原則を守る

<例の場合>
文書モデルとして生成し,委譲 Mix-in(プラグイン)を利用して種別
の振る舞いを変える




                                23
まとめ	
第一条 モデルの作成は慎重にするべし!

第二条 テストしやすいコードを心がけるべし!

第三条 国際化は多国語未対応でも使うべし!

第四条 ビジネスロジックはモデルに書くべし!

第五条 安易な継承をするべからず!

参考になるものがあれば幸いです
        ご清聴ありがとうございました

                         24

Weitere ähnliche Inhalte

Was ist angesagt?

Google Glassでできること XE12版 最新開発情報 Mirror API & GDK
Google Glassでできること XE12版 最新開発情報 Mirror API & GDKGoogle Glassでできること XE12版 最新開発情報 Mirror API & GDK
Google Glassでできること XE12版 最新開発情報 Mirror API & GDKMasahiro Wakame
 
Nespのコード生成
Nespのコード生成Nespのコード生成
Nespのコード生成Kouji Matsui
 
TypeScript 入門してみる
TypeScript 入門してみるTypeScript 入門してみる
TypeScript 入門してみるKen Fukuyama
 
Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!Kanako Kobayashi
 
PHPUnitでリファクタリング
PHPUnitでリファクタリングPHPUnitでリファクタリング
PHPUnitでリファクタリングTakako Miyagawa
 
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントCode igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントnoldor
 
で、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuriで、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS MatsuriYoshitaka Kawashima
 
ROS2.0時代に備えたc++11/14
ROS2.0時代に備えたc++11/14ROS2.0時代に備えたc++11/14
ROS2.0時代に備えたc++11/14Takashi Ogura
 
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!Jun-ichi Sakamoto
 
2011 PHPカンファレンス関西 懇親会LT
2011 PHPカンファレンス関西 懇親会LT2011 PHPカンファレンス関西 懇親会LT
2011 PHPカンファレンス関西 懇親会LTTakako Miyagawa
 
プログラミング言語Cyanの紹介
プログラミング言語Cyanの紹介プログラミング言語Cyanの紹介
プログラミング言語Cyanの紹介baban ba-n
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonadKouji Matsui
 
Rubyからscalaに変えるべき15の理由
Rubyからscalaに変えるべき15の理由Rubyからscalaに変えるべき15の理由
Rubyからscalaに変えるべき15の理由Yukishige Nakajo
 
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばメタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばKouji Matsui
 
LT駆動開発04 5分では分からないTypeScriptのなんとか
LT駆動開発04 5分では分からないTypeScriptのなんとかLT駆動開発04 5分では分からないTypeScriptのなんとか
LT駆動開発04 5分では分からないTypeScriptのなんとかKazuya Matsubara
 
Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:codeKouji Matsui
 
これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門Hiramatsu Ryosuke
 
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式Kouji Matsui
 

Was ist angesagt? (20)

Google Glassでできること XE12版 最新開発情報 Mirror API & GDK
Google Glassでできること XE12版 最新開発情報 Mirror API & GDKGoogle Glassでできること XE12版 最新開発情報 Mirror API & GDK
Google Glassでできること XE12版 最新開発情報 Mirror API & GDK
 
Nespのコード生成
Nespのコード生成Nespのコード生成
Nespのコード生成
 
TypeScript 入門してみる
TypeScript 入門してみるTypeScript 入門してみる
TypeScript 入門してみる
 
TypeScript 独習会
TypeScript 独習会TypeScript 独習会
TypeScript 独習会
 
Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!
 
PHPUnitでリファクタリング
PHPUnitでリファクタリングPHPUnitでリファクタリング
PHPUnitでリファクタリング
 
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントCode igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイント
 
で、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuriで、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuri
 
ROS2.0時代に備えたc++11/14
ROS2.0時代に備えたc++11/14ROS2.0時代に備えたc++11/14
ROS2.0時代に備えたc++11/14
 
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
 
2011 PHPカンファレンス関西 懇親会LT
2011 PHPカンファレンス関西 懇親会LT2011 PHPカンファレンス関西 懇親会LT
2011 PHPカンファレンス関西 懇親会LT
 
プログラミング言語Cyanの紹介
プログラミング言語Cyanの紹介プログラミング言語Cyanの紹介
プログラミング言語Cyanの紹介
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonad
 
Rubyからscalaに変えるべき15の理由
Rubyからscalaに変えるべき15の理由Rubyからscalaに変えるべき15の理由
Rubyからscalaに変えるべき15の理由
 
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばメタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
 
Walking front end
Walking front endWalking front end
Walking front end
 
LT駆動開発04 5分では分からないTypeScriptのなんとか
LT駆動開発04 5分では分からないTypeScriptのなんとかLT駆動開発04 5分では分からないTypeScriptのなんとか
LT駆動開発04 5分では分からないTypeScriptのなんとか
 
Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:code
 
これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門
 
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
 

Ähnlich wie nomlab_okayamaruby_subslide

090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby CocoaTomoki Maeda
 
121117 metro styleapp_templateapp
121117 metro styleapp_templateapp121117 metro styleapp_templateapp
121117 metro styleapp_templateappTakayoshi Tanaka
 
kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事Cybozu, Inc.
 
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)TIS Inc.
 
はじめての Rails アプリ開発
はじめての Rails アプリ開発はじめての Rails アプリ開発
はじめての Rails アプリ開発n-fukidome
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeKen Morishita
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺Yusuke Wada
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshopDaisuke Sugai
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324Tak Inamori
 
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所真吾 吉田
 
Css nite(2010.09.23)
Css nite(2010.09.23)Css nite(2010.09.23)
Css nite(2010.09.23)Yoshiki Ushida
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座DIVE INTO CODE Corp.
 
APEX Workshop III 日本語版
APEX Workshop III 日本語版APEX Workshop III 日本語版
APEX Workshop III 日本語版Nakakoshi Yuji
 
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナー
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナーサーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナー
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナーSPIRAL Inc.
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」Shuji Morisaki
 
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望についてKen Azuma
 
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望についてKen Azuma
 
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチMonadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチTomoharu ASAMI
 

Ähnlich wie nomlab_okayamaruby_subslide (20)

090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
 
121117 metro styleapp_templateapp
121117 metro styleapp_templateapp121117 metro styleapp_templateapp
121117 metro styleapp_templateapp
 
kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事
 
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
 
はじめての Rails アプリ開発
はじめての Rails アプリ開発はじめての Rails アプリ開発
はじめての Rails アプリ開発
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
 
Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
 
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
 
Css nite(2010.09.23)
Css nite(2010.09.23)Css nite(2010.09.23)
Css nite(2010.09.23)
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
APEX Workshop III 日本語版
APEX Workshop III 日本語版APEX Workshop III 日本語版
APEX Workshop III 日本語版
 
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナー
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナーサーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナー
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナー
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について
 
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について
 
Tech fun rails_workshop
Tech fun rails_workshopTech fun rails_workshop
Tech fun rails_workshop
 
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチMonadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
 
Angularreflex20141210
Angularreflex20141210Angularreflex20141210
Angularreflex20141210
 

nomlab_okayamaruby_subslide