HOME サービス・イベント 管理人について メール

どうせ仕様書を書くなら
「そのまま実行可能な仕様書」を書こう
― X-TEA Driver ―

仕様書で駆動される業務システム

X-TEA[eksti:] Driver
は、業務システムをはじめとするデータベースシステムの開発に特化したOSSプラットフォームです。同梱の仕様書専用エディタ(X-TEA Editor)を用いて「仕様書」を書けば、X-TEA Driverがこれを読み込んでシステムを動的に立ち上げます。保守フェーズでも仕様書を修正するだけ。いわゆる「自動生成ツール」ではないので、コードの再生成もリコンパイルも要りません。

X-TEA Driver向けに、卸売業向け販売管理システムや組立製造業向けの生産管理システムが実装され、無償公開されています。「プログラムコード」よりもはるかに理解しやすい「仕様書」の様式で、業務システムの仕様を維持・管理する――その快適さをそれらのシステムを使って実感してください。

「そのまま実行可能な仕様書」のカラクリ

 仕様書をいいかげんに書くと、イメージどおりのプログラムを作ってもらえない。かといって、懇切丁寧に書いていたら、自分でいきなりプログラミングしたほうがよほど早いと思えてしまう。とはいえ、仕様書がなければシステムの仕様がブラックボックス化してしまう。

 システム開発につきまとうこのジレンマは、ExcelやWordの上で汗水流して書かれる仕様書が、人間にしかわからない(ときには人間にさえわからない)ゆえに生じています。どうせ書かねばいけないのであれば、人間にも機械にもわかるような仕様書、つまり「そのまま実行可能な仕様書」を書けばいいだけの話です。

 そんなことが可能になるのはずっと未来の話と思われますか?いいえ、X-TEA Driverによってすでに実現されています。そのカラクリを説明しましょう。

 「そのまま実行可能な仕様書」を実現するための鍵は「プログラムのパターン」です。
たとえば後掲のスクリーンショットとして示しているプログラムは、「見出し明細表示」と呼ばれる「処理パターン(機能タイプ)」の1種類として分類されます。個々のプログラムの仕様は、8種類ある機能タイプのいずれかに分類され、それぞれに固有のデータ様式をともなう「機能仕様書」としてまとめられます。そして、X-TEA Driverが機能仕様書を読み込むと、機能タイプ毎に用意された実行エンジンが「仕様書どおりに動作するプログラム」に瞬時に変形して立ち上がります。

 そのような実行エンジンを実現することは、プログラムをパターン化することなしにはおそらく不可能でしょう。開発されるプログラムは一見すると多種多様であるために、それらをすべてカバーするような仕様書の様式を想定することが困難だからです。多すぎず少なすぎないパターンとしてプログラムを分類し、パターン毎に的確な仕様書の様式を確立する。それが「そのまま実行可能な仕様書」を実現するための鍵です。

 プログラムだけではなく、テーブルやメニューもそれぞれ「テーブル仕様書」、「メニュー仕様書」として定義されます。これらはXMLのプレーンテキストデータとして様式化されますが、開発者がそれらを編集する際にXMLを意識することはありません。仕様書専用エディタであるX-TEA Editorが、XMLデータを端正な仕様書として示してくれるからです。大量のXMLデータの編集に頭を悩ませる「XML地獄」に陥る心配はありません。


 仕様情報を管理するために仕様書専用エディタを用いることの利点は、他にもあります。まず、定義要素間の整合性がエディタによって保全されます。不整合が生じるような変更をしようとすればエディタが事前に警告してくれるので、大胆に仕様変更できます。また、クロスレファレンスの確認も、テーブル定義にもとづくテーブルモジュールの作成やデータ保守もエディタ上で軽快にやれます。その便利さは、Excelあたりを使う場合の比ではありません。

 X-TEA Editorで作成された仕様書がX-TEA Driverによってどのように実行されるかを、もう少し詳しく説明しましょう。まずエンドユーザがログインすると、Driverがメニュー仕様書にもとづく新たなセッションを立ち上げ、実行エンジンが待機状態になります。そこでエンドユーザがメニューオプションや機能を選択すると、対応する機能仕様書が読み出され、実行エンジンに渡されます。実行エンジンは、機能仕様書とこれに関連するテーブル仕様書とを読み込んで動的に統合し、自らを変形させて立ち上がります。

 したがって、システム開発において作成されるものは「仕様書」だけで、いかなる「クラス(オブジェクト)」も設計・開発される必要はありません。結果的に、ひとつの基幹システムの定義全体がせいぜい2メガ程度の1個のプレーンテキストファイルに収まってしまいます。保守フェーズで仕様変更したくなったら、文字通り「仕様変更」するだけでシステムの振舞いが変わります。コードが生成されるわけではないので、リコンパイルも要りません。

 つまりX-TEA Driverは、これまで数多く生み出されてきた「自動生成ツール」ではなく、「動的制御ツール」とでも分類される新しいタイプの開発基盤です。


スクリーンショット

▼X-TEA Editorで「品目と関連情報の確認」の仕様書を編集する


X-TEA Driverで「品目と関連情報の確認」の仕様書を"実行"した結果


インストールと実行の手順

1.Java環境の確認
Java8〜11(1.8.*〜1.11.*)が必要です。コマンドプロンプトで java -version と入力すればバージョンを確認できます。Oracle以外のバージョンが必要な方はAdoptOpenJDKを検討してください。

2.X-TEA Driverのインストール
インストーラ(Win専用)をダウンロードしてください。古いX-TEA Driverがインストールされているのであれば、これをアンインストールしてください。つづいて、ダウンロードしたインストーラを適当なフォルダに解凍して、そこに現れたINSTALL.EXEを実行してください。X-TEA Driverのプログラムフォルダに「DBの開始」等のショートカットが追加されます。

3.データベースの開始
「DBの開始」を
管理者として実行して、データベースサービス(JavaDB)を開始してください。コマンドプロンプトが開いて、JavaDB(Apache Derby)が実行中であることが示されます。ショートカットのプロパティの詳細設定で「管理者として実行」をチェックしておくと便利です。

4.システムの起動
システム定義ファイル(*1)をダブルクリックすれば、仕様書を閲覧・編集するための専用エディタ(X-TEA Editor)が起動されます。そのエディタ上でF5を押せば、実行エンジン(X-TEA Driver)によって仕様書の内容が解釈され、システムが立ち上がります。エディタを経由せずにシステムを立ち上げることも可能です(Readmeを参照してください)。

5.データベースの終了
X-TEA DriverとX-TEA Editorを終了したなら、「DBの開始」によって開いたコマンドプロンプトを閉じれば、データベースは終了します。

*1.拡張子xeafのテキストファイルで、ここに個々のシステム定義が格納されます。インストールフォルダ配下のSkeletonのフォルダにあるSkeleton.xeafをダブルクリックすればEditorが立ち上がります。ただし、Skeleton.xeafはシステム定義を新規作成するためのコピー元用テンプレートなので、最小限度の定義しか入っていません。より本格的な開発事例を当サイトからダウンロードしてお試しください。

改善と不具合修正の履歴

感想、バグ報告、改善提案を歓迎します。バグについては、バージョンナンバーとともに再現手順を明記していただくと対応しやすいです。基本的に上位互換で改訂してゆく方針ですが、やむを得ず移行作業が必要になることがあります。

2023.01.27版 最新版
<X-TEA Driver V1R3M36>
・ExcelFileOperatorにremoveRowAt,removeRowsBetween,setSheetNameAt,cloneSheetのメソッドを追加した
・スクリプト中のフィールド属性に'.prompter'を追加した(XF200,XF310で有効)
<X-TEA Editor V1R3M36>
・時刻編集が設定されている数値フィールドについて、データ保守ユーティリティ上で"00:00"の値がエラーにならないようにした
・XF300,310,390でフィールド追加する際の警告メッセージを出力しないようにした
・スクリプト中のフィールド属性prompterの追加に伴う言語リソースの追加とNモードへの対応

2022.01.05版
<X-TEA Driver V1R3M35>
・CheckListDialogのgetRowCount()がゼロしか返さないバグを修正した
・XF110,200,310でNull不可の時刻編集フィールドで00:00を許すようにした
・sessionのメソッドとしてformatDate(...)を追加した
<X-TEA Editor V1R3M35>
・DialogAssistListにTableOperatorをブロック出力するための行を追加した
・モジュールチェックにおいて、MySQL,MariaDB,SQLServer向けにフィールドのテーブルタイプDATETIMEとTIMESTAMPを区別するようにした
・formatDate(...)をsessionのメソッドとして追加した

2021.06.20版

<X-TEA Driver V1R3M34>
・CheckListDialogにsortList()のメソッドを組み込んだ
・getLastDateOfTheYearMonth(...)をsessionのメソッドとして追加した
・getMonthsBetweenYearMonths(...)をsessionのメソッドとして追加した
・XF000のexecuteScriptメソッドを改善した
・XF110,310でスクリプトのフィールド色制御が効かなかったバグを修正した
<X-TEA Editor V1R3M34>
・フィールドIDの変更でのテーブルスクリプト更新のバグを修正した
・仮想フィールドのID変更に失敗する問題を修正した
・MySQLのフィールドIDの変更に失敗する問題を修正した
・getLastDateOfTheYearMonth(...)をsessionのメソッドとして追加した
・getMonthsBetweenYearMonths(...)をsessionのメソッドとして追加した
・Java11環境向けにJComboBoxとJListについて総称型に設定した
・Java11環境向けにOutputFormatとXMLSerializerをLS系に置き換えた

2021.01.11版

<X-TEA Driver V1R3M33>
・仕様分析のエラーログを記録するために、各機能タイプでセッションログの書き込みタイミングを早めた
・テーブルスクリプト内のフィールドID切り出しロジックを改善した
・TableOperatorの日付項目に対するsetKeyValue(...)のバグを修正した
・SQLにもとづくTableOperatorのビルダメソッドを改善した
・TableEvaluatorのエラーハンドリングのバグを修正した
・フィールド属性オプションのリスト値でコンマを含む値を指定できるようにした
・InputDialogのフィールドのsetComment(...)をsetPrompter(...)と併用できるようにした
<X-TEA Editor V1R3M33>
・データ保守ユーティリティでCUDした際のエラーハンドリング仕様を改善した
・ツールメニューに「区分値一覧表」を追加した
・テーブルIDの変更処理を機能アップした
・フィールドの使途要素分析を機能アップした
・フィールドIDの変更(リネーム)機能を組み込んだ
・フィールド属性オプションのリスト値でコンマを含む値を指定できるようにした

2020.10.31版

<X-TEA Driver V1R3M32>
・InputDialogのフィールドで、#setComment(...)を使えるようにした
・年月型のコントローラを全面刷新して使いやすくした
・XF300の明細行上でのポップアップメニューでの追加オプションの動作バグを修正
・XF100,110,200,300,310の明細行のEXCEL出力に%編集の設定を反映させた
・明細表示での偶数行背景色をRGB(240,240,255)から(231,231,255)に変更した
・XF100,110,300の明細行上のリンク項目がブランクの場合、リンク機能が動作しないようにした
<X-TEA Editor V1R3M32>
・IDの変更機能のロジックを改善した

2020.08.23版

<X-TEA Driver V1R3M31>
・XF300,310.390の明細テーブルに対して仮想フィールドで並び順指定できるように修正
・sessionでrollback()のメソッドを使えるようにした
・OptionDialogの起動方法を改善して、getOptionAt(...)をいつでも使えるようにした
・session.isValidTime(...)のバグを修正した
・session.getOffsetDateTime(...)のバグを修正した
<X-TEA Editor V1R3M31>
・データのインポート機能でのデータと欄見出しとの関係を厳密化
・sessionでrollback()のメソッドを使えるようにした
・テーブルとフィールドの使途分析ロジックのバグ修正と強化
・テーブルIDと機能IDの変更機能を組み込んだ
<X-TEA Server>
・パスワード評価のバグを修正した
・session.isValidTime(...)のバグを修正した
・session.getOffsetDateTime(...)のバグを修正した

 すべての履歴を見る

Copyright(c) since 2004 DBC Co.Ltd. All rights reserved.