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

Similar documents
早分かりS2Dao

(Microsoft PowerPoint - ClickFramework.ppt [\214\335\212\267\203\202\201[\203h])

S2DaoでもN:Nできます

Seasar.NET入門

S2Dao入門

Dolteng Scaffoldに対する機能追加とマスタ-ディテールScaffoldの紹介

LightSwitch で申請システム Windows ストアアプリで受付システムを構築してみた 情報政策グループ技術職員金森浩治 1. はじめに総合情報基盤センターでは 仮想サーバホスティングサービスや ソフトウェアライセンス貸与といった さまざまなエンドユーザ向けサービスを行っている 上記のよう

JPA & Kuina-Dao入門

Rmenuフレームワーク

D5-2_S _003.pptx

パフォーマンス徹底比較 Seasar2 vs Spring 2006/04/12 株式会社電通国際情報サービスひがやすを株式会社アークシステム本間宏崇 Copyright the Seasar Foundation and the others all rights reserved.

JBoss と Arquillian で実現する 究極のテスト環境 レッドハット株式会社 JBoss サービス事業部 コンサルタント 山 田義和

Microsoft PowerPoint - Seasar2.5.ppt

PowerPoint プレゼンテーション

1. 開発ツールの概要 1.1 OSS の開発ツール本書では OSS( オープンソースソフトウェア ) の開発ツールを使用します 一般に OSS は営利企業ではない特定のグループが開発するソフトウェアで ソースコードが公開されており無償で使用できます OSS は誰でも開発に参加できますが 大規模な

10th Developer Camp - B5

03_さらなる開発生産性向上へ.pptx


スライド 1

T2でつなごう! -つなぐつながるWebフレームワーク「T2」の紹介

ETOS 画面の Web 化 / 帳票印刷のオープン化体験お試し変換サービスのご紹介 ACOS-4 システムの業務改善提案

Microsoft PowerPoint - KeySQL50_10g_vlo2.ppt

PowerPoint Presentation

IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

データベースアクセス

全部まとめてHOT deploy

Microsoft Word - tutorial3-dbreverse.docx

VVB6システムからSeasar2を用いたWebシステムへの移植

個人依存開発から組織的開発への移行事例 ~ 要求モデル定義と開発プロセスの形式化 による高生産性 / 高信頼性化 ~ 三菱電機メカトロニクスソフトウエア ( 株 ) 和歌山支所岩橋正実 1

スライド 1

Microsoft PowerPoint - A1-2_株式会社ネクスト_藤澤正通_S _005.pptx

ゆみる は こうげきりょく が 2 あがった!

ER/Studio Data Architect 2016 の新機能

HIGIS 3/プレゼンテーション資料/J_GrayA.ppt

WEBシステムのセキュリティ技術

3/7 マイグレーション開発方針 顧客名 0 作成者 根岸正 < プログラム移行方針 > システム名称 A-VX システムマイグレーション作成日 2015/09/01 < COBOL 資産のプログラム移行 > COBOLソース ( メインとCOPYLIB) を入力としてSCC 言語変換ツールにてVB

第 5 章 結合 結合のパフォーマンスに影響を与える結合の種類と 表の結合順序について内部動作を交えて 説明します 1. 結合処理のチューニング概要 2. 結合の種類 3. 結合順序 4. 結合処理のチューニングポイント 5. 結合関連のヒント

XAMPP で CMS のお手軽 テスト環境を手に入れよう 2011/5/21 上村崇 1

Ruby 2.3 のてざわり新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会

はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 S

スライド 1

Spring Frameworkに対するオラクルのサポート

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

Oracle SQL Developer Data Modeler

データベース暗号化ツール「D’Amo」性能検証

実践的なサンプルアプリをその場でコーディングします!

Java言語 第1回

Oracle SQL Developerの移行機能を使用したOracle Databaseへの移行

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

Java知識テスト問題

Python によるジオプロセシング スクリプト入門

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

Javaの作成の前に

2011 ST講座 入門講座 DICOM規格 初級 –DICOMをうまく使いこなす-

Spring Framework 2.0  デファクトスタンダードDIコンテナの現在と未来

お客様からの依頼内容とその現状

Webシステム授業資料

CLUSTERPRO MC ProcessSaver 2.3 for Windows 導入ガイド 第 5 版 2018 年 6 月 日本電気株式会社

Webシステム授業資料

JUnit 概要 2015/4/16 版今泉俊幸 2015 bbreak Systems 1

Enterprise Architect 12.0 機能ガイド

Si 知識情報処理

Transcription:

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

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

生産性に関する数字 プログラミングに要する時間 (h) 教育コスト 18 16 14 12 10 8 6 4 2 0 tcl rexx python perl Java C++ C 参考 :http://page.mi.fu-berlin.de/ prechelt/biblio/jccpprt_computer2000.pdf コース名 Java Java EE JUnit Struts Spring + ibatis 独自フレームワーク 期間 1week 1week 1week 3day コード量の違い コミュニケーションコスト (n= 人 ) コード行数 設定行数 Java 3,293 1,161 Ruby on Rails 1,164 113 n(n-1)/2 出展 : 人月の神話 著 Frederick Phillips,Jr. Brooks 出展 : Java から Ruby へ 著 Bruce A.tate 訳角谷信太郎 3

結局 生産性って 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 そして 楽しさにはビジネス価値があります - 結局 モチベーションこそがプログラマの生産性を左右するのです -- マーチン ファウラー

モチベーションを下げる作業 XML 地獄 5

なぜ XML 地獄が生まれたか DI(Dependency Injection) DI コンテナなし オブジェクト オブジェクト オブジェクト DI コンテナあり オブジェクト DI コンテナ オブジェクトオブジェクト オブジェクト間の関連をハードコーディング 密結合 ex) Spring での実現例 DI コンテナがオブジェクトの関連を管理 粗結合 <!-- 以下を 1 セットにして 延々と同じような記述が繰り返えされる --> <bean id="samplecontroller" class="sample.arid.samplecontroller" autowire="bytype" /> <bean id="player" class="sample.arid.samplelogicimpl" autowire="bytype" /> 6

Convention Over Configuration 設定より規約 (Convention) という考え方 適切な規約を守れば 面倒な設定をしなくても フレームワークが自動的に適切な設定をしてくれるという考え 概念的なもので それぞれのフレームワーク等によって 形態は異なる Ruby on Rails が広めた標語 Ruby on Rails だけでなく 様々なフレームワークに影響を及ぼした 7

CoC のメリット デメリット メリット 規約を覚えれば 定型的な作業が免除される 慣れれば慣れるほど生産性が上がる デメリット 複雑 非直感的な規約は覚えきれない 動作させてみるまで 分からない 8

主流な 3 つのフレームワーク Spring 世界的にデファクトな DI コンテナ Ruby on Rails 圧倒的な開発効率を誇る Web アプリケーション開発のための Web フレームワーク Seasar2 開発者の使い勝手を最重要視した国産の DI コンテナ 9

Spring Framework Spring を使っている技術者様に問いたい Bean 定義ファイル書きたいですか? 10

Arid POJOs Spring で CoC を実現するフレームワーク POJOs IN ACTION の著者 Chris Richardson 氏 Seasar2 の AutoRegister に近いイメージ <!-- 以下を 1 セットにして 延々と同じような記述が繰り返えされる --> <bean id="samplecontroller" class="sample.arid.samplecontroller" autowire="bytype" /> <bean id= samplelogic" class="sample.arid.samplelogicimpl" autowire="bytype" /> <! パッケージ名を指定するだけ --> <arid:define-beans package="sample.arid" autowire="bytype"/> 11

Spring summary Arid POJOs Spring で CoC を利用する場合 唯一の手段 過度のカスタマイズは逆に生産性を落とす Spring IDE の補完は無い Spring2.1(2007/08/22 時点 M3) JRuby 対応により 設定地獄から抜け出せる可能性はある 現状は JRuby 実装の Beans が DI できるとか 12

主流な 3 つのフレームワーク Spring 世界的にデファクトな DI コンテナ Ruby on Rails 圧倒的な開発効率を誇る Web アプリケーション開発のための Web フレームワーク Seasar2 開発者の使い勝手を最重要視した国産の DI コンテナ 13

自己紹介 名前 : 大西正太 ( 株 ) アスタリクス所属 CMS on RailsなOSS Rubricks コミッタ http://rubricks.org/ Bizca という SaaS グループウェア開発 http://bizca.jp/ 14

これを見てください O/R マッピングの記述を比較 CoC 有 Rails CoC 無 一昔前の Java 局所的に 15

Rails の O/R マッピング規約 テーブル名はモデル名の複数形にする 主キー名は id にする 外部キー名は 関連テーブル名単数形 _id にする 交差テーブル名は テーブル A_ テーブル B にする ITEMS テーブル id member_id MEMBERS テーブル id MEMBERS_GROUPS テーブル id member_id group_id GROUPS テーブル id Item クラス Member クラス Members Group クラス Group クラス 16

規約を守ると 勝手にモデル名の複数系のテーブルとマッピングされる カラム名と同名のメソッドが勝手にモデルに追加される 関連テーブルを簡単に芋づる式に引っ張れる class Item < ActiveRecord::Base end いきなり App からテーブルにアクセスできるようになっている 17

その他の Rails の規約 Controller URL とコントローラ名 / メソッド名を一致させる http://xxxx.com/controller 名 /action 名 View View テンプレートとアクション名を一致させる display アクション display.rhtml Struts のような紐付け XML がいらない 18

念のため 今の Java はそんなにひどくない Java も CoC 対応してきている S2 とか 後でたけぞうさんが説明してくれます Spring とか 木村さんが説明してくれました 19

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

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

ではどこにメリットがあるのか 変更に強い モデル情報を DB スキーマで一元化 DB が変わっても煩わしい作業が少ない 紐付け XML の変更やアクセッサの変更がない ツールでの再ジェネレートは必要ない モチベーションも低下しづらい 22

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

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

最後に なぜCoCはRailsで有名になったのか? Rubyが優れたCoCの実現に向いているから Ruby のダイナミックさ 動的なメソッド追加 静的型付言語には真似しきれない 当分はCoCのリーダーはRubyだと思う 25

主流な 3 つのフレームワーク Spring 世界的にデファクトな DI コンテナ Ruby on Rails 圧倒的な開発効率を誇る Web アプリケーション開発のための Web フレームワーク Seasar2 開発者の使い勝手を最重要視した国産の DI コンテナ 26

自己紹介 竹添直樹 ( たけぞう ) NTT データ先端技術勤務 Seasar プロジェクトでコミッタをしています 著書 Eclipse プラグイン開発徹底攻略 ( 共著 ) 入門 Wiki 27

Seasar2 とは 国産の DI コンテナ http://www.seasar.org/ オープンソース 日本語コミュニティの存在 28

Seasar2 の特徴 設定やコードを減らすための様々な工夫 利用者の使い勝手を重視 スクリプト言語と Java の良い部分を融合 Javaの安全性 スクリプト言語のサクサク感 強力な開発支援ツール Eclipse プラグインを提供 29

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

Seasar2 の CoC 的な機能 AutoRegister コンポーネントを自動登録する仕組み S2Dao AOP を活用したデータアクセスフレームワーク Chura CoC を活用したフルスタックフレームワーク 31

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

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

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

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

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*/ 36

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

Chura CoC を活用したフルスタックフレームワーク 2 種類の開発スタイル 開発生産性を重視 Super Agile Teeda Extension S2Dao Java 標準を重視 Easy Enterprise JSF(Teeda) JPA(Kuina-Dao) 開発ツール Dolteng Chura を具現化する Eclipse プラグイン 38

Dolteng ~ ツールで規約を見える化 CoC や DI の欠点 規約を覚える必要がある 動かしてみないとわからない ツールによるサポート id 属性の命名規約によって Java クラスとマッピング アイコン表示でマッピングされていることを可視化 39

HOT Deploy ~ 動作確認を効率化 HOT Deploy なし HOT Deploy あり ソースコードを修正 ソースコードを修正 ダメだったら最初に戻る AP サーバを再起動 ひたすら待つ ダメだったら再度修正 動作確認 動作確認 OK!! OK!! 素早い開発サイクルを実現 40

Seasar2 のまとめ 41

Seasar2 のまとめ スクリプト言語と Java のいいところ取り スクリプト言語の迅速な開発スタイル Javaによる静的な型チェック CoC の欠点をカバー ツールで規約の間違いを予防する (Dolteng) 動作確認に要する時間の短縮 (HOT Deploy) 42

是非お試しください 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

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

最後に :Ruby on Rails の現状と展望 実案件での開発実績がたまっていない 良くも悪くもアジャイル手法と良くマッチする アジャイル手法は大規模開発には厳しい一面 コミュニケーションや迅速性に重きを置くため 客先常駐や 時間単金での仕事となりやすい 10 年前の Java と同じ事を言われている 遅い 技術者が お客が つまり? 45

最後に :Java の現状と展望 最も無難な選択肢 超大規模 ~ 小規模 Web 系 組み込み Java 屋の人口の多さ 技術者確保の容易さ ( 国内外問わず ) 性能速度 生産性 10 倍でも性能 xx 倍はちょっと 顧客に対する認知度は抜群 46

ご清聴 ありがとう ございました