適当に哲学書とやらを読んでみる

天の孔雀的、英語の本かなり意訳読み

全体表示

[ リスト | 詳細 ]

記事検索
検索

全18ページ

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

[ 次のページ ]

RubyでPDF出力-その4

ソースその2です。

その1はこちら。  

053:
  ##############################
054:
  #合計金額
055:
  ##############################
056:
  move_down 10
057:
  font_size = 12
058:
  text "下記の通りご請求申し上げますよろしくお願い致します"
059:
  move_down 2
060:
  #表形式のデータは配列で指定する
061:
  table(
062:
    [
063:
      ["ご請求金額", '\1,200-']
064:
    ],
065:
  #各カラムの幅をハッシュで指定する
066:
    :column_width => {0 => bounds.width * 0.4, 1 => bounds.width * 0.6},
067:
  #各カラムの横寄せをハッシュで指定する
068:
    :align => {0 => :left, 1 => :right},
069:
  #指定しないと幅がおかしくなる
070:
    :width => bounds.width                      
071:
  )
072:
 
073:
  ##############################
074:
  #内訳
075:
  ##############################
076:
  move_down 10
077:
  text "内訳"
078:
  table(
079:
    [
080:
      ["マタタビ", "3", '\100', '\300'],
081:
      ["猫砂", "1", '\900', '\900']
082:
    ],
083:
  #すべての行と列に線を引く
084:
    :border_style => :grid,
085:
  #一括してフォントサイズ指定
086:
    :font_size => 10,                           
087:
  #ヘッダーを指定
088:
    :headers => ["内容", "数量", "単価", "金額"],
089:
  #各カラムの幅を指定
090:
    :column_width => {
091:
      0 => bounds.width * 0.6,
092:
      1 => bounds.width * 0.1,
093:
      2 => bounds.width * 0.15,
094:
      3 => bounds.width * 0.15
095:
    },
096:
  #ヘッダーの横寄せをハッシュで指定
097:
    :align_headers => {                         
098:
      0 => :center,
099:
      1 => :center,
100:
      2 => :center,
101:
      3 => :center
102:
    },
103:
  #コンテンツの横寄せをハッシュで指定
104:
    :align => {                                 
105:
      0 => :left,
106:
      1 => :right,
107:
      2 => :right,
108:
      3 => :right
109:
    },
110:
    :width => bounds.width
111:
  )
112:
end

RubyでPDF出力-その3

ソースその1です。

その2はこちら。
 
001:
# -*- coding:utf-8 -*-
002:
require 'rubygems'
003:
require 'prawn'
004:
require 'prawn/layout'
005:
006:
FONT_FILE = 'ipam.ttf'
007:
008:
Prawn::Document.generate("03_ruby_pdf_test.pdf", :page_size => 'A4') do
009:
  font FONT_FILE
010:
  text_options.update(:wrap => :character)
011:
 
012:
  ##############################
013:
  #日付
014:
  ##############################
015: 
  #本日の日付
016:
  time = Time.now.strftime("%Y%m%d")
017: 
  #フォントサイズ指定
018:
  font_size = 12
019: 
  #右寄せでテキスト描画
020:
  text time, :align => :right
021:
 
022:
  ##############################
023:
  #タイトル
024:
  ##############################
025:
  title = "請求書"
026:
  font_size = 20
027:
  #センタリングしてテキスト描画
028:
  text title, :align => :center
029:
 
030:
  ##############################
031:
  #宛先
032:
  ##############################
033:
  #描画位置を30pt下げる
034:
  move_down 30
035:
  font_size = 13
036:
  #テキストを直接描画
037:
  text "mike_neck様 御中"
038:
  move_down 2
039:
  #左端から中央より30pt左まで水平線を描く
040:
  stroke_horizontal_line bounds.left, bounds.width / 2 - 30
041:
 
042:
  ##############################
043:
  #差出人
044:
  ##############################
045:
  move_down 10
046:
  #text_sizetextメソッド中で指定できる
047:
  text "株式会社****************", :align => :right, :size => 16
048:
  text "100-0001", :align=> :right, :size => 12
049:
  text "東京都千代田区千代田1番1号", :align => :right, :size => 12
050:
  text "************************", :align => :right, :size => 12
051:
  text "TEL 000-0000-0000 / FAX 000-0000-0000", :align => :right, :size => 10
052:
 


RubyでPDF出力-その2

前の続き。

さて、いきなり言い訳ですが、
天の孔雀、Ruby結構初心者(10月中旬に始めた、かつ11月は何もやっていない、12月に再開)のうえ、
その他のコミュニティに積極的に参加中ゆえ、
なんだかもう、レシピに書いてあることしかできませんでした。残念。ゲソゲソ〜orz

とりあえず、IPAのフォントをインストールして、
サンプル通りのソースを書いておきました。

と、いいつつ、サンプルとは異なるところがあります。

tableを表示する際の横幅に関する引数です。
 

サンプル
(prawn0.5.0.1)

最新
(prawn0.8)

各カラムの横幅
:width => Hash
:column_width => Hash
表全体の幅
-
:width => (Float|Fixnum)

つまり、サンプルにあるような、
:width => {0 => 100, 1 => 120}
のような形式で指定すると、ランタイムエラーが発生します。
ここだけは注意しましょう。

出力した結果はこんな感じです。

イメージ 1


いや、Rubyは触れば触るほど面白くなりますね。

ほんとうはJSON形式のデータをPDF出力するようなライブラリをつくろうとしたのですが、
それにはあと1週間くらい必要ですね。
年内はかなり忙しいので、ちょっと無理そう…

RubyでPDF出力

なるものに参加しました。

本の紹介


ここでは、このレシピにある135「PDFを作成したい」について紹介します。
帳票ソリューションというのは、
開発者にはそのニーズというのが分かりにくいです。
しかし、国家への申請とか、SOX法対応などで、
各種の取引や記録などを容易には修正のできないけど容易にデータを再生できるフォーマットで
保存するというニーズがあることは確かです。

そのフォーマットの代表格がPDFです。

で、RubyでPDFを出力しようじゃなイカ?
というわけでございます。

天の孔雀さん(a.k.a mike_neck)の実行環境
その1

OS
Windows XP SP3
Ruby
1.8.7(Active Script Ruby)

その2

OS
ecoLinux
Ruby
1.9.2(自前でコンパイル)



RubyでPDFを出力する場合、
Prawnというgemを利用します。

これのインストール方法は次のような感じです。

実行環境その1
C:\Ruby\lib>gem install -r prawn
 
  Welcome to Prawn, the best pure-Ruby PDF solution ever!
  This is version 0.8
 
  For those coming from Prawn 0.7 or earlier, note that this release has
  some API breaking changes as well as many new features.  *** You'll want
  to know about these changes, as we will no longer be supporting
  Prawn 0.7 or any earlier version of Prawn***
Installing RDoc documentation for prawn-0.8.4...
 
C:\Ruby\lib>

実行環境その2
mike@mikeVmEcoLinux01:/usr/local/lib/ruby$ sudo gem install -r prawn
ERROR:  Loading command: list (LoadError)
    no such file to load -- zlib
ERROR:  While executing gem ... (NameError)
    uninitialized constant Gem::Commands::ListCommand
mike@mikeVmEcoLinux01:/usr/local/lib/ruby$ whereis zlib
zlib:
mike@mikeVmEcoLinux01:/usr/local/lib/ruby$

…Linuxで自前ビルドするとzlibがなくてgemがまともにきどうしないらしい。
そのあたりはこのへんを参照して修正して、いざインストール。
mike@mikeVmEcoLinux01:/usr/local/lib/ruby$ sudo gem install -r prawn
 
  Welcome to Prawn, the best pure-Ruby PDF solution ever!
  This is version 0.8
  
  For those coming from Prawn 0.7 or earlier, note that this release has
  some API breaking changes as well as many new features.  *** You'll want
  to know about these changes, as we will no longer be supporting
  Prawn 0.7 or any earlier version of Prawn***
Successfully installed prawn-core-0.8.4
Successfully installed prawn-layout-0.8.4
Successfully installed prawn-security-0.8.4
Successfully installed prawn-0.8.4
4 gems installed
Installing ri documentation for prawn-core-0.8.4...
Installing ri documentation for prawn-layout-0.8.4...
Installing ri documentation for prawn-security-0.8.4...
Installing ri documentation for prawn-0.8.4...
Installing RDoc documentation for prawn-core-0.8.4...
Installing RDoc documentation for prawn-layout-0.8.4...
Installing RDoc documentation for prawn-security-0.8.4...
Installing RDoc documentation for prawn-0.8.4...
 
mike@mikeVmEcoLinux01:/usr/local/lib/ruby$

インストール完了。


SQLiteのテストコード

SQLite本体のコードが67ksに対して、テストコードが4m5678ksらしい。

679倍の規模のテストがあるわけで、SQLiteプロジェクトの品質に対する熱意がよくわかる。

天の孔雀はかつて回帰テストの自動化をするためのプロジェクトに参画することがあったが、回帰テストをコーディングするためには、たしかにかなりの労力が必要であることはその時に分かった。ただ、残念ながらそのテストコードはMSVBScriptのスキルが必要であったが、そのプロジェクトにいる人が皆COBOLな人たちで、なんでわざわざVBScriptを覚えて、テストコードを書かなければならないのか理解してもらえなかった。彼らの言い分としては、これらの画面の仕様は自分たちの頭の中に入っており、テストコードを記述しなくても、何を試験すればいいのか分かっている、ということだった。

ちなみにCOBOLプログラムを検証するVBScriptのコードの規模は同等の規模であった。残念ながら、私はプロジェクトを離れたため、テストコードを記述する人がいなくなってしまったが、今でもこのCOBOLプログラムは人力によってテストが行われているらしい。一応、テストスクリプトを最短で作成する方法を記述したドキュメントは残したのだが、COBOLの世界からは出ることはなかったようである。

巷には特定の開発言語のプログラミングに関する書籍は大量に溢れているが、テストに注力して書かれている書籍はかなり少ない。そうとうニッチな本である。言い換えるとプログラマの人々はテストの重要性を理解しながら、テストを効率よくやるということには目がいかないのではないかと思う。それは要求された仕様をどのように実現するかということだけに思考が向かっており、仕様が満たされているかどうかを検証することはあとで考えればいい、みたいな風潮があるのかもしれない。

 

そう、そういえば同じ部署で以前、天の孔雀に少し火が付いているプロジェクトで、手が足りないので結合試験を一週間で実施してほしいというオーダーが下されたことがあった。一応、引き受けてはみはしたものの、設計には何のかかわりもない私には、残念ながら実施することができなかった。テストの目的が不明、テストの対象となるドキュメントが未整備、実装だけに特化している設計書、これらからテストを導き出すには到底無理であった。その他の要因にもより、(天の孔雀は口が悪く思ったことはすぐ口に出すので、これがプロジェクトの一部の人にはムカつかれたのであろう、私に対して苦情が何件も届いたらしく、部署のトップマネージメントは私をいい加減にしてくれと言ってテンションをさらに下げたので、)私は一週間後に「無理です」と言って断ってしまった。

テストは理想的に言えば、設計を行ったものがテストを作成することが望ましい。設計とは何の関係もない人にテストを無茶振りするのはマネージメントの失敗としか言いようがない。逆に言うと、設計の段階で試験をどのように実施していくことがイメージ出来ていなければ、システム開発はどつぼに嵌まるのは間違いない。

 

だから、SQLiteのテストコードの多さは、このプロジェクトがテストをどう考えているかを如実に表す数値であり、これこそ品質を大事にするという考え方の物的証拠なのだと思う。

また、テスト工程というのはテスト実施→バグ発生→故障票記入→再現確認→プログラム改修→構成管理→再リリースという手順があるだけに、意外と生産性が低くなりやすい。プロジェクトによってはテストの生産性がコーディングよりも高めで設定されている場合もあるが、むしろテストの生産性は低いと考えたほうが現実的なのかもしれない。実装の生産性に対してテスト工程の生産性は半分くらいと考えたほうが適切かもしれない。しかし、大抵のプロジェクト計画ではテスト工程の生産性は実装の生産性よりも高く見積もっているところがほとんどであろう。だが、もう一度SQLiteのテストコードの規模を見れば、テスト工程のほうが実装工程よりも作業量が多いというのはあながち嘘とは言い切れない気がする。

 

そこで、天の孔雀としては、設計の成果物として、テスト項目票を入れるというのがいいのではないかと考える。また、フレームワークの設計などで、極力POJOを使うようなアーキテクトを採用したりするのも方策の一つなのではなかろうか。な〜んて、適当なことを考えながら、『現場で使えるソフトウェアテストJava編』を読みつつ、今日は眠ることにする。

全18ページ

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]

[ 次のページ ]


よしもとブログランキング

もっと見る

プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事