2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rustで帳票エンジンを作ることになった話(Skia採用の理由)

2
Posted at

昨年の夏、業務でRustによるライセンスサーバ(REST API)を開発していた。

その開発の最中、ふと昔から考えていた「帳票アプリ」のことを思い出し、改めて調べ始めたのが今回のきっかけである。


25年前の帳票開発

これまで25年以上、業務アプリ開発に携わる中で、多くの印刷系アプリケーションを作ってきた。

ただし、その多くは以下のような構成だった。

  • Visual Studioにアドオンとして組み込む帳票ツール
  • 高額なライセンス
  • サーバ版はASP.NET対応

当時としては非常に便利な仕組みだったが、いくつかの違和感もあった。


ASP.NETとコードバインディングの限界

ASP.NETは優れた開発技術であり、特にWebFormsはWinFormsに近い感覚で開発できる「コードバインディング方式」が採用されていた。

これは業務アプリにおいて非常に有効だったが、一方で次のような課題があった。

  • PostBack前提の設計
  • IISに強く依存
  • Webでありながら「状態を持つ」構造

当時から、この仕組みにはどこか納得できないものを感じていた。


25年後、AIに聞いてみた

それから25年。

AIによる開発が現実的になった今、改めて問いかけてみた。

「Crystal ReportsやActiveReportsのような帳票アプリは作れるか?
さらにスマホやタブレットでも自由に使いたい」

答えはシンプルだった。

Yes


帳票システムに必要な2つの要素

AIとのやり取りの中で、帳票システムは大きく2つに分かれると整理された。

  1. デザイナ(帳票を設計するアプリ)
  2. レンダリングエンジン(描画・出力)

そして最も重要なのは、

  • どの描画基盤を使うか
  • どの思想で設計するか

だった。


なぜSkiaを選んだのか

当初はSVGなど複数の案を検討したが、最終的に次の理由でGoogleのSkiaを採用した。

  • 高品質な描画エンジン(PDF / PNGなどへ直接出力可能)
  • クロスプラットフォーム対応
  • 実績(Chromeなどで使用)

構成は以下のように決まった。

  • デザイナ:Avalonia UI + Skia
  • エンジン:Skiaベース

この時点では「良さそう」という判断だったが、後から考えるとこの選択が非常に大きかった。


なぜRustなのか

言語選定については当初そこまで強いこだわりはなかったが、時代の流れが背中を押した。

  • Microsoftがプリンタドライバの方向性を見直し
  • C/C++資産の見直しの動き
  • LinuxカーネルでRust採用の流れ

これらを踏まえ、エンジンはRustで実装することに決めた。

結果として、

  • 高速
  • 安全
  • クロスプラットフォーム

という帳票エンジンに非常に適した特性を得ることができた。


現在の状況

現在、帳票エンジンはほぼ完成しており、

  • CLI(コマンドライン)版を近日リリース予定
  • Windows / macOS / Linux対応

となっている。


これから

帳票は「古い技術」と思われがちだが、

  • Skia
  • Rust
  • AI

これらを組み合わせることで、まったく新しい形にできると考えている。

このプロジェクトは、単なる帳票ツールではなく
次世代の描画・出力基盤になる可能性がある。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?