SlideShare a Scribd company logo
1 of 20
リアルビジネス 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 の場合は難しい
です。

More Related Content

What's hot

Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:codeKouji Matsui
 
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばメタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばKouji Matsui
 
Nespのコード生成
Nespのコード生成Nespのコード生成
Nespのコード生成Kouji Matsui
 
Realm,rx swift,repro を使ってみて
Realm,rx swift,repro を使ってみてRealm,rx swift,repro を使ってみて
Realm,rx swift,repro を使ってみてDaisuke Nagata
 
svelte と tailwind で始めるフロントエンド開発
svelte と tailwind で始めるフロントエンド開発svelte と tailwind で始めるフロントエンド開発
svelte と tailwind で始めるフロントエンド開発Shuichi Takaya
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Narami Kiyokura
 
うるう秒とタイムゾーン
うるう秒とタイムゾーンうるう秒とタイムゾーン
うるう秒とタイムゾーンShinichiAoyagi
 
この実装には問題がある!
この実装には問題がある!この実装には問題がある!
この実装には問題がある!GOMI NINGEN
 
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Ouka Yuka
 
Flowtype Introduction
Flowtype IntroductionFlowtype Introduction
Flowtype IntroductionTeppei Sato
 
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2kamukiriri
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Koichi Shimozono
 
async / await の話
async / await の話async / await の話
async / await の話yoitakeda
 
Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Takuya Mukohira
 
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)Hirokazu Fukami
 
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!Jun-ichi Sakamoto
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN LinkingKouji Matsui
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 ClojureYoshitaka Kawashima
 

What's hot (20)

Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:code
 
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばメタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
 
Nespのコード生成
Nespのコード生成Nespのコード生成
Nespのコード生成
 
Realm,rx swift,repro を使ってみて
Realm,rx swift,repro を使ってみてRealm,rx swift,repro を使ってみて
Realm,rx swift,repro を使ってみて
 
svelte と tailwind で始めるフロントエンド開発
svelte と tailwind で始めるフロントエンド開発svelte と tailwind で始めるフロントエンド開発
svelte と tailwind で始めるフロントエンド開発
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
うるう秒とタイムゾーン
うるう秒とタイムゾーンうるう秒とタイムゾーン
うるう秒とタイムゾーン
 
この実装には問題がある!
この実装には問題がある!この実装には問題がある!
この実装には問題がある!
 
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!
 
Flowtype Introduction
Flowtype IntroductionFlowtype Introduction
Flowtype Introduction
 
TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2TypeScript補完計画 for Sublime Text 2
TypeScript補完計画 for Sublime Text 2
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
 
async / await の話
async / await の話async / await の話
async / await の話
 
Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1
 
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)
5分でクラウド対応メモ帳アプリを作る(PotatoTips#2 LT)
 
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
 
酒の肴はC# vNext
酒の肴はC# vNext酒の肴はC# vNext
酒の肴はC# vNext
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN Linking
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
 
Realm meet up #17
Realm meet up #17Realm meet up #17
Realm meet up #17
 

Similar to リアルビジネスRuby

Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアKouhei Sutou
 
Ruby Enterprise Environment
Ruby Enterprise EnvironmentRuby Enterprise Environment
Ruby Enterprise EnvironmentTomoya Kawanishi
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Yasushi Ishikawa
 
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座DIVE INTO CODE Corp.
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01Yutaka Tachibana
 
2017年3月13日勉強会発表資料
2017年3月13日勉強会発表資料2017年3月13日勉強会発表資料
2017年3月13日勉強会発表資料shogo yamada
 
2015年度苫小牧高専情報工学科 学外実習発表会 発表資料
2015年度苫小牧高専情報工学科 学外実習発表会 発表資料2015年度苫小牧高専情報工学科 学外実習発表会 発表資料
2015年度苫小牧高専情報工学科 学外実習発表会 発表資料Takuya Mukohira
 
Lync でできる? 仕事効率化
Lync でできる? 仕事効率化Lync でできる? 仕事効率化
Lync でできる? 仕事効率化Manato KAMEYA
 
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発Kazuaki Tanaka
 
Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)Takashi Sogabe
 
ビジネスアプリケーション特論 2013-09-02
ビジネスアプリケーション特論 2013-09-02ビジネスアプリケーション特論 2013-09-02
ビジネスアプリケーション特論 2013-09-02Yoshihide Chubachi
 
福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT学 松崎
 
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクションTakahiro Okumura
 
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyKanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyShinichi Okada
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1Takuya Mukohira
 
「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜
「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜
「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜Teruo Adachi
 
第1回 初心者向け Ruby on Rails 勉強会 in 門前仲町
第1回 初心者向け Ruby on Rails 勉強会 in 門前仲町第1回 初心者向け Ruby on Rails 勉強会 in 門前仲町
第1回 初心者向け Ruby on Rails 勉強会 in 門前仲町剛 羽根
 
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜宏治 高尾
 
はじめてがアジャイル
はじめてがアジャイルはじめてがアジャイル
はじめてがアジャイルKenichi Takahashi
 

Similar to リアルビジネスRuby (20)

Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェア
 
Ruby Enterprise Environment
Ruby Enterprise EnvironmentRuby Enterprise Environment
Ruby Enterprise Environment
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介
 
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01
 
2017年3月13日勉強会発表資料
2017年3月13日勉強会発表資料2017年3月13日勉強会発表資料
2017年3月13日勉強会発表資料
 
2015年度苫小牧高専情報工学科 学外実習発表会 発表資料
2015年度苫小牧高専情報工学科 学外実習発表会 発表資料2015年度苫小牧高専情報工学科 学外実習発表会 発表資料
2015年度苫小牧高専情報工学科 学外実習発表会 発表資料
 
Lync でできる? 仕事効率化
Lync でできる? 仕事効率化Lync でできる? 仕事効率化
Lync でできる? 仕事効率化
 
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
 
Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)Tokyo ruby kaigi 10 (sogabe)
Tokyo ruby kaigi 10 (sogabe)
 
ビジネスアプリケーション特論 2013-09-02
ビジネスアプリケーション特論 2013-09-02ビジネスアプリケーション特論 2013-09-02
ビジネスアプリケーション特論 2013-09-02
 
福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT福岡Ruby会議01 20121201 LT
福岡Ruby会議01 20121201 LT
 
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
 
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyKanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
 
「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜
「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜
「AWSを活用して少人数で複数のサービスを運用するコツ」〜jawsug in nagoya〜
 
第1回 初心者向け Ruby on Rails 勉強会 in 門前仲町
第1回 初心者向け Ruby on Rails 勉強会 in 門前仲町第1回 初心者向け Ruby on Rails 勉強会 in 門前仲町
第1回 初心者向け Ruby on Rails 勉強会 in 門前仲町
 
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
 
はじめてがアジャイル
はじめてがアジャイルはじめてがアジャイル
はじめてがアジャイル
 

More from Tomoya Kawanishi

ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例Tomoya Kawanishi
 
エンジニア転職のノウハウ
エンジニア転職のノウハウエンジニア転職のノウハウ
エンジニア転職のノウハウTomoya Kawanishi
 
Ruby の文字列について
Ruby の文字列についてRuby の文字列について
Ruby の文字列についてTomoya Kawanishi
 
Ruby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてRuby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてTomoya Kawanishi
 
Ruby初心者からよく質問されること
Ruby初心者からよく質問されることRuby初心者からよく質問されること
Ruby初心者からよく質問されることTomoya Kawanishi
 
RubyGems と Bundler について
RubyGems と Bundler についてRubyGems と Bundler について
RubyGems と Bundler についてTomoya Kawanishi
 
Ruby の正規表現について
Ruby の正規表現についてRuby の正規表現について
Ruby の正規表現についてTomoya Kawanishi
 
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行についてRuby での外部コマンドの実行について
Ruby での外部コマンドの実行についてTomoya Kawanishi
 
Ruby のワンライナーについて
Ruby のワンライナーについてRuby のワンライナーについて
Ruby のワンライナーについてTomoya Kawanishi
 
AWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったことAWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったことTomoya Kawanishi
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選Tomoya Kawanishi
 
HTTPと Webクローリングについて
HTTPと WebクローリングについてHTTPと Webクローリングについて
HTTPと WebクローリングについてTomoya Kawanishi
 
Active record query interface
Active record query interfaceActive record query interface
Active record query interfaceTomoya Kawanishi
 
Active Support のコア拡張機能について
Active Support のコア拡張機能についてActive Support のコア拡張機能について
Active Support のコア拡張機能についてTomoya Kawanishi
 
RubyのDir、File、IO について
RubyのDir、File、IO についてRubyのDir、File、IO について
RubyのDir、File、IO についてTomoya Kawanishi
 
Thread の利用事例紹介
Thread の利用事例紹介Thread の利用事例紹介
Thread の利用事例紹介Tomoya Kawanishi
 
Ruby の制御構造とリテラルについて
Ruby の制御構造とリテラルについてRuby の制御構造とリテラルについて
Ruby の制御構造とリテラルについてTomoya Kawanishi
 
Ruby の String のメソッドについて
Ruby の String のメソッドについてRuby の String のメソッドについて
Ruby の String のメソッドについてTomoya Kawanishi
 

More from Tomoya Kawanishi (20)

英単語の覚え方
英単語の覚え方英単語の覚え方
英単語の覚え方
 
ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例ENECHANGE社での Scout APM 利用事例
ENECHANGE社での Scout APM 利用事例
 
エンジニア転職のノウハウ
エンジニア転職のノウハウエンジニア転職のノウハウ
エンジニア転職のノウハウ
 
Ruby の文字列について
Ruby の文字列についてRuby の文字列について
Ruby の文字列について
 
Ruby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構についてRuby on Rails のキャッシュ機構について
Ruby on Rails のキャッシュ機構について
 
Ruby初心者からよく質問されること
Ruby初心者からよく質問されることRuby初心者からよく質問されること
Ruby初心者からよく質問されること
 
RubyGems と Bundler について
RubyGems と Bundler についてRubyGems と Bundler について
RubyGems と Bundler について
 
Ruby の正規表現について
Ruby の正規表現についてRuby の正規表現について
Ruby の正規表現について
 
Ruby での外部コマンドの実行について
Ruby での外部コマンドの実行についてRuby での外部コマンドの実行について
Ruby での外部コマンドの実行について
 
Ruby のワンライナーについて
Ruby のワンライナーについてRuby のワンライナーについて
Ruby のワンライナーについて
 
AWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったことAWS のコスト管理をちゃんとしたくてやったこと
AWS のコスト管理をちゃんとしたくてやったこと
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選
 
HTTPと Webクローリングについて
HTTPと WebクローリングについてHTTPと Webクローリングについて
HTTPと Webクローリングについて
 
Rake
RakeRake
Rake
 
Active record query interface
Active record query interfaceActive record query interface
Active record query interface
 
Active Support のコア拡張機能について
Active Support のコア拡張機能についてActive Support のコア拡張機能について
Active Support のコア拡張機能について
 
RubyのDir、File、IO について
RubyのDir、File、IO についてRubyのDir、File、IO について
RubyのDir、File、IO について
 
Thread の利用事例紹介
Thread の利用事例紹介Thread の利用事例紹介
Thread の利用事例紹介
 
Ruby の制御構造とリテラルについて
Ruby の制御構造とリテラルについてRuby の制御構造とリテラルについて
Ruby の制御構造とリテラルについて
 
Ruby の String のメソッドについて
Ruby の String のメソッドについてRuby の String のメソッドについて
Ruby の String のメソッドについて
 

Recently uploaded

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Recently uploaded (10)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

リアルビジネスRuby

  • 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 の場合は難しい です。