Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
Delphi事例

多すぎるコードと空想上の友人の物語

pexels cottonbro studio 5483050

Enterprise Article Challengeには、非常に多くの投稿がありました。その大半は、驚異的な生産性、効率性を発揮するローコードプログラミング言語であるRAD Studio / Delphi の強みを実証する内容でした。FireDACなどのコンポーネントセットや技術をテーマとする投稿、RAD Serverに言及する投稿も少なからず寄せられました。ところで今回は、ブログではじめて「空想上の友人」が登場します。 語り手はVladimir Timofeev氏です。

コードが多すぎ?

Delphi開発者としての私の仕事はすべて、NDAや途方もない企業秘密に覆い隠されていて、不届き者でない限り開示することはあり得ません。ですから、これからお話することは、私の空想上の友人の物語としてお聞きください。その友人は、私の夢の中に現れ、自分が以前に携わった仕事について語りました。まるで私が友達に仕事以外の話を全くしないかのように。では、我が友が、ある企業で経験した仕事の話から始めましょう。

その友人は、一般の目に触れない企業向け会計システムを開発する仕事に就きました。彼は当時、会計ソフトウェアと社内経理システムの開発を請け負う組織で働いていました。すべての情報を格納するためのデータベースはOracleで、クライアントはDelphi 6で記述され、性能改善やバグ修正のカスタムパッチで保守管理されていました(友人にとっては、悪い思い出でした)。開発環境の実装・構築は、二人の(プログラマーの基準からすると)比較的高齢の専門家が担っていて、特定のパッチの目的が何であるか知っているのは社内でこの二人だけでした。なぜこうした「聖職」扱いが起こるのか、理解できなかったのはごく一部の人々だけでした。混乱が生じた理由は、社員全員がアクセスできるあらゆる情報を扱う社内wikiにありました。普通のプログラマーは、最も絶望的な状況(例えば、一人目の「選ばれし者」が病気で欠勤し、二人目が休暇でメキシコにいるような場合)になるまで、wikiを読むことはありません。会社では、コードの格納用に独自のSVNリポジトリを保有し、クライアントとしてTortoiseSVNを使用していました。

そのアプリに出来たこと

それは、Windows XP上で工場内の人員と設備をすべて記録し、時計のように規則正しく動作していました。数年後、Delphi 6からDelphi 2009へのアップグレードが完了し、我々の想像通り、退屈になった友人は問題なく会社を辞めました。

空想上の友人が次に向かった先

短期間ながら面倒な転職活動のあと、友人は、最も「従業員に優しい」企業の一つと自負する企業に就職しました。友人の業務には、薬局や病院向けの医薬品在庫管理システムのプログラミングが含まれていました。この企業は、世界中の様々な地域で医薬品の卸売販売を展開していました。医薬品に加え、自社の会計用に内製システムを提供していました。また、医薬品は、一般流通用に公的機関にも納入されていました。自由割引薬は、必要な薬剤がどの薬局にあるか事前に把握している主治医であれば処方することができました。

友人が知る限りでは、今では、このような技術はもはや歴史の遺産になっています(製薬会社が軍隊よりも利益が出るようになるかなり以前の話です)。分かっているのは、そのシステムがDelphi 2009Oracleデータベースを使用していたことですが、 任意のSQL互換データベースでも機能したでしょう。そのアプリケーションには、薬局用と病院用に2つのインターフェイスがありました。割引薬の処方箋を発行するときには、 Fast Reportといったサードパーティライブラリを用いて、 テキスト摘要とバーコードを付記した処方箋のPDFを作成、印刷していました。

使用したハードウェア

一般的なキーボードインターフェイス付きのハンドヘルドスキャナで、コードをスキャンしていました。読み取ったデータは直ちにカーソルの入力フィールドに取り込まれ、バーコードはどんな商品会計プログラムにも迅速に入力できました。薬局では、この処方箋を基に、バーコードをスキャンし、調剤しました。医師と薬剤師のパーソナルコンピュータには異なるWindows バージョンがインストールされていましたが、このシステムの運用中、互換性の問題は検出されませんでした。こうした経験から、友人は、現代のAndroid開発者にこうした技術について話すことを躊躇しているようです。開発中、膨大な工数を浪費したのは、プロジェクトが既にテストフェーズに入っている段階で、責任者がデータベース内のすべてのテーブルの名称を変更したいと言い出したときでした。指示を受けたプログラマー達は、作業用のテーブルがもはや存在しないため、クライアントプログラムのクェリの書き直しに2カ月を費やすこととなりました。 そして、疲労困憊したプログラマー達が神経系回復薬を割引価格で購入できることを知ったとき、社員達は「従業員に優しい企業」の意味を完全に理解したのです。

あきれた話だが、次に起こったこと

そこで、友人は、もっと平穏な雰囲気の会社を探そうと決めました。次の職場は、Oracleデータベース用のアナリティクスシステムを開発していました。アナリティクスを活用して、様々な種類(クラス)の顧客に適したマーケティングプログラムを構築していました。顧客は、購入履歴と商品注文システムとのインタラクションに基づき、分類され、顧客クラスは毎月、前月のアクティビティに基づき、再計算されました。毎月、キャッシュバックプログラムの抽選が行われていました。

このアプリに使われていたテクノロジー

クライアントの開発には、 Delphi XE 2を用い、SQLクエリーの結果を利用してクライアントを作成しました。クエリーチェインを実行した後、データは、OleObjectを介してMicrosoft Excelのテーブルにロードされました。友人は分量の大きい日次レポートを3通作成し、マーケティング部に提出する責任を担っていました。彼は、出勤するとまず、このレポート作業に1時間を費やしました。その後で、クライアントをリライトし、ロックを解除した業務用マシンのスクリーン上で実行しました。その上でようやく、自分のPCのスイッチを入れ、 Windows アカウントのパスワードを入力、コーヒーを取りに行って、通常の業務が始まりました。コーヒーを手に席に戻ると、レポートはすでにローカルネットワーク上の共有フォルダーに入っています。YouTubeはまだ普及していなかったので、友人は、終業時間まで猫の面白動画を眺めて過ごすしかありませんでした。友人はすぐにミームに飽きてしまい、本格的な仕事をしたいと思うようになりました。

次に扱ったアプリ

restlib

次の仕事は、タスクとしては興味深いものでした。ここでは、予め設定された規準に基づきレンタル無料広告を選ぶ必要がありました。このタスクは、オペレータが手動で遂行していたので、友人は、RESTクライアントライブラリを利用した自動化を提案しました。必須のリクエストと有用な応答のリストは、古き良きMicrosoft Accessに格納されます。サーバーからの応答はTJSONObjectでパースされ、書き込み前にコンテンツによって選択されました。フィルタリング用の単語リストも個別のMicrosoft Accessテーブルに格納されました。データベースの更新プロシージャは、一日3回実行されました。こうして、組織は常に、最も新鮮な商品を市場に提供することができました。これほど有用なユーティリティを作り上げた後、友人に掛けられた言葉は「どうもありがとう」だけでした。そして新しい仕事を探すように提案されたのです。

友人が他にしたこと

次にマーケティング部のアナリストとして雇用された会社では、非常に意欲的な販売員ネットワークを通じて化粧品を販売していました。営業の場合、販売員全員がカタログ記載の商品ごとに高額のコミッションを受領していました。化粧品自体は安価でしたが、マーケティングコストがかかり、販売価格はかなり高価でした。化粧品カタログは、マーケティング部の責任として、前年度の売上に基づき作成されていました。会社は、OracleMS SQLPostgreSQLデータベース等を混然と使用しており、各データベースはDelphi XEをはじめ異なるクライアントを持っていました。友人には、レポート作成用プログラム開発という完全な自由が与えられました。そこで、彼はお気に入りのツールであるOleObjectMicrosoft Excelを活用しました。会社の倉庫では、顧客に出荷する商品をまとめる際に、オペレータがコンベヤー上の各注文を手動で処理していたことを言っておかなければなりません。オペレータは画面に表示された注文内容を見ながら、必要な化粧品サンプルを箱に集めました。友人は、次の会社では、この機械労働用にさらに複雑なシステムに遭遇しました。それは「モンキーインターフェイス」と呼ばれていました。

この職場では、インターギャラクティックなオンラインストア用の在庫・配送システムの開発・保守管理を行っていました。お馴染みの組み合わせ Oracle + Windows + Delphiを使って、ごくわずかなクライアントが記述されていましたが、実際には、インターフェイスはシステムのオペレータの役割に応じて変更されていました。倉庫では、出荷する商品を集める従業員は「モンキーインターフェイス」を使用していましたが、その名の由来は、バーコードスキャナだけでタスクを遂行できたからです。印字された20バーコードで、マウスやキーボードを一切用いることなく、プログラムインターフェイス全体を操作することが可能でした。なぜならば、「キーボード不要」のインターフェイスでも、ハンドヘルドスキャナからの入力で、コマンド入力が実現できたからです。

この話を語り終えて、私の空想上の友人はコーヒーを飲み終え、コンピュータのスイッチを切り、私に目を覚まして彼の話を書きとめるよう、言いました。私が聴き取った彼の回想談が、皆さんの興味を惹くことを願っています。

この記事は、Enterprise Article Showcaseへ投稿されたものです。RAD Studio、Delphi、C++Builderと関連技術を用いて構築した開発プロジェクトの成功事例をお持ちの方は、ぜひご連絡ください。詳細はこちらをご覧ください。

See What's New in 12.2 Athens See What's New in 12.2 Athens Dev Days of Summer 2-24

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

IN THE ARTICLES