メインコンテンツまでスキップ

yagisan-reports 開発者レター 2024年7月

· 約5分

前回の開発者レターはこちらになります。 yagisan-reports 開発者レター 2023年12月

現在のyagisan-reports SDKの最新バージョンは 1.0.0-alpha.11.3 です。前回レターからの主なアップデートは、次の通りとなります。

yagisan-reports 開発者レター 2023年12月

· 約4分

最新バージョンは 1.0.0-alpha.10 です。alpha.11 で提供予定の主な機能は次の通りです。

  • ✅ 縦書きテキスト <VText> の追加
  • 🚧 制御構造 <?if> <?switch> <?foreach> の追加
    • 追記: 仕様検討段階で実装が過剰に難しくなることがわかってきたので、 foreach 属性の追加で対応する方針になりそうです。
  • <ColumnText> でセル毎にスタイルを設定できるように

✅は実装済み、🚧は開発中です。

帳票エンジンとしては、想定している機能は alpha.11 でほぼ実装完了となります。以降については、帳票エンジンのコア部分よりも正式サービスインに向けた周辺部分の開発に移っていく計画です。

yagisan-reports SDKを npm install できるように

yagisan-reports SDKを npm install して、そのまま試用できるようにしたいと考えています。

開発自体よりも「使用許諾契約(ライセンス)の扱いどうするか」という法務・販売の部分の確認や方針決定が必要なため、まだ少し時間がかかります。

帳票デザイナーの開発

現在は帳票デザイナーの開発がメインになってきています。2024年春に大幅アップデートの第一弾をリリースすることを目標としています。

  • 🔥 帳票デザイナーSDKの alpha.1 のリリース
  • コードベースの最新化
  • 帳票デザイナーと帳票エンジンの連携強化
  • 帳票デザイナーで全コンポーネントをカスタマイズできるように

🔥 帳票デザイナーSDKの alpha.1 のリリース

これが 帳票デザイナーの直近最大の開発目標 です。

帳票エンジンだけではなく、帳票デザイナーをサービス内に組み込んでエンドユーザーに提供したい(エンドユーザーが帳票をせフルカスタマイズできるようにしたい) という要望を多く頂いています。帳票エンジンの開発が落ち着いてきたので、やっとこちらの要望に応えられる開発体制になってきました。

とはいえ、組み込めるようにする開発自体はそこまで大変ではなく、後述の作業が中心になります。

コードベースの最新化

開発者レターに大々的に書くような話でもないのですが、今まで帳票デザイナーには開発人員がうまくアサインできていませんでした(これが正式サービスインで来てない理由のひとつでもあります)。

帳票デザイナーはReactで開発しているのですが、2020年頃に実装したプロトタイプがベースとなってしまっており、React v16/クラスコンポーネントベースで動いています。これを現在、React v18/Hooks APIベースへ切り替えていっています。

帳票デザイナーと帳票エンジンの連携強化

帳票エンジンの開発が落ち着いてきたこともあり、帳票エンジン側でコンパイラサービスの実装を始めています。帳票デザイナー内部ではXMLエディター部分にMonaco Editor(VS Codeのテキストエディターコンポーネント)を使用しており、これと連携できるようにしています。

帳票エンジンの連携を強化することで、帳票デザイナーの次の機能が強化される予定です。

  • 入力補完(XML構文のセマンティック合わせた補完ができるように)
  • 構文エラーをわかりやすくする

とはいえ、入力補完を作るのはかなり大変なので、2024年春の時点では足回りを固める部分までになるのではないかと思います。

帳票デザイナーで全コンポーネントをカスタマイズできるように

これもできて当たり前レベルの話ですが、やっと開発人員がアサインできる状況になったので、開発を進めています。

特に <Grid> <Table> がGUIからレイアウトを組めるようになると、罫線が入り組んだ帳票のレイアウト作成作業がかなり楽になるはずです。

正式サービスインに向けて

以上までで挙げたこと自体では、決済システムの構築を筆頭に管理画面の開発にまだ手が回っていません。正直手が回ってないので、Stripeとか詳しい人がスポットで手伝ってくれると大変助かる状況です。

また、B2Bサービスとして提供するため、電気通信事業における個人情報等の保護に関するガイドライン に準拠したサービス運用体制の構築準備は既に着手しています。

このあたりができてきて、やっと正式サービスインかなと考えています。

なんで今さら帳票エンジンを新規開発しているのか

· 約8分

yagisan-reports開発チームリーダーのterurouです。

デンキヤギでは yagisan-reports という「Webで使うことを前提とした」商用の帳票エンジンを開発しています(厳密にはyagisan-reportsはエンジン単体の製品ではなくクラウドサービスとして開発していますが、この記事では帳票エンジンとして記載しています)。

yagisan-reportsとは

「Webブラウザ単体で動作すること」にこだわっている帳票エンジン です。

2023年11月現在、アーリーアクセス版を提供しています。既に3社5システムで本番稼働しており、一番長いものでは3年ほど本番稼働を続けています。開発中のシステムも含めると、さらに数社あります。

元々はアーリーアクセス版の公開から早めにパブリックベータに移行する計画だったのですが、ありがたいことに早期から大口の導入相談が複数あり、こちらを優先対応していました。こういった開発経緯から、帳票機能自体は既にアーリーアクセス版の域を越えてしまっており、そろそろ次の展開に入りたいとは考えています。

なんで帳票エンジンを新規開発するのか

ありきたりですが、使いたい帳票エンジンが存在しなかったからです。

商用製品に限定すると、老舗商用製品は10-15年ぐらいは考え方が古いし、新興商用製品は基本機能すら足りてないという状況だと認識しています。OSSも同様に相当古くなってしまっています。他には「Headless ChromiumでCSS組版」「ExcelファイルをPDFに変換」というような帳票専用ではないライブラリを駆使する方法もありますが、品質や工数の面で大きな問題があることを我慢して使うしかありません。

帳票エンジンについては10年越しで動向を見ていますが、上記のような状態がずっと続いています。「この先も状況が良くなることはまずないだろうし、だったら作るかねえ」 という流れです。

また、時雨堂という会社の存在も開発モチベーションに影響しています。「零細企業がミドルウェアを作って売る」ことが商売として成立することを現実として見せつけられた訳ですね。デンキヤギのここ数年の取引実績から考えても、零細企業であることが取引の足枷になることが相当減ってきている実感はあり、「だったらウチでもやれるかな」という気分になってやっています。

どのような帳票エンジンを作っているのか

「小さなシステムでも雑に使える」 ことを軸に考えています。以下に挙げていくような要件を満たすものが存在してないよねという話でもあります。

必要十分な帳票機能

実業務で雑に使うにあたって、日本語が難なく扱え、繰り返しや改ページ制御が簡単にできることは最低限必要です。残念なことに、必要最低限の機能を持つ帳票エンジンの選択肢は決して多くはなく、新興製品はほぼ全滅という惨状です。

一方で老舗エンタープライズ製品が持つ高度なプリンター制御は不要で、PDFが出力できれば十分だと考えています。プリンター制御のニーズはゼロではないとは思いますが、実際にヒアリングしてきた限りでは要望がありません。そもそも基幹規模のシステムなら実績のある老舗エンタープライズ製品を採用するだろうし、小規模向けなら都度作っても工数は知れていると割り切っています。

Webブラウザ上で動作する帳票エンジン

新規で帳票出力が必要なシステムを構築する場合、余程の理由がない限りはWebシステムにするかと思います。そして、帳票出力はサーバーサイドで行う構成が一般的です。そもそも既存の帳票エンジンは、動作環境の都合からサーバーサイドでないと使えません。

しかし、帳票出力処理はCPU負荷・メモリ使用量が大きいという問題があります。「リクエスト毎に帳票を生成してレスポンスとして返す」ような素朴な設計のサーバーでは、負荷増大に耐えられません

このため「一旦Queueに投入してから処理をする」「事前に日次バッチで生成しておく」など、負荷増大に備えた設計・構成が必要となり、システムが複雑化し、開発/構築コストも運用コストも増大してします。

そこで、Webブラウザ側で帳票出力を行いたいという発想になります。Webブラウザ側に帳票処理を任せることで、シンプルなシステム構成にでき、コストを抑えることができます。そうなれば、小さな業務でもシステム化できる可能性が高くなります。

とはいえ、ビジネス上の都合でサーバーサイドで帳票出力したいケースは当然あるので、ブラウザサイドとサーバーサイドの両方に対応します

今どきのフロントエンド感覚で帳票テンプレートを作成できる

yagisan-reportsでは帳票テンプレートをXMLで記述します。そのうえでGUIのデザイナーツールも提供します。テキストエディタとGUIデザイナーのどちらからも帳票テンプレートを編集できます。

帳票のレイアウトシステムは 「要素を絶対位置で配置するモード」「要素を上から下に並べていくモード」 の2つから選択できます。前者では、既存のPDFファイルをベースにして、動的に文字や画像等を重ねて出力させることも可能です。

また、AndroidやiOSなどにおける TableViewやGridのようなレイアウト要素によって、帳票の表組(ざっくりとは罫線)を構成 します。これらのレイアウト要素は多段にネストさせることができます。

これらのような、今どきのフロントエンド開発では「できて当たり前」のことができないのが「今までの帳票開発」 でした。

「現代的なシステム構成」を想定した柔軟なライセンス体系

2023年現在において、新規でシステムを構築する場合はAWS・Azure・GCPなどのクラウド環境を使い、LambdaのようなFaaSも合わせて使うことはごく自然な選択です。オンプレミスであったとしても、余程の理由がなければコンテナなどの仮想化技術を用いた構成にするのではないかと思います。

しかし、商用帳票製品の多くはクラウド環境や仮想化環境で使うことを想定したライセンス体系になっていません。オートスケールすることがメリットの環境なのに、サーバー台数やCPU数でしか契約ができないため、インスタンスタイプやインスタンス数を固定しないと使えないとか、本末転倒なことになってしまいます。

また、yagisan-reportsはWebブラウザ上で動作させることができるため、ノーコード・ローコード系のSaaS/PaaSに組み込んで使うことも可能です。この場合は利用規模が極小になることも想定されます。

yagisan-reportsでは、これらのような既存の帳票エンジンでは想定しきれていない環境でも問題なく柔軟に使えるライセンス体系としていきます。

まとめ

帳票エンジン自体の完成度は競合製品と十分に勝負できるレベルに達してきていると思っていますが、一方で帳票デザイナーなどの周辺部分の開発がまだまだ追いついてない状態ではあります。

開発リソースが潤沢ではないという大前提はありますが、最初期のプロトタイプを作ったのが2018年で、そこから5年ぐらい開発してやっとこの段階です。実際に帳票エンジンを作ってみてわかったことは「想像してた5倍ぐらい開発がめんどくせぇ・・・」 ことでしょうか。

最後に、yagisan-reportsは ライブデモ を公開しているので、こちらだけでも見て頂ければ有難いです。実際に使ってみたいという方は 製品ページ からお問い合わせください。近い将来には問い合わせ不要で試用できるようになる予定です。