名古屋Ruby会議01...

118
製造業向け3Dデータ変換ソリューション におけるRuby活用事例 株式会社エリジオン 内山 滋 / suchi 2009/10/10

description

名古屋Ruby会議01 A.3「製造業向け3Dデータ変換ソリューションにおけるRuby活用事例」 当社の製造業向けの3Dデータ変換、最適化ソリューションASFALIS( http://www.elysium.co.jp/products/asfalis/ )でのRuby活用事例(CANVAS Script)をご紹介します。Ruby採用に至るまでの過程や、その他の社内でのRuby活用事例についてもお話しさせていただきます。 YouTube: http://www.youtube.com/watch?v=o8Y3mHpPAlE

Transcript of 名古屋Ruby会議01...

Page 1: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

株式会社エリジオン内山滋 / suchi

2009/10/10

Page 2: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

最初に要点を

Page 3: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

製造業向けソフトで

Ruby採用

Page 4: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

製造業向けソフト開発でも

Ruby活用

Page 5: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

Good

Page 6: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

以上

Page 7: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

はじめに

Page 8: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

はじめに

自己紹介

会社紹介

事例紹介

導入まで

社内利用事例

謝辞

背景

ASFALIS

CANVAS Script

Page 9: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

開催おめでとうございます

Page 10: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

Rubyといえば

島根matz江

Page 11: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

青春プレイバック

NHKアーカイブス 保存番組検索「青春ブレイバック」http://archives.nhk.or.jp/chronicle/search/

Page 12: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

fj.sources1995/12/21

Page 13: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

>まつもと ゆきひろ@トヨタケーラムです.

>ここのところ,細々と開発を続けて来た>オブジェクト指向スクリプト言語 rubyを>公開します.

(fj.sources: 1995/12/21)

Newsgroup: fj.sources

From: [email protected] (Yukihiro Matsumoto)

Date: 1995/12/21

Subject: ruby 0.95 - object-oriented script language (0/7)

Page 14: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

名古屋はRubyデビューの地

Page 15: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

デビュー?

Page 16: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

浜松

Page 17: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

1990年に卒業して、ソフトハウスに入り

ました(中略)でも、浜松で働ける会社と出

合って、そこを選ぶんです。

(中略: 丌景気になり)

それでRubyの開発を始めたんです。会

社でやっていましたから、同僚には話していました。いろいろ応援してくれましたね。

Tech総研「世界のオープンソースRuby開発者まつもとゆきひろ」http://rikunabi-next.yahoo.co.jp/tech/docs/ct_s03600.jsp?p=001005

Page 18: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

浜松はRuby

誕生の地

Page 19: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

浜MatzはRuby

誕生の地

Page 20: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

はじめに

自己紹介

会社紹介

事例紹介

導入まで

社内利用事例

謝辞

背景

ASFALIS

CANVAS Script

Page 21: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

自己紹介

Page 22: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

suchihttp://www.suchi.org/

Ruby Lv: 初心者→中級好きなメソッド: String#%好きなrubyist: id: m_seki

好きなアジャイルプラクティス: ありのままの進捗を計測好きなXPプラクティス: 計画ゲーム

好きなもの: 似てるもの

Page 23: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

1990年に卒業して、ソフトハウスに入り

ました(中略)でも、浜松で働ける会社と出

合って、そこを選ぶんです。

(中略: 丌景気になり)

それでRubyの開発を始めたんです。会

社でやっていましたから、同僚には話して

いました。いろいろ応援してくれましたね。

Tech総研「世界のオープンソースRuby開発者まつもとゆきひろ」http://rikunabi-next.yahoo.co.jp/tech/docs/ct_s03600.jsp?p=001005

Page 24: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

同僚のYさん

=最初の上司

Page 25: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

4107冊

http://hondana.org/suchi

Page 26: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

似てるもの

Page 27: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

業務では

品質管理シニアマネージャ(開発もします)

Page 28: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

http://d.hatena.ne.jp/higayasuo/

Page 29: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

Coraleef

http://www.isid.co.jp/solution/development/coraleef.htmlhttp://itpro.nikkeibp.co.jp/article/COLUMN/20071128/288169/

VB/Delphi App

→ Adobe AIR 移行Tool

・開発リーダー

・フルセットXP開発

・社内初のアジャイル事例

→以降社内では当たり前の選択肢に

Page 30: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

はじめに

自己紹介

会社紹介

事例紹介

導入まで

社内利用事例

謝辞

背景

ASFALIS

CANVAS Script

Page 31: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

会社紹介

Page 32: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

株式会社エリジオン

• 本社: 静岡県浜松市

• 設立: 1999/11/1

• 社員数: 71名

http://www.elysium.co.jp/

Page 33: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

技術ベース

• 3次元形状処理

• データ変換

• データ検証・修正

http://www.elysium.co.jp/

Page 34: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

Web採用ページ

• 一辺の長さが2nの立方体があり(nは整数)、その中心に直径2n-1の球を配置します。

• 立方体を一辺1の格子に区切ったとき、球の表面が通過する格子の数をXとします。

• X>2008となる最小のnはいくつでしょうか?

http://www.elysium.co.jp/recruit/pretestx/000014.html

Page 35: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

Renault F1 Team 公式サプライヤ

http://www.renaultf1.com/en/_2009/team/partenaires/partenaires_rf1/partenaires_is_it_partners/partenaires_is_it_partners_elysium/

データ変換

2週間⇒3.5時間

Page 36: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

事例紹介

Page 37: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

はじめに

自己紹介

会社紹介

事例紹介

導入まで

社内利用事例

謝辞

背景

ASFALIS

CANVAS Script

Page 38: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

背景

Page 39: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

3Dデータ処理

• 1) 3D CADデータ変換

• 2) データチェック

• 3) データ修正

• 4) データ最適化

• 5) Viewer

• 6) and so on...

Page 40: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

1)CADデータの変換

CAD(A) CAD(B)

NG!

Page 41: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

1)CADデータの変換

CAD(A)

CAD(B)

NG!

OK

Page 42: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

2) データチェック

Page 43: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

3) データ修正

• Healing

Page 44: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

4) データ最適化

• 例:簡略化

Page 45: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

5) Viewer

Page 46: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

6) その他いろいろ

Auto-Surfacing

Polygon Processing

Page 47: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

中間表現

• データ変換

– NxNの組み合わせ

• データ処理

– 一般化

• 多数のCAD

– 現在も15種類以上

• CATIA V4

• CATIA V5

• I-DEAS

• Pro/E

• UG

• SolidWorks

• Inventor

• CoCreate

• :

Page 48: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

まもなくRuby

出てきます

Page 49: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

はじめに

自己紹介

会社紹介

事例紹介

導入まで

社内利用事例

謝辞

背景

ASFALIS

CANVAS Script

Page 50: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

ASFALISモジュール化

• 3Dデータ処理のためのモジュールパッケージ– CAD X用

• ENF Writer

• ENF Reader

– Optimizer

– Checker

– Viewer

– 内部的に• 共通処理カーネル

Page 51: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

ASFALIS – ENF中心のソリューション

Page 52: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

ASFALISの利用方法

• 受託案件におけるコンポーネント

• 顧客のシステムへの組み込み

• 代理店様の別システムへの組み込み

Page 53: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

ASFALISをさらに使いやすく

• 部課単位で使いたい

• 小規模な業務フローを簡単に記述したい

• セールスチームが顧客用なシンプルなカスタマイズしたい

Page 54: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

シナリオファイル

• 手順をXMLで記述– シンプルな手順に有効

• →さらに使いやすく– 外部モジュールを呼びたい

– 条件分岐/判定したい• モジュール返値

• データチェックの結果

• ファイルの存在

<?xml version="1.0"?>

<ScenarioList>

<Scenario>

<CAD2ENF>

<inputfile path="${INPUTFILE}" />

<outputfile path="${OUTPUTFILE}_1_imp.enf" />

<parameterfile path="${PARAMETERFILE}" />

<productcode id="105001" />

<workdir path="${WORKDIR}" />

<logfile path="${LOGFILE}" />

<xmllogfile path="${XMLLOGFILE}" />

</CAD2ENF>

<ASMEDIT>

<inputfile path="${OUTPUTFILE}_1_imp.enf" />

<outputfile path="${OUTPUTFILE}_2_asm.enf" />

<parameterfile path="${PARAMETERFILE}" />

<workdir path="${WORKDIR}" />

<logfile path="${LOGFILE}" />

<xmllogfile path="${XMLLOGFILE}" />

</ASMEDIT>

<ATTREDIT>

<inputfile path="${OUTPUTFILE}_2_asm.enf" />

Page 55: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

はじめに

自己紹介

会社紹介

事例紹介

導入まで

社内利用事例

謝辞

背景

ASFALIS

CANVAS Script

Page 56: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

ELYSIUMCANVAS

Script

Page 57: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

お待たせしました

Rubyです

Page 58: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

CANVAS Script

• CAx iNtegrator Via Asfalis Solution

• Rubyから各モジュールを呼び出せる

• モジュールのInput/Outputの接続をわかりやすく

• CADが必要なモジュールのリモート呼び出し

• ユーザコンポーネントを定義可能– 顧客独自のコンポーネントの定義が可能

Page 59: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

スクリプト例require 'canvas'

CANVAS::Session.open {|session|

# Shared work folder

session.shared_workdir = ARGV[2]

# Definition of component

parasolid2enf = session.create_component(:parasolid2enf)

asmedit = session.create_component(:asmedit)

attredit = session.create_component(:attredit)

# Connection between the components

parasolid2enf[:inputfile] = ARGV[0]

parasolid2enf[:CalcMassProperty] = 1

parasolid2enf[:CalcElementNumber] = 1

asmedit[:inputfile] = parasolid2enf[:outputfile]

asmedit[:CopySharedPart] = 1

asmedit[:CopySharedAssembly] = 1

attredit[:inputfile] = asmedit[:outputfile]

attredit[:mapfile] = 'w:¥conf¥NrkMappingFIle.xml'

# Execution

session.start

# Output

attredit.copy_result_to(ARGV[1])

}

Page 60: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

準備

require 'canvas'

Page 61: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

セッションCANVAS::Session.open {|session|

:

:

}

Page 62: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

コンポーネント生成

parasolid2enf = session.create_component(:parasolid2enf)

asmedit = session.create_component(:asmedit)

attredit = session.create_component(:attredit)

Page 63: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

コンポーネントの設定コンポーネントの接続

parasolid2enf[:inputfile] = ARGV[0]

parasolid2enf[:CalcMassProperty] = 1

parasolid2enf[:CalcElementNumber] = 1

asmedit[:inputfile] = parasolid2enf[:outputfile]

asmedit[:CopySharedPart] = 1

asmedit[:CopySharedAssembly] = 1

attredit[:inputfile] = asmedit[:outputfile]

attredit[:mapfile] = 'w:¥conf¥NrkMappingFIle.xml'

Page 64: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

セッション実行

session.start

Page 65: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

スクリプト例require 'canvas'

CANVAS::Session.open {|session|

# Shared work folder

session.shared_workdir = ARGV[2]

# Definition of component

parasolid2enf = session.create_component(:parasolid2enf)

asmedit = session.create_component(:asmedit)

attredit = session.create_component(:attredit)

# Connection between the components

parasolid2enf[:inputfile] = ARGV[0]

parasolid2enf[:CalcMassProperty] = 1

parasolid2enf[:CalcElementNumber] = 1

asmedit[:inputfile] = parasolid2enf[:outputfile]

asmedit[:CopySharedPart] = 1

asmedit[:CopySharedAssembly] = 1

attredit[:inputfile] = asmedit[:outputfile]

attredit[:mapfile] = 'w:¥conf¥NrkMappingFIle.xml'

# Execution

session.start

# Output

attredit.copy_result_to(ARGV[1])

}

Page 66: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

詳しいサンプルはWebで

http://www.elysium.co.jp/products/asfalis/index.html

Page 67: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

Desktop Controler

• ADC(ASFALIS Desktop Controller)– データ処理をスケジューリング

– CANVAS Scriptを生成/実行

– 簡単に定期処理、夜間バッチ変換システムを構築可能

– MFCアプリケーション

Page 68: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

モジュール図

ADC(MFC Win App)

CANVASScript

Scheduler(Console App)

CanvasLibrary

dRuby

Server

CanvasLibrary

dRuby

proe2enfComponent

ASFALISComponent

derived

asmeditComponent

Loader(Console App)

asmedit.exe(Console App)

pro2enf.exe(Console App)

RubyScript

WinApp

Page 69: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

Good

• 動的言語やモダンな言語のメリット享受– C/C++と比べて

• 驚くほど簡単に記述できる。

• 自然に書けて行数尐ない/手間尐ない。

• メソッド上書きやeval

• dRuby

• 豊富なライブラリ

• 行き詰まったときにWebに情報が多い

Page 70: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

Bad

• (社内)アーリーアダプタ特有のトラブル– 当然あったが

– リスクを見込んだスケジューリングでカバー

• dRuby– 透過的に書けすぎて、サーバ/クライアントの結合が

密になってしまった

Page 71: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

Bad

• 海外代理店からは「Ruby?」– 別言語のI/Fを追加するかも

– 日本の代理店に置き換えて考えてみよう• Allegro Common Lisp? / Lua?

• 理解できる

• スピード– 1.9対応したい

Page 72: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

要望

• gemでインストールするとき、メモリ消費が激しい

• gemの配布条件を調べるのに手間がかかった– たとえばこんなオプションがあれば

– gem -license actionmailer

Page 73: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

導入まで

Page 74: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

はじめに

自己紹介

会社紹介

事例紹介

導入まで

社内利用事例

謝辞

背景

ASFALIS

CANVAS Script

Page 75: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

現状: 社内Rubyユーザ

• 開発者約30人– カタコトも含めれば2/3はRubyを使える

– Ruby技術レベルは決して突出していない

• 業務でのRuby利用– イキのいい若い社員が主導

Page 76: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

各個人での利用はずっと前から

• さまざまな開発手続きの自動化やワンライナー– バッチファイル, Born-Shell, Perl, Ruby,

Windows Script(VBScript/JScript), Windows PowerShell, Python

• あまり制限されない。任されている

• が、ここ5年でRubyがデファクト化

Page 77: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

勉強会

• 勉強会が推奨されている– 裁量性なので、時間も自由

– デザインパターン / Effective C++

– Code Complete /アジャイル開発

– ISO 10303-59 / 計算位相幾何

Page 78: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

2005-2006CODE COMPLETE 2nd 勉強会14名(入社1-2年目社員中心)34章を1年でCOMPLETE

Page 79: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

Ruby勉強会

• 2007

• 参加者: 14名

• スキルにあった内容を皆バラバラに学ぶ

Page 80: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

Ruby導入

• 役員、上司、お客様からの制限はなし– 問題解決指向

• CTO – 技術全般への目の配り– 例: ファウラー「リファクタリング」

• 開発者に基本的に任されている

• 社風– 取り組みを評価する社風

– 例: アジャイル導入• トップが柔軟で理解がある

• 目的指向

Page 81: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

とはいえ• 安易な考えは却下

• 顧客対応部署に説明できるか

• 浮かれRubyistではないか– 手段が目的より優先してないか

– おまえRubyって言いたいだけちゃうんか

• リスクを認識しているか

• 覚悟はあるか– 一度否定されて引っ込めるようではダメ

– いざというときRuby/Libraryのせいにしない

– いざというときソースを読む覚悟

Page 82: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

s/Ruby/ソーシャルなんとか/gs/Ruby/クラウド/gs/Ruby/twitter/gs/Ruby/.NET/gs/Ruby/Rails/g

Page 83: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

Why Ruby?

• Good参照

Page 84: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

バランス感覚重要

• エンジニアの重要な資質?– パラノ資質と共存可能

• 他言語/システムを知っているか– Rubyだけ勉強していてもダメ

– 一部業界だけを参考にしてもダメ• 永遠のβ←日本の製造業の超高品質プロセスを維持できるか?

• メリット/デメリットを正確に挙げられるか– それ○○でできるよ

Page 85: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

社内利用例

Page 86: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

はじめに

自己紹介

会社紹介

事例紹介

導入まで

社内利用事例

謝辞

背景

ASFALIS

CANVAS Script

Page 87: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

社内利用例

• 個人的なスクリプト

• プロジェクト内のスクリプト

• 社内カーネル利用インターフェイス

• テストで使うスクリプト

• テストシステム(サーバはRails)

• Redmine– でも主要は独自タスクDB(運用10年)

– アジャイル開発はXPlanner

Page 88: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

一時的なスクリプト

• Widowsの.rcファイル自動生成group = {

"標準" => ["IDC_BUTTON_PICK", "IDC_BUTTON_ZOOM", ...]

"並び替え" => ["IDC_BUTTON_UP", "IDC_BUTTON_DOWN", nil, ...]"編集" => ["IDC_BUTTON_EDIT_HOLE_PATTERN", ...]

}

x = 9

group.each do |name, list|

buttons = []

x1 = x

x += 4

list.each do |obj|

if obj.nil?

x += 3

else

buttons.push " PUSHBUTTON ¥"¥",#{obj},#{x},18,16,16,BS_ICON"

x += 16

end

end

puts " GROUPBOX ¥"#{name}¥",IDC_STATIC,#{x1},7,#{x-x1+4},32"

puts buttons.join("¥n")

x += 10

end

Page 89: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

テスト用ツール

• 高い品質維持– テストの増加

• テストの自動化– テストの自動生成

Page 90: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

中間ファイル操作ライブラリ

• C/C++で作成されたライブラリ– Rubyから呼びだすためのライブラリ

• 機能テストの判定に利用

• 開発中に利用

Page 91: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

ENF Handler

Ruby C拡張

C I/F

ENF Handler (Ruby)

ENF Info Reader(Ruby)

ENF Editor(Ruby)

ELYSIUM Foundation Class Library(C++)

Handlerに必要なところだけ

Ruby I/Fは下層に依存しない

Rubyによる各種ツール

...

Page 92: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

テストシステム

• Railsを利用したテストサーバ

• Rubyによる実行システム

• 判定条件を名前付けRubyクラスで記述

• テスト項目は判定条件とパラメータ

• →自動テスト可能に

Page 93: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

今後

Page 94: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

今後のRuby利用

• CANVAS Script– 続々と展開中、典型的利用方法もライブラリ化

• テストシステム開発

• 新規開発プロジェクトでもRuby採用– 複数言語のシステム

• C/C++ ~ 長く継続していたWindows App

• C#(.NET) ~ 新規作成Windows GUI App / クライアント

• Ruby ~ サーバ(Railsも利用)

• サーバ/Client間はSOAP

– Rubyにこだわっていない• ←→Rubyに価値がある証拠!

Page 95: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

はじめに

自己紹介

会社紹介

事例紹介

導入まで

社内利用事例

謝辞

背景

ASFALIS

CANVAS Script

Page 96: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

謝辞

Page 97: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

名古屋Ruby会議Rubyの会

他Rubyに関わる皆様

Page 98: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

Regional Ruby会議発案者

角谷信太郎さん

Page 99: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

http://b.hatena.ne.jp/entry/twitter.com/suchi/statuses/

Page 100: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

@Wikiばな Vol.7

http://wikibana.socoda.net/wiki.cgi?WikiBana%2fVOL.7

Page 101: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
Page 102: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

ところで角谷さんの翻訳された

Page 103: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

最後にも要点を

Page 104: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

製造業向けソフトで

Ruby採用

Page 105: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

製造業向けソフト開発でも

Ruby活用

Page 106: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

Good

Page 107: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

名古屋はRubyデビューの地

Page 108: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

開催おめでとうございます

Page 109: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

以上

Page 110: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

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

Page 111: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
Page 112: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

付録

Page 113: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

現実的なスクリプト例

• 1. 解析に丌要な微小部品を削除– ASFALISアダプタ(体積取得)

– アセンブリ編集コンポーネント(削除)

• 2. 解析失敗の原因となる部品間干渉を検証– 干渉チェックコンポーネント

– アセンブリ編集コンポーネント(削除)

• 3. 解析に丌適な形状削除– 形状簡略化コンポーネント(フィレット・段差削除)

– 干渉チェックコンポーネント(簡略化後の干渉チェック)

• 4. CAEツール向けにデータ修正しParasolidへ変換

– ASFALISアダプタ(ヒーリング/Parasolid形式へ変換)

Page 114: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

フロー

A

A

B

B

Page 115: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

スクリプト例(1)require 'canvas'

require 'parser.rb'

CANVAS::Session.open do |session|

config = session.parse_config(ARGV[0])

session.shared_workdir = config[:shared_workdir]

# コンポーネントを作成catiav52enf = session.create_component('catiav52enf')

asmedit = session.create_component('asmedit')

intrcheck = session.create_component('intrcheck')

asmedit2 = session.create_component('asmedit')

simplify = session.create_component('simplify')

dek = session.create_component('dek')

enf2parasolid = session.create_component('enf2parasolid')

Page 116: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

スクリプト例(2)# コンポーネントの出入力データのマッピング定義、オプションを指定catiav52enf[:inputfile] = config[:inputfile]

catiav52enf[:CalcMassProperty] = '1'

asmedit[:inputfile] = catiav52enf[:outputfile]

asmedit[:DeleteSpecifiedPart] = '1'

asmedit[:namelist] = 'namelist1.txt'

intrcheck[:inputfile] = asmedit[:outputfile]

intrcheck[:ExcludeNoShowElement] = '1'

intrcheck[:ReportIntrVolume] = '1'

asmedit2[:inputfile] = intrcheck[:outputfile]

asmedit2[:DeleteSpecifiedPart] = '1'

asmedit2[:namelist] = 'namelist2.txt'

Page 117: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

スクリプト例(3)simplify[:inputfile] = asmedit2[:outputfile]

simplify[:Process].add :RemoveFillet, {

:AvoidInterferenceAmongParts => '1',

:AvoidInterferenceWithinPart => '1',

:FilletMaxRadius => '5',

:FilletMinRadius => '1',

:ProhibitInvalidGeometryCreation => '1'

}

simplify[:Process].add :RemoveStep, {

:ProhibitInvalidGeometryCreation => '1',

:StepMaxHeight => '0.1'

}

dek[:inputfile] = simplify[:outputfile]

dek[:to_cad] = 'parasolid'

enf2parasolid[:inputfile] = dek[:outputfile]

Page 118: 名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例

スクリプト例(4)# 処理を実行

catiav52enf.execute

asmedit.execute

xml_parse(asmedit[:xmllogfile],namelist1.txt)

intrcheck.execute

xml_parse(intrcheck[:csvfile],namelist2.txt)

asmedit2.execute

simplify.execute

dek.execute

enf2parasolid.execute

# 出力ファイルを保存enf2parasolid.copy_result_to(config[:outputdir])

end