第19回 スクエア ｆｒｅｅ セミナー

東京日本橋 久松町区民会館

COBOLエンジニアをRubyエンジニアに！
～ Ruby業務システム開発 ～２０１２年５月２５日
株式会社 テクノプロジェクト
代表取締役社長 吉岡 宏
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.

1テクノプロジェクトの概要
１９８４（Ｓ５９）年設立

富士通４０％、山陰中央テレビ４０％、山陰合同銀行１０％
本社：島根県松江市

売上

２０１１年度 ３３．８億（内：機器２．０億）

社員数 １９０名
主なソリューション
自主ビ

ＣＩＭＡ（クリニック・小病院・療養型病院向け電子カルテ）、医療ネット
Ｒｕｂｙ開発（業務系）、地域の製造業・サービス業向けソリューション開発
グループ企業(株)マツケイ

ＦＣＡ会員 １９７５（Ｓ４５）年設立 ２００３年：全株式取得
データセンター、データパンチ、システム開発
社員数 １２０名

Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.

2

Ｒｕｂｙへの取り組み
２００７年

１月：Ｒｕｂｙ開発へ参加決定、３月：Ｒｕｂｙ勉強会開催（Ｒａｉｌｓ）
７月：ＩＰＡ自治体向け業務システムの実証実験採択（７千万）・・・高額合算（松江市）

２００８年

ＩＰＡのＲｕｂｙ調査事業、施設予約など

２００９年

地域企業向けシステム開発、県の部局システム
県外ＩＴ企業支援、教育コース
マツケイ：県の先進開発補助：帳票エディターＴｈｉｎＲｅｐｏｒｔｓ

２０１０年

地域企業向けシステム開発、県の部局システム
医療機関の管理システム
県の先進開発補助：アジャイル開発（製造業）

２０１１年松江市）ＭＩＳＡＬＩＯ周辺システム、県の部局システム（予算編成）
教育コース

２０１２年

全県医療ネットワーク、島根県）予算編成

Ｒｕｂｙ開発推進室

社内の開発ノウハウの蓄積と活用 ⇒ 開発標準作成 ⇒ ２０１２終了

Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.

3

Ｒｕｂｙ業務システム開発の実績
2007年度 IPA公募事業

医療・介護の高額合算システム（松江市殿）
窓口業務

住民異動情報

市民医療

住民記録システム

国民健康保険システム

自己負担額・資格情報（医療保険）支給額情報
自己負担額・資格情報

後期高齢者システム（医療保険７５歳以上）

支給額情報
自己負担額・資格情報

介護保険システム

支給額情報

既存業務システム（メインフレーム・C/S）

相談支援
申請受付
証明書発行など

介護
高額

内部処理
自己負担額合算
支給決定
支払い登録
口座振替情報など

合算ｼｽﾃﾑRuby開発ｼｽﾃﾑ

・大量ﾃﾞｰﾀ処理・精度の高い帳票印刷
・再印刷やﾍﾟｰｼﾞ指定印刷・バッチ処理環境

Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.

4Ｒｕｂｙ業務システム開発の実績
2007年 IPA（情報処理推進機構）実証事業
IPAオープンソフトウェアセンターがRuby/Railsを基幹業務に適用する実証事業を実施。
⇒ 松江市殿）医療・介護高額合算システム（日本初：バッチ処理を含む基幹業務全体）
約５０人月
２００７．９～２００８．３
オン：１４本、バッチ：２４本
業務開発チーム：６名㈱テクノプロジェクト、㈱マツケイ
共通技術チーム：３名㈱ネットワーク応用通信研究所

Copyright(c)2012 Techno Project. Inc.. All Rights Reserved.

5

Railsでも、C/Sシステムと同様なキメ細かな画面
窓口に市民が来た時の対応（上段：申請者情報,、中段：受給履歴、下段：申請内容）
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.

6

メインフレームのオンライン構造

端末

オン
ライン
制御主プ
ロ

業務処理
業務処理

業務処理

DB
アクセス
ルーチン

データベース
ネットワークDB

メッセージ振り分け
多重端末多重会話

画面定義体
画面定義体
画面定義体

クラサバ３階層開発

プレゼンテーション層

アプリケーション層

データベース層RDB

Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.

7

Webアプリ（Railsシステム構造）
Ruby on Rails （機能分割：ﾓﾃﾞﾙ・ﾋﾞｭｰ・ｺﾝﾄﾛｰﾗ）

端末

RAI
L
S
制御W
E
B
サ｜バApache

ｺﾝﾄﾛｰﾗｺﾝﾄﾛｰﾗｺﾝﾄﾛｰﾗ

業務処理
業務処理
業務処理

モデルActive
Record

ビュー
ビュー
ビュー
画面定義体
画面定義体画面定義体

データベースMySQL※Ｒｕｂｙ ｏｎ Ｒａｉｌｓ
M：モデル（ＤＢマクロ） 検索・挿入・更新・削除のＳＱＬ（一部業務処理を含む）
V：ビュー（画面定義） HTML・ヘルパー ・・・ HTMLｴﾃﾞｨﾀｰ（Webﾃﾞｻﾞｲﾅ）
C：コントローラ（オンライン制御・業務処理） ・・・ 業務ロジック
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.

8

開発標準：ＣＯＢＯＬｅｒの復活（2007～）
ベテランＳＥ（ＣＯＢＯＬer)がWebシステムの開発に参加できる①ウォータフォール開発 （設計⇒製造⇒テスト）②厳格なコーディング規約 （Ｒｕｂｙの自由度をなくす）③日本語のＤＢ項目名称（設計書とソースの見易さ）④ＳＱＬ記述（判り易さ、但し便利な部品が使えない）⑤バッチ処理も同一言語で開発⑥構造化設計（業務ロジック重視、従来のﾄﾞｷｭﾒﾝﾄ類）⑦少ない部品（少量の部品から始める、覚え易さ）⑧画面定義（HTML）は、専任化：Webﾃﾞｻﾞｲﾅｰ⑨クラス設計：ﾃｰﾌﾞﾙ毎の業務ﾛｼﾞｯｸを含めたｱｸｾｽﾙｰﾁﾝ
ＣＯＢＯＬｅｒ向けＲｕｂｙ／Ｒａｉｌｓ教育コース ｂｙ テクノプロジェクト
Copyright(c)2012 Techno Project. Inc.. All Rights Reserved.

9

COBOLエンジニア向けRuby教育（１）ネック・オブジェト指向の概念が判らない（クラス、メソッド、継承、・・・）

・サブルーチン（外部ライブラリィ）が膨大・命令が多い（業務システムでは不要な物が多い：文字列操作）
・Rails Webアプリの構造・仕組みが判らない
COBOLエンジニア向けRuby開発入門（Ruby編）
・COBOLコーディングとの比較
・言語の基礎

１日コース

メソッド・変数・定数・配列・予約語
社員台帳ﾌｧｲﾙ

所属資格情報ﾌｧｲﾙ

演習問題

CSV

CSV

Rubｙプログラム

部門別社員台帳

CSV

Copyright(c)2012 Techno Project. Inc.. All Rights Reserved.

入力データ読み込み読み込み終了判定
件数カウンタ
入力データ配列
マッチングキーの判定
繰り返し処理ファイル出力
数値計算

10

COBOLエンジニア向けRuby教育（２）COBOLエンジニア向けRuby開発入門（Ruby on Rails編）
・開発環境（フォルダ・プロジェクト・ソースコード）

１日コース

・DB（データベース作成・DB操作コマンド・DBアクセスルーチンActiveRecord）
・Webアプリの構造、Railsの仕組み（コントローラとビュー）
演習問題

・自動生成機能で作成したM・V・Cの修正（機能追加）
・見やすい多機能な画面の作成 ⇒ スタイルシート
・画面の細かな制御（項目の入力抑制・色変更・数値編集・日付編集など）

通常のRuby・Ruby on Railsの研修を受講する※当初のネックが解消された状態。
⇒ オブジェクト指向の特徴を活かしたWebアプリの開発スキルを習得できる。

Copyright(c)2012 Techno Project. Inc.. All Rights Reserved.

11

開発標準への不満
面白くない！！

・新しい便利なものが使えないライブラリィ、ツールアジャイル開発

・製造業の製造機器管理システム
・スクラムの伝道師による指導
・島根県の公募事業（半額補助）

熱い集団

==>

開発の楽しさ・新しいことへのチャレンジ・英文サイトの調査（米国発信の情報が多い）

でも、全てのエンジニアが出来ることではない。
アジャイルは少人数のチームだから出来る。
Copyright(c)2012 Techno Project. Inc.. All Rights Reserved.

12スプリントプランニング

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.

スプリントレビュー

Copyright(c)2012 Techno Project. Inc.. All Rights Reserved.

ペアワークCopyright(c)2012 Techno Project. Inc.. All Rights Reserved.

リリースふりかえり

時系列に、「KPT」「スプリントバーンダウンチャート」「取り入れたプラクティス」などを壁に貼り、良かったこと/悪かったこと をふりかえった。
Copyright(c)2012 Techno Project. Inc.. All Rights Reserved.

開発標準：コストダウン（2010～）
アジャイル＋業務システム開発＋請負契約
開発手法①開発方式とドキュメント②開発チーム③テスト駆動開発④ソースレビューとペアプログラミング

ツール⑤プロジェクト管理・開発ツール⑥外部ライブラリィの活用⑦帳票作成ツール
参考 業務システム （ここでの想定）
・ 業務処理が複雑（処理手順が多階層化している、例外がある）
・ きめ細かな帳票（チェック用、管理用、お客様用）
・ 他システム連携
Copyright(c)2012 TechnoProject Inc, Ltd. All Rights Reserved.

19

開発手法
①開発方式とドキュメント（１）設計：ウォーターフォール
業務システムは、一般的に制度・法律・慣習が詰まった複雑なもの。
DBアクセスでは、多くの更新系処理が発生する。イレギュラー処理。

⇒ 設計が重要、特にDB設計
最終ﾄﾞｷｭﾒﾝﾄ：ﾒﾝﾃﾅﾝｽ手引書として整備（含む納品物）
構成品管理表、基本設計書・詳細設計書、操作・運用ﾏﾆｭｱﾙ※開発途中は、ホワイトボードのデジカメ化でもOK（２）実装（ＰＧ設計～結合テスト）：アジャイル＝素早く、繰り返し⇒ 繰り返しの中で、早め早めの顧客確認（満足度）と開発チームの整合性確認※顧客リリースは２～３カ月の単位で段階的に行う。
実装は２～３週単位に。進捗と品質の確認を行う。
参考

COBOLでは全工程(100％)
設計工程（基本設計、詳細設計）
30％
製造工程（PG設計、プログラミング、単体テスト）
40％
テスト工程（結合テスト、総合テスト、運用テスト、操作研修）
30％
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.

20

開発手法
②開発チーム短期開発（１年以内）：最初から全員投入⇒ チームワーク・コミュニケーション
ＰＧの役割：ＳＥ補助作業・業務習得・先行開発“若手エンジニアの業務ノウハウ習得の場” ← 全工程に参加
朝会（ｽﾀﾝﾄﾞｱｯﾌﾟﾐｰﾃｨﾝｸﾞ）：短時間→一人一人の進捗と予定の報告
× ダイナミックな作業割り振り（朝会で調整。前提：全員が同一な業務ノウハウ）⇒ 複雑な業務では、不可能である。

Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.

21

開発手法
③テスト駆動開発
テスト手続きの登録＆自動テスト（含む、ﾃｽﾄﾃﾞｰﾀ登録）
効果：品質向上（テストの自動化＋ソースの最適化→リファクタリング）
単体・機能テスト（ロジックの内部仕様） 評価：△ ← 生産性と効果より
活用：ホワイトボックステスト（ﾓﾃﾞﾙ・ﾋﾞｭｰ・ｺﾝﾄﾛｰﾗ・ﾓｼﾞｭｰﾙ単位）
繰り返し[ １ﾃｽﾄｹｰｽ登録 → ﾛｼﾞｯｸ記述（数ｽﾃｯﾌﾟ）→ リファクタリング ]機能テスト（業務の外部仕様）
評価：◎
活用：ブラックボックステスト → ユーザサイドのテスト
レグレッションテストの容易性、ライフサイクルでの活用 ⇒ 品質向上

Copyright(c)2012 TechnoProject. Inc. All Rights Reserved.

22

開発手法
④ソースレビューとペアプログラミング（１）基本パターン
ソースレビュー

コーディング規約遵守、第三者の目に触れることが重要
タイミングは単体テストの終了段階
開発者：中級レベル以上は単独開発が基本（２）オプション
ペアプログラミング
開発者：初級レベル（Rails初心者、新入社員アソシエイト、業務初めて）→ 早期立ち上げを目的に、中級レベルのエンジニアがトレーナ役を担当し、つまづきを最小化する
初心者が質問しやすい環境を強制的に作る

Copyright(c)2012 TechnoProject. Inc. All Rights Reserved.

23

ツール
⑤プロジェクト管理・開発ツール
Ruby：1.9 系+ Rails：3系

Redmine案件管理・ＴｏＤｏSubversion ソース履歴管理（Ｒｅｄｍｉｎｅと連携）
NetBeans 開発ツール（ＩＤＥ＋ｿｰｽｴﾃﾞｨﾀｰ）
Cucumber 結合テストツール（画面単位、外部：ﾕｰｻﾞｻｲﾄﾞﾃｽﾄ）
日本語によるテスト仕様記述

Capistrano デプロイ（本番環境への更新モジュール反映）※データベース
新規開発 → ＭｙＳＱＬ･ＰｏｓｔｇｒｅＳＱＬ
既存ｸﾗｱﾝﾄｻｰﾊﾞｼｽﾃﾑのＷｅｂ化 → Ｏｒａｃｌｅ・SQLSeverの継続使用
複合キーのサポート部品あり

Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.

24

ツール
⑥外部ライブラリィの活用
便利な部品の活用（ネット上＋社内実績）

部品の活用度に応じて、生産性・品質向上※ 部品の管理が重要
活用ﾉｳﾊｳ・逆引き・更新情報・ライセンス(ＭＩＴ)・実績プロジェクト
利用者・使用上の注意事項・Ｒｕｂｙ/Ｒａｉｌｓのﾊﾞｰｼﾞｮﾝ 等

例：Ｐａｇｅｎａｔｉｏｎ 帳票・画面の一覧表および次ページ送りの部品

ライブラリィ ： GEMパッケージ、Railsプラグイン⑦帳票ツール・ Ｒｕｂｙ用：ＴｈｉｎＲｅｐｏｒｔｓ（帳票ｴﾃﾞｨﾀ、帳票作成）
ｵｰﾌﾟﾝｿｰｽで㈱ﾏﾂｹｲより提供（TPJグループ企業）
ＨＴＭＬ５ﾋﾞｭｰｱ開発・ＰＤＦ化機能・外字サポート
帳票作成ライブラリィ
Copyright(c)2012 TechnoProject. Inc. All Rights Reserved.

25

２０１２年２月 第四回福岡Ruby大賞で「大賞」を受賞

オープンソース帳票ツール ： シンレポーツ

日高克也氏

Matsukei Open Source Center
http://osc.matsukei.net/
Copyright(c)2012 TechnoProject. Inc. All Rights Reserved.

日経BPより26

繰返し回数の最適化
繰返し頻度（顧客リリース回数） 最少：プロト開発
高少業
務ノウ
ハウ
習熟度

最少
少多多
少最多

多低低高
プロジェクトチームの開発経験度（Ruby/Railsｱﾌﾟﾘ、新技術を含む）
第三の軸

設計工程で実業務相当の画面を作成し、顧客確認（操作性）→ １回（設計＋実装）
少 ：スパイラル開発、サブシステム単位
設計１回 → 実装２～３回
基本設計１回→ ２～３回(詳細設計＋実装)※１回目は主要画面中心
多 ：アジャイル開発
基本設計１回→ ｎ回(詳細設計＋ｍ回(実装))
最多： “無謀”※ 実装：ﾌﾟﾛｸﾞﾗﾐﾝｸﾞ･ﾃｽﾄ･結合ﾃｽﾄ＋顧客確認

顧客要件や利用者ニーズの変化のスピード
変化の速いネットビジネスなどは、変化を吸収するフェーズ（繰り返し）を当初計画に盛り込む
Copyright(c)2012 TechnoProject.Inc. All Rights Reserved.

27

新システム分野への展開
Ruby業務システム開発
・初期コストが少ない・・・全てオープンソースで構築できる（DBも）・テストが容易である・・・Rails + アジャイル ⇒ 短期繰り返し開発

非定型の業務へ・EXCELを使った統計分析の報告業務・・・担当者の交替により継続性がなくなる
定期的な報告時の基礎データをシステム化し、継続性のある報告（質の向上）・エビデンスのための定期的な記録作成
点検・ヒアリング（装置類・システム・プロジェクト・組織・企業）をシステム化し、時系列分析や情報の見える化が可能
・基幹の業務から外れたもの
トラブル報告、問題点管理、派遣社員の作業時間管理、・ ・ ・非定型業務のシステム化による生産性・業務品質の向上

Copyright(c)2012 TechnoProject Inc. All Rights Reserved.

28

http://www.tpj.co.jp

Copyright(c)2012 TechnoProject Inc. All Rights Reserved.

29