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




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

                 2009/10/10
最初に要点を
製造業向け
 ソフトで
Ruby採用
製造業向け
ソフト開発でも
 Ruby活用
Good
以上
はじめに
はじめに

自己紹介

会社紹介      背景

事例紹介     ASFALIS

導入まで     CANVAS
          Script

社内利用事例

 謝辞
開催おめでとう
 ございます
Ruby
といえば

 島根
matz江
青春
プレイバック

   NHKアーカイブス 保存番組検索「青春ブレイバック」
   http://archives.nhk.or.jp/chronicle/search/
fj.sources
1995/12/21
>まつもと ゆきひろ@トヨタケーラムです.

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

(fj.sources: 1995/12/21)

             Newsgrou...
名古屋はRuby
 デビューの地
デビュー?
浜松
1990年に卒業して、ソフトハウスに入り
ました(中略)でも、浜松で働ける会社と出
合って、そこを選ぶんです。

(中略: 丌景気になり)

それでRubyの開発を始めたんです。会
社でやっていましたから、同僚には話して
いました。いろいろ応援...
浜松は
Ruby
誕生の地
浜Matzは
 Ruby
誕生の地
はじめに

自己紹介

会社紹介      背景

事例紹介     ASFALIS

導入まで     CANVAS
          Script

社内利用事例

 謝辞
自己紹介
suchi
      http://www.suchi.org/

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

好きなアジャイルプラ...
1990年に卒業して、ソフトハウスに入り
ました(中略)でも、浜松で働ける会社と出
合って、そこを選ぶんです。

(中略: 丌景気になり)

それでRubyの開発を始めたんです。会
社でやっていましたから、同僚には話して
いました。いろいろ応援...
同僚のYさん
=最初の上司
4107冊



        http://hondana.org/suchi
似てるもの
業務では

   品質管理
シニアマネージャ
 (開発もします)
http://d.hatena.ne.jp/higayasuo/
Coraleef
VB/Delphi App
→ Adobe AIR 移行Tool

・開発リーダー
・フルセットXP開発
・社内初のアジャイル事例
 →以降社内では当たり前の選択肢に

                http://www.i...
はじめに

自己紹介

会社紹介      背景

事例紹介     ASFALIS

導入まで     CANVAS
          Script

社内利用事例

 謝辞
会社紹介
株式会社エリジオン
• 本社: 静岡県浜松市
• 設立: 1999/11/1
• 社員数: 71名




                  http://www.elysium.co.jp/
技術ベース
• 3次元形状処理
• データ変換
• データ検証・修正




             http://www.elysium.co.jp/
Web採用ページ
• 一辺の長さが2nの立方体があり(nは整数)、その中心に
  直径2n-1の球を配置します。
• 立方体を一辺1の格子に区切ったとき、球の表面が通過
  する格子の数をXとします。
• X>2008となる最小のnはいくつでし...
Renault F1 Team 公式サプライヤ
                                                                                             データ変換...
事例紹介
はじめに

自己紹介

会社紹介      背景

事例紹介     ASFALIS

導入まで     CANVAS
          Script

社内利用事例

 謝辞
背景
3Dデータ処理
• 1) 3D CADデータ変換
•   2)   データチェック
•   3)   データ修正
•   4)   データ最適化
•   5)   Viewer
•   6)   and so on...
1)CADデータの変換

   CAD(A)     CAD(B)




              NG!
1)CADデータの変換


   CAD(A)   NG!


                  CAD(B)


            OK
2) データチェック
3) データ修正
• Healing
4) データ最適化
• 例:簡略化
5) Viewer
6) その他いろいろ



    Auto-Surfacing




                     Polygon Processing
中間表現
• 多数のCAD            • データ変換
 – 現在も15種類以上         – NxNの組み合わせ
   • CATIA V4
                    • データ処理
   • CATIA V5
...
まもなく
 Ruby
出てきます
はじめに

自己紹介

会社紹介      背景

事例紹介     ASFALIS

導入まで     CANVAS
          Script

社内利用事例

 謝辞
ASFALISモジュール化
• 3Dデータ処理のためのモジュールパッケ
  ージ
 – CAD X用
   • ENF Writer
   • ENF Reader

 – Optimizer
 – Checker
 – Viewer

 – ...
ASFALIS – ENF中心のソリューション
ASFALISの利用方法
• 受託案件におけるコンポーネント
• 顧客のシステムへの組み込み
• 代理店様の別システムへの組み込み
ASFALISをさらに使いやすく
• 部課単位で使いたい
• 小規模な業務フローを簡単に記述したい
• セールスチームが顧客用なシンプルなカ
  スタマイズしたい
シナリオファイル
                  <?xml version="1.0"?>
• 手順をXMLで記述       <ScenarioList>
                    <Scenario>
 – シンプルな手...
はじめに

自己紹介

会社紹介      背景

事例紹介     ASFALIS

導入まで     CANVAS
          Script

社内利用事例

 謝辞
ELYSIUM
CANVAS
 Script
お待たせしました
  Ruby
   です
CANVAS Script
• CAx iNtegrator Via Asfalis Solution


• Rubyから各モジュールを呼び出せる
• モジュールのInput/Outputの接続をわかり
  やすく
• CADが必要なモジュー...
スクリプト例
         require 'canvas'
         CANVAS::Session.open {|session|
           # Shared work folder
           sessi...
準備
require 'canvas'
セッション
CANVAS::Session.open {|session|
  :
  :

}
コンポーネント生成
parasolid2enf = session.create_component(:parasolid2enf)
asmedit       = session.create_component(:asmedit)
attr...
コンポーネントの設定
コンポーネントの接続
parasolid2enf[:inputfile] = ARGV[0]
parasolid2enf[:CalcMassProperty] = 1
parasolid2enf[:CalcElementN...
セッション実行
session.start
スクリプト例
         require 'canvas'
         CANVAS::Session.open {|session|
           # Shared work folder
           sessi...
詳しいサンプルはWebで



http://www.elysium.co.jp/products/asfalis/index.html
Desktop Controler
• ADC(ASFALIS Desktop Controller)
  – データ処理をスケジューリング
  – CANVAS Scriptを生成/実行
  – 簡単に定期処理、夜間バッチ変換システムを構築可...
モジュール図
 Ruby      Win
 Script    App

                                                       Server


                    ...
Good
• 動的言語やモダンな言語のメリット享受
    – C/C++と比べて
• 驚くほど簡単に記述できる。
• 自然に書けて行数尐ない/手間尐ない。
•   メソッド上書きやeval
•   dRuby
•   豊富なライブラリ
•  ...
Bad
• (社内)アーリーアダプタ特有のトラブル
 – 当然あったが
 – リスクを見込んだスケジューリングでカバー
• dRuby
 – 透過的に書けすぎて、サーバ/クライアントの結合が
   密になってしまった
Bad
• 海外代理店からは「Ruby?」
 – 別言語のI/Fを追加するかも
 – 日本の代理店に置き換えて考えてみよう
      • Allegro Common Lisp? / Lua?
      • 理解できる

• スピード
 –...
要望
• gemでインストールするとき、メモリ消
  費が激しい
• gemの配布条件を調べるのに手間がかか
  った
 – たとえばこんなオプションがあれば
 – gem -license actionmailer
導入まで
はじめに

自己紹介

会社紹介      背景

事例紹介     ASFALIS

導入まで     CANVAS
          Script

社内利用事例

 謝辞
現状: 社内Rubyユーザ
• 開発者約30人
 – カタコトも含めれば2/3はRubyを使える
 – Ruby技術レベルは決して突出していない
• 業務でのRuby利用
 – イキのいい若い社員が主導
各個人での利用はずっと前から
• さまざまな開発手続きの自動化やワンラ
  イナー
 – バッチファイル, Born-Shell, Perl, Ruby,
   Windows Script(VBScript/JScript),
   Wind...
勉強会
• 勉強会が推奨されている
 –   裁量性なので、時間も自由
 –   デザインパターン / Effective C++
 –   Code Complete /アジャイル開発
 –   ISO 10303-59 / 計算位相幾何
2005-2006
CODE COMPLETE 2nd 勉強会
14名(入社1-2年目社員中心)
34章を1年でCOMPLETE
Ruby勉強会
• 2007
• 参加者: 14名
• スキルにあった内容を皆バラバラに学ぶ
Ruby導入
• 役員、上司、お客様からの制限はなし
 – 問題解決指向
• CTO – 技術全般への目の配り
 – 例: ファウラー「リファクタリング」
• 開発者に基本的に任されている
• 社風
 – 取り組みを評価する社風
 – 例: ア...
とはいえ
• 安易な考えは却下
• 顧客対応部署に説明できるか
• 浮かれRubyistではないか
 – 手段が目的より優先してないか
 – おまえRubyって言いたいだけちゃうんか
• リスクを認識しているか
• 覚悟はあるか
 – 一度否定...
s/Ruby/ソーシャルなんとか/g
s/Ruby/クラウド/g
s/Ruby/twitter/g
s/Ruby/.NET/g
s/Ruby/Rails/g
Why Ruby?
• Good参照
バランス感覚重要
• エンジニアの重要な資質?
 – パラノ資質と共存可能
• 他言語/システムを知っているか
 – Rubyだけ勉強していてもダメ
 – 一部業界だけを参考にしてもダメ
  • 永遠のβ←日本の製造業の超高品質プロセスを維持で...
社内利用例
はじめに

自己紹介

会社紹介      背景

事例紹介     ASFALIS

導入まで     CANVAS
          Script

社内利用事例

 謝辞
社内利用例
• 個人的なスクリプト
•   プロジェクト内のスクリプト
•   社内カーネル利用インターフェイス
•   テストで使うスクリプト
•   テストシステム(サーバはRails)

• Redmine
    – でも主要は独自タス...
一時的なスクリプト
• Widowsの.rcファイル自動生成
 group = {
   "標準" => ["IDC_BUTTON_PICK", "IDC_BUTTON_ZOOM", ...]
   "並び替え" => ["IDC_BUTTON...
テスト用ツール
• 高い品質維持
 – テストの増加
• テストの自動化
 – テストの自動生成
中間ファイル操作ライブラリ
• C/C++で作成されたライブラリ
 – Rubyから呼びだすためのライブラリ
• 機能テストの判定に利用
• 開発中に利用
ENF Handler

 ENF Info     ENF
                              Rubyによる
  Reader     Editor   ...
                           ...
テストシステム
• Railsを利用したテストサーバ
•   Rubyによる実行システム
•   判定条件を名前付けRubyクラスで記述
•   テスト項目は判定条件とパラメータ
•   →自動テスト可能に
今後
今後のRuby利用
• CANVAS Script
 – 続々と展開中、典型的利用方法もライブラリ化
• テストシステム開発
• 新規開発プロジェクトでもRuby採用
 – 複数言語のシステム
   • C/C++ ~ 長く継続していたWind...
はじめに

自己紹介

会社紹介      背景

事例紹介     ASFALIS

導入まで     CANVAS
          Script

社内利用事例

 謝辞
謝辞
名古屋Ruby会議
  Rubyの会
他Rubyに関わる皆様
Regional Ruby会議発案者

角谷信太郎
 さん
http://b.hatena.ne.jp/entry/twitter.com/suchi/statuses/
@Wikiばな Vol.7




      http://wikibana.socoda.net/wiki.cgi?WikiBana%2fVOL.7
ところで
角谷さんの翻訳された
最後にも要点を
製造業向け
 ソフトで
Ruby採用
製造業向け
ソフト開発でも
Ruby活用
Good
名古屋はRuby
 デビューの地
開催おめでとう
 ございます
以上
ご清聴
ありがとうございました
付録
現実的なスクリプト例
• 1. 解析に丌要な微小部品を削除
 – ASFALISアダプタ(体積取得)
 – アセンブリ編集コンポーネント(削除)

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




 A    B
スクリプト例(1)
 require 'canvas'
 require 'parser.rb'

 CANVAS::Session.open do |session|
   config = session.parse_config(ARGV...
スクリプト例(2)
 # コンポーネントの出入力データのマッピング定義、オプションを指定
 catiav52enf[:inputfile] = config[:inputfile]
 catiav52enf[:CalcMassProperty]...
スクリプト例(3)
  simplify[:inputfile] = asmedit2[:outputfile]
  simplify[:Process].add :RemoveFillet, {
    :AvoidInterferenceA...
スクリプト例(4)
  # 処理を実行

  catiav52enf.execute
  asmedit.execute
  xml_parse(asmedit[:xmllogfile],namelist1.txt)
  intrcheck.e...
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
Upcoming SlideShare
Loading in …5
×

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

4,118 views

Published on

名古屋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

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,118
On SlideShare
0
From Embeds
0
Number of Embeds
42
Actions
Shares
0
Downloads
10
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

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

  1. 1. 製造業向け3Dデータ変換ソリューション におけるRuby活用事例 株式会社エリジオン 内山 滋 / suchi 2009/10/10
  2. 2. 最初に要点を
  3. 3. 製造業向け ソフトで Ruby採用
  4. 4. 製造業向け ソフト開発でも Ruby活用
  5. 5. Good
  6. 6. 以上
  7. 7. はじめに
  8. 8. はじめに 自己紹介 会社紹介 背景 事例紹介 ASFALIS 導入まで CANVAS Script 社内利用事例 謝辞
  9. 9. 開催おめでとう ございます
  10. 10. Ruby といえば 島根 matz江
  11. 11. 青春 プレイバック NHKアーカイブス 保存番組検索「青春ブレイバック」 http://archives.nhk.or.jp/chronicle/search/
  12. 12. fj.sources 1995/12/21
  13. 13. >まつもと ゆきひろ@トヨタケーラムです. >ここのところ,細々と開発を続けて来た >オブジェクト指向スクリプト言語 rubyを >公開します. (fj.sources: 1995/12/21) Newsgroup: fj.sources From: m...@caelum.co.jp (Yukihiro Matsumoto) Date: 1995/12/21 Subject: ruby 0.95 - object-oriented script language (0/7)
  14. 14. 名古屋はRuby デビューの地
  15. 15. デビュー?
  16. 16. 浜松
  17. 17. 1990年に卒業して、ソフトハウスに入り ました(中略)でも、浜松で働ける会社と出 合って、そこを選ぶんです。 (中略: 丌景気になり) それでRubyの開発を始めたんです。会 社でやっていましたから、同僚には話して いました。いろいろ応援してくれましたね。 Tech総研「世界のオープンソースRuby開発者まつもとゆきひろ」 http://rikunabi-next.yahoo.co.jp/tech/docs/ct_s03600.jsp?p=001005
  18. 18. 浜松は Ruby 誕生の地
  19. 19. 浜Matzは Ruby 誕生の地
  20. 20. はじめに 自己紹介 会社紹介 背景 事例紹介 ASFALIS 導入まで CANVAS Script 社内利用事例 謝辞
  21. 21. 自己紹介
  22. 22. suchi http://www.suchi.org/ Ruby Lv: 初心者→中級 好きなメソッド: String#% 好きなrubyist: id: m_seki 好きなアジャイルプラクティス: ありのままの進捗を計測 好きなXPプラクティス: 計画ゲーム 好きなもの: 似てるもの
  23. 23. 1990年に卒業して、ソフトハウスに入り ました(中略)でも、浜松で働ける会社と出 合って、そこを選ぶんです。 (中略: 丌景気になり) それでRubyの開発を始めたんです。会 社でやっていましたから、同僚には話して いました。いろいろ応援してくれましたね。 Tech総研「世界のオープンソースRuby開発者まつもとゆきひろ」 http://rikunabi-next.yahoo.co.jp/tech/docs/ct_s03600.jsp?p=001005
  24. 24. 同僚のYさん =最初の上司
  25. 25. 4107冊 http://hondana.org/suchi
  26. 26. 似てるもの
  27. 27. 業務では 品質管理 シニアマネージャ (開発もします)
  28. 28. http://d.hatena.ne.jp/higayasuo/
  29. 29. Coraleef VB/Delphi App → Adobe AIR 移行Tool ・開発リーダー ・フルセットXP開発 ・社内初のアジャイル事例 →以降社内では当たり前の選択肢に http://www.isid.co.jp/solution/development/coraleef.html http://itpro.nikkeibp.co.jp/article/COLUMN/20071128/288169/
  30. 30. はじめに 自己紹介 会社紹介 背景 事例紹介 ASFALIS 導入まで CANVAS Script 社内利用事例 謝辞
  31. 31. 会社紹介
  32. 32. 株式会社エリジオン • 本社: 静岡県浜松市 • 設立: 1999/11/1 • 社員数: 71名 http://www.elysium.co.jp/
  33. 33. 技術ベース • 3次元形状処理 • データ変換 • データ検証・修正 http://www.elysium.co.jp/
  34. 34. Web採用ページ • 一辺の長さが2nの立方体があり(nは整数)、その中心に 直径2n-1の球を配置します。 • 立方体を一辺1の格子に区切ったとき、球の表面が通過 する格子の数をXとします。 • X>2008となる最小のnはいくつでしょうか? http://www.elysium.co.jp/recruit/pretestx/000014.html
  35. 35. Renault F1 Team 公式サプライヤ データ変換 2週間⇒3.5時間 http://www.renaultf1.com/en/_2009/team/partenaires/partenaires_rf1/partenaires_is_it_partners/partenaires_is_it_partners_elysium/
  36. 36. 事例紹介
  37. 37. はじめに 自己紹介 会社紹介 背景 事例紹介 ASFALIS 導入まで CANVAS Script 社内利用事例 謝辞
  38. 38. 背景
  39. 39. 3Dデータ処理 • 1) 3D CADデータ変換 • 2) データチェック • 3) データ修正 • 4) データ最適化 • 5) Viewer • 6) and so on...
  40. 40. 1)CADデータの変換 CAD(A) CAD(B) NG!
  41. 41. 1)CADデータの変換 CAD(A) NG! CAD(B) OK
  42. 42. 2) データチェック
  43. 43. 3) データ修正 • Healing
  44. 44. 4) データ最適化 • 例:簡略化
  45. 45. 5) Viewer
  46. 46. 6) その他いろいろ Auto-Surfacing Polygon Processing
  47. 47. 中間表現 • 多数のCAD • データ変換 – 現在も15種類以上 – NxNの組み合わせ • CATIA V4 • データ処理 • CATIA V5 – 一般化 • I-DEAS • Pro/E • UG • SolidWorks • Inventor • CoCreate • :
  48. 48. まもなく Ruby 出てきます
  49. 49. はじめに 自己紹介 会社紹介 背景 事例紹介 ASFALIS 導入まで CANVAS Script 社内利用事例 謝辞
  50. 50. ASFALISモジュール化 • 3Dデータ処理のためのモジュールパッケ ージ – CAD X用 • ENF Writer • ENF Reader – Optimizer – Checker – Viewer – 内部的に • 共通処理カーネル
  51. 51. ASFALIS – ENF中心のソリューション
  52. 52. ASFALISの利用方法 • 受託案件におけるコンポーネント • 顧客のシステムへの組み込み • 代理店様の別システムへの組み込み
  53. 53. ASFALISをさらに使いやすく • 部課単位で使いたい • 小規模な業務フローを簡単に記述したい • セールスチームが顧客用なシンプルなカ スタマイズしたい
  54. 54. シナリオファイル <?xml version="1.0"?> • 手順をXMLで記述 <ScenarioList> <Scenario> – シンプルな手順に有効 <CAD2ENF> <inputfile path="${INPUTFILE} • →さらに使いやすく <outputfile path="${OUTPUTFIL <parameterfile path="${PARAME – 外部モジュールを呼びたい <productcode id="105001" /> <workdir path="${WORKDIR}" /> – 条件分岐/判定したい <logfile path="${LOGFILE}" /> <xmllogfile path="${XMLLOGFIL • モジュール返値 </CAD2ENF> • データチェックの結果 <ASMEDIT> • ファイルの存在 <inputfile path="${OUTPUTFILE <outputfile path="${OUTPUTFIL <parameterfile path="${PARAME <workdir path="${WORKDIR}" /> <logfile path="${LOGFILE}" /> <xmllogfile path="${XMLLOGFIL </ASMEDIT> <ATTREDIT>
  55. 55. はじめに 自己紹介 会社紹介 背景 事例紹介 ASFALIS 導入まで CANVAS Script 社内利用事例 謝辞
  56. 56. ELYSIUM CANVAS Script
  57. 57. お待たせしました Ruby です
  58. 58. CANVAS Script • CAx iNtegrator Via Asfalis Solution • Rubyから各モジュールを呼び出せる • モジュールのInput/Outputの接続をわかり やすく • CADが必要なモジュールのリモート呼び出し • ユーザコンポーネントを定義可能 – 顧客独自のコンポーネントの定義が可能
  59. 59. スクリプト例 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]) }
  60. 60. 準備 require 'canvas'
  61. 61. セッション CANVAS::Session.open {|session| : : }
  62. 62. コンポーネント生成 parasolid2enf = session.create_component(:parasolid2enf) asmedit = session.create_component(:asmedit) attredit = session.create_component(:attredit)
  63. 63. コンポーネントの設定 コンポーネントの接続 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'
  64. 64. セッション実行 session.start
  65. 65. スクリプト例 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]) }
  66. 66. 詳しいサンプルはWebで http://www.elysium.co.jp/products/asfalis/index.html
  67. 67. Desktop Controler • ADC(ASFALIS Desktop Controller) – データ処理をスケジューリング – CANVAS Scriptを生成/実行 – 簡単に定期処理、夜間バッチ変換システムを構築可能 – MFCアプリケーション
  68. 68. モジュール図 Ruby Win Script App Server Canvas Canvas CANVAS Library Library Script dRuby dRuby ADC (MFC Win App) ASFALIS Component Loader Scheduler (Console App) (Console App) derived proe2enf asmedit pro2enf.exe asmedit.exe Component Component (Console App) (Console App)
  69. 69. Good • 動的言語やモダンな言語のメリット享受 – C/C++と比べて • 驚くほど簡単に記述できる。 • 自然に書けて行数尐ない/手間尐ない。 • メソッド上書きやeval • dRuby • 豊富なライブラリ • 行き詰まったときにWebに情報が多い
  70. 70. Bad • (社内)アーリーアダプタ特有のトラブル – 当然あったが – リスクを見込んだスケジューリングでカバー • dRuby – 透過的に書けすぎて、サーバ/クライアントの結合が 密になってしまった
  71. 71. Bad • 海外代理店からは「Ruby?」 – 別言語のI/Fを追加するかも – 日本の代理店に置き換えて考えてみよう • Allegro Common Lisp? / Lua? • 理解できる • スピード – 1.9対応したい
  72. 72. 要望 • gemでインストールするとき、メモリ消 費が激しい • gemの配布条件を調べるのに手間がかか った – たとえばこんなオプションがあれば – gem -license actionmailer
  73. 73. 導入まで
  74. 74. はじめに 自己紹介 会社紹介 背景 事例紹介 ASFALIS 導入まで CANVAS Script 社内利用事例 謝辞
  75. 75. 現状: 社内Rubyユーザ • 開発者約30人 – カタコトも含めれば2/3はRubyを使える – Ruby技術レベルは決して突出していない • 業務でのRuby利用 – イキのいい若い社員が主導
  76. 76. 各個人での利用はずっと前から • さまざまな開発手続きの自動化やワンラ イナー – バッチファイル, Born-Shell, Perl, Ruby, Windows Script(VBScript/JScript), Windows PowerShell, Python • あまり制限されない。任されている • が、ここ5年でRubyがデファクト化
  77. 77. 勉強会 • 勉強会が推奨されている – 裁量性なので、時間も自由 – デザインパターン / Effective C++ – Code Complete /アジャイル開発 – ISO 10303-59 / 計算位相幾何
  78. 78. 2005-2006 CODE COMPLETE 2nd 勉強会 14名(入社1-2年目社員中心) 34章を1年でCOMPLETE
  79. 79. Ruby勉強会 • 2007 • 参加者: 14名 • スキルにあった内容を皆バラバラに学ぶ
  80. 80. Ruby導入 • 役員、上司、お客様からの制限はなし – 問題解決指向 • CTO – 技術全般への目の配り – 例: ファウラー「リファクタリング」 • 開発者に基本的に任されている • 社風 – 取り組みを評価する社風 – 例: アジャイル導入 • トップが柔軟で理解がある • 目的指向
  81. 81. とはいえ • 安易な考えは却下 • 顧客対応部署に説明できるか • 浮かれRubyistではないか – 手段が目的より優先してないか – おまえRubyって言いたいだけちゃうんか • リスクを認識しているか • 覚悟はあるか – 一度否定されて引っ込めるようではダメ – いざというときRuby/Libraryのせいにしない – いざというときソースを読む覚悟
  82. 82. s/Ruby/ソーシャルなんとか/g s/Ruby/クラウド/g s/Ruby/twitter/g s/Ruby/.NET/g s/Ruby/Rails/g
  83. 83. Why Ruby? • Good参照
  84. 84. バランス感覚重要 • エンジニアの重要な資質? – パラノ資質と共存可能 • 他言語/システムを知っているか – Rubyだけ勉強していてもダメ – 一部業界だけを参考にしてもダメ • 永遠のβ←日本の製造業の超高品質プロセスを維持できるか? • メリット/デメリットを正確に挙げられるか – それ○○でできるよ
  85. 85. 社内利用例
  86. 86. はじめに 自己紹介 会社紹介 背景 事例紹介 ASFALIS 導入まで CANVAS Script 社内利用事例 謝辞
  87. 87. 社内利用例 • 個人的なスクリプト • プロジェクト内のスクリプト • 社内カーネル利用インターフェイス • テストで使うスクリプト • テストシステム(サーバはRails) • Redmine – でも主要は独自タスクDB(運用10年) – アジャイル開発はXPlanner
  88. 88. 一時的なスクリプト • 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
  89. 89. テスト用ツール • 高い品質維持 – テストの増加 • テストの自動化 – テストの自動生成
  90. 90. 中間ファイル操作ライブラリ • C/C++で作成されたライブラリ – Rubyから呼びだすためのライブラリ • 機能テストの判定に利用 • 開発中に利用
  91. 91. ENF Handler ENF Info ENF Rubyによる Reader Editor ... 各種ツール (Ruby) (Ruby) ENF Handler (Ruby) Ruby I/Fは 下層に依存しない Ruby C拡張 Handlerに必要な ところだけ C I/F ELYSIUM Foundation Class Library(C++)
  92. 92. テストシステム • Railsを利用したテストサーバ • Rubyによる実行システム • 判定条件を名前付けRubyクラスで記述 • テスト項目は判定条件とパラメータ • →自動テスト可能に
  93. 93. 今後
  94. 94. 今後のRuby利用 • CANVAS Script – 続々と展開中、典型的利用方法もライブラリ化 • テストシステム開発 • 新規開発プロジェクトでもRuby採用 – 複数言語のシステム • C/C++ ~ 長く継続していたWindows App • C#(.NET) ~ 新規作成Windows GUI App / クライアント • Ruby ~ サーバ(Railsも利用) • サーバ/Client間はSOAP – Rubyにこだわっていない • ←→Rubyに価値がある証拠!
  95. 95. はじめに 自己紹介 会社紹介 背景 事例紹介 ASFALIS 導入まで CANVAS Script 社内利用事例 謝辞
  96. 96. 謝辞
  97. 97. 名古屋Ruby会議 Rubyの会 他Rubyに関わる皆様
  98. 98. Regional Ruby会議発案者 角谷信太郎 さん
  99. 99. http://b.hatena.ne.jp/entry/twitter.com/suchi/statuses/
  100. 100. @Wikiばな Vol.7 http://wikibana.socoda.net/wiki.cgi?WikiBana%2fVOL.7
  101. 101. ところで 角谷さんの翻訳された
  102. 102. 最後にも要点を
  103. 103. 製造業向け ソフトで Ruby採用
  104. 104. 製造業向け ソフト開発でも Ruby活用
  105. 105. Good
  106. 106. 名古屋はRuby デビューの地
  107. 107. 開催おめでとう ございます
  108. 108. 以上
  109. 109. ご清聴 ありがとうございました
  110. 110. 付録
  111. 111. 現実的なスクリプト例 • 1. 解析に丌要な微小部品を削除 – ASFALISアダプタ(体積取得) – アセンブリ編集コンポーネント(削除) • 2. 解析失敗の原因となる部品間干渉を検証 – 干渉チェックコンポーネント – アセンブリ編集コンポーネント(削除) • 3. 解析に丌適な形状削除 – 形状簡略化コンポーネント(フィレット・段差削除) – 干渉チェックコンポーネント(簡略化後の干渉チェック) • 4. CAEツール向けにデータ修正しParasolidへ変換 – ASFALISアダプタ(ヒーリング/Parasolid形式へ変換)
  112. 112. フロー A B A B
  113. 113. スクリプト例(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')
  114. 114. スクリプト例(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'
  115. 115. スクリプト例(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]
  116. 116. スクリプト例(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

×