38
第13回関西LibreOffice勉強会 むしゃくしゃしたので… OpenDocument で帳票テンプレート Ver 1.1

「むしゃくしゃしたのでOpenDocumentで帳票テンプレート」 - 第13回関西LibreOffice勉強会 #LibOKansai

Embed Size (px)

Citation preview

第13回関西LibreOffice勉強会

むしゃくしゃしたので…

OpenDocumentで帳票テンプレート

Ver 1.1

Part.1

アンタだれ?

自己紹介

• 通称:みうみう,「なんで来たん?」氏

• Twitter:@kazuhito_m

• Github:kazuhito-m

• 老害度:39歳、独身、意識低い系

• 職業:プログラマ(SIer、ビジネスアプリ属),自動家(オートメータ)

– フリーランス,屋号「みうらさんとこ」

• 好きなもの:自動化,「継続的なんとか」

– CI/CDとか大好物,特にJenkins好き♪

– 「楽する」ためには「苦労は厭わない」

三浦 一仁(ミウラ カズヒト)

自己紹介

• 通称:みうみう,「なんで来たん?」氏

• Twitter:@kazuhito_m

• Github:kazuhito-m

• 老害度:38歳、独身、意識低い系

• 職業:プログラマ(SIer、ビジネスアプリ属),自動家(オートメータ)

– フリーランス,屋号「みうらさんとこ」

• 好きなもの:自動化,「継続的なんとか」

– CI/CDとか大好物

– 「楽する」ためには「苦労は厭わない」

三浦 一仁(ミウラ カズヒト)(「M$の社員の気持ちでやれ!」

のような”不自由を強いられる生活”

が人生で多かったので…)

Openと名のつくやり方、

仕組み、プログラム

などなどが好き

突然ですが

みうらは辟易と

していた!

今に始まったこっちゃないんですが…

S○erで産湯を使った三浦一仁は、来る日も来る日も「ほんまに要るかぁ?これ」という機能・帳票を作り続け、ほとほと嫌気が指していた。「システム化に際する業務改善や見直し」を全くした形跡もなく降りてくる要件、「設計」という概念自体がスコーン!と抜け落ちてる「これ…実現可能なのか?」と無理難題な業務仕様、特に「帳票」については「こんな簡単っしょw」と仕様もろくにない状態で「罫線一つに針の穴を通す如くの緻密さ」を強いてくる矛盾と理不尽をすずめの涙

わかってますとも、そういうことは…

S○erで産湯を使った三浦一仁は、来る日も来る日も「ほんまに要るかぁ?これ」という機能・帳票を作り続け、ほとほと嫌気が指していた。「システム化に際する業務改善や見直し」を全くした形跡もなく降りてくる要件、「設計」という概念自体がスコーン!と抜け落ちてる「これ…実現可能なのか?」と無理難題な業務仕様、特に「帳票」については「こんな簡単っしょw」と仕様もろくにない状態で「罫線一つに針の穴を通す如くの緻密さ」を強いてくる矛盾と理不尽をすずめの涙

(おっと失礼…これではただの

仕事のグチですねw

でも、これを

ただのグチにしないために…

少しくらいは生産的に…

S○erで産湯を使った三浦一仁は、来る日も来る日も「ほんまに要るかぁ?これ」という機能・帳票を作り続け、ほとほと嫌気が指していた。「システム化に際する業務改善や見直し」を全くした形跡もなく降りてくる要件、「設計」という概念自体がスコーン!と抜け落ちてる「これ…実現可能なのか?」と無理難題な業務仕様、特に「帳票」については「こんな簡単っしょw」と仕様もろくにない状態で「罫線一つに針の穴を通す如くの緻密さ」を強いてくる矛盾と理不尽をすずめの涙

なんでそうなってるの

か?

を、中心に

少しくらいは生産的に…

S○erで産湯を使った三浦一仁は、来る日も来る日も「ほんまに要るかぁ?これ」という機能・帳票を作り続け、ほとほと嫌気が指していた。「システム化に際する業務改善や見直し」を全くした形跡もなく降りてくる要件、「設計」という概念自体がスコーン!と抜け落ちてる「これ…実現可能なのか?」と無理難題な業務仕様、特に「帳票」については「こんな簡単っしょw」と仕様もろくにない状態で「罫線一つに針の穴を通す如くの緻密さ」を強いてくる矛盾と理不尽をすずめの涙

なんでそうなってるの

か?

を、中心に

(ほり下げて考えて行きたい

Part.2

みうらはシステム開発にあって

「帳票」作成の何に対して

嫌気が指しているのか?

その① 未整理な要求

• 「硬いものとやわらかいもの」を「ごちゃまぜに同時に」注文される感

1.「これは、データとして材料にするから、これこれこういう形式のテキストファイルで出して」

2.「これは、出した後に修正加えるから、変更できるような何かでだして」

3.「これは改竄するなんてもってのほか!なんか変更不能なもんにしといて」

4.「これは、プリンターに直接出して」

– 「あ、今言うたヤツは"どの帳票も全部の選択肢の可能性がある"から、切り替えれるようにしといて」

• 「できるかボケ!w」

– 理性的な言葉にすると「それ、お金と時間がかかるよ?」

その② 過剰な再現性要求• 「針の穴を通すような再現性」が要求される

–印刷において「ピクセルパーフェクト」を所望

– プリンタ違いで「ここ0.5mmほどずれてる、修正な!」って言われても…

• 表計算ソフトで作成・印刷したものと「ちょっとでも違う」と「話が違う!」となる– 「自分達の世界は1ミリたりとも変えてはならぬ!」という価値観の元「テキトーなExcelファイル」を「デザインはウチがしたからな!」してくる

• でそれを「ディスカウントの材料」にしてくる

• 同じことを「大規模分業のS○irの要件定義ロール」もしてくる

その③ 技術負債の片棒を担ぐ

• 「システム化する場所」に「未来の技術負債」の原因を押売りしてしまう–よく聞くのは「Excel入れる」→「EUCちょっと進む」→「Excelマクロ便利!の片鱗見せちゃう」→「Excelマクロ席巻」→「邪魔だが捨てられん」

– 同じことが「印刷ツール or 帳票ライブラリ」にも言える

その④ 提案のテイで「これ買って」

• もうお客さんや現場に「提案のテイ」で「コレ買ってください」を強いりたくない…– 「ベンダーロックインの沼」に沈めるような行為はもういやだ

• 「○xcel買ってください」「○ffice買ってください」

– 「高価なライブラリ使うテクニックしか持ってない」のはシステム屋の都合

• 「このライブラリ買ってください」

• これは「自分たち(システム屋)」にとってもリスク

一番嫌気が指してる

のは…

そもそも「良いこと」目指してない

• S○erが「ははー!すべては(強者であらせられる)お客様の仰せのままにー!」を死守しようとするから…–合意ではなく「御用聞きビジネス」を自ら作ってしまってる

– それに乗じて、ツール屋が「そんな”御用聞きビジネス”対応ライブラリ」あとか作っちゃうんだもんw

• 「S○F」とか

• 「あじゃぱーレポなんとか」とか ※これはOSSだが…

• 「”ぶどうの街”社(仮名)」とか

これだけだとただの

●業界批判ですが…

元に立ち帰って

•言いたいのは–「やり方次第」で

–「もっと楽」に

–「もっとお安」く

–双方いい感じの折衷

出来るんじゃないですかね?

–例えば営業で、合意で、契約で…

「そんな話」がしたい

そこで…

Part.3

OpenDocument(Spreadsheet)

を使った

帳票テンプレート

を考える

なにが始まるんです?

• 前述の問題を解決…いや、いくつかを”マシ”にするために– LibleOffice-Calcのファイルフォーマットである「OpenDocument SpreadSheet(.ods)」を使ってみる

• どう使うの?– 「帳票テンプレート」として活用を試みる

帳票テンプレートって?• 業務アプリケーションでの「帳票出力」は…

• 「(プリンタなど物理媒体への)印刷」か「(PDFなどの帳票的な何か)ファイルに保存orダウンロード」で実現している

• 帳票ライブラリでは通常、「デザインテンプレート(フォーマット)」と 「変数定義」で成り立ってる

その「デザインテンプレート」部分に、.odsを使う

アプリケーション(デスクトップ/Web)

デザインされた帳票テンプレート

値や変数

ライブラリ&ロジック

データ送信

Download orローカル保存

印刷可能なファイル

プリンタに紙出力

帳票テンプレートって?• 業務アプリケーションでの「帳票出力」は…

• 「(プリンタなど物理媒体への)印刷」か「(PDFなどの帳票的な何か)ファイルに保存orダウンロード」で実現している

• 帳票ライブラリでは通常、「デザインテンプレート(フォーマット)」と 「変数定義」で成り立ってる

• その「デザインテンプレート」部分に、.odsを使う

アプリケーション(デスクトップ/Web)

デザインされた帳票テンプレート

値や変数

ライブラリ&ロジック

データ送信

Download orローカル保存

印刷可能なファイル

プリンタに紙出力

で、どうするの?

LibleOffice Calcで「帳票の元と成る表形式」を作る

プログラムの「どっかに出力」部分を作る

プログラムの「値うめ」とか「繰り返し」部分とか作る

• で、具体的にそんな仕組みをどう作るか…

というような作業が必要…と思われる。

で、どうするの?

LibleOffice Calcで「帳票の元と成る表形式」を作る

プログラムの「どっかに出力」部分を作る

プログラムの「値うめ」とか「繰り返し」部分とか作る

• で、具体的にそんな仕組みをどう作るか…

というような作業が必要…と思われる。

プログラムの「値うめ」とか「繰り返し」部分とか作る

ここをつくるため、ファイル形式や操作方法を

掘り下げていく

Part.4

OpenDocumentSpreadsheet(.ods形式)

のファイル構造を知る

なにが始まるんです?• 「Open Document Format(ODF)」のファイル形式(Text,Spreadsheet,Presentation,Graphics等)は、統一して以下のようなファイル形式– ファイルは「ZIP形式アーカイブ」

– その中には「XML中心のテキストファイル群」

詳しくはここ参照– 日本語情報かつ概要を知るには一番わかり易いかと

ODFファイル(.osd等、ZIP形式)

● content.xml - テキストコンテンツ ● meta.xml - メタ情報。● settings.xml - 設定情報● styles.xml - テキストのスタイル情報● meta-inf/manifest.xml - XMLファイルの構造

百聞は一見にしかず

• まずは、見てみましょう–ファイルを作って、中身見て…

–デモ的な何か

構造上、抑えて置くべきことは…

• 帳票テンプレートとして使う場合に重要なのは–値の部分を制御している“content.xml”ファイル

–位置情報はXMLのAttributeと「繰り返し」のアプローチで表現されている

Part.5

OpenDocumentSpreadsheet(.ods形式)を帳票テンプレートとしてプログラムで

操作する

プログラムで操作するには?

• プログラムで操作するには?–前述の通り「ZIP」と「XML」が扱えれば良いので…

• 「ZIP」「XML」を扱えるライブラリがあれば、言語は問わない

– なんならXMLは「自力でテキスト操作」しても良い

–逆に「ODF編集用専門ライブラリ」はあまりない?• 調べは少し足りないが

• 今回はJavaで操作してみる– 「JOpenDocument」という.odsを変更できるライブラリは存在するが…

百聞は一見にしかず(数分ぶり二度目)

• 実際に見てみましょう–出来たものがここにございます

–デモ的な何か

Part.6

雑なまとめ(個人的感想)

まとめ• Openな「ドキュメント形式」と「プログラミング」を組み合わせることの利点–以下の実現を手助け出来そう

• 低コストで自由な帳票作成

• デザイン作業とプログラミングの省力化

• 「再現性順守!」の緩和

• 今後やりたいこと– 今回作ったパーツをブラッシュアップして「再利用可能」な扱いやすいものに

• 「明細を連打するような改ページあり」帳票

– テストライブラリにOpenDocumentサポート• 「データを色々な(ファイル)形式で読み込ませる」ライブラリ、DBUnitに対する「OpenDocument Spreadseet」サポート

参照文献

• Wikipedia:OpenDocument– https://ja.wikipedia.org/wiki/OpenDocument

• OpenDocument interoperability test workshop after story– http://www.slideshare.net/MakotoTakizawa1/od-fplugtest2

• JOpenDocumentのサンプル(めっちゃ役立つ– http://www.programcreek.com/java-api-examples/index.php?api=org.jopendocument.dom.spreadsheet.Sheet

ボツ稿(実際の発表は前のページまで)

そもそも「要るかぁ?」を考える

• 「針の穴を通すような再現性」が必要なシチュエーションは何なのか– 自分が認識しているのは「たった3つ」です

①ドットインパクトプリンタでカーボン紙的に”打つ”系

②OCRなどで「機械的に紙を読む」ために紙を出す系

③法令遵守系の「この様式一ミリすら反したら認めない」系• 上記すら本当は「交渉の余地」「許容点」あるはずやが…

–じゃあ「上記」以外は?• 所詮「この程度のもんなんじゃねーの?w」と推測

– 発注側の「マウンティング」?

– 業者側の「顔色うかがい」?

– 帳票の「大多数」は「そう頑張らなくて良い」はず• 「ソレを作ることにより何を満たしたいか」を目的に