SlideShare une entreprise Scribd logo
1  sur  98
Télécharger pour lire hors ligne
Ruby向け帳票ソリューション
「ThinReports」
の開発で知る
OSSの威力
             ThinReports.ORG
                      日高克也
自己紹介
日高 克也
@hidakatsuya
お仕事
Ruby(2007∼)

PHP(2004∼)

業務システム開発
お話すること
1.   ThinReportsの紹介

2.   ThinReportsを支える
     OSS/技術の紹介
ThinReportsの紹介
Rubyによる
Rubyのための
帳票ソリューション
全てオープンソース
  (絶賛公開中)
www.thinreports.org
@ThinReports.org
@thinreports_org
osc.matsukei.net
github
速報!
  2011/10/31
0.7正式版リリース!
さらに、


ITproに掲載されました!
 「Ruby向けOSS帳票ツールThinReports、
 松江市の企業が島根県の助成で開発し無償公開」

        2011/11/2 ITpro
ご尽力頂いた皆様、
ありがとうございました!
正式リリースまでの道のり
2009/04
             「原点」

PXDocとの出会い

SVGとの出会い

PXDocの弱点 = GUIデザイナが無い
2009/07
 「しまね産業振興財団様の助成事業に採択」

プロトタイプ版の開発スタート

全てにおいて「ノウハウ0」
2010/07
     「同助成事業に再び採択」

大量帳票印刷

業務システム特有の機能開発
2010/10
     「0.6 Preview1をリリース」

Editorにメモリリークのバグ

バグ、バグ、バグバグバグ...
2011/01
     「0.6 Preview2をリリース」

予定外のリリース
(4月に正式版リリースを予定)

大量印刷時のメモリ消費に問題
(Generator/PXDoc)

急遽PDF対応へシフト
2011/07
    「0.6 Preview3をリリース」

PDF推奨、PXDoc非推奨へ

アーキテクチャレベルから見直し

結果として、良い方向へ
2011/10
      「0.7 正式版をリリース」

PXDocの廃止

多くの新機能
特徴
ThinReports Editor
ThinReports Editor
専用デザイナ

Windows/Mac/Linux対応

GPLv3
ThinReports Generator
ThinReports Generator
専用Rubyライブラリ(gem)

Ruby 1.8.7/1.9.2+

The MIT License
Quick Start
1. インストール
   (Editor)




詳細は Installation Guide を参照
1. インストール
   (Generator)

$ gem install thinreports
2. レイアウトを作成
3. コードを書く
# coding: utf-8

require 'thinreports'

ThinReports::Report.generate_file('ruby-papa.pdf') do
  use_layout 'ruby-papa.tlf'

  start_new_page do
    item(:answer).value('Matz!')
  end
end
出来上がり
できること
(主な機能)
複数レイアウトの混在
複数レイアウトの混在
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.tlf'
end

report.generate_file('multiple.pdf')
複数レイアウトの混在
一覧表の自動生成
一覧表の自動生成
report = ThinReports::Report.new
report.use_layout 'basic_list.tlf'

report.start_new_page

report.page.list(:basic_list) do |list|
  30.times do |t|
    list.add_row :detail => "row##{t + 1}"
  end
end

report.generate_file('basic_list.pdf')
一覧表の自動生成
外字の表示
外字の表示
ThinReports.configure do
  # *.TTE => *.TTF
  generator.pdf.eudc_fonts = '/path/to/eudc.ttf'
end

ThinReports::Report.generate_file('eudc.pdf') do
  use_layout 'eudc.tlf'

  start_new_page do
    item(:eudc).value("日本で生まれ世界が育てた言語n" +
                      " uby")
  end
end


                                 "□" = 外字
外字の表示
動的なスタイル操作
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).hide
item(:ellipse).show

# Method chain
item(:line).show.style(:border_color, 'red')
# Hash
item(:rect).styles(:fill_color   => 'red',
                   :border_color => 'blue')
仕様書の自動生成
仕様書の自動生成
その他
セキュリティ
(暗号化/パスワード/操作制限)

動的な画像埋め込み
(ローカル or URI)

         詳しくは公式サイトで
できないこと
(需要がありそうな機能の中で)
カスタムフォント

グラフ

バーコード
カスタムフォント
Helvetica

Courier New

Times Roman

IPAフォント(明朝/ゴシック)

      現時点で利用できるのは上記のみ
        (今後追加機能を対応)
グラフ
Google Chart API

Gruff等のライブラリ

          イメージブロック機能
        との組み合わせで実現は可能
+ Google Chart API
バーコード
barby

gbarcode

rghost-barcode等

          イメージブロック機能
        との組み合わせで実現は可能
+ barby
使うべき3つの理由
1. GUI Editorがある
というか、無いと無理

UIを含む全てにおいて日本語対応

マルチプラットフォーム
2. Generator is
        Pure Ruby
必要なのは、Rubyとgem達だけ

実行環境がシンプル
   構築、保守の負担減
   汎用性向上(環境を選ばない)
3. オープンソース
モンキーパッチで対応できる

開発に参加できたりもする

バグ報告、提案大歓迎

無償
今後
サポートサービス
最優先

メールによるQA

定期的なパッチの提供

リファレンスマニュアルの閲覧権限
主要タスク
(Editor)一覧表ツールの刷新

(Editor)テキストの縦書き

(Generator)自動キャッシュ

(Generator)Ruby1.9.3対応
その他
Framework Mode

メモリ消費の安定化(Generator)

ロゴの作成
※作って頂ける心優しい方募集中
拡張ライブラリ
 (妄想レベル)
thinreports-rails
Article.all.to_pdf(:layout => 'article.tlf')



    レイアウトのIDとテーブルのカラム名を同一にしておく

     to_pdf() で自動的にPDFを生成
                          (注)全て妄想の範囲内です
thinreports-scaffold

$ rails g tlf_scaffold foo.tlf


  レイアウトファイルからmodel/view/controllerを生
  成

  需要ある?(技術的には可能)
               (注)全て妄想の範囲内です
さらに
Editorは仕組み的に

「ブラウザ上で動作可能」
ThinReports Cloud
   (そう遠くない将来)
ThinReportsを支える
    OSSと技術
Editorの中
Editorの中の中
ThinReportsEditor/
  + core/ (Core, UI)
  | + assets/
  | | + icons/
  | | + application-compiled.css
  | + application.html
  | + application-compiled.js
  + ThinReportsEditor.exe (Platform)
         :


                      ThinReportsEditor.exe は起動時に
                     application.html をロードしているだけ
Qt
LGPLv2.1/GPLv3
Closure Library
 Apache License 2.0
Generatorの中
Prawn
Pure RubyなPDFジェネレータ

現在も活発に開発が進められている
余談




ThinReportsのChangelogにも取り入れる予定
Closure Tools
Google製
     JavaScript開発ツール
Closure Library

Closure Compiler

Closure Template
Closure Library
Editorを構成する
最も重要なライブラリ
  (ほぼ全てを担う)
特徴
JavaScriptフレームワーク

Googleのプロダクトで実際に利用されている
(Gmail/Maps/Docs...)
特徴
"型" の概念(with Compiler)

豊富なUIコンポーネント

テストフレームワーク

            ...などなど多数
興味のある方は以下の記事が参考に
「Closure Libraryを使うべき10の理由」
        - WebOS Goodies -
採用した理由(1)
SVG関連ライブラリが充実
採用した理由(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('.');
};
採用した理由(3)
                      Compilerがスゴすぎる
/**
  * @param {string} name
  */
function hello(name) {
   alert('Hello, ' + name);
}
hello('New User');


                              コンパイル後
                       (ADVANCED_OPTIMIZATION)

alert('Hello, New User');
採用した理由(3)
        Compilerがスゴすぎる

          application-compiled.js

             コンパイル前                 コンパイル後

合計サイズ               2,000KB              360KB

ファイル数                    200                 1



        パフォーマンスも大幅に向上
最後に
ThinReportsは、
  まだまだバグも多く
   機能も足りない
 若いプロダクトです。
一緒に育てていきましょう!
というか、

一緒に育てて下さい。
  お願いします。
開発者2名

         @hidakatsuya




@minoru_maeda
手段は問いません。
 バグ報告、提案等々

お待ちしています!
ご清聴ありがとうございました

                公式サイト

       http://www.thinreports.org/

              公式facebook

 http://www.facebook.com/ThinReports.org

               公式Twitter

            @thinreports_org

        ThinReports Documenation

            Installation Guide
             Getting Started
                Examples

Contenu connexe

Tendances

Tendances (20)

世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
ServiceとRepository
ServiceとRepositoryServiceとRepository
ServiceとRepository
 
A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますA5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えします
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
 

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

ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Takayuki Shimizukawa
 
Intalio Cloud Workshop
Intalio Cloud Workshop Intalio Cloud Workshop
Intalio Cloud Workshop
Daisuke Sugai
 
Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4
Taku Unno
 
httpbis interim とhttp2.0相互接続試験の話
httpbis interim とhttp2.0相互接続試験の話httpbis interim とhttp2.0相互接続試験の話
httpbis interim とhttp2.0相互接続試験の話
shigeki_ohtsu
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
Naotaka Jay HOTTA
 

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

[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
 
2013 Ignite UI 最新情報 in 岡山
2013 Ignite UI 最新情報 in 岡山2013 Ignite UI 最新情報 in 岡山
2013 Ignite UI 最新情報 in 岡山
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
 
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてNAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
 
Intalio Cloud Workshop
Intalio Cloud Workshop Intalio Cloud Workshop
Intalio Cloud Workshop
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4
 
1MB
1MB1MB
1MB
 
BBBBB
BBBBBBBBBB
BBBBB
 
Microsoft Graph API Library for Go
Microsoft Graph API Library for GoMicrosoft Graph API Library for Go
Microsoft Graph API Library for Go
 
httpbis interim とhttp2.0相互接続試験の話
httpbis interim とhttp2.0相互接続試験の話httpbis interim とhttp2.0相互接続試験の話
httpbis interim とhttp2.0相互接続試験の話
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料
 

Dernier

Dernier (7)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

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