Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力

6,427 views

Published on

2011.11.12島根県松江市で開催された「OSC2011 Shimane」で発表した際のスライドです。ThinReports0.7の機能と今後、そしてThinReportsを支えるOSSや技術を紹介しています。

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

No Downloads
Views
Total views
6,427
On SlideShare
0
From Embeds
0
Number of Embeds
596
Actions
Shares
0
Downloads
30
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力

  1. 1. Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力 ThinReports.ORG 日高克也
  2. 2. 自己紹介
  3. 3. 日高 克也
  4. 4. @hidakatsuya
  5. 5. お仕事Ruby(2007∼)PHP(2004∼)業務システム開発
  6. 6. お話すること
  7. 7. 1. ThinReportsの紹介2. ThinReportsを支える OSS/技術の紹介
  8. 8. ThinReportsの紹介
  9. 9. RubyによるRubyのための帳票ソリューション
  10. 10. 全てオープンソース (絶賛公開中)
  11. 11. www.thinreports.org
  12. 12. @ThinReports.org
  13. 13. @thinreports_org
  14. 14. osc.matsukei.net
  15. 15. github
  16. 16. 速報! 2011/10/310.7正式版リリース!
  17. 17. さらに、ITproに掲載されました! 「Ruby向けOSS帳票ツールThinReports、 松江市の企業が島根県の助成で開発し無償公開」 2011/11/2 ITpro
  18. 18. ご尽力頂いた皆様、ありがとうございました!
  19. 19. 正式リリースまでの道のり
  20. 20. 2009/04 「原点」PXDocとの出会いSVGとの出会いPXDocの弱点 = GUIデザイナが無い
  21. 21. 2009/07 「しまね産業振興財団様の助成事業に採択」プロトタイプ版の開発スタート全てにおいて「ノウハウ0」
  22. 22. 2010/07 「同助成事業に再び採択」大量帳票印刷業務システム特有の機能開発
  23. 23. 2010/10 「0.6 Preview1をリリース」Editorにメモリリークのバグバグ、バグ、バグバグバグ...
  24. 24. 2011/01 「0.6 Preview2をリリース」予定外のリリース(4月に正式版リリースを予定)大量印刷時のメモリ消費に問題(Generator/PXDoc)急遽PDF対応へシフト
  25. 25. 2011/07 「0.6 Preview3をリリース」PDF推奨、PXDoc非推奨へアーキテクチャレベルから見直し結果として、良い方向へ
  26. 26. 2011/10 「0.7 正式版をリリース」PXDocの廃止多くの新機能
  27. 27. 特徴
  28. 28. ThinReports Editor
  29. 29. ThinReports Editor専用デザイナWindows/Mac/Linux対応GPLv3
  30. 30. ThinReports Generator
  31. 31. ThinReports Generator専用Rubyライブラリ(gem)Ruby 1.8.7/1.9.2+The MIT License
  32. 32. Quick Start
  33. 33. 1. インストール (Editor)詳細は Installation Guide を参照
  34. 34. 1. インストール (Generator)$ gem install thinreports
  35. 35. 2. レイアウトを作成
  36. 36. 3. コードを書く# coding: utf-8require thinreportsThinReports::Report.generate_file(ruby-papa.pdf) do use_layout ruby-papa.tlf start_new_page do item(:answer).value(Matz!) endend
  37. 37. 出来上がり
  38. 38. できること(主な機能)
  39. 39. 複数レイアウトの混在
  40. 40. 複数レイアウトの混在report = ThinReports::Report.create do use_layout cover.tlf, :id => :cover use_layout page.tlf, :default => true start_new_page :layout => :covert start_new_page do item(:content).value(1) end start_new_page :layout => /path/to/back_cover.tlfendreport.generate_file(multiple.pdf)
  41. 41. 複数レイアウトの混在
  42. 42. 一覧表の自動生成
  43. 43. 一覧表の自動生成report = ThinReports::Report.newreport.use_layout basic_list.tlfreport.start_new_pagereport.page.list(:basic_list) do |list| 30.times do |t| list.add_row :detail => "row##{t + 1}" endendreport.generate_file(basic_list.pdf)
  44. 44. 一覧表の自動生成
  45. 45. 外字の表示
  46. 46. 外字の表示ThinReports.configure do # *.TTE => *.TTF generator.pdf.eudc_fonts = /path/to/eudc.ttfendThinReports::Report.generate_file(eudc.pdf) do use_layout eudc.tlf start_new_page do item(:eudc).value("日本で生まれ世界が育てた言語n" + " uby") endend "□" = 外字
  47. 47. 外字の表示
  48. 48. 動的なスタイル操作item(:rect).style(:fill_color, #ff0000)item(:rect).style(:border_color, red)item(:rect).style(:border_width, 5)item(:text).style(:color, #0000ff)item(:text).style(:bold, true)item(:text_block).style(:align, :right)item(:text_block).style(:valign, :center)item(:ellipse).hideitem(:ellipse).show# Method chainitem(:line).show.style(:border_color, red)# Hashitem(:rect).styles(:fill_color => red, :border_color => blue)
  49. 49. 仕様書の自動生成
  50. 50. 仕様書の自動生成
  51. 51. その他セキュリティ(暗号化/パスワード/操作制限)動的な画像埋め込み(ローカル or URI) 詳しくは公式サイトで
  52. 52. できないこと(需要がありそうな機能の中で)
  53. 53. カスタムフォントグラフバーコード
  54. 54. カスタムフォントHelveticaCourier NewTimes RomanIPAフォント(明朝/ゴシック) 現時点で利用できるのは上記のみ (今後追加機能を対応)
  55. 55. グラフGoogle Chart APIGruff等のライブラリ イメージブロック機能 との組み合わせで実現は可能
  56. 56. + Google Chart API
  57. 57. バーコードbarbygbarcoderghost-barcode等 イメージブロック機能 との組み合わせで実現は可能
  58. 58. + barby
  59. 59. 使うべき3つの理由
  60. 60. 1. GUI Editorがあるというか、無いと無理UIを含む全てにおいて日本語対応マルチプラットフォーム
  61. 61. 2. Generator is Pure Ruby必要なのは、Rubyとgem達だけ実行環境がシンプル 構築、保守の負担減 汎用性向上(環境を選ばない)
  62. 62. 3. オープンソースモンキーパッチで対応できる開発に参加できたりもするバグ報告、提案大歓迎無償
  63. 63. 今後
  64. 64. サポートサービス最優先メールによるQA定期的なパッチの提供リファレンスマニュアルの閲覧権限
  65. 65. 主要タスク(Editor)一覧表ツールの刷新(Editor)テキストの縦書き(Generator)自動キャッシュ(Generator)Ruby1.9.3対応
  66. 66. その他Framework Modeメモリ消費の安定化(Generator)ロゴの作成※作って頂ける心優しい方募集中
  67. 67. 拡張ライブラリ (妄想レベル)
  68. 68. thinreports-railsArticle.all.to_pdf(:layout => article.tlf) レイアウトのIDとテーブルのカラム名を同一にしておく to_pdf() で自動的にPDFを生成 (注)全て妄想の範囲内です
  69. 69. thinreports-scaffold$ rails g tlf_scaffold foo.tlf レイアウトファイルからmodel/view/controllerを生 成 需要ある?(技術的には可能) (注)全て妄想の範囲内です
  70. 70. さらに
  71. 71. Editorは仕組み的に「ブラウザ上で動作可能」
  72. 72. ThinReports Cloud (そう遠くない将来)
  73. 73. ThinReportsを支える OSSと技術
  74. 74. Editorの中
  75. 75. Editorの中の中ThinReportsEditor/ + core/ (Core, UI) | + assets/ | | + icons/ | | + application-compiled.css | + application.html | + application-compiled.js + ThinReportsEditor.exe (Platform) : ThinReportsEditor.exe は起動時に application.html をロードしているだけ
  76. 76. QtLGPLv2.1/GPLv3
  77. 77. Closure Library Apache License 2.0
  78. 78. Generatorの中
  79. 79. PrawnPure RubyなPDFジェネレータ現在も活発に開発が進められている
  80. 80. 余談ThinReportsのChangelogにも取り入れる予定
  81. 81. Closure Tools
  82. 82. Google製 JavaScript開発ツールClosure LibraryClosure CompilerClosure Template
  83. 83. Closure Library
  84. 84. Editorを構成する最も重要なライブラリ (ほぼ全てを担う)
  85. 85. 特徴JavaScriptフレームワークGoogleのプロダクトで実際に利用されている(Gmail/Maps/Docs...)
  86. 86. 特徴"型" の概念(with Compiler)豊富なUIコンポーネントテストフレームワーク ...などなど多数
  87. 87. 興味のある方は以下の記事が参考に「Closure Libraryを使うべき10の理由」 - WebOS Goodies -
  88. 88. 採用した理由(1)SVG関連ライブラリが充実
  89. 89. 採用した理由(2) JavaScriptのコーディングスタイルが 「カチッと決まる」goog.provide(thin.Version);goog.require(goog.string);/** * @param {boolean=} opt_ignorePre * @return {string} */thin.Version.getVersion = function(opt_ignorePre) { var res = [thin.Version.MAJOR, thin.Version.MINOR, thin.Version.TINY]; // ...中略... return res.join(.);};
  90. 90. 採用した理由(3) Compilerがスゴすぎる/** * @param {string} name */function hello(name) { alert(Hello, + name);}hello(New User); コンパイル後 (ADVANCED_OPTIMIZATION)alert(Hello, New User);
  91. 91. 採用した理由(3) Compilerがスゴすぎる application-compiled.js コンパイル前 コンパイル後合計サイズ 2,000KB 360KBファイル数 200 1 パフォーマンスも大幅に向上
  92. 92. 最後に
  93. 93. ThinReportsは、 まだまだバグも多く 機能も足りない 若いプロダクトです。
  94. 94. 一緒に育てていきましょう!
  95. 95. というか、一緒に育てて下さい。 お願いします。
  96. 96. 開発者2名 @hidakatsuya@minoru_maeda
  97. 97. 手段は問いません。 バグ報告、提案等々お待ちしています!
  98. 98. ご清聴ありがとうございました 公式サイト http://www.thinreports.org/ 公式facebook http://www.facebook.com/ThinReports.org 公式Twitter @thinreports_org ThinReports Documenation Installation Guide Getting Started Examples

×