Docurain Labo

Docurainサービス開発日記

6360ページのPDFを爆速で出力して経産省を援助する(CSVもあるよ)

こういうニュースを見ました。

news.careerconnection.jp

タイトルの通りでございますが、経産省3600ページのPDFでキャッシュレス還元対象店一覧を公開したとして、「読みにくい」「CSVかExcelにしろ」と文句を言われております。結構話題になったので、CSVとかExcelとかもそのうち公開されるんだろうなーって思ってたらこんなことになってました。

nlab.itmedia.co.jp

9月5日時点の加盟店登録申請は全国で約58万店。今後これを1ファイルで全て網羅すると、PDFファイルは1万ページの大台を超えてくるかもしれません。

すごい!少年漫画でよくある戦闘力のインフレみたいな感じですね。さすが、これでこそ我らが愛すべき日本国行政機関です。

まぁ本ブログにたどり着くような方々はおそらくITリテラシもお持ちでしょうから、こんな記事を見ると「これだから日本はIT後進国なんだ!さっさと検索機能を付けるとかマップ表示するとかしろ!!」と思うことでしょう。私もそれは思います。ちなみに記事執筆時点で確認した所、「9月中下旬には地図上に対象店舗を表示するウェブ機能やアプリを公開予定」と書いていますね。開発中のエンジニアの心労を察するに色々とアレですが…。

でも、こういうのって話題になってないだけで結構ありますよね。市町村のホームページとか、さすがに数千ページは無いにしても数十ページ、ずっとこういう店舗情報的なものがずらずらと並んでるPDFがあったりします。一方で厚労省の統計情報みたいなものはExcel形式でも配布されてますし、この差はなんなのかなーと昔から不思議でした。おそらくは、CSVやExcelといったファイルを扱えるのもそれなりのITリテラシがある人なので、こういうファイルを公開すると電話の問い合わせで


「お前のところでダウンロードしたエクセルが開けない」

「それは大変失礼しました、閲覧にはExcel 2007以降がお使いのPCにインストールされている必要がございます」

「なんだそれは、エクセルなら入っているぞ、バカにするな」

「申し訳ございません、エクセルの中でも2007というバージョン以降という制限がありますが、それに引っかかっているかも、と」

「なんだその2007とかいうのは。俺のパソコンにはそれが入っていないというのか。どうやったらわかるんだ」

「ええっと、まずはExcelを起動してですね…」

「だからそのファイルをダブルクリックしてもExcelが起動しないんだからしょうがないじゃないか」

「そうでしたね、ではスタートメニューから…」

「スタートメニューとは何だ」


という「誰でも簡単!パソコン教室電話サポートコーナー」みたいな地獄のやり取りを公務員の方々が対応するということになることは想像に容易いわけです。であるならば、PDFで公開しておけばスマホでもPCでもまず間違いなく見れるし、面倒くさいことを言われなそうという判断になっても仕方ないのかなーと思いましたが。一方で統計情報を参照したいなんて人は当然、Excelなんかも使いこなせてるでしょうから厚労省とかではExcelでも配布してるんでしょう。多分。全部想像ですが。でも私が上司で部下がこういう電話の対応に苦慮してたら、「いいよもう、PDFで公開しろよ。PDFに検索機能はあるんだから、それで十分じゃん」って言いますね。きっと。

話が逸れましたが、で、まぁ6360ページのPDFで、今後は1万とかになるかもしれないということですね。よく分からないですが、この経産省の中の人も何らかの事情があってPDFで公開する作業をしているのでしょう。そして、この地図表示するアプリとやらの開発状況によっては、暫くはこの方法を継続することになり、その都度PDFを何度も更新してアップロードするという作業が必要なわけで、ちょっと面倒ですよね。6360ページともなると、PDF出力するのも時間がかかりますし…。試しに、手元で5,000ページ位のExcelファイルを、Excelの機能でPDFへ変換した所、15分かかりました。毎回これをやるのはちょっと…。

…えっ、時間がかかる?本当に?

9秒でできますよ。そう、Docurainならね。

ExcelをテンプレートにしてJSONのデータを流し込み、帳票を作成するサービスのDocurainですが、処理速度にも気を配って開発しております。具体的には、こういった数千ページにも達する大量のPDFを出力する際は複数台のサーバーで分散処理が行えるようになっています。この分散処理を担当するサーバは負荷状況によって自動でスケールするようになっているので、理論的にはネットワーク容量の限界までどこまでも性能が向上していきます。(厳密には「分散した1個のタスクの完了+ネットワーク転送時間」以下には出来ませんが)

というわけでDocurainで同様の帳票を作成してみました。Excelのテンプレートとjsonのデータを利用して作成した出力結果は以下のようなものになります。

f:id:withpop:20190909113229p:plain

このテンプレートで経産省で公表された店舗データ(EC店舗除く)をすべて表示した所、5534ページのPDFとなりました。このとき、十分にスケールしたという状況を再現してのテストではありますが、先程説明した性能(9秒)が達成できました。

f:id:withpop:20190909111834p:plain

使用したテンプレート、JSONデータと出力データは以下です。CSVデータもこちらに含まれているので、必要な方は使ってください。JSONデータは50件に件数を減らしたものを同封しています。

データ一式

50件のデータならば登録不要でお試し頂けるこちらの体験ページでもJSONとExcelテンプレートからPDFを出力できます。

また、Docurainは単一リクエストの早さだけでなく大量のリクエストを同時に処理したときのスループットの早さも売りです。こちらも同様に今回のテンプレートで試してみた所、 30,546ページ/秒 という速度が出ました。すごい。

しかも、まださらに性能向上の余地があるので近々もっと良い結果を報告できるかも知れません。

ただ、いくつか注意事項があります。まず、この分散処理は有償オプションです。使用する場合は別途お申し込みが必要です。また、先程説明したとおりサービスは負荷状況によってスケールしていく仕組みなのでいつでもこの性能が出来るわけではありません。大量の帳票を出したい!という場合は詳しくはご相談ください。

ちなみにこういう何百何千ページにも達する帳票を印刷する必要が本当にあるのか?と思う方も多いと思いますが、我々は実際にそのような要望を複数の顧客から受けています。 「そんな大量のPDFを出力しても誰も見ないでしょ」という指摘が真っ当な場合もあるでしょう。一方で、最大で数千ページのPDFを出力できることが仕様として定められているシステムがある場合、実際にそういう使う方をするか否かとは無関係に、その機能が実際に動作するようにしなければなりません。例えばext4ファイルシステムにおける仕様上の最大ファイルサイズは16TiBですが、その時「実用上は16TiBのファイルなんてありえないから、1TiBが現実的な最大ということでもいいよね」という話はビジネスシーンでは通用しません。仕様とは約束事だからです。

そういうわけで、大量のページを出力するニーズが実際にあるので、Docurainは現実的なコストと時間でそれを実現する手段を提供しています。

詳しくは公式ページの情報もご参照ください。みんなの連絡待ってるぜ!!

docurain.jp

PDF→Excel変換機能を公開しました!

DocurainはExcelで帳票テンプレートを作れるサービスです。

が、色んなところでデモをさせていただくと、「今は別の帳票ツールを使っているから、それをExcelに移行するのはしんどいな…」という反応を頂くことがたまにあります。

一から帳票を作る場合、またはそもそも既に現在Excelで帳票を作っている場合にはExcelで帳票テンプレートを作るというのは大変楽なのですが、既に何らかの別の帳票ツールを使っているという場合は「これを一からExcelで作るのは面倒だな…」というふうになってしまいます。これは仕方ないことです。その乗り換えのコストを支払ってあまりあるメリットがある、というのが見えないと導入することは難しいですからね。

どんな帳票ツールでもPDF形式では出力できるはずなので、今回公開した機能を使えば、PDF帳票をExcelに簡単に変換できてしまいます。もちろん乗り換えに関わらず、今PDF形式の帳票は既に存在するというシーンではこの機能を活用出来ます。

ただ、ここまで書いたら、そんなにきれいに変換できるのか?と疑問に思う方もいるかと思われます。

自由にコンテンツを配置できるPDFから行列が定まったグリッド形式のExcelに変換するわけですから、人間が見て完全に満足できるほどにきれいなExcelファイルに変換するのは正直難しいです。

が、変換したあとで人間が手をくわえてちょっと修正することを前提にすれば、十分実用になるレベルだと我々は考えています。では実際の帳票を見ましょう。

以下が元々のPDF帳票(車検証)です。

f:id:withpop:20190829181930p:plain

Excelに変換したあとがこちらです。

f:id:withpop:20190829182831p:plain

どうでしょうか?かなり高精度に変換されています。

Docurain開発チーム内で本機能を使用し、ネットに公開されている市町村の申請書PDFファイルなどを変換して色々試してみましたが、いずれもテンプレートを作るベースとしては十分実用になると判断しています。アカウントを無料登録して頂ければ試すことができます。ご興味があればぜひお試し下さい!!

APIを微修正しました(xlsとxlsx)

小改良です。

現在、Excel形式での出力を行う場合のエンドポイントは、事前に保存されたテンプレートの場合

https://api.docurain.jp/api/xls/[テンプレート名]

となり、インスタントAPIだと

https://api.docurain.jp/api/instant/xls

を指定します。

ただ、これはExcel 2007以降の拡張子(xlsx)と紛らわしく、 xlsxlsx と誤記してしまいがちなため(私自身もやってしまったことがあります…)、 xlsxxls と指定したときと全く同じ動作をするようにしました。

つまり、上記のエンドポイントは

https://api.docurain.jp/api/xlsx/[テンプレート名]

https://api.docurain.jp/api/instant/xlsx

と完全に同一です。

この二つは出力タイプをExcel 2007形式で出力するか、それとも97-2003形式で出力するのかを選択するものでは ありません ので注意してください。

Excel形式で出力した結果がExcel 2007形式であるのか、それとも97-2003形式であるのかは使用したテンプレートがどちらであったかに依存します。Excel 2007形式のテンプレートを使用して出力すればExcel 2007形式で出力されます。97-2003形式のテンプレートを使用して出力すれば97-2003形式で出力されます。

こういった細かい変更はブログでは紹介せずドキュメントの更新にとどめていましたが、これからは積極的にブログでも告知していきますので、Docurainユーザーの方はぜひ当ブログも継続的にウォッチして頂ければ幸いです。

よろしくお願いします!

DocurainはWord形式のテンプレートでも帳票出力が可能になります

近日公開予定の新機能です。DocurainはExcelを帳票デザインに使用することができる帳票出力サービスですが、この度Word形式のテンプレートでも帳票出力が可能になりました。

最初に実装された機能は、プレースホルダにデータを差し込み、 PDF / Word (docx) / SVG / その他画像形式で出力するというものです。

今回は機能を使って見るために、以下のような簡単な契約書のようなものを作成してみました。

f:id:withpop:20190805152952p:plain

動的に値を差し込む部分には %{date} のようにプレースホルダを記述しておきます。スタイルが適用されていてもそれが保持されたまま出力されることを確かめるために、書面下部にある住所氏名などの欄は適当にスタイルを適用させています。

また、これは1ページのみですが、もちろん複数にまたがるような文書も出力可能です。

差し込むデータはExcelテンプレートを使用するときと同じように、任意の形式のJSONとして記述します。今回は以下のようなデータを使用してみます。

{
    "date": "令和1年8月1日",
    "contractor": {
        "address": "東京都 新浜区 風の谷 12丁目34",
        "name": "猫丸商事",
        "representativeName": "多摩 三毛太郎"
    },
    "orderer": {
        "address": "東京都 勝節市 崖の上 2丁目3-1 10F",
        "name": "株式会社 ピッコロ",
        "representativeName": "紅豚 三郎"
    },
    "content": [
        "猫じゃらしにじゃれつく",
        "愛想をふりまく",
        "頭を撫でさせる"
    ],
    "payDateLimit": "当日の業務終了",
    "fee": "カリカリ1日分",
    "courtName": "勝節市動物愛護センター"
}

以上のWord文書とJSONデータを使用してPDF出力用のAPIを叩くと…

f:id:withpop:20190805154004p:plain

こういった感じでPDFのデータがレスポンスとして返ってきます。

罫線や表で構成されるいわゆる「帳票」はエディタがグリッドで構成されるExcelと相性が良いのですが、Excelで一般的な「文書」を使うのは不可能ではないものの使いづらいシーンがあります。

具体的には、Docurainではこれまでも契約書の類を出力されるような用途で使われることがありました。契約書を書くのにExcelを使うというのは、不可能ではないものの普通は正当な文書作成ソフトであるWordを使いたいですよね。今回、Word文書をテンプレートに使用できるようになることで、より広いシーンでDocurainが便利に使えるようになるはずです。

SVG形式に対応しました

こんにちは。久しぶりの投稿となってしまいました。 Docurainに関しては順調に利用量が増えつつあり、嬉しい限りです。

この度、SVG形式の出力とSVG形式の画像の差し込みに対応しました。

Docurainでは元々、PDF / Excel / PNG / JPEG / GIF 形式での出力が可能でしたが、ここに今回SVGが加わったことになります。

一応説明しますと、SVG(Scalable Vector Graphics)は汎用的なベクターグラフィック形式で、レイヤーやラスタ画像の埋め込みなどにも対応しています。ベクター形式なので印刷や高DPI環境でもきれいな表示が可能です。XMLで定義されており、HTML上にインラインで埋め込むことも可能で、JavaScriptやCSSとの親和性も高いです。

Docurainからの出力でベクタ形式での出力ではPDFが存在しましたが、PDFは単体でダウンロードして扱うには特に問題ないものの、何か既存のシステム(Webシステム、Windowsクライアントアプリなど)と組み合わせると面倒です。帳票を出力したいというシステムでは、既存の自システム上でプレビューを表示させたいとかいう要求はよくあることでしょう。

Webブラウザ上で別ウィンドウで開くのではなくページの一部分に表示させたいといった場合は不可能ではないものの、ブラウザごとの挙動の差が大きいのである程度の試行錯誤が必要になると思われます。各種ネイティブアプリにおいても、PDF表示のためのコンポーネントを使用するか(有償のものが多い印象)、もしくはWebView的なもの(C#ならばWebBrowserコントロール)を利用することになると思われます。後者の場合はやはり試行錯誤が必要になるでしょう。

そこでSVGであればHTML上では通常の画像とほぼ同じように利用できるため、かなり扱いやすくなります。帳票としての用途だけでなく、1日単位、1時間単位などで更新される1複雑なグラフをWebシステム上で表示したい、といった用途でも使いやすくなります。

ということで使ってみます。使うデータは前回の記事で作成したものです。

出力した結果は以下です。

おっ、余談ですがSVGな画像にCSSでshadowを落としていると要素ごとにちゃんと影が落ちるんですね。考えてみれば当たり前なのですが、初めて見たので感動しました。これを覚えていると表現の幅が広がりそうだな~と思いました。

ページを拡大表示して描画がなめらかになっていることを確認してみて下さい。

ちなみに出力ファイルサイズはPDFよりも大きくなる傾向があります。PDFの場合はテキストはそのままテキストデータ(と埋め込みフォント)として残っていますが、SVGの場合はすべての文字がパスに変換されますので。たとえば上記のガントチャートは310KBですが、PDFで出力したところ17.4KBで済みました。

続いて、SVG形式の画像の埋め込みを試してみます。

Docurainでは帳票テンプレートをExcelで、データをJSONで流し込みます。BASE64エンコードした画像をJSONに設定することで画像も動的に帳票に流し込むことができます。たとえば、何かの帳票の担当者氏名の横にそれぞれの担当者の印影を出したいとか…言われそうだよね?それ、意味あるの?って思うかも知れないけど、とりあえず言われそうだよね?そんなときでも大丈夫です。

ただ、SVG画像を動的に流し込む場合は、画像はラスタ形式に変換されます。これは、ExcelがSVGに対応していないためです。

とりあえずやってみましょう。以下のSVG画像を表示してみます。

使用するのは下記のようなごく簡単なテンプレートです。

f:id:withpop:20190710154155p:plain

実際にSVG形式で出力した画像が以下です。

拡大すると、テキスト部分はベクターになってますが、差し込んだSVG画像はラスタライズされているのがわかると思います。

今回使用したデータはこちらからダウンロードできます。

登録不要のお試しページではSVG画像が出力できないため、アカウント登録が必要です。

こちらから登録して、ぜひお試し下さい!


  1. Docurainは出力回数とデータ転送量に応じた課金方法なので、リアルタイムに更新されるデータを表示するには注意が必要です

Docurainで手軽にガントチャートを出力してみる

「帳票開発は面倒くさい」というのは古来、万葉集にも書かれている事実でありますが、その中でも特に面倒な類の帳票の一つがガントチャートだと思われます。

意外と面倒くさいガントチャート

私のこれまでの帳票開発経験を振り返ってみても、ガントチャートを出力したいというケースは結構多いんですよね。なにか長い期間をかけて行うプロジェクトは必ず工程管理が必要です。そして工程管理でよく使われる図の一つがガントチャートです。

しかしながら、意外と業務でガントチャートを扱うのは面倒くさいのです。

ガントチャートを扱うための選択肢として、ぱっと思いつくものは下記のとおりです。

  • Microsoft Project
  • Open Project
  • Redmine
  • Excel(+ VBA)
  • JavaScriptライブラリ

MS ProjectやOpen Projectははガントチャートのみならず、一般的にプロジェクト管理で必要になるようなリソース管理(平準化)、コスト管理、EVM(Earned value management)などなどの多数の機能が盛り込まれており、使用する場合も例えばPMBOKに記載されているようなプロジェクト管理の基礎知識が要求されます。したがって、ただ「ガントチャートを出力したい」という用途では重厚すぎる場合がほとんどでしょう。

Redmineに関してはプロジェクト管理ツールとして紹介されることも多いですが、基本的にはプロジェクト管理というよりはチケット管理のためのツールであるので、用途にフィットしないケースも多いと思われます。

「とりあえずガントチャートを描きたい」という用途ではExcelでそれを行うことが多いのではないでしょうか。ITエンジニアの皆さんであれば、一度はExcel VBA等々を応用して作成されたガントチャート作成ツールを用いてガントチャートを書いたご経験があると思います。

Excelは誰もが扱え、比較的簡単にデザインすることができます。ただ、Excelでの管理はプロジェクト管理上の重要なパラメータがExcelのファイル内に入ってしまっているという関係上、

  • Excelデータは編集を繰り返すと壊れることもあり、データストアとしてお粗末
  • データの再利用性があまりに低い(基幹システムと連携しにくい)
  • ビューとデータが一緒くたになって保守しにくい

というあたりが問題になるでしょう。

一方、世の中には手軽にガントチャートを描画できるJavaScriptライブラリがいくつか存在します。これらを使用してブラウザ上でガントチャートを表示するのは、これまで挙げた選択肢の中ではおそらく最も手軽で、かつ、システムの中でビューの責務だけをシンプルに実装できる方法なのであるべき姿に近いと考えられます。

ただし、それはJavaScriptライブラリが提供する表示フォーマットで合意が得られれば、の話です。実際には運用を重ねていく過程で使用しているJavaScriptライブラリでは容易に対応できない要求仕様が盛り込まれ、それなりに作り込みが必要になってくるはずです。印刷やPDF出力が要求されたときに困るという点も挙げられるでしょう。方法としてはブラウザの印刷機能に依存することになりますが、そもそもほとんどのライブラリは印刷までは想定していないはずで、印刷時にレイアウトが崩れるという可能性は十分に考えられます。

ではどうすればいいのか…。

Docurainでガントチャートを出力する

Docurainを使えば上記で述べたような課題は概ね解決でき、「とりあえずガントチャートを出力したい」という要求にフィットするはずです。

Docurainは帳票テンプレートをExcelでデザインできるので、今もしExcelでガントチャートを運用しているという場合にはそれを流用して最小限の実装量で基幹システムと連携できます。Docurainでの帳票出力はREST APIでテンプレートと挿入するデータを送信し、出力結果のバイナリ(PDFやExcel、画像など)を受け取るというだけの仕組みなので、ビューの責務を完全に分離できます。

というわけで、作ってみました。以下が今回つくったテンプレートです。

f:id:withpop:20190528173653p:plain

流し込むデータは下記のようなJSONとしてみました。 tasks という配列に、それぞれタスクの名前と担当者、開始日、終了日が入っているだけのシンプルな構造です。

{
    "projectName": "株式会社 FooBar様 取材記事公開スケジュール",
    "startDate": "2019/04/01T00:00",
    "tasks": [
        {
            "name": "取材",
            "lead": "高崎",
            "start": "2019/04/01T00:00",
            "end": "2019/04/08T00:00"
        },
        {
            "name": "記事本文作成",
            "lead": "高崎",
            "start": "2019/04/09T00:00",
            "end": "2019/04/15T00:00"
        },
        {
            "name": "記事レビュー",
            "lead": "岡田",
            "start": "2019/04/15T00:00",
            "end": "2019/04/20T00:00"
        },
        {
            "name": "撮影写真レタッチ",
            "lead": "山下",
            "start": "2019/04/09T00:00",
            "end": "2019/04/20T00:00"
        },
        {
            "name": "記事公開準備",
            "lead": "篠田",
            "start": "2019/04/21T00:00",
            "end": "2019/04/22T00:00"
        },
        {
            "name": "記事公開",
            "lead": "篠田",
            "start": "2019/04/23T00:00",
            "end": "2019/04/23T00:00"
        }
    ]
}

これでDocurainのAPIに対してリクエストを投げると以下のような出力結果が返ってきます。

f:id:withpop:20190528173452p:plain

解説

ではどんな仕組みになっているのか説明していきます。

f:id:withpop:20190528174338p:plain

#set($e=$ENTITY) は私が半ば癖のように書いている文です。Docurainの帳票テンプレート中ではJSONのルートオブジェクトは $ENTITY という名前で参照できますが、この名前が長いので $e として参照したいためにこのように $e という変数に代入をしています。

${e.projectName} はルート直下のprojectNameというキーの値を参照するという意味です。

$e.startDate も同様ですが、こちらは日付として整形して表示できるようExcel側で書式設定をしています。

以下の黄色部分は日付欄です。

f:id:withpop:20190528174838p:plain

一番左に開始日を挿入し、その他のセルは左のセル+1の値を表示するようにして開始日以降の日付を入力しています。

続いて #foreach です。

f:id:withpop:20190528174151p:plain

この #foreach は直感的にも明らかと思いますが、 tasks 配列の要素のぶんだけ、 #end までの行を繰り返し表示します。 各行では、タスクの名前と担当者、開始・終了日時を表示しています。

Docurain側の処理は以上で、あとはExcel固有の機能で帳票を作り込んでいます。

ガントチャート上の開始日~終了日までのラインや、土日(非稼働日)の背景色はすべて条件付き書式で実現しています。まず非稼働日の背景色について説明します。これは以下のような条件付き書式を設定しています。

f:id:withpop:20190528175126p:plain

INDIRECT(ADDRESS(7,COLUMN())) は、その列の7行目の値を参照する動作になります。7行目にはその列での日付が格納されています。 WEEKDAY は引数で与えられた日付に対する曜日を数値で返却します。これで、「特定の曜日だった場合に書式を適用する」という処理が可能です。

次はガントチャートの作業期間を示す線を条件付き書式で実現します。これは、下記のような11行目が非表示になっています。

f:id:withpop:20190528175647p:plain

11行目は「この日は作業期間に含まれるか否か」をTRUE/FALSEで示しています。

=AND(INDIRECT(ADDRESS(ROW()-1,4))<=INDIRECT(ADDRESS(7,COLUMN())), INDIRECT(ADDRESS(ROW()-1,5))>=INDIRECT(ADDRESS(7,COLUMN())))

という式は長ったらしいですが、その列が示す日にちは開始日以上かつ終了日以下であるか、を評価しています。

その下の12行目(ガントチャートのバーを表示する行)には、以下のように「上のセルがTRUEならば書式を設定する」という条件付き書式が設定されています。

f:id:withpop:20190528180125p:plain

これでガントチャートのバーを表示させるしょりは完了です。

…と言いたいところですが、もう一つやらなければならないことがあります。12行目には下記のように、数式で空白文字を値として設定しています。

f:id:withpop:20190528180013p:plain

これは、Docurainでは「foreachによる繰り返しの中で値の入っていないセルには条件付き書式は設定されない」という仕様があるためです(直感的に必要な場所にだけ条件付き書式を設定している動作を意図したもの)。

と、以上のように説明が必要なややトリッキーな要素はあるものの、Excelの基本的な使い方を知っていて、かつ基本的なプログラミングの知識がある(foreachという制御構造を理解できる程度で良い)ならば誰でも簡単に実装ができることがわかると思います。

今回作成したテンプレートとデータはこちらからダウンロードできます。

また、以下のページの「お試しフォーム」から登録不要でいますぐにAPIをお試しすることが可能です(ただし透かしが入ります)。

docurain.jp

もしご興味があれば公式サイトよりアカウントを作成してみて下さい!支払い方法を登録しない限りは請求が発生することはありません。

【新機能】カウンターが利用できるようになりました

前回の記事では本物のExcel時刻表を作りました。

blog.docurain.jp

この中でセルの横方向に配列の内容を表示していくために、 $idx = 0 と、変数を宣言して参照した後に1ずつ数を増やしていくという処理を書きました。

f:id:withpop:20190331114440p:plain

f:id:withpop:20190331114706p:plain

ただ、 $idx = $idx + 1 という書き方は若干の煩わしさを感じてしまいますよね。弊社エンジニアの間でも話題となり、新しい機能として実装することとなりました。

カウンター

#set($idx = $Numbers.counter()) としてカウンターオブジェクトを生成した後、 $idx.next で参照する度、 0, 1, 2, 3, ... が得られます。C言語等の後置インクリメント相当の動作になります。

これを利用すると、

f:id:withpop:20190402164626p:plain

という簡潔で直観的な表記で済みます。

カウンターを使用したExcel時刻表のテンプレートとデータは(こちら)https://docurain.jp/wp/wp-content/uploads/2019/04/zikokuhyou2.zipからダウンロードできます。(すでにカウンターは利用可能です)

関数としては、

  • $idx.current : 現在の値を参照
  • $idx.next : 値を参照した後にインクリメント(後置相当)
  • $idx.prev : 値を参照した後にデクリメント(後置相当)
  • $idx.increment : インクリメントした後に値を参照(前置相当)
  • $idx.decrement : デクリメントした後に値を参照(前置相当)

が利用できます。

日夜アップデートしてます

Docurainはもともと、弊社が受託開発で使用するために作成したライブラリの一つでした。弊社エンジニアが実際に使い続けた経験をフィードバックして成長しており、今後もそれは続きます。

個人的には「良いソフトウェアシステムを開発するにはまず自分自身がユーザーでなくてはならない」との考えを持っていますが、Docurainはそれを地で行くサービスとなっております。

最も生産性の高い帳票エンジンを目指して日々開発しています(現段階でもかなり高い生産性を誇っていると自負していますが)ので、気になった方は是非公式サイトからユーザー登録してお試しください。