講演内容(PDF形式)

Ruby×アジャイル
~ Rubyによる大規模業務システム開発の事例 ~
2013年1月23日
株式会社 テクノプロジェクト
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
1
テクノプロジェクトの概要
1984(S59)年設立
富士通40%、山陰中央テレビ40%、山陰合同銀行10%
本社:島根県松江市
当初
島根県庁、松江市、JA島根電算センター、山陰合同銀行等のメインフレーム系の開発・適用
富士通ソフトウエア事業部のデータベース開発
現在
売上比率 自治体:40%、医療:30%
文教:10%、ミドルウェア開発:10%、地場民需10%、機器ほか:10%
(最終ユーザ 地域:65%、県外:35%)
売上
2011年度 33.8億(内:機器2.0億)、経常利益0.9億
社員数 190名 (男性70%、女性30%)
主なソリューション
富士通系ビジネス:自治体系
電子申請サービス、県税、市町村向け富士通PKGの適用
自社PKG:i-City(CMS)、起債管理
文教系 図書館・博物館
医療系 電子カルテ、地域連携ネットワーク
自主ビジネス:CIMA(クリニック・小病院・療養型病院向け電子カルテ)、医療ネット
Ruby開発(業務系)、地域の製造業・サービス業向けソリューション開発
グループ企業
(株)マツケイ
1975(S45)年設立 2003年:全株式取得
データセンター(120ラック)、データパンチ、システム開発
社員数 120名(SE・PG50名、パンチャー35名、オペレーター20名、他15名)
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
2
Rubyへの取り組み
2007年
1月:Ruby開発へ参加決定、3月:Ruby勉強会開催(Rails)
7月:IPA自治体向け業務システムの実証実験採択(7千万)・・・高額合算(松江市)
2008年
売上 1億
施設予約、構成管理ツールなど
2009年
売上 1億
地域企業向けシステム開発、県の部局システム
県外IT企業支援、教育コース
マツケイ:県の先進開発補助)帳票エディターThinReports
2010年
売上 2億
地域企業向けシステム開発、県の部局システム
医療機関の薬剤管理システム
県の先進開発補助:本格的なアジャイル開発(製造業)
2011年
売上 2億
松江市)基幹業務PKGの補助システム+政策統計システム
県の部局システム(予算編成、2012.7本番稼働)
教育コース(FLMへ講師派遣)
2012年
スマホ向け観光基盤ソフト(島根県 Rhodes)
松江市)小中学校IDC統合(オープンソースグループウエアの改造)
地域医療情報ネットワーク (まめネット 2012.11 稼働)
Ruby技術者
開発経験あり
Ruby開発推進室
社内30名、協力企業30名
(全体の2割)
社内の開発ノウハウの蓄積と活用 ⇒ 開発標準 ⇒ 2012終了
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
3
Ruby+アジャイル
Ruby初体験
2007年度 IPA公募事業
医療・介護の高額合算システム(松江市殿)
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
4
Ruby業務システム開発の実績
2007年度 IPA公募事業
医療・介護の高額合算システム(松江市殿)
窓口業務
住民異動情報
市
民
医療
住民記録システム
国民健康保険システム
自己負担額・
資格情報
(医療保険)
支給額情報
自己負担額・
資格情報
後期高齢者システム
(医療保険75歳以上)
支給額情報
自己負担額・
資格情報
介護保険システム
支給額情報
既存業務システム
(メインフレーム・C/S)
相談支援
申請受付
証明書発行など
介護
高額
内部処理
自己負担額合算
支給決定
支払い登録
口座振替情報など
合算
システム
Ruby開発システム
・大量データ処理
・精度の高い帳票印刷
・再印刷やページ指定印刷
・バッチ処理環境
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
5
Ruby業務システム開発の実績
2007年 IPA(情報処理推進機構)実証事業
※国内で初の業務システムへの適用事例。2009年度より、本稼働。
IPAオープンソフトウェアセンターがRuby/Railsを基幹業務に
適用する実証事業を実施。
⇒ 松江市殿)医療・介護高額合算システム
(日本初:バッチ処理を含む基幹業務全体)
約50人月
2007.9~2008.3
オン:14本、バッチ:24本
業務開発チーム:6名
㈱テクノプロジェクト、㈱マツケイ
共通技術チーム:3名
㈱ネットワーク応用通信研究所
開発手法
ウォーターフォール
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
6
Railsでも、C/Sシステムと同様なキメ細かな画面
窓口に市民が来た時の対応
(上段:申請者情報,、中段:受給履歴、下段:申請内容)
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
7
メインフレームのオンライン構造
端末
オ
ン
ラ
イ
ン
制
御
主
プ
ロ
業務処理
業務処理
業務処理
DB
アクセス
ルーチン
データ
ベース
ネットワークDB
メッセージ振り分け
多重端末多重会話
画面定義体
画面定義体
画面定義体
クラサバ3階層開発
プレゼンテーション層
アプリケーション層
データベース層
RDB
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
8
Webアプリ(Railsシステム構造)
Ruby on Rails (機能分割:モデル・ビュー・コントローラ)
端末
R
A
I
L
S
制
御
W
E
B
サ
|
バ
Apache
コントローラ
コントローラ
コントローラ
業務処理
業務処理
業務処理
モデル
Active
Record
ビュー
ビュー
ビュー
画面定義体
画面定義体
画面定義体
データ
ベース
MySQL
※Ruby on Rails
M:モデル(DBマクロ) 検索・挿入・更新・削除のSQL(一部業務処理を含む)
V:ビュー(画面定義) HTML・ヘルパー ・・・ HTMLエディター(Webデザイナ)
C:コントローラ(オンライン制御・業務処理) ・・・ 業務ロジック
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
9
開発標準:COBOLerの復活(2007~)
ベテランSE(COBOLer)がWebシステムの開発に参加できる
①ウォータフォール開発 (設計⇒製造⇒テスト)
②厳格なコーディング規約 (Rubyの自由度をなくす)
③日本語のDB項目名称(設計書とソースの見易さ)
④SQL記述(判り易さ、但し便利な部品が使えない)
⑤バッチ処理も同一言語で開発
⑥構造化設計(業務ロジック重視、従来のドキュメント類)
⑦少ない部品(少量の部品から始める、覚え易さ)
⑧画面定義(HTML)は、専任化:Webデザイナー
⑨クラス設計:テーブル毎の業務ロジックを含めたアクセスルーチン
COBOLer向けRuby/Rails教育コース by テクノプロジェクト
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
10
Ruby+アジャイル
アジャイル開発
2010年 県の先進開発補助:本格的なアジャイル開発(製造業)
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
11
スプリントプランニング
スプリントとは、繰返し開発の1回分、1~4週間
スプリントの開始時に、顧客を含め半日から1日掛けて、
ユーザストリィ分け(顧客仕様の詳細化)とそのタスク
Copyright(c)2012 Techno Project. Inc.. All Rights Reserved.
分け(数時間から1日程度の作業量)を行う
タスクボード
ユ
ー
ザ
ス
ト
ー
リ
ィ
(
上
か
ら
優
先
度
の
高
い
順
番
)
タスク (左から優先度の高い順番)
作業項目、作業予定時間、完了条件
Copyright(c)2012 Techno Project. Inc.. All Rights Reserved.
終了分
(中央→右へ)
スプリントバーンダウンチャート
換タ
算ス
しク
ての
グ消
ラ化
フ状
表況
示を
す残
る時
間
に
1スプリント期間を日付ごとに表示
Copyright(c)2012 Techno Project. Inc.. All Rights Reserved.
スタンドアップミーティング
Copyright(c)2012 Techno Project. Inc.. All Rights Reserved.
ペアワーク
Copyright(c)2012 Techno Project. Inc.. All Rights Reserved.
リリース振り返り
時系列に、「KPT(keep,Problem,Try)」「スプリントバーンダウンチャ
ート」「取り入れたプラクティス」などを壁に貼り、良かったこと/悪か
ったこと をふりかえった。
Copyright(c)2012 Techno Project. Inc.. All Rights Reserved.
開発標準:コストダウン(2010~)
アジャイル+業務システム開発+請負契約
開発手法
①開発方式とドキュメント
②開発チーム
③テスト駆動開発
④ソースレビューとペアプログラミング
ツール
⑤プロジェクト管理・開発ツール
⑥外部ライブラリィの活用
⑦帳票作成ツール
参考 業務システム (ここでの想定)
・ 業務処理が複雑(処理手順が多階層化している、例外処理がある)
・ きめ細かな帳票(チェック用、管理用、お客様用)
・ 他システム連携
Copyright(c)2012 TechnoProject Inc, Ltd. All Rights Reserved.
18
開発手法
①開発方式とドキュメント
(1)設計:ウォーターフォール
業務システムは、一般的に制度・法律・慣習が詰まった複雑なもの。
DBアクセスでは、多くの更新系処理が発生する。イレギュラー処理。
⇒ 設計が重要、特にDB設計
最終ドキュメント:メンテナンス手引書として整備(含む納品物)
構成品管理表、基本設計書・詳細設計書、操作・運用マニュアル
※開発途中は、ホワイトボードのデジカメ化でもOK
(2)実装(PG設計~結合テスト):アジャイル=素早く、繰り返し
⇒ 繰り返しの中で、早め早めの顧客確認(満足度)と開発チームの整合性確認
※顧客リリースは2~3カ月の単位で段階的に行う。
実装は2~3週単位に。進捗と品質の確認を行う。
参考
COBOLでは
全工程(100%)
設計工程(基本設計、詳細設計)
30%
製造工程(PG設計、プログラミング、単体テスト)
40%
テスト工程(結合テスト、総合テスト、運用テスト、操作研修)
30%
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
19
開発手法
②開発チーム
短期開発(1年以内):最初から全員投入
⇒ チームワーク・コミュニケーション
PGの役割:SE補助作業・業務習得・先行開発
“若手エンジニアの業務ノウハウ習得の場” ← 全工程に参加
朝会(スタンドアップミーティング):短時間
→
一人一人の進捗と予定の報告
× ダイナミックな作業割り振り
(朝会で調整。前提:全員が同一な業務ノウハウ)
⇒ 複雑な業務では、不可能である。
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
20
開発手法
③テスト駆動開発
テスト手続きの登録 ⇒ 次にロジック記述 &自動テスト(含む、テストデータ登録)
効果:品質向上(テストの自動化+ソースの最適化→リファクタリング)
単体・機能テスト(ロジックの内部仕様) 評価:△ ← 生産性と効果より
活用:ホワイトボックステスト(モデル・ビュー・コントローラ・モジュール単位)
繰り返し[ 1テストケース登録 → ロジック記述(数ステップ)→ リファクタリング ]
※複雑なロジックや主要な計算処理(延滞金・課税額など)に適している
機能テスト(業務の外部仕様)
評価:◎
活用:ブラックボックステスト → ユーザサイドのテスト
レグレッションテストの容易性、ライフサイクルでの活用 ⇒ 品質向上
Copyright(c)2012 TechnoProject. Inc. All Rights Reserved.
21
開発手法
④ソースレビューとペアプログラミング
(1)基本パターン
ソースレビュー
コーディング規約遵守、第三者の目に触れることが重要
タイミングは単体テストの終了段階
開発者:中級レベル以上は単独開発が基本
(2)オプション
ペアプログラミング
開発者:初級レベル(Rails初心者、新入社員アソシエイト、業務初めて)
→ 早期立ち上げを目的に、中級レベルのエンジニアがトレーナ役を
担当し、つまづきを最小化する
初心者が質問しやすい環境を強制的に作る
Copyright(c)2012 TechnoProject. Inc. All Rights Reserved.
22
ツール
⑤プロジェクト管理・開発ツール
Ruby:1.9 系+ Rails:3系
Redmine
案件管理・ToDo
Subversion ソース履歴管理(Redmineと連携)
NetBeans 開発ツール(IDE+ソースエディター)
Cucumber 機能テスト用ツール(画面単位、外部:ユーザサイドテスト)
日本語によるテスト仕様記述
Rspec
単体テスト用ツール(ロジック単位、ホワイトボックステスト)
Capistrano デプロイ(本番環境への更新モジュール反映)
※データベース
新規開発 → MySQL・PostgreSQL
既存クラアントサーバシステムのWeb化 → Oracle・SQLSeverの継続使用
複合キーのサポート部品あり
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
23
ツール
⑥外部ライブラリィの活用
便利な部品の活用(ネット上+社内実績)
部品の活用度に応じて、生産性・品質向上
※ 部品の管理が重要
活用ノウハウ・逆引き・更新情報・ライセンス(MIT)・実績プロジェクト
利用者・使用上の注意事項・Ruby/Railsのバージョン 等
例:Pagenation 帳票・画面の一覧表および次ページ送りの部品
ライブラリィ : GEMパッケージ、Railsプラグイン
⑦帳票ツール
・ Ruby用:ThinReports(帳票エディタ、帳票作成)
オープンソースで㈱マツケイより提供(TPJグループ企業)
HTML5ビューア開発・PDF化機能・外字サポート
帳票作成ライブラリィ
Copyright(c)2012 TechnoProject. Inc. All Rights Reserved.
24
2012年2月 第四回福岡Ruby大賞で「大賞」を受賞
オープンソース帳票ツール : シンレポーツ
日高克也氏
Matsukei Open Source Center
http://osc.matsukei.net/
Copyright(c)2012 TechnoProject. Inc. All Rights Reserved.
日経BPより
25
繰返し回数の最適化
繰返し頻度(顧客リリース回数)
高
業
務
ノ
ウ
ハ
ウ
習
熟
度低
少
最少
少
多
多
少
最多
低
多
最少:プロト開発
設計工程で実業務相当の画面を
作成し、顧客確認(操作性)
→ 1回(設計+実装)
少 :スパイラル開発、サブシステム単位
設計1回 → 実装2~3回
基本設計1回
→ 2~3回(詳細設計+実装)
※1回目は主要画面中心
多 :アジャイル開発
基本設計1回
→ n回(詳細設計+m回(実装))
最多: “無謀”
高
プロジェクトチームの開発経験度
(Ruby/Railsアプリ、新技術を含む)
※ 実装:プログラミング・テスト・結合テスト
+顧客確認
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
26
繰返し回数の最適化
繰返し頻度(顧客リリース回数)
高
業
務
ノ
ウ
ハ
ウ
習
熟
度低
少
最少
少
多
多
少
最多
低
多
高
最少:プロト開発
設計工程で実業務相当の画面を
作成し、顧客確認(操作性)
→ 1回(設計+実装)
少 :スパイラル開発、サブシステム単位
設計1回 → 実装2~3回
基本設計1回
→ 2~3回(詳細設計+実装)
※1回目は主要画面中心
多 :アジャイル開発
基本設計1回
→ n回(詳細設計+m回(実装))
最多: “無謀”
プロジェクトチームの開発経験度
(Ruby/Railsアプリ、新技術を含む)
第三の軸
※ 実装:プログラミング・テスト・結合テスト
+顧客確認
顧客要件や利用者ニーズの変化のスピード
変化の速いネットビジネスなどは、
変化を吸収するフェーズ(繰り返し)を当初計画に盛り込む
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
27
大規模プロジェクト(20名以上)
周知徹底:ドキュメントが重要
⇒ ウォータフォール型の設計工程
プログラム設計以降をアジャイルで!
⇒ サブシステム単位のチーム編成
2~3分割して、繰り返し開発
1つのチーム編成
サブシステム単位に繰り返し開発
業務の流れに沿って、順番にリリース
早め早めに、顧客要求事項とアジャストする!
(メンバーの技術レベルの検証も兼ねて)
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
28
従来の契約書(成果物重視)
納品物:設計ドキュメント(分割検収)
⇒ ウォータフォール型の設計工程
(設計工程終了時:設計ドキュメントの納品)
プログラム設計~結合テストをアジャイルで!
但し、正式リリースではなく、顧客仕様確認のリリース
繰り返し回数は、2~3カ月に1回程度
早め早めに、顧客要求事項とアジャストする!
テスト工程(結合テスト + システムテスト)
⇒ テスト仕様書・成績書(納品物)
自動テストツール(日本語によるテスト仕様記述)
成績書はログ(多少、編集が必要)
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
29
ウォータフォールに
アジャイルを注入
事例1:島根県)予算編成システム
事例2:松江市)政策統計システム
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
30
予算編成 開発の進め方(1/3)
スケジュール
2010年度
2011年度
1月
4月
2012年度
7月
10月
1月
4月
7月
1年5ヶ月 / ウォーターフォール型開発
開発範囲の
確定
要件
定義
設計書作成
仕様凍結
概要設計
詳細設計
総合
テスト
プログラム開発・単体テスト
試行
運用
本運用
標準化
結合テスト
標準化工程の設置によるルール作り
早期の開発着手によるルールの検証
成果物(設計書、ソース)の
バラつきを抑止
手戻りによるリスク(コスト増大、
納期圧迫)を抑止
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
31
予算編成 開発の進め方(2/3)
Point①:標準化工程の設置
開発に使用する「もの」だけでなく、「もの」の使い方も含めて作成。
規約作成
共通部品作成
画面・帳票設計規約
(レイアウト、ドキュメント記述)
画面HTML作成手引き
(テンプレート、記述ルール)
画面HTML部品集
(コントロールとコードを集約)
Rubyコーディング規約
既存システムの踏襲
既存共通部品の活用
(他システムでの作成分)
使用手引書の作成
(処理、引数・戻り値、使用例)
プロトタイプ作成
プロトタイプの作成
(画面・帳票より選定)
プロトタイプ説明書の作成
(コード解説)
逆引き一覧
(処理と説明書の紐付け)
お客様に実機上で画面の見栄えや操作性を確認頂く。
システムで実現する範囲と制限事項として了承頂く範囲とを合意。
(コストや品質の側面から)
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
32
予算編成 開発の進め方(3/3)
Point②:開発の早期着手
開発機能をサブシステム単位に5グループに分割し、五月雨式に開発。
設計規約・開発規約
共通部品
機能
Grp①
概要設計
機能
Grp②
詳細設計
概要設計
フィードバック
同等処理が散乱!
部品化しよう!
プログラム開発・単体テスト
詳細設計
成熟したルールの
適用が可能
プログラム開発・単体テスト
・・・ ・・・ ・・・ ・・・ ・・・
機能
Grp⑤
概要設計
詳細設計
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
プログラム開発・単体テスト
33
松江市 政策統計システム
2010
10 11 12
1
2
3
4
5
2011
6 7
8
9
10 11 12
1
2
★仕様凍結
2012
3 4
5
★納品
課題① ドキュメント(設計書)の必要性
(プ
トロ
ット
プタ
レイ
ビピ
ュン
ーグ
)
各課
ヒアリング
25課
運
用
(
仮
稼
働
)
ウォーターフォールによる全体工程の進行
要件
定義
イテレーションによる機能実装
実装1
約20業務
約50機能
…
課題②
要求実現に向けた
コストの可視化
総合
試験
実装
基本設計
実装X
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
…
松江市 政策統計システム
松浦松江市長
松江市は、「アジャイル開発」に
適した「松江モデル」の契約書を
作る。
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
まめネット
画像中継・診断
健診システム
専門の先生に画像を
診てもらいましょう。
医薬連携
薬局
感染症サーベイランス
この薬を飲んでいるなら、
○○は使えない。
!
この影は
○×■ですね
中核病院
掲示板
Free Board
診療所
地域連携パス
保健所
(行政)
検査機関
診療所
紹介状・予約
みんなで支えてくれて
安心です。
病院
紹介状
紹介状
島根太郎様カルテ
連携カルテ
診療所
病院
患者
●紹介状・予約の作成
●診療情報の共有
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
リハビリ病院
36
NPOしまね医療情報ネットワーク
通称:まめネット
Ruby×アジャイル(TDD)
Rspec & Cucumber 全面導入
結果:軌道修正(生産性が上がらない)
テスト手続きのコーディング量
基盤システムは、ある程度踏襲
業務サブシステムは、従来のテスト工程
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
Rubyの開発とプロフェッショナル
Ruby 生産性が良い(省ステップ)
ツールが充実→アジャイル
自動テスト
プロフェッショナル
システム工学(高品質・高生産性)
・品質に対するこだわり
・納期(スケジュール管理)
・テストの本質
・ドキュメントの重要性 ・・・etc
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
誤解 ?!
繰返し頻度(顧客リリース回数)
高
業
務
ノ
ウ
ハ
ウ
習
熟
度低
少
最少
少
多
多
少
最多
低
多
高
プロジェクトチームの開発経験度
(Ruby/Railsアプリ、新技術を含む)
最少:プロト開発
設計工程で実業務相当の画面を
作成し、顧客確認(操作性)
→ 1回(設計+実装)
少 :スパイラル開発、サブシステム単位
設計1回 → 実装2~3回
基本設計1回
→ 2~3回(詳細設計+実装)
※1回目は主要画面中心
多 :アジャイル開発
基本設計1回
→ n回(詳細設計+m回(実装))
最多: “無謀”
※ 実装:プログラミング・テスト・結合テスト
+顧客確認
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
請け負い契約(納期・品質・コスト)
最少:プロト開発
設計工程で実業務相当の画面を
作成し、顧客確認(操作性)
→ 1回(設計+実装)
少 :スパイラル開発、サブシステム単位
設計1回 → 実装2~3回
基本設計1回
→ 2~3回(詳細設計+実装)
※1回目は主要画面中心
多 :アジャイル開発
基本設計1回
→ n回(詳細設計+m回(実装))
最多: “無謀”
※ 実装:プログラミング・テスト・結合テスト
+顧客確認
プロフェッショナル集団
経験豊富なエンジニア
アマチュア
(TDD・繰返しに依存)
ビギナー/非ビジネス
(TDD・繰返しに依存)
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
まとめ
技術(テクノロジー)
オープンソースの変化
品質向上・機能アップ
個人のボランティから企業のバックアップ(ビジネス)へ
趣味の世界 ⇒ サポートビジネスへ進化
※無償あるいは低価格ソフト
チャンス(社会のニーズ)
①米国で認められた製品の逆輸入
②競争激化によるコストダウン要求
有償ソフトから無償あるいは低価格ソフトへ
OSから言語まで、すべてのミドル製品がオープンソースで揃う
③国の支援(世界で通用する国産技術)
経済産業省(IPA)や総務省の支援
④クライアントサーバシステムをWeb化するタイミング
⑤中小ITベンダーが大手の下請けから自立
⑥国・地方自治体での調達指針
2006年総務省ガイドライン:オープンな標準製品
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.
41
http://www.tpj.co.jp
Copyright(c)2012 TechnoProject Inc. All Rights Reserved.
42