短絡的に作るRuby DSL 公開版

6,045 views
5,918 views

Published on

短絡的に作るRuby DSL 公開版

Published in: Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,045
On SlideShare
0
From Embeds
0
Number of Embeds
1,402
Actions
Shares
0
Downloads
30
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

短絡的に作るRuby DSL 公開版

  1. 1. @bash0C7 こしば としあき 日本Ruby会議 2010実行委員 IDE派 Ruby,PHPユーザ
  2. 2. モバイルショッピング事業室
  3. 3. 11/20(土)PM RailsDevCon
  4. 4. 2/4(金)夜 東京Ruby会議05 (予定)
  5. 5. お品書き menu
  6. 6. Ruby PowerPoint DSL
  7. 7. DSL ドメイン特化言語
  8. 8. Domain Specific Language
  9. 9. 汎化 特化
  10. 10. 汎化
  11. 11. Java Perl Ruby COBOL Fortran PHP
  12. 12. 特化
  13. 13. JCL make shell rake rspec sinatra
  14. 14. 外部 内部
  15. 15. 独自文法 汎用言語の文法
  16. 16. 外部DSL 内部DSL
  17. 17. 外部DSL
  18. 18. http://www.coplus.jp/download/m/GC88-6578-09(c8865789).pdf //INIT JOB 'accounting_info',MSGLEVEL=1 //JESDS OUTPUT JESDS=ALL,OUTDISP=(PURGE,WRITE) //INIT EXEC INIT //DD1 DD DSN=SYSTEM.ACCOUNT.DATA,DISP=SHR //* By TreyGeek (talk) 18:52, 16 May 2008 (UTC).TreyGeek at en.wikipedia [Public domain], from Wikimedia Commons
  19. 19. 内部DSL
  20. 20. rake rspec sinatra
  21. 21. rake rule '.o' => '.c' do |t| sh "cc -c -o #{t.name} #{t.source}" end file 'hello' => ['hello.o'] do sh 'cc -o hello hello.o' end http://ja.wikipedia.org/wiki/Rake
  22. 22. rspec describe Array, "when empty" do before do @empty_array = [] end it "should be empty" do @empty_array.should be_empty end http://jp.rubyist.net/magazine/?0021-Rspec
  23. 23. sinatra get '/hi' do "Hello World!" end http://www.sinatrarb.com/
  24. 24. いつ作る? どう作る?
  25. 25. プレゼン準備
  26. 26. Ruby DSL PowerPoint
  27. 27. DSL
  28. 28. 初期スケッチ presentation do slides do slide {……} slide {……} end end
  29. 29. 実装したDSL theme "theme.potx" title "短絡的に作るRubyDSL" text "Domail Specitific Language" text "特定の領域にのみ特化" division "DSL世界の2軸" section "Generic⇔Specitific"
  30. 30. ロード 評価 実行
  31. 31. >pptgen.rb [DSL file]
  32. 32. PresentationDSLProcesser.new(ARGF.read) def initialize(dsl_string) @app = WIN32OLE.new('Powerpoint.application') @presentation = @app.Presentations.Add eval(dsl_string) @presentation.saveas('aaa.pptx') @presentation.close @app.quit end
  33. 33. eval(dsl_string) 動けばええねん!
  34. 34. theme "theme.potx" title "短絡的に作るRubyDSL" text "Domail Specitific Language" text "特定の領域にのみ特化" division "DSL世界の2軸" section "Generic⇔Specitific"
  35. 35. スライド追加 スライド枚数++ レイアウト設定 文字列を設定
  36. 36. title "短絡的に作るRubyDSL"
  37. 37. title "短絡的に作るRubyDSL" → title(param) def title(param) add_slide(1) set_title(param) end
  38. 38. title(param) → add_slide(1) def add_slide(layout) @current_slide = @presentation.Slides.AddSlide( @presentation.Slides.Count + 1, @presentation.SlideMaster. CustomLayouts(1)) @current_slide.layout = layout end
  39. 39. title "短絡的に作るRubyDSL" → title(param) def title(param) add_slide(1) set_title(param) end
  40. 40. title(param) → set_title(param) def set_title(param) @current_slide.Shapes.Placeholders(1). TextFrame.TextRange.Text = param end
  41. 41. スライド追加 スライド枚数++ レイアウト設定 文字列を設定
  42. 42. title "短絡的に作るRubyDSL"
  43. 43. 一言 title(文字列)
  44. 44. PowerPoint
  45. 45. Win32OLE 標準添付ライブラリ
  46. 46. WIN32OLE.new ('Powerpoint.application') PowerPointをRubyから
  47. 47. Interaction.CreateObject ("Powerpoint.application") PowerPointをxxxから
  48. 48. CreateObject ("Powerpoint.application") PowerPointをVBA/VBSから
  49. 49. VBA/VBS→ppt Ruby→ppt
  50. 50. def initialize(presen) @app = WIN32OLE.new('Powerpoint.application') @presentation = @app.Presentations.Add eval(presen) @presentation.saveas('aaa.pptx') @presentation.close @app.quit end
  51. 51. VBA≒Office付属VB VBAライブラリ Interactionモジュール CreateObject関数
  52. 52. Ruby 標準添付ライブラリ Win32OLEクラス
  53. 53. まとめ
  54. 54. Rubyの文法 特定用途特化
  55. 55. Ruby DSL
  56. 56. title "短絡的に作るRubyDSL" 欲しいものを端的に表現
  57. 57. いつ作る?
  58. 58. 設計書生成 ビジネス文章生成 テストケース生成 ソースコード生成
  59. 59. どう作る?
  60. 60. eval(dsl_string) 動けばええねん!
  61. 61. Win32OLE erb 他色々!
  62. 62. Happy DSLing! ご清聴ありがとうございました
  63. 63. おまけ
  64. 64. VBA DSL preview版
  65. 65. DSLクラス Public Sub text(param As String) collection.Add "テキスト:" & param End Sub Public Sub title(param As String) collection.Add "タイトル:" & param End Sub
  66. 66. 解釈・実行 Dim dsl As New dsl Dim r As Range For Each r In ActiveSheet.UsedRange.Rows CallByName dsl, r.Columns(2), VbMethod, r.Columns(3) Next r dsl.disp
  67. 67. PHP DSL no sample
  68. 68. one more thing...
  69. 69. 即興DSL
  70. 70. 方眼紙Excel DSL

×