Webロボとは

Webロボは、30にのぼる業務用システムアプリケーション開発に必要なロジックパターンの定義プログラムを用意し、定義プログラムが要求する項目について登録することにより、JavaのStrutsフレームワークに対応するWebシステムのソースを自動生成するシステムです。
実行に必要なすべての部品を生成し、ほぼそのままでも実行することが可能です。
これまでの、各種ツール、フレームワークに例を見ない、画期的でまさにWebロボのネーミングにふさわしい、Web開発のロボットと言っても過言でありません。最低の定義で、最高の自動生成を、「定義=プログラム」の理想を追求しております。
プログラム生成自動化の歴史は今にはじまったものではなく、これまで多くのトライがありましたが、多くは失敗に終わり、日本のソフト業界においてはジェネレーター、自動化という言葉はマイナスのイメージでとらえられ、そのトラウマにとらわれており、結局あいかわらずの手組みでの開発が主流になっております。
弊社は、物作りがロボット化によって日本の高賃金を克服しているように、ソフト産業においても、オフショアに現象されている高コストをソフト開発のロボット化によって克服すべきであるとの思いで、これまでのトラウマにあえて挑戦しております。

Webロボの技術的立場と役割

この十年のコンピュータの技術的潮流の変化は、極めて激しく、コンピュータに携わるも のにとっては戸惑いを隠せません。
Webロボを開発してきた私どももこの間、こうした変化にどのように対応していくべき なのか、どの技術を選択して新たなこれからのシステム開発に関わっていくべきかに悩ん でまいりました。
パソコン及びインターネットの普及を前提とする時、これからのシステム開発のインフラ 技術はWebシステムであろうと結論しております。
さらに、Javaをベースとしたオープン系か、.NETをベースにしたWINDOWS 系でいくかの選択肢がありますが、より技術的なフリーハンドを担保するためには、Ja vaをベースにすべきものと結論いたしました。
その結論の結果として、必然的にグローバルスタンダードの地位を得つつある、Stru tsを基本フレームワークとして選択いたしました。
次に作表技術とリッチクライアント技術の選択という課題がありますが、作表はほぼPD Fが一般的なものとなりつつあり、Webロボも迷わずPDFLIBを利用してのPDF での作表を選択しております。
最後に残った大きな問題として、リッチクライアントをどのように実現すべきかがありま す。
私どもの考え方として、Webシステム構築に際しては極めて多くの技術を駆使しなくて はなりませんが、出来れば言語的にはJavaに限定できないかと考えております。
オープン系の問題点とし、GUI技術がWINDOWSに遅れをとっており、今後この分 野でより技術開発をすべきことと、リッチクライアントをGUIの課題ととらえるべきと の観点からも、アプレットでリッチクライアントを実現すべきと考えております。
最近Ajaxが取り上げられておりますが、リッチクライアントについてはこれまでも、 いろいろ取り上げられてきましたが、まだ確立したものになっておらないのが現状です。
アプレットの問題点としてスピードがありますが、これまでのコンピュータシステムの 歴史を振り返えれば、スピード、容量の問題の解決こそがコンピュータの歴史であり、ス ピードの問題も早晩解決するものと思われ、リッチクライアントをGUIととらえる限り 私どもはアプレットを選択すべきとの立場でおります。
Javaのバージョンアップでも、Swingのパフォーマンスの改善がテーマにもなっ ており、スピードアップが期待されます。
これからも、ますます新たな技術的な提案がなされ、それらの見極めに多くの時間を割か ざるを得ない宿命をコンピューター業界は背負っておりますが、しっかりした技術ベース を前提にしていきたいと考えております。なぜなら、システムは技術のはやりすたりに合 せて作り変えるものではないのですから。
基本的には、安定的で使いやすく、コスト負担が少なく、システム保守がしやすいという ことがユーザーの要求条件であり、それに応えることがWebロボの役割と認識しており ます。
もうひとつの問題として、日本において自動生成の是非についての議論があります。 いわく、自動化によってプログラム技術のレベルが低下する。
いわく、現場作業的なプログラム技術はより賃金の安いオフショアにまかせ、日本では上 流工程のシステム設計に力点をおくべきである。
後者に対しては、ソフト産業の技術は、設計技術とプログラム技術双方が必須であり、プ ログラム技術を失えば、必ず技術的空洞化を起こすことは明らかです。
前者に対しては、定型的なプログラムは自動的に作成すべきで、それによってより効率よ く、安定した品質のソフト開発ができるのであり、生産性をあげ付加価値をたかめること が、ソフト産業にも求められております。又、極めてハードルが高いJavaWebシス テム技術を自動生成されたソースより技術習得することによりそのハードルが下がり、よ り革新的なことに人的な資源を投入することが可能になります。

Webロボの性能

自動化プログラムの性能評価をする場合以下の要素があげられるものと思います。
  1. 簡便性
    いかに簡単な定義で、いかに完成品に近いプログラムを生成するかの点ですが、下記のようなPDFによる売上一覧表の例でご説明します。



    上記プログラムのプログラム表題定義では、下図のようにプログラム名、タイトル名、プログラムパターン、ページ行数、主テーブル名、SQL関数、次プログラム等のプログラム全体の定義をします。



    プログラム詳細定義では、表題部の出力項目、明細部の出力項目とその行列番号、合計計算項目、キーブレイク項目を定義しています。
    たったこれだけの定義で、上記のPDFでの罫線入りで、合計入りの売上げ一覧表プログラムが作成されます。他パターンでもほぼ同様の定義です。



  2. 柔軟性及び自動化率
    簡便性と自動化率は本来、矛盾するものですが、Webロボではパターン化と関数の差込機能によりこの矛盾を解決しております。
    小部品を関数として定義し、それを各所で差し込みすることにより、又利用者が用意した独自クラスのインポート機能により柔軟性を担保し、高い自動化率を獲得することを可能にしています。
    又、画面設計においては、画面作成ツールで作成されたHTMLは、Strutsのタグを差し込むことによって、Webロボに簡単に取り込み出来ます。
  3. 汎用性
    Webロボは、オープンな開発環境であるJava言語で、Strutsといグローバルスタンダードなフレームワークに対応したプログラムソースを生成します。
    Javaはオープンと言いながら、独自なフレームワークでは他のフレームワークとは共存できず、汎用性を失いかねません。WebロボがStrutsを選択した理由がここにあります。
    又、万一別なフレームワークであっても、Webロボはソースの生成であり、大半の生成Javaクラスはそのままでも利用することが可能です。
    データベースもMySQL、Postgres、Oracle、SQLサーバーに対応しております。
  4. 信頼性
    Webロボは、例外処理を考慮したプログラム生成、SQLインジェクションに対応したプログラム、権限管理機構、PDFのパスワード機能を利用した文書管理機構等、信頼性に配慮したシステムを提供することが可能です。
  5. 難易度
    合計処理機能を持ったPDF、下記の複雑なPDF帳票、コード検索のウインドウが開くアプレット、伝票形式でのアプレットプログラムなど難易度の高いプログラムを作成することが可能です。



Webロボ利用のメリット

  1. 最低一人は全技術につての知識が要求されますが、その指導のもとでWebロボの定義ルールを理解することにより、コンピュータについての知識がない方をも即戦力化することが出来ます。
    一方、COBOL等の言語に堪能でシステム経験が豊富な年齢の高い世代が、Web、Java等の新技術への対応ができずにおりますが、Webロボはその世代の再活用を可能にし、若い世代の業務知識、経験の不足を補う大きな役割を果たすことが出来るようになります。
    又、極めて簡単な定義作業で、プログラム作成が可能ですので、大変高い生産性が獲得できます。
  2. 一からJava、Struts、JSP、JavaScript等々の技術習得は極めて困難ですが、Webロボにより生成されたプログラムにより、それらを理解する方が容易で近道となります。
    Webロボでは、定義用プログラム、自動生成プログラム及びアプレットの基本プログラムを除いて、すべてのソースを見ることが出来ます。
    Webロボは教育ツールとも言えます。
  3. ますます複雑化するプログラム開発ですが、手組みをする場合はどのようなルールを作っても部品構成の統一化をはかることは困難となり、全体の体系及び個別プログラムの解析は厄介なものとなります。
    Webロボではすべての部品を自動生成しまので、それらの部品構成はWebロボの生成ルールに則りますので同じものになり、又同じプログラムになります。
    従って、システム及びプログラムの管理は極めて容易になります。
  4. Webプログラム開発は、セキュリティー対策についても多くの配慮が要求されますが、手組みによる場合、個人の能力知識に格差があり、すべてのプログラムに細かな配慮をすることは、至難の業と言わなければなりません。
    Webロボが用意するこれらの配慮が、すべてのプログラムに自動的に施されます。
  5. システムの開発には必ず仕様の変更が伴います。
    手組みの場合、それまで作られた部品の見直しと変更が要求され、そのために要する工数は極めて大きなものにならざるを得ません。
    しかしながら、完全な仕様を詰めるためには、多くの時間を要するだけでなく、不可能に近いものがあります。又、下流工程を待たせることになります。
    Webロボでは、仕様の変更になった部分の定義を変えるだけの作業ですみますので、仕様変更による負担は軽微なものになります。
    場合によっては、プロトタイプを作りながら仕様の決定をしていくことも可能です。

実行環境条件

PDFツール PDFLIB正規版
データベース PostgreSQL/MySQL/Oracle/SQLサーバー等
Webサーバー Tomcat
フレームワーク Struts
Java環境 Java J2SDKEE

生成部品

Webロボは、テーブル定義、プログラム表題定義、プログラム詳細項目定義、関数定義より、下記T図のようにStrutsに対応した実行に必要な部品をすべて生成します。
30を超えるロジックパタンを用意し、そのパターンに必要な要素を定義するプログラム用意することにより、簡単に厄介なWebシステムを自動作成します。

@テーブル定義よりは
テーブル生成SQL、テーブルビーン、テーブルアクセスのメソッドクラス、標準SQLクラス、バリデーターxml、テーブルアクションクラス(アプレット用)
Aプログラム表題定義よりは
マッピングxm
Bプログラム詳細項目定義よりは
フォームxml
B%関数定義よりは
定義SQLクラス、複合テーブルビーン、複合テーブルアクセスメソッドクラスが自動生成されます。

更に、テーブル定義、プログラム表題定義、プログラム詳細項目定義、関数定義より、アクションクラスプログラム編集クラス、JSPプログラム、アプレットプログラム(アプレットパターンの場合)が自動生成され、実行に必要なすべての部品が用意されます。
  1. JSPパターンでのテーブルアクセス関係部品構成
    Strutsも、一般的なMVCといわれる部品構成の手法をとっておりますが、Strutsに対応しても、部品構成の考え方は統一がとれません。従って、部品化が進めばすすむほど、又システムの規模が大きくなればなるほど、システムの把握は困難になってまいります。
    Webロボにおいては、下記U図のように極力部品の機能を明確にして、仮に生成部品に変更が生ずる場合、局所化するための部品構成を取っております。
    クラスの部品構成としては、アクションクラス、編集プログラムクラス、SQL編集クラステーブルアクセスメソッドクラス、テーブルビーンという階層クラスで構成されます。
  2. アプレットパターンでのテーブルアクセス関係部品構成
    JSPパターンの部品構成とアプレットでの部品構成は異なります。
    Webロボでは、アプレットで必要になる下記B図のようなテーブルアクセス関係部品をすべて自動生成します。
    JSPとの大きな違いは、アプレットにおいては編集プログラムクラス、SQLクラスを介さず、アプレットプログラムの中で直接SQL文を編集して、テーブルアクションクラスを起動して、テーブルアクセスメソッドクラスよりテーブルビーンという流れでの処理になります。
    尚、アプレットプログラムの呼び出しは、アクションクラスを介してJSPプログラムを呼び出しJSPプログラムより、アプレットを呼び出しという流れになります。
    従って、アプレットプログラムにおいても、アクションクラス、JSPプログラムが生成されます。
i図:Webロボ部品生成概念図


ii図


iii図


プログラムパターン

パターン及び定義の特徴として、以下のような点をあげることができます。
  1. 出力はPDFLIBなるライブラリーを利用して、罫線の自動生成を行います。
  2. 一覧表おいては、合計項目及びキーブレイク項目の指定により、簡単に合計処理ができます。
  3. アプレットプログラムが極めて簡単な定義で、自動生成されます。
    特に、アプレットの場合は伝票形式での複雑な入力、ウインドウを開いてのコード検索が簡単に開発出来ます。


  4. アプレットプログラムの場合、項目前の条件により項目をスキップしたり、入力後にテーブルを読んでマスター項目を表示したり、項目チェックをすることが可能です。
  5. MRDBの帳票定義機能を利用して帳票設計し、その座標値をWebロボに取り込みすることにより、下図のような極めて複雑な帳票についても対応が可能です。



パターン詳細
パターン名 区分 パターン内容
登録 JSP 通常のデータ登録パターン
保守 JSP 通常の修正、削除をするパターン。
メニュー JSP メニュー画面パターン。
一覧閲覧 JSP 一覧表形式でのデータの閲覧パターン。
明細表示 JSP 明細形式でのデータ表示パターン。
ログイン JSP ID、パスワードの入力によりログインするパターン。
検索画面 JSP 検索条件を入力する画面のパターン。
座標登録 JSP 座標をマスターに登録するパターン。
マップリンク JSP 座標をクリックして、その値を検索するパターン。
アップロード JSP 写真、画像等をサーバーにアップロードするパターン。
Jtable入力 Applet Jテーブル形式(表形式)での登録パターン。
Jtable保守 Applet Jテーブル形式(表形式)での修正、削除パターン。
暦入力 JSP カレンダー形式での入力をするためのパターン。
予定登録 JSP 予定表の登録パターン。
メール送信 JSP メールの送信するパターン。
データ更新 JSP データーの更新処理をするパターン。
インポート JSP 外部のテキストデータをデータベースにインポートするパターン。
エクスポート JSP データベースより外部テキストデータにエックスポートするパターン。
ファイル整理 JSP データレコードのないファイル削除パターン。
PDF一覧 JSP PDFでの一覧作表パターン。
PDF詳細 JSP PDFでのレコード詳細作表パターン。
Applet通常登録 Applet アプレットでの、通常での登録パターン。
Applet通常保守 Applet アプレットでの、通常での保守パターン。
Applet一覧 Applet アプレットでの、一覧表示パターン。
Applet伝票登録 Applet アプレットでの、1レコード複数行での伝票形式登録パターン。
Applet伝票保守 Applet アプレットでの、1レコード複数行での伝票形式保守パターン。
ファイル出力 JSP ファイルへのレコード出力パターン。
レコード削除 JSP レコードを削除するパターン。
一括更新処理 JSP 個別定義した更新系プログラムの一括処理パターン。
Applet検索画面 Applet アプレットでの検索画面タイプ。
MRDB詳細PDF JSP MRDBの詳細帳票定義利用パターン。
MRDB一覧PDF JSP MRDB一覧表帳票定義利用パターン。


信頼性について

  1. SQLインジェクション対策
    JSPプログラムの場合
    PreparedStatement対応のプログラムを生成します。
    アプレットプログラムの場合
    roboXフォルダーのSQLInjectionEscapeクラスにおいて’及び¥などのSQLの特殊文字についてEscape処理するクラスを用意しています。
    SQL文の編集において文字項目の場合、下記のような処理をします。
    sb.append(",'"+SQLInjectionEscape(get$varh("jyusyo"))+"'");
    尚、使用するデータベースによってエスケープする文字がかわりますので、適宜、SQLInjectionEscapeクラスを手直しします。
    SQLインジェクションについては、警察庁のホームページをぜひご覧下さい。
    http://www.cyberpolice.go.jp/server/rd_env/PDF/20060330_SQLInjection.PDF
  2. 例外処理機構
    Webロボにおいては、各クラスにおいて適切な例外処理をするようにこころがけております。
    例外が発生した場合、roboXフォルダーのSystemExceptionHandlerにおいて処理内容を定義するようにしております。
    適宜、このクラスを修正して適切な処理をするようにします。
    最終的に、JSPホルダーのException.JSPによりクライアントへメッセージ表示をしております。
    適宜、このJSPを修正して適切なメッセージを表示するようにします。
  3. フォームへの入力チェック
    テーブル定義よりValidation.xmlを生成しますので、JavaScriptでの入力チェックをしますが、更にアクションクラスにおいてもテーブル定義で定義したチェック内容を自動的にチェック文として自動生成します。
    チェック項目の詳細はテーブル定義を参照してください。
    尚、要望によりチェック項目は順次増やしていきたいと考えております。
  4. 認証及び権限管理機構
    @URLチェック
    表題定義において、URLチェックをYESに設定することにより、メニューを通さないアクセスを拒否することが出来ます。
    Aパスワードチェック
    表題定義において、ログインチェックをYESに設定することにより、ログインせずに、アクセスすることを拒否することが出来ます。
    B権限管理テーブル
    権限管理テーブルを利用することにより、権限ファイルへのプログラム名と権限Noの設定により、プログラム単位にアクセスの可否を設定することが出来ます。
    CPDF帳票によるセキュリテーシステム
    PDFでの作表の場合、権限ファイルへプログラム単位に、パスワード設定の有無とPDFのパーミッションを設定することにより、下図のように自動的にパスワードと操作制限の設定することが出来ます。

差込機能

以下の差込機能の利用により、極力プログラムの変更を回避することが出来ます。
  1. 関数による差込機構
    @関数:クラス化しないJava記述文を定義します。
    これを、詳細項目定義の画面出力文、テーブル出力文アプレットの場合の入力前文、入力後文で使用します。
    %関数:SQL文を関数として定義し、共通部品化します。
    JSPプログラムの表題定義のWHERE句で使用します。
    Appletプログラムにおいては、%関数を使用せずに表題定義及び詳細定義のWHERE句ないし、表題定義のSQL文詳細定義において、直接SQL文の編集をします。
    %関数より、複合テーブルのテーブルビーン及び複合テーブルアクセスメソッドクラスを生成します。
  2. Javaクラスの登録によるimport文の生成
    関数定義、画面出力文、テーブル出力文、入力前文、入力後文、SQL文詳細定義、チェック文定義、レコード項目定義において、独自に用意したクラスを使用する場合、そのクラス名とimportフォルダー名を登録することにより、自動的にImport文を生成し、プログラムの変更を回避します。
  3. SQL文詳細定義
    アプレットの場合、WHERE句では定義しきれないSQL文をここにおいて定義することができます。
  4. チェック文定義
    テーブル定義では出来ない相関チェック等の細かな入力チェックをここにおいて定義することができます。