14:00この記事では、SCSKが提供する「VBマイグレーション」サービスを紹介します。今回は、Oracle社の「Developer」で作成された画面を、Curlで焼き直しする具体的な実装方法を解説します。はじめにCurlの開発・提供を行っているSCSKでは、VBマイグレーションというサービスを提供しています。Basicに限らず他の言語からでもCurlへ焼き直しすることはできるのか考えました。そこで今回は、ERPシステム等で使われることが多いOracle社の「Developer」で作成された画面をCurlで作成し、その過程を紹介します。Oracle社のDeveloperとは、Webに対応したOracle独自の4GLアプリケーション開発・実行環境です。Database用にデータベース言語SQLを独自拡張したプログラミング言語)で業務ロジックを作成していくものです。Curlは次世代Webプラットフォームとして標榜し、その生い立ちは、米国マサチューセッツ工科大学(MIT)の研究室からになります。利用するサーバサービスには制約がありません。詳しくはCurl公式サイトを参照ください。java」(以下、ORB)を用います。ORBとは、CurlとJavaをシームレスに結合し、高速なデータ通信を実現するためのツールです。詳しくは下記のサイトをご覧ください。実装するにあたり、画面の仕様を決めておきます。今回は以下の仕様とします。「検索ボタン押下時、テーブル[HINMK_TBL]より全件取得し、取得結果を明細行に設定する。」とても簡単な一覧検索画面です。前ページの画面仕様をDeveloperにて実現する場合、次のような作業が必要となります。execute_queryと書く)ロジックと呼べるものはほとんどなく、プロパティの設定で実装可能なのが特徴です。Curl+ORBで実装する場合Curl+ORBで実装する場合は、サーバ側とクライアント側の各々での定義が必要です。データアクセスをサーバ側(Java)で、画面コントロールをクライアント側(Curl)で実装します。Developerはデータアクセスロジックと画面コントロールロジックが融合して実装されていることが多いため、移行する場合はまず「データアクセスロジック」と「画面コントロールロジック」に分割する必要があります。サーバ側サーバ側はJavaで実装します。検索ボタン押下時の処理として、サービスクラスに以下のロジックを定義します。実行した結果をデータクラスに設定クライアント側クライアント側はCurlで実装します。Java」の関連記事も併せて参照ください。サーバ側の実装まず、サーバ側の実装を見て行きましょう。実際に定義するプログラムは「HinmkLst.java」「Hinmk.java」の2つです。HinmkLst.javaサービスクラスです。品目一覧画面をコントロールするための[HinmkLst]クラスを定義し、検索ボタン押下時の処理として、[kensaku]メソッドを定義します。DBに対してSQLを実行し、結果をデータクラス(Hinmk)に設定します。クライアントにCurlを使っていることを意識させない、一般的なJavaでのDBアクセスロジックと同様です。//クライアントには、配列(ArrayList)型で返却する。//1行分のデータとして配列へ設定する。}}Hinmk.javaテーブル[HINMK_TBL]を格納するためのデータクラスです。}サーバサイドで作成するロジックは以上です。続いて、クライアント側の実装を説明します。実際に定義するプログラムは「sample1.curl」「Hinmk.curl」の2つです。sample1.curl画面プログラムです。魂をこめて作成する部分ですが、ご覧のようにとてもシンプルです。一般的なWebシステムの場合、サーバサイドから返却されたデータを取得する部分が煩雑になりがちですが、Curl+ORBで実現するととてもシンプルな構成となります。||--Javaで作成したサービスクラスを呼び出す。||--サービスクラスからの結果をRecordGridに設定します。||--サーバから返却されたresult-listの件数分Recordに設定します。rg}}Hinmk.curlサーバ側で定義したデータクラス(Hinmk)と同じ定義を行います。以下のソースコードは、ORBのツールにて自動生成できるのでコーディングは不要です。}HinmkLst.curlサーバ側で定義したサービスクラス(HinmkLst)と同じ定義を行います。こちらのソースコードもHinmk.curlと同様、ORBのツールにて自動生成できるのでコーディングは不要です。}サーバ(Java側)で作成されたデータクラスをクライアント(Curl側)で受け取って表示しています。サーバ側とクライアント側のデータクラスを同じ定義とすることで、JavaとCurlで異なる言語にも関わらず、それを意識する必要がありません。Centerのコード生成ツール・マニュアルを参照ください。Developer/Curl+ORBでの実装時の違いそれでは、Developerでの実装時と、Curl+ORBでの実装時の差異を確認していきましょう。Developerでの特徴サーバサイド、クライアントサイドを意識することが少ない単一言語(PL/SQL)にて実装ができるDBアクセスレスポンスが良い今回のサンプル程度であれば、項目定義、プロパティの設定のみで実装が可能であるCurl+ORBでの特徴サーバサイド、クライアントサイドを分割して実装できる。部分に注力できるORBはオープンソースで公開されているため、自由なカスタマイズが可能DBアクセスレスポンスについて両者のアーキテクチャーが大きく違うため単純な比較はできませんが、DBアクセスレスポンスを比較しました。テーブル[HINMK_TBL]に1000件のデータを格納し、それを画面に表示するという速度検証を行いました。結果は、Curl/Developer共に1秒以下で表示されます。体感はDeveloperが早いですが、1000件程度の表示であれば両者の速度に大差は感じられませんでした。作業性について今回の画面作成の作業性を比較してみます。Developerは、1人で作業し、1時間で作成できました。クライアント/サーバを意識する必要がない反面、分担して作業することができません。Curl+ORBは、サーバサイド/クライアントサイドで担当を分け、2人で作業しました。サーバサイド:30分、クライアントサイド:30分で作成できました。トータルでかかる作業時間は大差ありませんでした。Curl+ORBでは自動生成で作成する部分もあるので、”コーディング”する部分は局所的です。APサーバの設定については、経験がないと苦戦するという点では、Developer/Curlも同じです。両者共に丁寧な解説サイトがありますので、それに従えば構築できます。Curlは、利用するサーバサービスに依存していないため、特段Curlに関する知識がなくても、一般的なWeb/APサーバを構築するための知識さえあればスムーズにサーバを構築できます。Builderという開発ツールを用います。項目を作成し、プロパティを設定していき、必要に応じてPL/SQLでロジックをコーディングしていきます。画面のエディタも配備しております。Eclipse)という開発ツールを用います。Curlのソースコードは、テキストベースですので、前述のコーディングレベルであれば、テキストエディタでも作成可能ですが、開発ツールを用いるとコード補完などコーディングする際に有用な機能が多数あり生産性が向上します。Ver.8.0.0では便利な機能も多数盛り込まれています。詳細は、こちらをご覧ください。Curlプラグインの主な新機能(v8.0.0)使ってみようメトリクス!バージョンアップについて開発ツール/実行環境の宿命上、バージョンが存在します。旧バージョンの開発ツールで作成したプログラムを新バージョンにコンバージョンさせるシーンに良く出会うと思います。Developerでは、古いバージョンのソースを新しいバージョンのソースにコンバージョンできます。やり方はいくつかありますが、基本的には古いバージョンで作成したソースを新しいバージョンのツールで開き、コンパイルして保存する、というやり方です。(もちろん、バージョン間で変更されたAPIに対する対応は必要です)Curlの場合は、ヘラルドと呼ばれる部分に新しいバージョン番号を書きます。applet}と記載しています。RTEで稼動することを意味しています。applet}と書きます。RTEでも稼動します(Developerと同様に、バージョン間で変更されたAPIに対する対応は必要です)。Ver.6.0/7.0/8.0/9.0で稼動させることができることです。RTEで稼動させることも可能です。本格的にCurlに移行したい場合では、前ページまでで説明した、画面の作り替えだけでなく、本格的にDeveloperからCurlへと移行したい場合は、どのようにすればよいのでしょうか。残念ながら、Developerで作成されたプログラムをCurlに移行するための専用のツールはありません。した工夫で比較的簡単に移行できます。Developer側のロジックDeveloperのソースコードは、PL/SQLで作られているため、それらの業務ロジックをOracleのストアドプロシージャに移行させ、Javaにて移行したストアドプロシージャを呼び出すサービスクラスを作成し、Curlより作成したサービスクラスを呼び出す構成にします。すれば、スムーズに移行でき、既存資産も活かせます。//商品マスタから名称を取得する。//商品マスタから名称を取得する。TABLEにて定義します。業務ロジック・データアクセス部分は全てDB層にて定義しており、APサーバ(Java)層は、ロジックを呼び出すだけのラップサービスです。3層構造ですが、APサーバの役割が小さくてすみます。Curl+ORBでの実装イメージそのほかの注意点Developerは元々C/S環境を源流とする開発ツールで、Curlは、当初より「エンタープライズRIA」に取り組んでいる言語です。C/Sシステムから本格的なWebシステムへ移行するにあたり、いくつか考慮すべきことがあります。排他制御についてC/S環境のシステムでは、悲観的排他制御を行うケースが見受けられますが、一般的なWebシステムでは、楽観的排他制御を用いるのが常道です。セッション管理についてC/S環境のシステムにおけるDBとのセッションは、1システム利用者=DBセッションとなることがほとんどかと思いますが、Webシステムにおけるセッションは、以下の2つが存在し、1Webクライアント≠DBセッションです。クライアント・Webサーバ間のセッションWeb(AP)サーバとDBサーバとのセッションC/S環境のシステムにて一時領域にデータを書き込む際にクライアントのキーとしてDBセッションを用いている場合などは、WebのセッションIDを書き込むように変更するなどの考慮が必要です。参考情報マニュアル(ヘルプ)Curlヘルプドキュメントは、Curl言語の記述方法やAPIの解説方法のほか、各種ツールも紹介しています。このヘルプドキュメント自体も、CurlのAPIで構築されています。ヘルプドキュメント特筆すべきは、Curlのソースコードをその場で書いて確認できる機能です。ヘルプに記載されているサンプルコードのほとんどは、その場で実行することができます。ヘルプドキュメント自体がCurlのエディタとなっており、その場でコードのカスタマイズを行うことも可能です。サンプルコードのほとんどはその場で実行可能Curlの開発者ガイドHTML版(上記の機能はありません)Curl開発環境に付属しているCurlの開発者ガイドなどをhtmlに変換したページマニュアルは、体験版の開発ツールに同梱されています。ダウンロード先はこちらです。困った際のトラブルシューティング両者の言語ともに、サポートサービスは提供しているものの、Web上には一般的な知識として、Javaほどの情報量は出回っていません。Curlには、コミュニティサイトがあり、困った際はこちらに投稿することもできます。Curlを開発しているエンジニアが回答してくれることもあるため、非常に心強いです。GalleryCurlで作られたサンプルデモプログラムをWeb上にて公開。CenterCurl言語技術者向けサイト。Training)E-learningツールを使用してオンラインでトレーニングを公開。恵介(イノケイスケ)2000年、九州住商情報システムに入社後多くのERPパッケージ開発を担当、その後現在のCurlビジネスに従事。圧縮・解凍UNIX基本講座@CodeZine『CodeZine(コードジン)』の公式アカウントです。【NEW】デブスト2019デブサミ2019福岡・関西デブサミ2019夏デブスト関西デブサミ2019×ログインEメールパスワード※旧SEメンバーシップ会員の方は、同じ登録情報(Eメール&パスワード)でログインいただけます。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。