• 検索結果がありません。

生産性アップの秘訣はこれだ! スクリプト系&Java系フレームワーク

N/A
N/A
Protected

Academic year: 2021

シェア "生産性アップの秘訣はこれだ! スクリプト系&Java系フレームワーク"

Copied!
47
0
0

読み込み中.... (全文を見る)

全文

(1)

Convention Over Configuration

生産性

UPの秘訣

Masayuki Kimura Naoki Takezoe Shota Onishi appendix オープニングトーク&Spring  17:20~17:30 Ruby on Rails 17:30~17:45 Seasar2 17:45~18:00 最後に

(2)

profile

• 木村 真幸(Masayuki Kimura)

– 株式会社DTS シニア・プロジェクトマネージャ • 技術支援、開発プロセス定義、フレームワーク開発、 IDE開発、講師等 – 課外活動 • 注目のJavaフレームワーク詳細解説(ITPro) • “使える”Eclipseプラグイン徹底攻略(ITPro) • StrutsIDEコミッタ • 著書「まるごとEclipse! Vol.1」(発行:インプレスコミュニケーションズ)

(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 113 1,161 設定行数 1,164 3,293 コード行数 Ruby on Rails Java • コード量の違い JUnit 1week Struts 1week Spring + iBATIS Java EE 3day 独自フレームワーク 1week Java 期間 コース名 • 教育コスト • コミュニケーションコスト(n=人)

n(n-1)/2

(4)

結局、 生産性っ て・ ・ ・

And there‘ s busi ness val ue i n fun - after al l moti vati on i s a

maj or factor i n programmer  producti vi ty.

-- Marti n Fowl er そし て、 楽し さにはビ ジネス 価値があり ます

- 結局、 モチベー ショ ン こ そがプロ グラマの 生産性を左右する のです。

(5)

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

(6)

なぜ

XML地獄が生まれたか

• DI(Dependency Injection)

オブジェクト オブジェクト オブジェクト オブジェクト間の関連をハードコーディング→密結合 DIコンテナなし DIコンテナがオブジェクトの関連を管理→粗結合 DIコンテナあり オブジェクト オブジェクト オブジェクト DIコンテナ

• ex) Springでの実現例

<!-- 以下を1セットにして、延々と同じような記述が繰り返えされる -->

(7)

Convention Over Configuration

• 設定より規約(Convention)という考え方

– 適切な規約を守れば、面倒な設定をしなくても、 フレームワークが自動的に適切な設定をしてくれ るという考え – 概念的なもので、それぞれのフレームワーク等に よって、形態は異なる

• Ruby on Railsが広めた標語

– Ruby on Railsだけでなく、様々なフレームワーク に影響を及ぼした

(8)

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

• メリット

– 規約を覚えれば、定型的な作業が免除される – 慣れれば慣れるほど生産性が上がる

• デメリット

– 複雑・非直感的な規約は覚えきれない – 動作させてみるまで、分からない

(9)

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

• Spring

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

• Ruby on Rails

– 圧倒的な開発効率を誇るWebアプリケーション開 発のためのWebフレームワーク

• Seasar2

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

(10)

Spring Framework

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

(11)

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" />

(12)

Spring summary

• Arid POJOs

– SpringでCoCを利用する場合、 唯一の手段 – 過度のカスタマイズは逆に生産性を落とす – Spring IDEの補完は無い

• Spring2.1(2007/08/22時点 M3)

– JRuby対応により、設定地獄から抜け出せる可 能性はある • 現状は、JRuby実装のBeansがDIできるとか・・・

(13)

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

• Spring

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

• Ruby on Rails

– 圧倒的な開発効率を誇るWebアプリケーション開 発のためのWebフレームワーク

• Seasar2

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

(14)

• 名前:大西正太

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

• CMS on RailsなOSS「Rubricks」コミッタ

– http://rubricks.org/

• BizcaというSaaSグループウェア開発

– http://bizca.jp/

自己紹介

(15)

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

CoC有】

Rails

CoC無】

一昔前のJava ※局所的に

これを見てください

(16)

• テーブル名はモデル名の複数形にする • 主キー名は「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マッピング規約

(17)

• 勝手にモデル名の複数系のテーブルとマッピングされる • カラム名と同名のメソッドが勝手にモデルに追加される • 関連テーブルを簡単に芋づる式に引っ張れる

いきなり

Appからテーブルにアクセスできる

ようになっている

class Item < ActiveRecord::Base end

(18)

その他の

Railsの規約

• Controller

– URLとコントローラ名/メソッド名を一致させる – http://xxxx.com/controller名/action名

• View

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

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

(19)

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

• JavaもCoC対応してきている

– S2とか • 後でたけぞうさんが説明してくれます – Springとか • 木村さんが説明してくれました

念のため

(20)

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

(21)

Step数で100倍の差が出る (?) (冒頭のサンプル) App全体での差ではない  ・局所的なもの 生産性10倍(?) (Rails登場時のうたい文句) Step数はそれに近いが…  ・ステップ数は1/9になった   簡単な書籍管理システムで測定  ・Javaにはコード生成がある   XMLやアクセッサ  ・要件定義やテストは同じ工数

CoC/Railsの触れ込みと実際

(22)

• 変更に強い

– モデル情報をDBスキーマで一元化 – DBが変わっても煩わしい作業が少ない • 紐付けXMLの変更やアクセッサの変更がない • ツールでの再ジェネレートは必要ない

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

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

(23)

• アジャイル開発 – 「設計書」よりも「現物主義」の開発スタイル – 「動く現物」をラウンドロビン的に改善していく – テーブルもどんどん作り変えていく • アジャイルとCoCは相性がいい – アジャイルのキーワード「変化ヲ抱擁セヨ」 – CoC/Railsは変更に強い – どんどん現物を改善していける

CoCとアジャイル

(24)

• 既存システムには適用しづらい • 規約に従わないテーブルには設定が必要に • 使えない機能が出てきたりする • 製品の都合でCoCできないことがある • Oracleのテーブル名は30byteまで • CUSTOMER_SUPPORT_PERSON_CUSTOMER_SUPPOR T_GROUPS(47byte) • 複数系⇔単数形が分かりづらい • PERSON People⇔ とか • シンプルでない規約が悪影響を及ぼす例 • 切り替えは可能

Rails/CoCの罠

(25)

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

• Rubyが優れたCoCの実現に向いているから

– Rubyのダイナミックさ – 動的なメソッド追加

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

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

最後に

(26)

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

• Spring

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

• Ruby on Rails

– 圧倒的な開発効率を誇るWebアプリケーション開 発のためのWebフレームワーク

• Seasar2

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

(27)

自己紹介

• 竹添 直樹(たけぞう)

• NTTデータ先端技術勤務

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

• 著書

– Eclipseプラグイン開発徹底攻略(共著) – 入門Wiki

(28)

Seasar2とは

• 国産のDIコンテナ

– http://www.seasar.org/

– オープンソース

(29)

Seasar2の特徴

• 設定やコードを減らすための様々な工夫

– 利用者の使い勝手を重視

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

– Javaの安全性 – スクリプト言語のサクサク感

• 強力な開発支援ツール

– Eclipseプラグインを提供

(30)

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/

(31)

Seasar2のCoC的な機能

• AutoRegister

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

• S2Dao

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

• Chura

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

(32)

AutoRegister

(33)

AutoRegister

• DIコンテナでは依存性を管理するコンポーネントを設定ファ イルに記述する必要がある • コンポーネントを設定ファイルに記述するのは面倒! • 命名規約に従ってコンポーネントを自動登録 <component class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"> <initMethod name="addClassPattern">

<arg>"examples.jsf.logic.impl"</arg> <arg>".*LogicImpl"</arg>

</initMethod> </component>

(34)

S2Dao

(35)

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(); }

(36)

S2Daoの実装例(2)

• 明示的にSQLを記述することももちろん可能 • DAOクラス名_DAOメソッド名.sql

• SQLのコメントを使用して可変クエリを実現

SELECT emp.*, dept.dname dname_0, dept.loc loc_0 FROM emp, dept

WHERE empno = /*empno*/7788 AND emp.deptno = dept.deptno

パラメータ埋め込みの例

SELECT * FROM emp WHERE job = /*job*/'CLERK'

/*IF deptno != null*/AND deptno = /*deptno*/20/*END*/ 可変クエリの例

(37)

Chura

(38)

Chura

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

• 2種類の開発スタイル

– 開発生産性を重視「Super Agile」 • Teeda Extension • S2Dao – Java標準を重視「Easy Enterprise」 • JSF(Teeda) • JPA(Kuina-Dao)

• 開発ツール「Dolteng」

– Churaを具現化するEclipseプラグイン

(39)

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

• CoCやDIの欠点

– 規約を覚える必要がある – 動かしてみないとわからない ツールによる サポート id属性の命名規約によって Javaクラスとマッピング アイコン表示で マッピングされて

(40)

HOT Deploy ~動作確認を効率化

ソースコードを修正 APサーバを再起動 ひたすら待つ… 動作確認 OK!! ダメだったら 最初に戻る

HOT Deployなし HOT Deployあり

ソースコードを修正 動作確認 OK!! ダメだったら 再度修正 素早い開発サイクルを実現

(41)
(42)

Seasar2のまとめ

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

– スクリプト言語の迅速な開発スタイル – Javaによる静的な型チェック

• CoCの欠点をカバー

– ツールで規約の間違いを予防する(Dolteng) – 動作確認に要する時間の短縮(HOT Deploy)

(43)

是非お試しください

• The Seasar Project(Webサイト)

– http://www.seasar.org/

• Seasar-user(利用者向けメーリングリスト)

– https://ml.seasar.org/mailman/listinfo/seasar-user

• Seasar Conference 2007 Automn

(44)

最後に:CoCまとめ • Spring – Arid POJOsの適用がポイント • Ruby on Rails – Rubyのダイナミックさで強力なCoCを実現 – 制約事項を把握し、アジャイル手法とセットで • Seasar2 – スクリプト言語とJavaのいいところ取り – ツール等によってCoCの欠点をカバー

(45)

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

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

• 良くも悪くもアジャイル手法と良くマッチする

– アジャイル手法は大規模開発には厳しい一面 – コミュニケーションや迅速性に重きを置くため、 客先常駐や、時間単金での仕事となりやすい

• 10年前のJavaと同じ事を言われている

– 遅い、技術者が、お客が・・・つまり・・・?

(46)

最後に:Javaの現状と展望

• 最も無難な選択肢

– 超大規模~小規模、Web系、組み込み・・・

• Java屋の人口の多さ

– 技術者確保の容易さ(国内外問わず)

• 性能速度

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

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

(47)

ご清聴

ありがとう

参照

関連したドキュメント

ちな みに定理の名前は証明に貢献した数学者たち Martin Davis, Yuri Matiyasevich, Hilary Putnam, Julia Robinson の名字に由来する. この定理により Halt0 を

名刺の裏面に、個人用携帯電話番号、会社ロゴなどの重要な情

注:一般品についての機種型名は、その部品が最初に使用された機種型名を示します。

「30 ㎡以上 40 ㎡未満」又は「280 ㎡ 超」の申請住戸がある場合.

このように雪形の名称には特徴がありますが、その形や大きさは同じ名前で

備考 1.「処方」欄には、薬名、分量、用法及び用量を記載すること。

The purpose of this course is for students to acquire basic knowledge required for AI Solution

この届出者欄には、住所及び氏名を記載の上、押印又は署名のいずれかを選択す