リアルビジネス Ruby
2010/11/5
cuzic
2
KOF2010 11/5 リアルビジネス Ruby
自己紹介
cuzic といいます
きゅーじっく と読みます
Ruby 暦は かれこれもう10年くらい
いろんな活動をしています。
Ruby 勉強会@尼崎
 10月まで「リファクタリング Ruby エディ
ション」
 の読書会をしていました。
 来年「メタプログラミング Ruby 」の読書会を
始めます。
 2011年1月29日(土) の予定・・・。
場所: JR 尼崎駅徒歩 2 分の好立地です
3
KOF2010 11/5 リアルビジネス Ruby
この発表で言いたいこと
不況が長引いていますよね・・・
システム開発案件の単価は下がる一方・・・
その一方コンプライアンスはうるさくな
って
ルーチンワークは増えまくり
仕事がラクになり、
会社も儲かる
すぐに使える
Ruby 実践事例を
紹介します。
4
KOF2010 11/5 リアルビジネス Ruby
キャズムを超えた Ruby
Ruby はキャズムを超えました
今は「アーリーマジョリティ」フェーズ
少しずつ、 Ruby での開発案件も増加の
傾向
イマコ
コ
イマコ
コ
5
KOF2010 11/5 リアルビジネス Ruby
Ruby は Ruby on Rails だけじゃない
Ruby on Rails
Ruby ブレイクの起爆剤
WEB アプリケーション開発フレームワーク
Java の 10 倍開発効率がいい!
けど、それだけじゃない!
Ruby は汎用プログラミング言語
ログ処理、ネットワークプログラミング、
外部の DLL の呼出し、
GUI プログラミング  etc 、 etc
他の言語にできて、 Ruby にできないことはな
い!
いざとなれば、 JRuby や IronRuby などもあるし!
6
KOF2010 11/5 リアルビジネス Ruby
では特に、いつ Ruby を使えるか?
開発の現場を効率化できる事例を3つ紹
介
GUI の画面項目の確認作業の自動化
テーブル定義書からの  SQL の自動生成
重複が多いプログラムの自動生成
事務処理業務の効率化事例を2つ紹介
複数の Excel ファイルの一括印刷
画面遷移が遅く手数が多い WEB 操作の自動
化
7
KOF2010 11/5 リアルビジネス Ruby
画面項目の確認作業の自動化(1)
やりたいこと
GUI 部品の Excel 管理表と、実際にできた
GUI 画面とで、不一致がないかどうかの確認
単一行テキスト単一行テキスト名前
複数行テキスト複数行テキスト
住所
送信
Excel 管理表で管理されている
コントロールやプロパティと
作成中のアプリケーションの
値が一致しているかを確認
アプリケーション1
8
KOF2010 11/5 リアルビジネス Ruby
画面項目の確認作業の自動化(2)
実現方法
Windows アプリケーションは GUI 部品のク
ラスやプロパティを外部から取得可能
  AutoITX : GUI 部品のクラスやプロパ
ティを
   取得する一連の関数を COM 技術で公
開
Excel も COM 技術で、値の取得等が可能
Win32OLE : COM 技術を Ruby から利用
する
ためのライブラリ
超便利。
9
KOF2010 11/5 リアルビジネス Ruby
テーブル定義書からの SQL の自動生成(1)
テーブルの定義から、 CREATE TABLE
等の SQL を自動生成
CREATE TABLE bookmarks (
id SERIAL PRIMARY KEY,
user_id INTEGER ,
url VARCHAR(255)
FOREIGN KEY (user_id) REFERENCES users(id)
);
10
KOF2010 11/5 リアルビジネス Ruby
テーブル定義書からの SQL 自動生成
(2)
Excel は Ruby から COM 経由で操作可
能
テキスト生成は Ruby の得意分野!
自動生成することで
2度手間を削減することができる
生成される SQL の品質を一定化できる
管理表の品質が保持されやすくなる
逆向きも可能
実際のデータベースからリバースエンジニア
リングして、テーブル定義書 (Excel) の生成
ActiveRecord と Win32OLE の夢の協演が実
11
KOF2010 11/5 リアルビジネス Ruby
重複が多いプログラムの自動生成(1)
GUI プログラムの自動生成
コントロールの配置などは非常に単純な作業のため
、
自動生成に向いている
テストプログラムの自動生成
特にユニットテストでの利用が多いようです
IronRuby 、 JRuby を活用して、他の言語のテスト
を Ruby で書くこともできます
WEB ・・・ Selenium Ruby で統合テストを作成可
能
Selenium ・・・ WEB ブラウザを利用したテスト自動化
ツール
Ruby on Rails の script/generate も自動生成の例
データベース関係は自動生成の宝庫
12
KOF2010 11/5 リアルビジネス Ruby
重複が多いプログラムの自動生成(2)
プログラム自動生成は何が良いか?
品質の底上げにつながる
似たコードが生成されるため、保守性が向上
ベテランのノウハウを新人に自然に伝授でき
る
Ruby on Rails ではコードの自動生成によって、
MVC Framework
Convention over Configuration
Test First
などのノウハウを自然に学べるよう工夫されている
ベテランにとってもツールに落とし込む過程
で、
互いの開発ノウハウ、規約を共有・洗練でき
13
KOF2010 11/5 リアルビジネス Ruby
事務処理業務の効率化事例 ( Excel
編)
複数の Excel 帳票を開いて、一括印刷
Ruby を使えば、複数の Excel ブック印刷も
簡単
Excel は非常に多くの作業を COM で公開
値の入力、取得、変更、セルの表示形式の設定
罫線の取得、生成。グラフの作成
オートシェイプの作成。色等の加工
画像処理(明るさの変更、グループ化画像を1枚
に)
filename1 = “ ~~ .xls” ; filename2 = “ ~~ .xls”
xl = WIN32OLE.new(“Excel.Application”)
xl.Workbooks.Add(filename1); xl.Workbooks.Add(filename2)
xl.Workbooks.each do |book|
book.PrintOut
end
14
KOF2010 11/5 リアルビジネス Ruby
事務処理業務の効率化事例( WEB 編)
WEB 基幹ソフト操作の自動化も可能
方法1: 情報取得のみであれば、
open-uri 、 mechanize などの利用が効果的
wget などの外部実行ファイルも開発効率向上に役
立つ
方法2: 操作が必要で、 Ajax などもあれ
ば・・・
InternetExplorer を COM 経由で制御
FireFox を Selenium 経由で制御
方法3: JavaApplet などもあれば・・・
開発者ならいろいろ方法がありますが、ただの利
用者なら汎用的な AutoIT などで、キーボード操
作、マウス操作をシミュレートして、自動操作す
15
KOF2010 11/5 リアルビジネス Ruby
まとめ
いろいろな 実際の業務をカイゼンする
方法を紹介してきました
時間が残っているようなので、
質疑応答
デモンストレーション
質疑応答(自問自答編)
の3つを用意しています。
16
KOF2010 11/5 リアルビジネス Ruby
  質疑応答
(自問自答編)
17
KOF2010 11/5 リアルビジネス Ruby
いろんなテクを紹介してきましたが・・
・
Q. うまく自動化して、効率化できる作業を
どうやって見つけるの?
作業をしている本人なら、わりかし簡単
ネックとなるのは「できるわけがない」という思い込み
実は意外に結構どんな業務でも自動化できちゃう
Q. 管理職が部下の効率化可能な業務を見つけ出
せるか?
これは案外 難しい・・・。
そもそも、管理職は部下の業務内容を知らない・・
・。
日常的な事務処理などのルーチンワークの詳細は知らない
どんな業務をしているか気軽に話せる関係が必要
18
KOF2010 11/5 リアルビジネス Ruby
なんで、 Ruby ?
Q. 今回紹介したのって COM とか結構
どの
言語からでも利用できるものが多いけど
、なんで、開発言語は Ruby を採用する
の?
A. 汎用性と生産性のバランスが優れているから
汎用性) シェルスクリプトや Makefile の代替から
      大規模アプリケーションまで可能
       Win32API の呼び出しや JRuby 、 IronRuby を利用
して、
      既存のアプリケーション資産の活用も可能であるため。
生産性) ハッシュや正規表現リテラルの存在
      豊富なライブラリの存在
      読みやすく、覚えやすい文法
19
KOF2010 11/5 リアルビジネス Ruby
タイトルは釣り?
Q. もっと開発案件としての Ruby の動
向とかを聞きたいんだけど
A. 残念ながら、 cuzic はその専門ではありま
せん。
それでも回答すると・・・
 ・一般に、 Ruby 採用事例は増えているようです。
 ・ただ、現状でも PHP 、 Java などの開発が主流です
 ・短納期、高機能の WEB システム開発が多いそう
 ・運用・デプロイ、レンタルサーバ業者の選定、
チーム開発 などに課題が多いようです
 ・全体に今は幻滅期を乗り越え、適切な要件の場合に
Ruby を採用しようとする機運が進んでいるようです。
20
KOF2010 11/5 リアルビジネス Ruby
自動化がうまくいかないような例は?
Q. 逆に自動化がうまくいかないような事例は?
A. いっぱいあります。
  特に複雑な判断が必要な場合は、自動化せ
ず、
  人手で介するようにした方がいいと思いま
す。
   典型的にはデータのクレンジング作業は、
人手で実施して、機械処理用のデータを入力し
たのちに、自動処理させるというのは1つのノ
ウハウです。
   あと、たとえ単純作業でも Java アプレッ
トとかネイティブでない GUI の場合は難しい
です。

リアルビジネスRuby

  • 1.
  • 2.
    2 KOF2010 11/5 リアルビジネスRuby 自己紹介 cuzic といいます きゅーじっく と読みます Ruby 暦は かれこれもう10年くらい いろんな活動をしています。 Ruby 勉強会@尼崎  10月まで「リファクタリング Ruby エディ ション」  の読書会をしていました。  来年「メタプログラミング Ruby 」の読書会を 始めます。  2011年1月29日(土) の予定・・・。 場所: JR 尼崎駅徒歩 2 分の好立地です
  • 3.
    3 KOF2010 11/5 リアルビジネスRuby この発表で言いたいこと 不況が長引いていますよね・・・ システム開発案件の単価は下がる一方・・・ その一方コンプライアンスはうるさくな って ルーチンワークは増えまくり 仕事がラクになり、 会社も儲かる すぐに使える Ruby 実践事例を 紹介します。
  • 4.
    4 KOF2010 11/5 リアルビジネスRuby キャズムを超えた Ruby Ruby はキャズムを超えました 今は「アーリーマジョリティ」フェーズ 少しずつ、 Ruby での開発案件も増加の 傾向 イマコ コ イマコ コ
  • 5.
    5 KOF2010 11/5 リアルビジネスRuby Ruby は Ruby on Rails だけじゃない Ruby on Rails Ruby ブレイクの起爆剤 WEB アプリケーション開発フレームワーク Java の 10 倍開発効率がいい! けど、それだけじゃない! Ruby は汎用プログラミング言語 ログ処理、ネットワークプログラミング、 外部の DLL の呼出し、 GUI プログラミング  etc 、 etc 他の言語にできて、 Ruby にできないことはな い! いざとなれば、 JRuby や IronRuby などもあるし!
  • 6.
    6 KOF2010 11/5 リアルビジネスRuby では特に、いつ Ruby を使えるか? 開発の現場を効率化できる事例を3つ紹 介 GUI の画面項目の確認作業の自動化 テーブル定義書からの  SQL の自動生成 重複が多いプログラムの自動生成 事務処理業務の効率化事例を2つ紹介 複数の Excel ファイルの一括印刷 画面遷移が遅く手数が多い WEB 操作の自動 化
  • 7.
    7 KOF2010 11/5 リアルビジネスRuby 画面項目の確認作業の自動化(1) やりたいこと GUI 部品の Excel 管理表と、実際にできた GUI 画面とで、不一致がないかどうかの確認 単一行テキスト単一行テキスト名前 複数行テキスト複数行テキスト 住所 送信 Excel 管理表で管理されている コントロールやプロパティと 作成中のアプリケーションの 値が一致しているかを確認 アプリケーション1
  • 8.
    8 KOF2010 11/5 リアルビジネスRuby 画面項目の確認作業の自動化(2) 実現方法 Windows アプリケーションは GUI 部品のク ラスやプロパティを外部から取得可能   AutoITX : GUI 部品のクラスやプロパ ティを    取得する一連の関数を COM 技術で公 開 Excel も COM 技術で、値の取得等が可能 Win32OLE : COM 技術を Ruby から利用 する ためのライブラリ 超便利。
  • 9.
    9 KOF2010 11/5 リアルビジネスRuby テーブル定義書からの SQL の自動生成(1) テーブルの定義から、 CREATE TABLE 等の SQL を自動生成 CREATE TABLE bookmarks ( id SERIAL PRIMARY KEY, user_id INTEGER , url VARCHAR(255) FOREIGN KEY (user_id) REFERENCES users(id) );
  • 10.
    10 KOF2010 11/5 リアルビジネスRuby テーブル定義書からの SQL 自動生成 (2) Excel は Ruby から COM 経由で操作可 能 テキスト生成は Ruby の得意分野! 自動生成することで 2度手間を削減することができる 生成される SQL の品質を一定化できる 管理表の品質が保持されやすくなる 逆向きも可能 実際のデータベースからリバースエンジニア リングして、テーブル定義書 (Excel) の生成 ActiveRecord と Win32OLE の夢の協演が実
  • 11.
    11 KOF2010 11/5 リアルビジネスRuby 重複が多いプログラムの自動生成(1) GUI プログラムの自動生成 コントロールの配置などは非常に単純な作業のため 、 自動生成に向いている テストプログラムの自動生成 特にユニットテストでの利用が多いようです IronRuby 、 JRuby を活用して、他の言語のテスト を Ruby で書くこともできます WEB ・・・ Selenium Ruby で統合テストを作成可 能 Selenium ・・・ WEB ブラウザを利用したテスト自動化 ツール Ruby on Rails の script/generate も自動生成の例 データベース関係は自動生成の宝庫
  • 12.
    12 KOF2010 11/5 リアルビジネスRuby 重複が多いプログラムの自動生成(2) プログラム自動生成は何が良いか? 品質の底上げにつながる 似たコードが生成されるため、保守性が向上 ベテランのノウハウを新人に自然に伝授でき る Ruby on Rails ではコードの自動生成によって、 MVC Framework Convention over Configuration Test First などのノウハウを自然に学べるよう工夫されている ベテランにとってもツールに落とし込む過程 で、 互いの開発ノウハウ、規約を共有・洗練でき
  • 13.
    13 KOF2010 11/5 リアルビジネスRuby 事務処理業務の効率化事例 ( Excel 編) 複数の Excel 帳票を開いて、一括印刷 Ruby を使えば、複数の Excel ブック印刷も 簡単 Excel は非常に多くの作業を COM で公開 値の入力、取得、変更、セルの表示形式の設定 罫線の取得、生成。グラフの作成 オートシェイプの作成。色等の加工 画像処理(明るさの変更、グループ化画像を1枚 に) filename1 = “ ~~ .xls” ; filename2 = “ ~~ .xls” xl = WIN32OLE.new(“Excel.Application”) xl.Workbooks.Add(filename1); xl.Workbooks.Add(filename2) xl.Workbooks.each do |book| book.PrintOut end
  • 14.
    14 KOF2010 11/5 リアルビジネスRuby 事務処理業務の効率化事例( WEB 編) WEB 基幹ソフト操作の自動化も可能 方法1: 情報取得のみであれば、 open-uri 、 mechanize などの利用が効果的 wget などの外部実行ファイルも開発効率向上に役 立つ 方法2: 操作が必要で、 Ajax などもあれ ば・・・ InternetExplorer を COM 経由で制御 FireFox を Selenium 経由で制御 方法3: JavaApplet などもあれば・・・ 開発者ならいろいろ方法がありますが、ただの利 用者なら汎用的な AutoIT などで、キーボード操 作、マウス操作をシミュレートして、自動操作す
  • 15.
    15 KOF2010 11/5 リアルビジネスRuby まとめ いろいろな 実際の業務をカイゼンする 方法を紹介してきました 時間が残っているようなので、 質疑応答 デモンストレーション 質疑応答(自問自答編) の3つを用意しています。
  • 16.
    16 KOF2010 11/5 リアルビジネスRuby   質疑応答 (自問自答編)
  • 17.
    17 KOF2010 11/5 リアルビジネスRuby いろんなテクを紹介してきましたが・・ ・ Q. うまく自動化して、効率化できる作業を どうやって見つけるの? 作業をしている本人なら、わりかし簡単 ネックとなるのは「できるわけがない」という思い込み 実は意外に結構どんな業務でも自動化できちゃう Q. 管理職が部下の効率化可能な業務を見つけ出 せるか? これは案外 難しい・・・。 そもそも、管理職は部下の業務内容を知らない・・ ・。 日常的な事務処理などのルーチンワークの詳細は知らない どんな業務をしているか気軽に話せる関係が必要
  • 18.
    18 KOF2010 11/5 リアルビジネスRuby なんで、 Ruby ? Q. 今回紹介したのって COM とか結構 どの 言語からでも利用できるものが多いけど 、なんで、開発言語は Ruby を採用する の? A. 汎用性と生産性のバランスが優れているから 汎用性) シェルスクリプトや Makefile の代替から       大規模アプリケーションまで可能        Win32API の呼び出しや JRuby 、 IronRuby を利用 して、       既存のアプリケーション資産の活用も可能であるため。 生産性) ハッシュや正規表現リテラルの存在       豊富なライブラリの存在       読みやすく、覚えやすい文法
  • 19.
    19 KOF2010 11/5 リアルビジネスRuby タイトルは釣り? Q. もっと開発案件としての Ruby の動 向とかを聞きたいんだけど A. 残念ながら、 cuzic はその専門ではありま せん。 それでも回答すると・・・  ・一般に、 Ruby 採用事例は増えているようです。  ・ただ、現状でも PHP 、 Java などの開発が主流です  ・短納期、高機能の WEB システム開発が多いそう  ・運用・デプロイ、レンタルサーバ業者の選定、 チーム開発 などに課題が多いようです  ・全体に今は幻滅期を乗り越え、適切な要件の場合に Ruby を採用しようとする機運が進んでいるようです。
  • 20.
    20 KOF2010 11/5 リアルビジネスRuby 自動化がうまくいかないような例は? Q. 逆に自動化がうまくいかないような事例は? A. いっぱいあります。   特に複雑な判断が必要な場合は、自動化せ ず、   人手で介するようにした方がいいと思いま す。    典型的にはデータのクレンジング作業は、 人手で実施して、機械処理用のデータを入力し たのちに、自動処理させるというのは1つのノ ウハウです。    あと、たとえ単純作業でも Java アプレッ トとかネイティブでない GUI の場合は難しい です。