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

はじめに

Nijoは、エンタープライズアプリケーション(業務アプリケーション、業務システム)のスクラッチ開発を効率的に行うためのコード自動生成ツールです。 データ構造を定義したスキーマを中心とし、堅牢なアプリケーションの土台を自動生成します。

とにかく動かしてみたい方へ

デモ では、ローカル環境でデモサイトを動作させ、Nijoを実際に体験するためのセットアップ手順を説明しています。

特徴

業務アプリケーション開発において最も困難なのは、アプリケーション全体で複雑なデータ構造と業務ルールの整合性を保ち続けること、また関係者間で各データの意味や役割の認識を合わせ続けることです。 Nijoは、 「モデル (Model)」 という概念を用いてそのアプリケーションのスキーマを定義し、専用のGUIエディタで可視化することで、この課題の解決をサポートします。

1. 可視化による設計の共有

専用のGUIエディタ (nijo serve) を提供しています。 複雑なデータ構造やリレーションをER図のようなグラフで可視化することで、エンジニア間での仕様確認や認識合わせをスムーズに行えます。 「このデータが消えたら、関連するこのデータはどうなる?」「この画面で検索されるデータの構造は?」といったシステムの挙動を、コードを書く前に視覚的に共有し、実装方針の合意形成を行えます。 編集データは nijo.xml というXMLファイルに保存され、これが設計ドキュメントであると同時にコード生成の元データになります。

GUIエディタ画面

2. スキーマ駆動のモデリング

Nijoでは、「モデル」という単位でデータを捉えます。 モデルは、その種類に応じて、どのようなソースコードが自動生成されるかが変わります。 代表的なモデルの種類は以下3つです。

  • データモデル(上の画像のオレンジ色の図形): RDBMSのテーブル定義と近いですが、単なるテーブル定義ではなく、同一トランザクションで更新されるべき複数のテーブルを1つの塊と捉えます。データモデルからは C# で一般的な O/R マッパーである Entity Framework Core の定義や、必須チェック/桁数チェックなど基本的な入力検証などのコードが生成されます。
  • クエリモデル(上の画像の緑色の図形): エンドユーザーが検索・一覧表示する粒度でモデルを定義します。クエリモデルからは、検索条件オブジェクト、検索結果オブジェクト、動的WHERE句付加、ORDERBY句、ページングなどのコードが自動生成されます。
  • コマンドモデル(上の画像の青色の図形): 処理。画面初期表示処理、更新処理、ログイン、帳票出力など、エンドユーザーやスケジューラが起点となり、Webクライアントとサーバーが協働して実現する必要のあるものがこれにあたります。

この厳格なモデリングにより、データの不整合を防ぎ、保守性の高いシステム設計を強制します。

3. フルスタックかつ型安全なコード生成

定義されたモデルから、以下のレイヤーのコードを一気通貫で生成します。

  • データアクセス層: Entity Framework Core によるテーブル定義
  • ビジネスロジック層: モデルごとのC#クラス定義, CRUD処理
  • プレゼンテーション層: TypeScript 型定義, ASP.NET Core Web API, それと対応するJavaScript側のAPIクライアント

フロントエンドからバックエンド、データベースまで型定義が同期されるため、変更に強い開発が可能です。

V字モデルにおける位置づけ

Nijoの中心は、nijo.xml によるスキーマ定義です。 これは 開発チームがアプリケーション全体のデータ構造を共有し、そのまま実装につなげるための動く内部設計図 にあたります。

V字モデルで見ると、Nijoは以下の工程に役立てることができます。

  • 内部設計: Nijo でデータ構造、検索、入出力の骨格を定義する
  • 実装: 定型コードは Nijo による生成に寄せ、案件固有のロジックやUIは手動実装
  • テスト: 自動生成部分のテストはほどほどに、手動実装部分のテストにリソースを集中させる

詳細な役割分担は 開発工程との統合 を参照してください。

技術スタック

Nijoが生成するアプリケーションは、以下の技術スタックを採用しています。

  • データベース: 任意のRDBMS (EF Coreがサポートするもの) / デフォルトテンプレートはSQLite
  • バックエンド: .NET 9 以上 / ASP.NET Core / Entity Framework Core
  • フロントエンド: TypeScript。それ以外のJavaScript, CSS フレームワークやライブラリの採用は任意。