![pexelsannatarazevich14751274 | Embarcadero RAD Studio Delphi C++Builder Blogs pexels anna tarazevich 14751274](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/02/pexels-anna-tarazevich-14751274-1462783-scaled.jpg?resize=1140%2C694&ssl=1)
RAD Studio / Delphi の開発機能を活用したエンタープライズソフトウェア用途として、私が頻繁に耳にする業種のひとつは銀行・金融業界です。どうやらこれらの市場ではWindowsアプリ開発が中心のようで、観察すればするほど、舞台裏ではDelphiが大活躍していることが分かります。Delphiは、その強力なデータ処理、確かな信頼性と堅牢性ゆえに、金融派生商品、先物取引、銀行間振替といった専門性の高い難解な仕組みや、なぜ国庫の現金が不足しても政府が簡単に通貨を発行できないのかといった理由を理解できる人々の間で非常に高い評価を得ています。銀行業には多数の規則や規制が設けられ、法令遵守違反は、目から涙が出るほどの罰金を科せられる可能性があります。そして、本当に運が悪いと、連邦刑務所で予定外の長期休暇を過ごすことになりかねない、深刻な側面のあるビジネスです。
今日ご紹介するEnterprise Articleの投稿者は、移り気で有名な投資銀行の同業者との関係を維持するため、匿名希望とのことです。但し、弊社では投稿者の連絡先を把握していますので、受賞時には確実に連絡いたします。
Table of Contents
エンタープライズソフトウェア開発の背景
投資銀行は、絶えず変化する規制の対象となります。適用される規制は複雑で、慎重な法的解釈を必要とします。しかし、事業運営上は、法務部門から明確な見解を受け取る前であっても、これらの規制をサポートする態勢を整える必要があります。
規制当局が新しい規制、例えば、ドッド・フランク法(ウォール街改革および消費者保護に関する法律)やEMIR(欧州市場インフラ規制)を発表するとき、銀行は、すべての既存顧客に連絡を取り、書類を再作成する必要があります(すなわち、銀行は新規制の要求事項を顧客に通知し、顧客は新たな合意書に署名する必要があります)。銀行は、これらの合意書を期限までに確実に締結する必要があり、さもないと、顧客との取引を継続することができません(それは、数百万ドルの収益の損失を意味します)。
![](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/02/pexels-negative-space-34092-8922082-scaled.jpg?w=750&ssl=1)
エンタープライズソフトウェアの要件
私たちが満たすべき要件は以下の通りでした。
- 連絡すべき顧客リストの特定
- 以下の規準に基づいた連絡すべき顧客リストの優先順位付け
- 当行との取引年数
- 過去12ヵ月間の取引の現在価額
- 当行での取引商品の種類(規制の対象商品が限定される場合がある)
- 過去6カ月間に有効な取引を完了しているか(但し、商品によっては、2年に一度の高額取引となる場合がある)
- 追跡システムの有効化 – 各顧客は、ライフサイクル(対象者リスト掲載、優先順位付け、連絡完了、審査、署名)を通過しなければならない
- 顧客連絡 / タッチポイントを最小限に抑えるよう徹底。同じ顧客に複数回連絡することは望ましくない、つまり、商品あたり1回、支店あたり1回など
- 顧客は、当行と合意書を締結するか、各自で政府機関に登録するか、いずれかを選択可能。後者の場合、当行は第三者のWebサイトから顧客の登録状況を取得する必要がある
エンタープライズソフトウェア開発における課題
私たちは、以下の潜在課題を特定しました。
- 対象となる顧客を特定することが難しい – 同じ顧客について、組織全体で、また複数の地域にまたがって登録可能であるため
- 重複した顧客記録がある
- ある顧客は複雑な法的階層を有する – そのため、「子」レベルではなく「親」レベルで対処することになる
- ある顧客は他の顧客の「代理人」として関与している – そのため、手続きを完了する必要のある実際の「法的実体」は代理人ではない可能性がある
- しかし、ある代理人は、代理する顧客に代わって署名する権原を有している – そのため、このニーズを正確に追跡する必要がある
- 顧客がどの商品を取引するかというデータの品質が悪い、これは、商品ごとにプラットフォームが異なり、アプリケーション全体で商品名が一貫していないため
- 取引システムからの取引情報の取得はボリュームが多く複雑である(私たちが本当に必要なものは、ある期間に実行された総取引の集計情報のみ)
- 第三者のWebサイトから登録情報を検索して、当行のトラッカーを更新する必要がある – 顧客が既に手続きを完了している場合、「連絡不要」とする必要がある
![](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/02/pexels-michael-steinberg-342946-9622031.jpg?w=750&ssl=1)
既存プロセスのリサーチ方法
20~30人のデータアナリストを臨時に雇い、既存のエンタープライズビジネスアプリケーションのエクストラクトの作成を依頼していました。様々なデータソースを単一のロケーション(通常は、非常に複雑なマクロを含んだたくさんのExcelファイル)に統合したのち、MS Accessデータベースにロードします。その上で、手動で顧客リストを確認、データ品質の問題を修正、共有Excelファイルを使って連絡進捗状況を追跡しますが、これを同期させることはまさに悪夢で、破損したファイルが原因でしばしばデータの損失が起こりました。既存のエンタープライズアプリケーションに規制の変更を反映するには3~6カ月を要するため、Excelは唯一の選択肢でしたが、規制が安定するまでそのタスクに着手することができませんでした。
望ましいエンタープライズソフトウェアソリューションの規準
私たちは以下のポイントを設定しました。
- 複数のソース(各種クライアントマスター、商品マスター、取引システム、第三者の外部Webサイト)からデータを収集できること
- すべてのデータを取得し、データベース内に収納すること
- データ品質の問題を解消すること
- 第三者のWebサイト上で顧客が合意書を完了済みかどうか確認すること – 完了済みの場合、連絡は不要(但し、引き続き追跡は必要)
- アナリストに自動優先リストを送信、アナリストは必要に応じ、手動で再度、優先順位付けを行うこと
- 顧客への連絡状況を追跡すること
- シニアステークホルダーが更新を提供、ブロッカーを除去するために必要なダッシュボード
設計の検討事項
ソリューションは、ある意味で「アジャイル」でなければなりません。規制は通常、完全に定義されているわけではなく、解釈に左右されますから、キャプチャ対象のフィールド / データ品質ルール / 優先順位付けルールはしばしば変わります。従って、1~2日以内で変更点を方向転換できる能力が求められます。セキュリティ– これは顧客データと収益データの両方に関わります– アクセス制限は非常に重要です。
エンタープライズソフトウェア開発にRAD Studio / Delphiの採用を決めた理由
アプリケーションの構築にDelphiを採用することを決めた理由は、以下に示す一連の機能にありました。
- Excelライクのユーザーインターフェイス – ユーザートレーニングは最小限で済むため
- データセット / ワークシート パラダイム – すべてのデータが、フォームというよりも、データセットとしてキャプチャされる
- 市場投入までの時間短縮 – 加えて、新しい規制へのサポート対応をスピードアップ
- セントラルデータベース – エンタープライズレベルのデータベース(Excel やMS Accessを置き換え)
- オーディット / バージョン管理 / ワークフロー – 誰が何をいつ修正したかを掌握
- 配布が容易 – ユーザーに必要なのは1個の実行ファイルのみ
- 大規模データ – 画面上のパフォーマンスを損なうことなく、大容量のデータを処理できる能力
- ユーザー間のタスクの割り当て
- セキュリティ – 行 / データセットレベル
- レポート作成 – 可視化ツールとの統合
- ETL – データインジェスチョンとビジネスロジックで活用
Excelライクのユーザーインターフェイス要件の実装方法
購入したライセンスが限られていましたから、Excelに似たインターフェイスを提供するために標準的なグリッドコンポーネントを使いましたが、本心では、より多くの機能が搭載されたTNextGrid(Bergsoft.net)を使用できればと思っていました。
ユーザーは一度に1つの行で作業します。各行は通常、1顧客を表します。データは個々のセルに入力されます。データタイプに応じて、ユーザーは数字、文字列または日付を入力できます。ドロップダウンが表示されるようにして、ユーザーが選択肢から選択できるようにしたり、ルックアップテーブルを使って入力値を検証できるように実装したケースもあります。
データセット / ワークシートパラダダイムとは
それは、データをフォームではなくデータセットとしてキャプチャする / 扱うという意識的な決断でした。フォームスタイルのインターフェイスを作成していたとすると、私たちの開発スピードは落ちてしまっていたことでしょう。これに対し、実際的な目的から、データセットをデータベース内のテーブルに対応させることにしたのです。新しいデータフィールドを取得する必要が生じた場合には、以下のような作業を行いました。
- 基になるテーブルに新しい列を追加する
- データ入力ルールの定義に従って、いくつかのメタデータを定義する
市場投入までの時間短縮を実現
現在では、新規制への対応を容易に追加できます。必要な作業は、データベースに新しいテーブルを作成、各フィールドへデータキャプチャルールを設定、新しいテーブルにユーザーを割り当て、最後に、Excelファイルから初期データをロード、あるいはETLジョブを使用してテーブルへの初期入力を実行という手順です。
![](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/02/pexels-monstera-5849548-5189185-scaled.jpg?w=750&ssl=1)
セントラルデータベースについて
現在のソリューションは、元々、アナリストが扱う各自のローカルExcelファイルに基づいていました。このデータは、一個人に送信され、当該個人がMS Accessデータベースにロードするという仕組みでした。これは、ご想像通り、無数の問題をはらんでいました。
Delphiで開発したアプリケーションでは、そのセントラルデータレポジトリとしてOracleを使用するように設計しました。作成されたテーブル一つ一つに、追加のシステム列を追加し、オーディット履歴のキャプチャや行ロックに使用しました。
ワークフロー、オーディット、データインテグリティに関して特別に配慮したこと
コンカレンシーは、行ロックを用いて管理しました。ユーザーがある行の編集を開始した瞬間に、その行はユーザーによってロックされ、その行のワークフローステータスは“In progress”となります。ユーザーは、その行に対するすべての編集を完了すると、“Review”へと送信します。レビュー者は、その行を“Approve” する(行ロックは解除される)か、“Reject” する(行を前の状態に戻す)ことができます。
さらに、別個のログテーブルも用意されており、任意のユーザーが各セルで実行したすべての編集ログが記録されています。この情報はオーディットに用いられ、また、行を前の状態に戻す際にも使用されます。
Delphiは他のソリューションと比べ配布が容易
ユーザーがこのアプリを使用するのに必要なものは、実行ファイルとOracleクライアントライブラリだけです。OCIライブラリについては、ユーザーは社内app-storeからリクエストできます。実行ファイルはチームのSharePointからダウンロードできます。 従って、実行ファイルへのアップデートの配信は極めて簡単です。私たちは、Oracleへのデータベース接続にFireDACを採用しています。
![](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2020/10/FireFAC-Featured-Image.png?w=750&ssl=1)
扱ったデータ量
Excelは百万行をサポートしますが、大きなシートでの作業は効率的ではなく、しばしばデータ破損の原因となりました。データがOracleデータベース内にある現在では、データ量は重要な問題ではなくなりました。ユーザーインターフェイスの観点からは、通常ユーザーは一度に1つの行(レコード)に対して作業するので、画面上に表示させる行数は数百行にとどめました。
顧客レコードがデータセットにロードされると、そのすべては “Unassigned” 状態となります。ユーザーが編集を開始すると、そのレコードはユーザーに自動で割り当てられます。当該レコードについて、別のユーザーサイドで作業する必要がある場合には、別のチームメンバーに割り当てることができます。
Delphiエンタープライズアプリ開発において、セキュリティと信頼性は重要な要素
セキュリティは非常に重要です。これはデータセットレベルであらかじめ実装することにしました。通常、1チームが一規制について作業し、チーム全員が同じアクセスレベルを有するためです。しかし、データセットに追加の属性をキャプチャし、レポート出力時に行レベルのセキュリティ制御ができるようにしました。
採用したエンタープライズソフトウェアレポートツール
基本的なレポート機能として、 TChartコンポーネントを使って、作業中の行、完了の行の集計などを表示させました。 ライブダッシュボードを作成できるようにして、作業ステータスや顧客への連絡状況を追跡可能にしました。データベースビューやTableauのような可視化ツールを用いて、経営陣には、(従来のExcelベースのレポートの不透明さと比較して)私たちが提供する高い透明性を印象づけることができました。ユーザーの作業とレポート生成は同じテーブルを用いているので、そのレポートはリアルタイムです。
そして、ユーザー自身による編集機能に加えて、InformaticaのようなETLツールも用意しており、外部のWebサイトや他のアプリケーションからデータを取得したり、それをデータセット内の列の一部に割り当てることも可能です。これらの追加の列データは、データアナリストが顧客データをレビューし判断するために必要なコンテクストを提供します。こうしたETLツールは、データベース内のデータの使用、特定のビジネスロジックの実行、レポートの作成、さらに下流工程へのデータ送信といった、通常のジョブも実行しています。
![](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2023/02/Screenshot-2021-04-10-161831-2400262-8453115.png?w=750&ssl=1)
開発プロジェクトの結果
![| Embarcadero RAD Studio Delphi C++Builder Blogs](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2022/03/delphi-logo-1024-2643841.png?resize=146%2C146&ssl=1)
このエンドユーザーアプリケーションは広範囲にわたって成功を収めました。エンドユーザーは、Excelと格闘する必要がなくなり、実際のビジネス要件に注力できるようになり、満足しています。
経営陣は、スピード、セキュリティ、透明性を獲得でき、規制当局への報告におけるデータの信頼性を得ることができ、満足しています。私たちは最終的に、このアプリケーションによって、5つの規制に関する顧客への連絡をサポートしました。各規制が安定したので、必須となる各機能は平常業務用の社内エンタープライズアプリケーションに移行しています。
当面の間、Delphiアプリケーションはパッケージングされ、社内app storeを通じて社内ユーザーに提供されています。
この記事は、Enterprise Article Showcaseへ投稿されたものです。RAD Studio、Delphi、C++Builderと関連技術を用いて構築した開発プロジェクトの成功事例をお持ちの方は、ぜひご連絡ください。詳細はこちらをご覧ください。
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition