ThinReports.org / 株式会社マツケイ
日高克也 @hidakatsuya
日高 克也
ThinReports.org
株式会社マツケイ OSSビジネス推進室
Ruby/PHP/JavaScript/CSS3/HTML5/Google
Closure Tools …

@hidakatsuya
しまねけん

しまねけん
(こっちは鳥取県)
Rubyによる
Rubyのための
帳票ソリューション
二つのツール

GUI
Designer

PDF
Generator
GUI Designer
ThinReports Editor
• 帳票レイアウトを編集
• Win/Mac/Linux 版
• 日本語/英語 版
• GPLv3
ThinReports Generator
• Editor で作成したレイアウトを操
作して PDF を生成

• CRuby 1.8.7/1.9.x/2.0.0
• JRuby 1.6.x/1.7.x (1.8 mode)
• Pure Ruby!
• The MIT License
Hello World
Step1 レイアウトを作成
Step2 コードを書く
Step3 実行する
% ruby hello_world.rb⏎
完成
できること
(主な機能)
一覧表
一覧表
ヘッダー部のレイアウトを定義。一
覧表の全ページに表示される

詳細行のレイアウトを定義。この行
を繰り返して一覧を作成

ページフッター部のレイアウトを定
義。一覧表の各ページの最後尾に表
示される
フッター部のレイアウトを定義。
一覧表全体の最終行に表示される
例)商品一覧
画像を埋め込む
動的に画像を埋め込む
外字を表示

外字もPDFに埋め込まれるため、クライアント
に外字ファイルをインストールする必要なし
バーコード・グラフ
• これらの機能はない
• バーコードやグラフを生成
する Ruby ライブラリと
画像の埋め込み機能を使っ
て実現

• バーコード: barby など
• グラフ: gruff など
セキュリティ設定
セキュリティ設定
プログラムから操作する
• レイアウトに定義された全ての図形は
Rubyから操作できる

• 但し、操作したい図形に対して、事前
にIDを付与する必要がある
プログラムから操作する
表示/非表示

テキストの色

テキストの整列
プログラムから操作する
フォントスタイル
プログラムから操作する
塗りと枠線のスタイル
簡易書式設定
• 基本書式

¥{value} → ¥1000

• 数値書式

カンマ区切り/小数点

• 日付時刻書式

%Y/%m/%d → 2012/08/07

• 字詰め書式

方向: 左, 文字: 0 , 桁: 6 → 000123
仕様書の自動生成
仕様書の自動生成
Rails 2.x,3.x,4.x
thinreports-rails
thinreports-rails
• thinreports の Rails 向け DSL を提供
✴ 要するに Rails で簡単に使えるようにしてくれる

• Rails で thinreports を使う場合は必須
• 日本ユニシス株式会社 篠田さん作
• もちろん、オープンソース
• The MIT License
詳しくは
できないこと
(イマイチなこと)
利用できるフォント
• Helvetica
• Times New Roman
• Courier New
• IPAフォント(明朝/ゴシック)
次期メジャーバージョンで対応
一覧表が未熟
• 定義可能なセクションが不十分
✴ ヘッダー・明細・フッター・ページフッターのみ
✴ 分類毎の小計行などが簡単に実現できない
✴ 1頁目のみ表示したいヘッダーが実現できない

• 行の高さを可変にできない
• 行の背景色を設定できない
• 全体的な操作性がイマイチ
次期メジャーバージョンで対応
UTF-8のみ
• ソースコードの文字コードのこと
✴ 過去に SJIS での実績はあるが、お勧めしない

• データの文字コードは対応可能
✴ 埋め込む前に UTF-8 へ変換すれば OK

• UTF-8 以外の対応予定は無し
ページ番号機能がない
• 普通のページ番号なら現時点でも可能
• 一覧表のページ番号は工夫が必要
✴ (1/2)→(2/2)→(1/3)→(2/3)… のようなケース

近日リリース予定の 0.7.7 で対応
バーコードの問題
• 現時点でも、ライブラリでバーコード画像を作っ
て埋め込むことで実現は可能だが…

• 遅い、メモリリーク
✴ 一旦画像データを作って埋め込むので効率が悪い

• カスタマーバーコード未対応
✴ 対応しているライブラリはほぼ皆無

ネイティブ対応(次期メジャーリリース)
環境構築
本番環境

開発環境

Ruby / RubyGems
Generator
Layout File (.tlf)

Editor
Editor のインストール
Windows
• 公式サイトよりインストーラをダウン
ロード

• インストーラの指示に従えばOK
Generator のインストール
% bundle install⏎
もしくは、
% gem install thinreports⏎
これだけ!
で、実際どうなの?
事例と利用状況
ダウンロード状況
2011.10 - 2013.12

Editor
6,000

Generator
13,700
弊社の主な実績
ユーザ

帳票の種類

システム数

自治体

30

5

自治体

13

1

自治体

19

2

自治体

14

1

20

2

民間企業

1

1

民間企業

5

1

民間

2

1

民間企業

業種

通信会社
少し詳しく説明します。
大量印刷の事例
• 某民間企業
• 最大2万ページの宛名と
タックシール印刷

• Rails + ThinReports
並列処理
• 非同期処理 Ruby ライブラリの Resque を使用
• 出力対象データを 5 千件単位に分割し、4 スレッドで並
列処理

• 処理中の待機画面では、進行状況をポーリングにて取得。
終了ステータスで、生成した PDF のダウンロードページ
を表示する

• 2万ページの出力も 15分程度
• 処理中はある程度メモリを消費するが、スレッド終了と同
時に解放されるため大きな問題にはなっていない
その他
パフォーマンス
計測サンプル
• 右図のような見積書を
2,500ページ出力する
Ruby スクリプトを実行

• Ruby 2.0.0-p247

ThinReports 0.7.6

• Mac OSX 10.9

Core i7 2.3GHz

RAM 8G, SSD
結果
実行時間
時間/ページ
最大メモリ消費量
PDFのサイズ

140秒
0.056秒/ページ
約400MB
23.2MB
誕生秘話
(余談)
Rubyによる帳票開発の
ちょっと昔
※ 以降の内容は5年程前の当時のお話です。
JasperReports
JasperReports
• Rubyで帳票といえばコレ
• 専用デザイナ iReport も
• 多機能
• しかも、OSS!!
しかし、
• Java 製
• 環境構築がちょっと面倒
• 安定運用のために Java の知識必須
• 海外製。基本全部英語
• 情報少ない(Ruby から使う場合)
有償ツール
• とにかくお高い
✴ 300万のシステム開発に100万の帳票ツールとか無理

• お高い割に API がアレだったり...
• 選択肢が少ない
こんな状況なので
業務システム開発にRubyを
採用しづらい!
作ろう
IT新技術研究開発
• しまね産業振興財団
• 平成21年、22年採択
• 半額助成
0.6 Preview 1, 2, 3 →
2011.10 正式版 0.7 リリース
English version of the
Editor?
2012.7 0.7.5 released!
今後
0.7.7 のリリース
リリース内容
• (Feature) ページ番号ツール
• (Patch) Editor 全体の操作性を改善
✴ ユーザから寄せられた問題点を中心に対応

• (Bug) 10件のバグ
2014年1月リリース予定(目標年内)
1.0.0 のリリース
• カスタムフォント機能
✴ ビルトインフォント以外のフォントが利用可能へ

• カスタムセクション機能
✴ 一覧表の明細行の定義を複数定義可能へ

• ヘッダー/ページヘッダー構成
✴ 一覧表の最初のページだけ表示されるヘッダーセクションと、全ペー
ジに表示されるヘッダーが定義可能に

• 0.7.7 以前との互換性は維持する方向(予定)
Chrome Apps 化
• Chrome Apps 版 Editor
✴
✴
✴
✴
✴

Chrome が必須へ
Chrome Web Store からインストール、アップデート
動作速度の劇的な向上(現在の Qt/Webkit ベースは絶望的な遅さ)
さらなるクロスプラットフォーム対応
内部構造がシンプルになり、開発・メンテが容易に

• 次期メジャーリリースまでは、これまでのデスクトッ
プ版もリリース。以降は Chrome Apps 版のみ提供

• 0.7.7 の Chrome Apps 版 Editor を年度内にベー
タリリース
Enterprise
技術サポートサービス
概要
• マツケイが提供する ThinReports の
サポートサービス

• ThinReports の開発者が直接対応
• サポート内容
✴ オンラインリファレンスの閲覧
✴ QA サポート
サポートセンター
オンラインリファレンス
• 全文検索
• 印刷(ブラウザ印刷に最適化)
✴ 全ページの一括印刷はできない

• リクエストの送信
✴ 追加して欲しい内容や間違いの指摘、補足の追加をリクエ
ストできる

✴ ただし、対応するかどうか、対応スケジュールはサポート
チームの判断となる
QAサポート
• 質問・回答の閲覧など、全てのやり取
りはサポートセンター上で行う
✴ 回答があった場合など、イベント毎にメール通知される

• インシデント制
プランと料金
QAサポート
プラン

価格/年(税別)

オンライン

リファレンス
インシデント

デベロッパー

30,000 円

78,000 円

○

追加インシデント

6

3 営業日

12,000 円

○

スタンダード

初回応答時間

講習会の開催や現地サポートなど、上記サポートでは不十分な場合でも、
ご要望に合わせて対応いたします。お気軽にお問い合わせ下さい。
お申し込みの流れ
www.matsukei.co.jp

お申し込みフォームに必要事項を
記入し送信していただくと、3営
業日以内にお申し込みに必要な書
類一式を発送します。

thinreports.matsukei.co.jp/apply
REPOTEN-API
れ

ぽ

て

ん
http://repoten-api.net
特徴
• PHP や Python など、言語やツール
に関係なく簡単に利用できる

• ThinReports ベース
✴ 専用デザイナは「ThinReports Editor」のこと

• 無料(制限あり)
見積書自動印刷

REPOTEN の
API にフォームを送
信するだけ
共通帳票基盤
ご清聴ありがとうございました
ThinReports.org

技術サポートサービス

http://www.thinreports.org

http://www.matsukei.co.jp/service/thinreports-support/

@thinreports_org

@ThinReports.org

@thinreports

OSC 2013 .Enterprise