Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf ·...

47
Convention Over Configuration 1 生産性UPの秘訣 Masayuki Kimura Naoki Takezoe Shota Onishi appendix オープニングトーク&Spring 17:2017:30 Ruby on Rails 17:3017:45 Seasar2 17:4518:00 最後に

Transcript of Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf ·...

Page 1: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Convention Over Configuration

1

生産性UPの秘訣

Masayuki KimuraNaoki Takezoe

Shota Onishi

appendix

オープニングトーク&Spring  17:20~17:30Ruby on Rails 17:30~17:45Seasar2 17:45~18:00最後に

Page 2: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

profile

2

• 木村 真幸(Masayuki Kimura)– 株式会社DTS シニア・プロジェクトマネージャ

• 技術支援、開発プロセス定義、フレームワーク開発、IDE開発、講師等

– 課外活動• 注目のJavaフレームワーク詳細解説(ITPro)

• “使える”Eclipseプラグイン徹底攻略(ITPro)

• StrutsIDEコミッタ• 著書「まるごとEclipse! Vol.1」(発行:インプレスコミュニケーションズ)

Page 3: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

生産性に関する数字

3

0

2

4

6

8

10

12

14

16

18

tcl rexx python perl Java C++ C

• プログラミングに要する時間(h)

参考:http://page.mi.fu-berlin.de/    prechelt/Biblio/jccpprt_computer2000.pdf

出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎

1131,161設定行数

1,1643,293コード行数

Ruby on RailsJava

• コード量の違い

JUnit

1weekStruts

1weekSpring + iBATIS

Java EE

3day独自フレームワーク

1weekJava

期間コース名

• 教育コスト

• コミュニケーションコスト(n=人)

n(n-1)/2出展:「人月の神話」著Frederick Phillips,Jr. Brooks

Page 4: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

結局、 生産性っ て・ ・ ・

And there‘ s busi ness val ue i n fun

- after al l moti vati on i s a

major factor i n programmer  producti vi ty.

-- Marti n Fowl er

そして、 楽しさにはビジネス価値があり ます

- 結局、 モチベーショ ンこそがプログラマの

生産性を左右するのです。

-- マーチン・ ファ ウラー

Page 5: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

モチベーションを下げる作業

5

XML地獄

Page 6: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

なぜXML地獄が生まれたか

6

• DI(Dependency Injection)

オブジェクト

オブジェクトオブジェクト

オブジェクト間の関連をハードコーディング→密結合

DIコンテナなし

DIコンテナがオブジェクトの関連を管理→粗結合

DIコンテナありオブジェクト

オブジェクトオブジェクト

DIコンテナ

• ex) Springでの実現例

<!-- 以下を1セットにして、延々と同じような記述が繰り返えされる --><bean id="sampleController" class="sample.arid.SampleController" autowire="byType" /><bean id="player" class="sample.arid.SampleLogicImpl" autowire="byType" />

Page 7: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Convention Over Configuration

7

• 設定より規約(Convention)という考え方– 適切な規約を守れば、面倒な設定をしなくても、

フレームワークが自動的に適切な設定をしてくれるという考え

– 概念的なもので、それぞれのフレームワーク等によって、形態は異なる

• Ruby on Railsが広めた標語– Ruby on Railsだけでなく、様々なフレームワーク

に影響を及ぼした

Page 8: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

CoCのメリット・デメリット

8

• メリット– 規約を覚えれば、定型的な作業が免除される

– 慣れれば慣れるほど生産性が上がる

• デメリット– 複雑・非直感的な規約は覚えきれない

– 動作させてみるまで、分からない

Page 9: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

主流な3つのフレームワーク

9

• Spring–世界的にデファクトなDIコンテナ

• Ruby on Rails–圧倒的な開発効率を誇るWebアプリケーション開

発のためのWebフレームワーク

• Seasar2– 開発者の使い勝手を最重要視した国産のDIコン

テナ

Page 10: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Spring Framework

10

Bean定義ファイル書きたいですか?

Springを使っている技術者様に問いたい

Page 11: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Arid POJOs

• SpringでCoCを実現するフレームワーク– POJOs IN ACTIONの著者Chris Richardson氏– Seasar2のAutoRegisterに近いイメージ

<!– パッケージ名を指定するだけ --><arid:define-beans package="sample.arid" autowire="byType"/>

<!-- 以下を1セットにして、延々と同じような記述が繰り返えされる --><bean id="sampleController" class="sample.arid.SampleController" autowire="byType" /><bean id=“sampleLogic" class="sample.arid.SampleLogicImpl" autowire="byType" />

11

Page 12: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Spring summary

• Arid POJOs– SpringでCoCを利用する場合、唯一の手段

–過度のカスタマイズは逆に生産性を落とす

– Spring IDEの補完は無い

• Spring2.1(2007/08/22時点 M3)– JRuby対応により、設定地獄から抜け出せる可能性はある

• 現状は、JRuby実装のBeansがDIできるとか・・・

12

Page 13: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

主流な3つのフレームワーク

• Spring–世界的にデファクトなDIコンテナ

• Ruby on Rails–圧倒的な開発効率を誇るWebアプリケーション開

発のためのWebフレームワーク

• Seasar2– 開発者の使い勝手を最重要視した国産のDIコン

テナ

13

Page 14: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

• 名前:大西正太

• (株)アスタリクス所属

• CMS on RailsなOSS「Rubricks」コミッタ– http://rubricks.org/

• BizcaというSaaSグループウェア開発– http://bizca.jp/

自己紹介

14

Page 15: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

O/Rマッピングの記述を比較

【CoC有】Rails

【CoC無】一昔前のJava

※局所的に

これを見てください

15

Page 16: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

• テーブル名はモデル名の複数形にする

• 主キー名は「id」にする

• 外部キー名は「関連テーブル名単数形_id」にする

• 交差テーブル名は「テーブルA_テーブルB」にする

MEMBERSテーブル

id

ITEMS テーブル

id

member_id

GROUPSテーブル

id

MEMBERS_GROUPSテーブル

id

member_id

group_id

Itemクラス Member  クラス

Members Groupクラス

Groupクラス

RailsのO/Rマッピング規約

16

Page 17: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

• 勝手にモデル名の複数系のテーブルとマッピングされる

• カラム名と同名のメソッドが勝手にモデルに追加される

• 関連テーブルを簡単に芋づる式に引っ張れる

いきなりAppからテーブルにアクセスできるようになっている

class Item < ActiveRecord::Baseend

規約を守ると・・・

17

Page 18: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

その他のRailsの規約

• Controller– URLとコントローラ名/メソッド名を一致させる

– http://xxxx.com/controller名/action名

• View– Viewテンプレートとアクション名を一致させる

– displayアクション⇔display.rhtml

Strutsのような紐付けXMLがいらない

18

Page 19: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

• 今のJavaはそんなにひどくない

• JavaもCoC対応してきている– S2とか

• 後でたけぞうさんが説明してくれます

– Springとか• 木村さんが説明してくれました

念のため

19

Page 20: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

• 実際にO/Rマッピングしてみます

Demo

20

Page 21: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Step数で100倍の差が出る(?)(冒頭のサンプル)

App全体での差ではない ・局所的なもの

生産性10倍(?)(Rails登場時のうたい文句)

Step数はそれに近いが… ・ステップ数は1/9になった  簡単な書籍管理システムで測定 ・Javaにはコード生成がある  XMLやアクセッサ ・要件定義やテストは同じ工数

CoC/Railsの触れ込みと実際

21

Page 22: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

• 変更に強い– モデル情報をDBスキーマで一元化

– DBが変わっても煩わしい作業が少ない• 紐付けXMLの変更やアクセッサの変更がない

• ツールでの再ジェネレートは必要ない

モチベーションも低下しづらい

ではどこにメリットがあるのか

22

Page 23: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

• アジャイル開発– 「設計書」よりも「現物主義」の開発スタイル

– 「動く現物」をラウンドロビン的に改善していく

– テーブルもどんどん作り変えていく

• アジャイルとCoCは相性がいい– アジャイルのキーワード「変化ヲ抱擁セヨ」

– CoC/Railsは変更に強い

– どんどん現物を改善していける

CoCとアジャイル

23

Page 24: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

• 既存システムには適用しづらい• 規約に従わないテーブルには設定が必要に

• 使えない機能が出てきたりする

• 製品の都合でCoCできないことがある• Oracleのテーブル名は30byteまで

• CUSTOMER_SUPPORT_PERSON_CUSTOMER_SUPPORT_GROUPS(47byte)

• 複数系⇔単数形が分かりづらい• PERSON People⇔ とか

• シンプルでない規約が悪影響を及ぼす例

• 切り替えは可能

Rails/CoCの罠

24

Page 25: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

• なぜCoCはRailsで有名になったのか?

• Rubyが優れたCoCの実現に向いているから– Rubyのダイナミックさ

– 動的なメソッド追加

–静的型付言語には真似しきれない

–当分はCoCのリーダーはRubyだと思う

最後に

25

Page 26: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

主流な3つのフレームワーク

• Spring–世界的にデファクトなDIコンテナ

• Ruby on Rails–圧倒的な開発効率を誇るWebアプリケーション開

発のためのWebフレームワーク

• Seasar2– 開発者の使い勝手を最重要視した国産のDIコン

テナ

26

Page 27: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

自己紹介

• 竹添 直樹(たけぞう)

• NTTデータ先端技術勤務

• Seasarプロジェクトでコミッタをしています

• 著書– Eclipseプラグイン開発徹底攻略(共著)

–入門Wiki

27

Page 28: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Seasar2とは

• 国産のDIコンテナ– http://www.seasar.org/– オープンソース

–日本語コミュニティの存在

28

Page 29: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Seasar2の特徴

• 設定やコードを減らすための様々な工夫–利用者の使い勝手を重視

• スクリプト言語とJavaの良い部分を融合– Javaの安全性

– スクリプト言語のサクサク感

• 強力な開発支援ツール– Eclipseプラグインを提供

29

Page 30: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Seasar2の生産性

• 5.5ヶ月で1000画面!

– Seasar2ファミリーを徹底活用• Seasar 2.3 / S2JSF / S2Dao

– 1画面=1クラスのアーキテクチャ• コードジェネレータとの相性が良い

• 設計と実装のずれが少ない

出展:ITPro「HTML画面をそのまま仕様書に」,5カ月で1000画面を構築した就職サイトPuffの高速開発手法

http://itpro.nikkeibp.co.jp/article/COLUMN/20070214/261859/

30

Page 31: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Seasar2のCoC的な機能

• AutoRegister– コンポーネントを自動登録する仕組み

• S2Dao– AOPを活用したデータアクセスフレームワーク

• Chura– CoCを活用したフルスタックフレームワーク

31

Page 32: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

AutoRegister~コンポーネントの自動登録~

32

Page 33: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

AutoRegister• DIコンテナでは依存性を管理するコンポーネントを設定ファ

イルに記述する必要がある

• コンポーネントを設定ファイルに記述するのは面倒!

• 命名規約に従ってコンポーネントを自動登録

<component class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"> <initMethod name="addClassPattern"> <arg>"examples.jsf.logic.impl"</arg> <arg>".*LogicImpl"</arg> </initMethod></component>

examples.jsf.logic.implパッケージの*LogicImplクラスを自動的に登録

33

Page 34: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

S2Dao~CoCベースのデータアクセスフレームワーク~

34

Page 35: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

S2Daoの実装例(1)• インターフェースを作成するだけでOK• 命名規約や引数、戻り値に従ってSQLが実行時に

自動生成される

public interface EmployeeDao { // 挿入 public void insert(Employee employee); // 更新 public void update(Employee employee); // 削除 public void delete(Employee delete); // 主キーを指定して1件取得 public Employee select(int employeeId); // 全件取得 public Employee[] selectAll();}

35

Page 36: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

S2Daoの実装例(2)• 明示的にSQLを記述することももちろん可能

• DAOクラス名_DAOメソッド名.sql• SQLのコメントを使用して可変クエリを実現

SELECT emp.*, dept.dname dname_0, dept.loc loc_0 FROM emp, deptWHERE empno = /*empno*/7788 AND emp.deptno = dept.deptno

パラメータ埋め込みの例

SELECT * FROM emp WHERE job = /*job*/'CLERK' /*IF deptno != null*/AND deptno = /*deptno*/20/*END*/

可変クエリの例

36

Page 37: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Chura~CoCを活用したフルスタックフレームワーク~

37

Page 38: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Chura• CoCを活用したフルスタックフレームワーク

• 2種類の開発スタイル– 開発生産性を重視「Super Agile」

• Teeda Extension• S2Dao

– Java標準を重視「Easy Enterprise」• JSF(Teeda)

• JPA(Kuina-Dao)

• 開発ツール「Dolteng」– Churaを具現化するEclipseプラグイン

38

Page 39: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Dolteng ~ ツールで規約を見える化

• CoCやDIの欠点– 規約を覚える必要がある

– 動かしてみないとわからない

ツールによるサポート

id属性の命名規約によってJavaクラスとマッピング

アイコン表示でマッピングされていることを可視化

39

Page 40: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

HOT Deploy ~動作確認を効率化

ソースコードを修正

APサーバを再起動

ひたすら待つ…

動作確認

OK!!

ダメだったら最初に戻る

HOT Deployなし HOT Deployあり

ソースコードを修正

動作確認

OK!!

ダメだったら再度修正

素早い開発サイクルを実現

40

Page 41: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Seasar2のまとめ

41

Page 42: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

Seasar2のまとめ

• スクリプト言語とJavaのいいところ取り– スクリプト言語の迅速な開発スタイル

– Javaによる静的な型チェック

• CoCの欠点をカバー–ツールで規約の間違いを予防する(Dolteng)

– 動作確認に要する時間の短縮(HOT Deploy)

42

Page 43: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

是非お試しください

• The Seasar Project(Webサイト)– http://www.seasar.org/

• Seasar-user(利用者向けメーリングリスト)– https://ml.seasar.org/mailman/listinfo/seasar-user

• Seasar Conference 2007 Automn– http://event.seasarfoundation.org/sc2007autumn/

43

Page 44: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

最後に:CoCまとめ

• Spring– Arid POJOsの適用がポイント

• Ruby on Rails– Rubyのダイナミックさで強力なCoCを実現

– 制約事項を把握し、アジャイル手法とセットで

• Seasar2– スクリプト言語とJavaのいいところ取り

– ツール等によってCoCの欠点をカバー

44

Page 45: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

最後に:Ruby on Railsの現状と展望

• 実案件での開発実績がたまっていない

• 良くも悪くもアジャイル手法と良くマッチする– アジャイル手法は大規模開発には厳しい一面

– コミュニケーションや迅速性に重きを置くため、客先常駐や、時間単金での仕事となりやすい

• 10年前のJavaと同じ事を言われている–遅い、技術者が、お客が・・・つまり・・・?

45

Page 46: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

最後に:Javaの現状と展望

• 最も無難な選択肢–超大規模~小規模、Web系、組み込み・・・

• Java屋の人口の多さ– 技術者確保の容易さ(国内外問わず)

• 性能速度– 生産性10倍でも性能xx倍はちょっと・・・

• 顧客に対する認知度は抜群

46

Page 47: Convention Over Configurationamateras.osdn.jp/resources/xdev_coc.pdf · 出展:「JavaからRubyへ」著Bruce A.tate 訳角谷信太郎 設定行数 1,161 113 コード行数 3,293

ご清聴

ありがとう

ございました