Open Source Reporting Solution




                                 株式会社マツケイ
                                    日高 克也
                                    Katsuya Hidaka
                                 Twitter: @hidakatsuya
                                 github: hidakatsuya
                                 Email: hidakatsuya@gmail.com
Rubyによる
 Rubyのための
帳票ソリューション
提供

株式会社マツケイ
  (島根県)
しまねけん?
なぜ
 Rubyの
帳票ツール?
満足できるものが
   無くて困っていた
✗ 日本語未対応...
✗ GUIデザイナがない
✗ さすがに高い
✗ さすがに遅い
✗ 使いにくい...
なら、作ればいい
Pure Ruby!
オープンソース
業務システムでも使える
特徴
ThinReports Editor
ThinReports Editor
๏ 専用デザイナ

๏ マルチプラットフォーム対応
๏ GNU GPLv3
๏ 多くのOSS、標準技術で実現
 Webkit/Qt/HTML5/CSS3/SVG/JavaScript/Closure Tools etc..
ThinReports Generator
ThinReports Generator
 ๏ Editorで作成したレイアウトから
   帳票を生成するライブラリ (PDF)
 ๏ Pure Ruby
 ๏ マルチプラットフォーム対応
 ๏ The MIT License
こうやって使います。
1. 帳票レイアウトを
     作る
2. スクリプトを
              書いて実行
# coding: utf-8
require 'thinreports'

report = ThinReports::Report.new :layout => 'question.tlf'

report.start_new_page do
  item(:answer).value('Ruby!!!')
end

report.generate_file('question.pdf')


% ruby question.rb
3. PDFのできあがり
できること
一覧表の自動生成




詳細行が領域を溢れた場合は、自動的に改頁される。
現時点では「ヘッダー/フッター/ページフッター/詳細行」を持つ一覧表を作成できる。
外字の表示




Windowsの外字エディタで作成した外字ファイル(EUDC.TTE)をThinReportsに指定す
ることで、外字データを含むPDFを正しく表示することが可能。
グラフやバーコードの表示




イメージブロック機能(動的画像の埋込み機能)とグラフやバーコード画像を生成するラ
イブラリを組み合わせることで、柔軟に対応できる。
パスワード/操作制限
仕様書の自動生成




Editor から HTML/CSV 形式で仕様書を生成することが可能。これによって「デザイン
とコードの分離」をサポート。
Railsでも
# Gemfile
gem 'thinreports'


# app/controller/test_controller.rb
class TestController < ApplicationController
  def render_reports
    report = ThinReports::Report.new :layout => '/path/to/layout.tlf'
    report.start_new_page do
      # do something
    end

    send_data report.generate, :filename    => 'foo.pdf',
                               :type        => 'application/pdf',
                               :disposition => 'attachment'
  end
end
その他
๏ 画像の埋め込み(静的・動的)

๏ 動的なスタイル操作

など
できないこと
イマイチなこと
フォントは4種類のみ
๏ Helvetica (Sans-serif)

๏ Courier New (Monospace)
๏ Times New Roman (Serif)
๏ IPAフォント (明朝/ゴシック)
一覧表の機能がまだまだ
๏ 小計行を簡単には実現できない
 現在は、詳細行/ページフッター/フッターのみ

๏ 高さが可変な行は実現できない
 かなり難しいかもしれない...

๏ Editor 上の操作性がイマイチ
今後
0.7.5リリース
๏ 2012.2 2012.4予定
๏ Editorの国際化
๏ カスタムフォント機能
๏ 操作性の改善
thinreports-rails
๏ 2012.2 2012.3予定
๏ Rails3用拡張ライブラリ
๏ Rails3で、より簡単に
 ThinReportsを使える
ご案内
www.thinreports.org




   ThinReports に興味のある方は、まずはこちらへ
github




ThinReports の全てのソースコードは、github で公開
osc.matsukei.net




 ロードマップやタスク、進捗状況の閲覧に加えて、
      ドキュメントやフォーラムも
tw: @thinreports_org
 fb: ThinReports.org
お知らせ
有償サポート始めました
๏ メールによるQAが基本
๏ メニューはありません
๏ 公式サイトよりお問い合
 せ下さい
ありがとうございました

Fukuoka Ruby Award 2012

Editor's Notes

  • #2 &amp;#x305D;&amp;#x308C;&amp;#x3067;&amp;#x306F;&amp;#x3001;ThinReports&amp;#x306E;&amp;#x767A;&amp;#x8868;&amp;#x3092;&amp;#x59CB;&amp;#x3081;&amp;#x3055;&amp;#x3057;&amp;#x3066;&amp;#x9802;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x5CF6;&amp;#x6839;&amp;#x770C;&amp;#x304B;&amp;#x3089;&amp;#x53C2;&amp;#x308A;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3001;&amp;#x682A;&amp;#x5F0F;&amp;#x4F1A;&amp;#x793E;&amp;#x30DE;&amp;#x30C4;&amp;#x30B1;&amp;#x30A4;&amp;#x306E;&amp;#x65E5;&amp;#x9AD8;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x3088;&amp;#x308D;&amp;#x3057;&amp;#x304F;&amp;#x304A;&amp;#x9858;&amp;#x3044;&amp;#x81F4;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #3 ThinReports&amp;#x3068;&amp;#x306F;&amp;#x306A;&amp;#x3093;&amp;#x306A;&amp;#x306E;&amp;#x304B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3068;&amp;#x3001;\n&amp;#x300C;Ruby&amp;#x306B;&amp;#x3088;&amp;#x308B;&amp;#x3001;Ruby&amp;#x306E;&amp;#x305F;&amp;#x3081;&amp;#x306E;&amp;#x5E33;&amp;#x7968;&amp;#x30BD;&amp;#x30EA;&amp;#x30E5;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x300D;\n&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #4 ThinReports&amp;#x3068;&amp;#x306F;&amp;#x306A;&amp;#x3093;&amp;#x306A;&amp;#x306E;&amp;#x304B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3068;&amp;#x3001;\n&amp;#x300C;Ruby&amp;#x306B;&amp;#x3088;&amp;#x308B;&amp;#x3001;Ruby&amp;#x306E;&amp;#x305F;&amp;#x3081;&amp;#x306E;&amp;#x5E33;&amp;#x7968;&amp;#x30BD;&amp;#x30EA;&amp;#x30E5;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x300D;\n&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #5 &amp;#x3067;&amp;#x306F;&amp;#x3001;&amp;#xFF13;&amp;#x3064;&amp;#x306E;&amp;#x7279;&amp;#x5FB4;&amp;#x3092;&amp;#x3042;&amp;#x3052;&amp;#x3066;&amp;#x3001;&amp;#x3082;&amp;#x3046;&amp;#x5C11;&amp;#x3057;&amp;#x8A73;&amp;#x3057;&amp;#x304F;&amp;#x3054;&amp;#x8AAC;&amp;#x660E;&amp;#x3057;&amp;#x305F;&amp;#x3044;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #6 &amp;#x305D;&amp;#x3093;&amp;#x306A;ThinReports&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;\n&amp;#x306A;&amp;#x305C;Ruby&amp;#x306E;&amp;#x5E33;&amp;#x7968;&amp;#x30C4;&amp;#x30FC;&amp;#x30EB;&amp;#x306A;&amp;#x306E;&amp;#x304B;&amp;#xFF1F;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3068;&amp;#x3001;\n
  • #7 &amp;#x3053;&amp;#x308C;&amp;#x306F;&amp;#x3001;\nGUI&amp;#x4E0A;&amp;#x3067;&amp;#x30EC;&amp;#x30A4;&amp;#x30A2;&amp;#x30A6;&amp;#x30C8;&amp;#x306E;&amp;#x4F5C;&amp;#x6210;&amp;#x3084;&amp;#x7DE8;&amp;#x96C6;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x3001;\n&amp;#x5148;&amp;#x307B;&amp;#x3069;&amp;#x898B;&amp;#x3066;&amp;#x9802;&amp;#x3044;&amp;#x305F;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#xFF08;&amp;#x524D;&amp;#x30DA;&amp;#x30FC;&amp;#x30B8;&amp;#x3078;&amp;#xFF09;&amp;#x3001;Mac/Linux/Windows&amp;#x3067;&amp;#x52D5;&amp;#x4F5C;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #8 \n
  • #9 &amp;#x307E;&amp;#x305A;&amp;#x3001;&amp;#x4E00;&amp;#x3064;&amp;#x76EE;&amp;#x306E;&amp;#x7279;&amp;#x5FB4;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x3001;\n&amp;#x5C02;&amp;#x7528;&amp;#x30C7;&amp;#x30B6;&amp;#x30A4;&amp;#x30CA;&amp;#x3068;&amp;#x5C02;&amp;#x7528;&amp;#x30E9;&amp;#x30A4;&amp;#x30D6;&amp;#x30E9;&amp;#x30EA;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #10 &amp;#x5E33;&amp;#x7968;&amp;#x30C4;&amp;#x30FC;&amp;#x30EB;&amp;#x3067;&amp;#x3059;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x5F53;&amp;#x7136;&amp;#x5E33;&amp;#x7968;&amp;#x30EC;&amp;#x30A4;&amp;#x30A2;&amp;#x30A6;&amp;#x30C8;&amp;#x3092;&amp;#x4F5C;&amp;#x6210;&amp;#x3059;&amp;#x308B;GUI&amp;#x30C4;&amp;#x30FC;&amp;#x30EB;&amp;#x304C;&amp;#x5FC5;&amp;#x8981;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x305D;&amp;#x308C;&amp;#x304C;&amp;#x3001;&amp;#x3053;&amp;#x306E;ThinReports Editor&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #11 &amp;#x3053;&amp;#x308C;&amp;#x306F;&amp;#x3001;\nGUI&amp;#x4E0A;&amp;#x3067;&amp;#x30EC;&amp;#x30A4;&amp;#x30A2;&amp;#x30A6;&amp;#x30C8;&amp;#x306E;&amp;#x4F5C;&amp;#x6210;&amp;#x3084;&amp;#x7DE8;&amp;#x96C6;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x3001;\n&amp;#x5148;&amp;#x307B;&amp;#x3069;&amp;#x898B;&amp;#x3066;&amp;#x9802;&amp;#x3044;&amp;#x305F;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#xFF08;&amp;#x524D;&amp;#x30DA;&amp;#x30FC;&amp;#x30B8;&amp;#x3078;&amp;#xFF09;&amp;#x3001;Mac/Linux/Windows&amp;#x3067;&amp;#x52D5;&amp;#x4F5C;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #12 &amp;#x5BFE;&amp;#x3057;&amp;#x3066;&amp;#x3001;Ruby&amp;#x7528;&amp;#x306E;&amp;#x30E9;&amp;#x30A4;&amp;#x30D6;&amp;#x30E9;&amp;#x30EA;&amp;#x3068;&amp;#x3057;&amp;#x3066;\nThinReports Generator&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #13 &amp;#x3053;&amp;#x308C;&amp;#x306F;&amp;#x4F55;&amp;#x304B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3068;&amp;#x3001;&amp;#x5148;&amp;#x307B;&amp;#x3069;&amp;#x306E;Editor&amp;#x3067;&amp;#x4F5C;&amp;#x6210;&amp;#x3057;&amp;#x305F;&amp;#x30EC;&amp;#x30A4;&amp;#x30A2;&amp;#x30A6;&amp;#x30C8;&amp;#x3092;&amp;#x8AAD;&amp;#x307F;&amp;#x8FBC;&amp;#x3093;&amp;#x3067;&amp;#x3001;\n&amp;#x6700;&amp;#x7D42;&amp;#x7684;&amp;#x306A;&amp;#x5E33;&amp;#x7968;&amp;#x3092;&amp;#x751F;&amp;#x6210;&amp;#x3059;&amp;#x308B;&amp;#x30E9;&amp;#x30A4;&amp;#x30D6;&amp;#x30E9;&amp;#x30EA;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n\n&amp;#x5927;&amp;#x304D;&amp;#x306A;&amp;#x7279;&amp;#x5FB4;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x306F;&amp;#x3001;Pure-Ruby&amp;#x304C;&amp;#x3042;&amp;#x3052;&amp;#x3089;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x3064;&amp;#x307E;&amp;#x308A;&amp;#x3001;&amp;#x5168;&amp;#x3066;Ruby&amp;#x3067;&amp;#x4F5C;&amp;#x3089;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x3001;Ruby&amp;#x304C;&amp;#x52D5;&amp;#x4F5C;&amp;#x3059;&amp;#x308C;&amp;#x3070;&amp;#x540C;&amp;#x69D8;&amp;#x306B;&amp;#x52D5;&amp;#x304F;&amp;#x3001;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #14 &amp;#x305D;&amp;#x308C;&amp;#x3067;&amp;#x306F;&amp;#x3001;&amp;#x7C21;&amp;#x5358;&amp;#x306A;&amp;#x4F7F;&amp;#x3044;&amp;#x65B9;&amp;#x3092;&amp;#x3054;&amp;#x7D39;&amp;#x4ECB;&amp;#x3057;&amp;#x305F;&amp;#x3044;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #15 &amp;#x307E;&amp;#x305A;&amp;#x306F;&amp;#x3001;&amp;#x5E33;&amp;#x7968;&amp;#x30EC;&amp;#x30A4;&amp;#x30A2;&amp;#x30A6;&amp;#x30C8;&amp;#x3092;&amp;#x4F5C;&amp;#x6210;&amp;#x3059;&amp;#x308B;&amp;#x5FC5;&amp;#x8981;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x3053;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x3001;Editor&amp;#x3092;&amp;#x8D77;&amp;#x52D5;&amp;#x3057;&amp;#x300C;Q. &amp;#x56FD;&amp;#x7523;&amp;#x306E;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x8A00;&amp;#x8A9E;&amp;#x3068;&amp;#x8A00;&amp;#x3048;&amp;#x3070;&amp;#xFF1F;A.&amp;#x300D;&amp;#x3068;&amp;#x3044;&amp;#x3046;\n&amp;#x30C6;&amp;#x30AD;&amp;#x30B9;&amp;#x30C8;&amp;#x3092;&amp;#x8CBC;&amp;#x4ED8;&amp;#x3051;&amp;#x3001;&amp;#x56DE;&amp;#x7B54;&amp;#x306E;&amp;#x90E8;&amp;#x5206;&amp;#x306B;&amp;#x306F;&amp;#x3001;answer&amp;#x3068;&amp;#x3044;&amp;#x3046;ID&amp;#x3082;&amp;#x3064;&amp;#x30C6;&amp;#x30AD;&amp;#x30B9;&amp;#x30C8;&amp;#x30D6;&amp;#x30ED;&amp;#x30C3;&amp;#x30AF;&amp;#x3092;&amp;#x8CBC;&amp;#x4ED8;&amp;#x3051;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30AA;&amp;#x30EC;&amp;#x30F3;&amp;#x30B8;&amp;#x3063;&amp;#x307D;&amp;#x3044;&amp;#x90E8;&amp;#x5206;&amp;#x3067;&amp;#x3059;&amp;#x306D;&amp;#x3002;&amp;#x305D;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x4FDD;&amp;#x5B58;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #16 &amp;#x305D;&amp;#x306E;&amp;#x4E0A;&amp;#x3067;&amp;#x3001;\nThinReports Generator&amp;#x3092;&amp;#x4F7F;&amp;#x3063;&amp;#x3066;&amp;#x3001;&amp;#x51FA;&amp;#x529B;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30E0;&amp;#x3092;&amp;#x4F5C;&amp;#x6210;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x8A73;&amp;#x3057;&amp;#x304F;&amp;#x306F;&amp;#x3054;&amp;#x8AAC;&amp;#x660E;&amp;#x3057;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x304C;&amp;#x3001;\n\n1. ThinReports&amp;#x3092;&amp;#x8AAD;&amp;#x307F;&amp;#x8FBC;&amp;#x307F;&amp;#x3001;\n2. &amp;#x5148;&amp;#x307B;&amp;#x3069;&amp;#x4F5C;&amp;#x6210;&amp;#x3057;&amp;#x305F;&amp;#x30EC;&amp;#x30A4;&amp;#x30A2;&amp;#x30A6;&amp;#x30C8;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x3092;&amp;#x4F7F;&amp;#x3063;&amp;#x3066;&amp;#x3001;&amp;#x65B0;&amp;#x3057;&amp;#x3044;&amp;#x30EC;&amp;#x30DD;&amp;#x30FC;&amp;#x30C8;&amp;#x3092;&amp;#x4F5C;&amp;#x6210;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n3. &amp;#x305D;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x65B0;&amp;#x3057;&amp;#x3044;&amp;#x30DA;&amp;#x30FC;&amp;#x30B8;&amp;#x3092;&amp;#x4F5C;&amp;#x6210;&amp;#x3057;&amp;#x3001;\n4. &amp;#x30DA;&amp;#x30FC;&amp;#x30B8;&amp;#x5185;&amp;#x306E;answer&amp;#x3068;&amp;#x3044;&amp;#x3046;ID&amp;#x3092;&amp;#x6301;&amp;#x3064;&amp;#x90E8;&amp;#x5206;&amp;#x306B; &amp;#x201C;Ruby&amp;#x201D; &amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x6587;&amp;#x5B57;&amp;#x5217;&amp;#x3092;&amp;#x57CB;&amp;#x3081;&amp;#x8FBC;&amp;#x307F;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n5. &amp;#x6700;&amp;#x5F8C;&amp;#x306B;&amp;#x3001;question.pdf &amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x3092;&amp;#x4F5C;&amp;#x6210;&amp;#x3059;&amp;#x308B;&amp;#x3001;\n\n&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x6D41;&amp;#x308C;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x3053;&amp;#x308C;&amp;#x3092;&amp;#x5B9F;&amp;#x884C;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x3001;\n
  • #17 &amp;#x3053;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x3001;\nanswer&amp;#x306E;&amp;#x90E8;&amp;#x5206;&amp;#x306B;Ruby&amp;#x304C;&amp;#x57CB;&amp;#x3081;&amp;#x8FBC;&amp;#x307E;&amp;#x308C;&amp;#x305F;PDF&amp;#x304C;&amp;#x751F;&amp;#x6210;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n&amp;#x4EE5;&amp;#x4E0A;&amp;#x304C;&amp;#x3001;ThinReports&amp;#x306E;&amp;#x57FA;&amp;#x672C;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #18 &amp;#x4E8C;&amp;#x3064;&amp;#x76EE;&amp;#x306E;&amp;#x7279;&amp;#x5FB4;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x3001;\nThinReports&amp;#x306F;&amp;#x3001;&amp;#x696D;&amp;#x52D9;&amp;#x30B7;&amp;#x30B9;&amp;#x30C6;&amp;#x30E0;&amp;#x5411;&amp;#x3051;&amp;#x306B;&amp;#x958B;&amp;#x767A;&amp;#x3055;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #19 &amp;#x696D;&amp;#x52D9;&amp;#x30B7;&amp;#x30B9;&amp;#x30C6;&amp;#x30E0;&amp;#x3067;&amp;#x3088;&amp;#x304F;&amp;#x3042;&amp;#x308B;&amp;#x4E00;&amp;#x89A7;&amp;#x8868;&amp;#x3092;&amp;#x4F5C;&amp;#x6210;&amp;#x3059;&amp;#x308B;&amp;#x6A5F;&amp;#x80FD;&amp;#x304C;&amp;#x3042;&amp;#x3063;&amp;#x305F;&amp;#x308A;&amp;#x3001;\n
  • #20 &amp;#x5916;&amp;#x5B57;&amp;#x3092;&amp;#x30B5;&amp;#x30DD;&amp;#x30FC;&amp;#x30C8;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x305F;&amp;#x308A;&amp;#x3001;\n
  • #21 Ruby&amp;#x306E;&amp;#x30E9;&amp;#x30A4;&amp;#x30D6;&amp;#x30E9;&amp;#x30EA;&amp;#x3068;&amp;#x306E;&amp;#x7D44;&amp;#x307F;&amp;#x5408;&amp;#x308F;&amp;#x305B;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x3001;\n&amp;#x30D0;&amp;#x30FC;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x52D5;&amp;#x7684;&amp;#x306B;&amp;#x8868;&amp;#x793A;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3082;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #22 Ruby&amp;#x306E;&amp;#x30E9;&amp;#x30A4;&amp;#x30D6;&amp;#x30E9;&amp;#x30EA;&amp;#x3068;&amp;#x306E;&amp;#x7D44;&amp;#x307F;&amp;#x5408;&amp;#x308F;&amp;#x305B;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x3001;\n&amp;#x30D0;&amp;#x30FC;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x52D5;&amp;#x7684;&amp;#x306B;&amp;#x8868;&amp;#x793A;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3082;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #23 Ruby&amp;#x306E;&amp;#x30E9;&amp;#x30A4;&amp;#x30D6;&amp;#x30E9;&amp;#x30EA;&amp;#x3068;&amp;#x306E;&amp;#x7D44;&amp;#x307F;&amp;#x5408;&amp;#x308F;&amp;#x305B;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x3001;\n&amp;#x30D0;&amp;#x30FC;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x52D5;&amp;#x7684;&amp;#x306B;&amp;#x8868;&amp;#x793A;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3082;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #24 Ruby&amp;#x306E;&amp;#x30E9;&amp;#x30A4;&amp;#x30D6;&amp;#x30E9;&amp;#x30EA;&amp;#x3068;&amp;#x306E;&amp;#x7D44;&amp;#x307F;&amp;#x5408;&amp;#x308F;&amp;#x305B;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x3001;\n&amp;#x30D0;&amp;#x30FC;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x52D5;&amp;#x7684;&amp;#x306B;&amp;#x8868;&amp;#x793A;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3082;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #25 Ruby&amp;#x306E;&amp;#x30E9;&amp;#x30A4;&amp;#x30D6;&amp;#x30E9;&amp;#x30EA;&amp;#x3068;&amp;#x306E;&amp;#x7D44;&amp;#x307F;&amp;#x5408;&amp;#x308F;&amp;#x305B;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x3001;\n&amp;#x30D0;&amp;#x30FC;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x52D5;&amp;#x7684;&amp;#x306B;&amp;#x8868;&amp;#x793A;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3082;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #26 &amp;#x4E8C;&amp;#x3064;&amp;#x76EE;&amp;#x306E;&amp;#x7279;&amp;#x5FB4;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x3001;\nThinReports&amp;#x306F;&amp;#x3001;&amp;#x696D;&amp;#x52D9;&amp;#x30B7;&amp;#x30B9;&amp;#x30C6;&amp;#x30E0;&amp;#x5411;&amp;#x3051;&amp;#x306B;&amp;#x958B;&amp;#x767A;&amp;#x3055;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #27 Ruby&amp;#x306E;&amp;#x30E9;&amp;#x30A4;&amp;#x30D6;&amp;#x30E9;&amp;#x30EA;&amp;#x3068;&amp;#x306E;&amp;#x7D44;&amp;#x307F;&amp;#x5408;&amp;#x308F;&amp;#x305B;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x3001;\n&amp;#x30D0;&amp;#x30FC;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x52D5;&amp;#x7684;&amp;#x306B;&amp;#x8868;&amp;#x793A;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3082;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #28 Ruby&amp;#x306E;&amp;#x30E9;&amp;#x30A4;&amp;#x30D6;&amp;#x30E9;&amp;#x30EA;&amp;#x3068;&amp;#x306E;&amp;#x7D44;&amp;#x307F;&amp;#x5408;&amp;#x308F;&amp;#x305B;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x3001;\n&amp;#x30D0;&amp;#x30FC;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x52D5;&amp;#x7684;&amp;#x306B;&amp;#x8868;&amp;#x793A;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3082;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #29 &amp;#x3067;&amp;#x306F;&amp;#x3001;ThinReports&amp;#x306E;&amp;#x4ECA;&amp;#x5F8C;&amp;#x306B;&amp;#x3064;&amp;#x3044;&amp;#x3066;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;\n
  • #30 &amp;#x7D9A;&amp;#x3044;&amp;#x3066;&amp;#x3001;&amp;#x6B21;&amp;#x306E;&amp;#x30D0;&amp;#x30FC;&amp;#x30B8;&amp;#x30E7;&amp;#x30F3;&amp;#x3067;&amp;#x3042;&amp;#x308B;0.7.5&amp;#x3092;&amp;#x540C;&amp;#x3058;&amp;#x304F;2&amp;#x6708;&amp;#x306B;&amp;#x30EA;&amp;#x30EA;&amp;#x30FC;&amp;#x30B9;&amp;#x3059;&amp;#x308B;&amp;#x4E88;&amp;#x5B9A;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x3053;&amp;#x306E;&amp;#x30D0;&amp;#x30FC;&amp;#x30B8;&amp;#x30E7;&amp;#x30F3;&amp;#x3067;&amp;#x306F;&amp;#x3001;Editor&amp;#x306E;&amp;#x56FD;&amp;#x969B;&amp;#x5316;&amp;#x3084;&amp;#x30AB;&amp;#x30B9;&amp;#x30BF;&amp;#x30E0;&amp;#x30D5;&amp;#x30A9;&amp;#x30F3;&amp;#x30C8;&amp;#x306E;&amp;#x5BFE;&amp;#x5FDC;&amp;#x3092;&amp;#x884C;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n&amp;#x30AB;&amp;#x30B9;&amp;#x30BF;&amp;#x30E0;&amp;#x30D5;&amp;#x30A9;&amp;#x30F3;&amp;#x30C8;&amp;#x306B;&amp;#x3064;&amp;#x3044;&amp;#x3066;&amp;#x306F;&amp;#x3001;&amp;#x73FE;&amp;#x5728;&amp;#x306E;ThinReports&amp;#x3067;&amp;#x306F;&amp;#x3001;&amp;#x9650;&amp;#x3089;&amp;#x308C;&amp;#x305F;&amp;#x30D5;&amp;#x30A9;&amp;#x30F3;&amp;#x30C8;&amp;#x3057;&amp;#x304B;&amp;#x4F7F;&amp;#x7528;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x304C;&amp;#x3001;\n&amp;#x3053;&amp;#x308C;&amp;#x3092;&amp;#x4EFB;&amp;#x610F;&amp;#x306E;&amp;#x30D5;&amp;#x30A9;&amp;#x30F3;&amp;#x30C8;&amp;#x304C;&amp;#x5229;&amp;#x7528;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x3088;&amp;#x3046;&amp;#x306A;&amp;#x6A5F;&amp;#x80FD;&amp;#x3068;&amp;#x306A;&amp;#x308B;&amp;#x4E88;&amp;#x5B9A;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #31 &amp;#x307E;&amp;#x305F;&amp;#x3001;Rails&amp;#x3067;ThinReports&amp;#x3092;&amp;#x3001;&amp;#x3088;&amp;#x308A;&amp;#x7C21;&amp;#x5358;&amp;#x306B;&amp;#x3001;&amp;#x30B7;&amp;#x30FC;&amp;#x30E0;&amp;#x30EC;&amp;#x30B9;&amp;#x306B;&amp;#x4F7F;&amp;#x3046;&amp;#x305F;&amp;#x3081;&amp;#x306E;&amp;#x62E1;&amp;#x5F35;&amp;#x30E9;&amp;#x30A4;&amp;#x30D6;&amp;#x30E9;&amp;#x30EA;&amp;#x3082;&amp;#x30EA;&amp;#x30EA;&amp;#x30FC;&amp;#x30B9;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #32 &amp;#x3067;&amp;#x306F;&amp;#x3001;ThinReports&amp;#x306E;&amp;#x4ECA;&amp;#x5F8C;&amp;#x306B;&amp;#x3064;&amp;#x3044;&amp;#x3066;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;\n
  • #33 &amp;#x307E;&amp;#x305A;&amp;#x3001;&amp;#x30BD;&amp;#x30FC;&amp;#x30B9;&amp;#x306F;&amp;#x5168;&amp;#x3066;github&amp;#x3067;&amp;#x516C;&amp;#x958B;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #34 &amp;#x307E;&amp;#x305A;&amp;#x3001;&amp;#x30BD;&amp;#x30FC;&amp;#x30B9;&amp;#x306F;&amp;#x5168;&amp;#x3066;github&amp;#x3067;&amp;#x516C;&amp;#x958B;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #35 &amp;#x307E;&amp;#x305F;&amp;#x3001;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x81EA;&amp;#x4F53;&amp;#x3082;&amp;#x3001;&amp;#x5F0A;&amp;#x793E;&amp;#x304C;&amp;#x72EC;&amp;#x81EA;&amp;#x306B;&amp;#x904B;&amp;#x55B6;&amp;#x3059;&amp;#x308B;&amp;#x30D7;&amp;#x30ED;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x30B5;&amp;#x30A4;&amp;#x30C8;&amp;#x4E0A;&amp;#x3067;&amp;#x5168;&amp;#x3066;&amp;#x516C;&amp;#x958B;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n&amp;#x3061;&amp;#x306A;&amp;#x307F;&amp;#x306B;&amp;#x3001;&amp;#x3053;&amp;#x306E; Matsukei Open Source Center &amp;#x306F;&amp;#x3001;&amp;#x5F0A;&amp;#x793E;&amp;#x304C;&amp;#x5F0A;&amp;#x793E;&amp;#x306E;&amp;#x8CC7;&amp;#x7523;&amp;#x3092;&amp;#x7A4D;&amp;#x6975;&amp;#x7684;&amp;#x306B;&amp;#x30AA;&amp;#x30FC;&amp;#x30D7;&amp;#x30F3;&amp;#x30BD;&amp;#x30FC;&amp;#x30B9;&amp;#x3068;&amp;#x3057;&amp;#x3066;\n&amp;#x516C;&amp;#x958B;&amp;#x3059;&amp;#x308B;&amp;#x5834;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x5F0A;&amp;#x793E;&amp;#x72EC;&amp;#x81EA;&amp;#x306B;&amp;#x904B;&amp;#x55B6;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x30DD;&amp;#x30FC;&amp;#x30BF;&amp;#x30EB;&amp;#x30B5;&amp;#x30A4;&amp;#x30C8;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #36 &amp;#x305D;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x516C;&amp;#x5F0F;&amp;#x30B5;&amp;#x30A4;&amp;#x30C8;&amp;#x3092;&amp;#x59CB;&amp;#x3081;&amp;#x3001;Twitter&amp;#x3001;Facebook&amp;#x3067;&amp;#x968F;&amp;#x6642;&amp;#x3001;&amp;#x60C5;&amp;#x5831;&amp;#x767A;&amp;#x4FE1;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  • #37 &amp;#x3067;&amp;#x306F;&amp;#x3001;ThinReports&amp;#x306E;&amp;#x4ECA;&amp;#x5F8C;&amp;#x306B;&amp;#x3064;&amp;#x3044;&amp;#x3066;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;\n
  • #38 &amp;#x696D;&amp;#x52D9;&amp;#x30B7;&amp;#x30B9;&amp;#x30C6;&amp;#x30E0;&amp;#x5411;&amp;#x3051;&amp;#x3067;&amp;#x3059;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x307E;&amp;#x305A;&amp;#x306F;&amp;#x6709;&amp;#x511F;&amp;#x30B5;&amp;#x30DD;&amp;#x30FC;&amp;#x30C8;&amp;#x3092;&amp;#x63D0;&amp;#x4F9B;&amp;#x3057;&amp;#x305F;&amp;#x3044;&amp;#x3068;&amp;#x601D;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x73FE;&amp;#x6642;&amp;#x70B9;&amp;#x3067;&amp;#x306F;&amp;#x3001;&amp;#x6765;&amp;#x6708;2&amp;#x6708;&amp;#x306B;&amp;#x63D0;&amp;#x4F9B;&amp;#x958B;&amp;#x667A;&amp;#x4E88;&amp;#x5B9A;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  • #39 \n