連載:熱血VBプログラマ応援団


第4回 スマート・クライアントはVBプログラマのためにある

―― Webアプリケーションの弱点を克服した新技術をVB.NETで! ――

株式会社ピーデー 川俣 晶
2004/05/12
 

− 今回のご相談 −

 これまでずっとVisual Basic 6.0で仕事をしてきましたが、ついにVisual Basic .NETに切り替えようか、という話が出てきました。これは時代の流れでしょうから、やむを得ないと思うのですが、1つ困ったことが起きています。Visual Basic .NETに切り替えるだけでなく、Webアプリケーションの開発に乗り出そう、という話も出始めているからです。確かに、Windowsアプリケーションはインストールやバージョンアップに手間がかかるという理由でお客さんに好まれない、という話はだいぶ前からありました。これまでは、使い慣れたVisual Basic 6.0では対応できないから、という理由で断っていましたが、Visual Basic .NETになるとASP.NETにより標準でWebアプリケーションを開発できてしまいます。

 もちろん、お客さんの要望に対応できるように、いろいろなスタイルの開発ができるのが一番だと思いますが、現実はそうも行きません。実際にASP.NETを試してみましたが、簡単にできたのは最初だけで、ちょっと凝った機能を実現しようとすると分からないことだらけで困ってしまいました。それに、出来上がったものがこれまでのWindowsアプリケーションより使いやすいとは到底思えません。ボタンを1つクリックするだけで、いちいち通信が発生して待たされるようなものが、本当にお客さんの望むものだとは思えません。そんなもののために、時間をかけて勉強したいという意欲がわきません。

 こんな状況ですが、何かうまい解決方法はないでしょうか? やはり、時代の流れはWebアプリケーションであり、それを勉強するしかないのでしょうか?

WindowsアプリケーションにプライドがあるV型4気筒 より

まず歴史を振り返ってみよう

 Webアプリケーションが本当に使いやすいとは思えない、という気持ちはよく分かります。ユーザーの操作を最大限に活かすように念入りに作り上げたWindowsアプリケーションの使い勝手と比較すると、Webアプリケーションには見劣りする部分があるのは事実だと思います。私も、Webアプリケーションを開発して利用していますが、これがベストであるとは到底思えません。

 それにもかかわらず、なぜWebアプリケーションがはやったのか、少し歴史を振り返って確認してみましょう。

 まず、VBが誕生した時点での役割は、スタンドアロンのWindowsアプリケーション開発でした。VBで開発されたプログラムは、1台のパソコンにインストールされ、そのパソコンの中で動作を完結させていました。

 このような状況が変化したのは、「クライアント/サーバ型」と呼ばれるスタイルのシステムがはやり始めた時期といってよいと思います。このスタイルは、ネットワークで接続された複数のコンピュータでシステムを構成し、コンピュータの役割をクライアントとサーバに分けます。多くの場合、サーバにはデータベースを配置し、クライアントには業務を実行するためのクライアント用プログラムをインストールします。このクライアント用プログラムを開発するツールとして、VBが広く普及しました。

 しかし、クライアント/サーバ型のシステムが万全ということはありませんでした。クライアント/サーバ型は、ごく少数のサーバ・マシンと多数のクライアント・マシンから構成されますが、多数のクライアント・マシンのすべてにクライアント用ソフトをインストールしなければなりません。これに加えて、クライアント・ソフトをバージョンアップしたときには、全クライアントのソフトをバージョンアップしなければなりません。この手間はバカにならないコスト負担となります。TCO(Total Cost of Ownership)という考え方が出てきて、ハードやソフトを導入するための費用だけでなく、それを運用するための管理コストにも注目が集まると、もっと安上がりに運用できるシステムが求められました。

 このような安上がりに運用できるシステムとして普及したのが、Web技術とイントラネットを組み合わせたWebアプリケーションです。Webアプリケーションでは、アプリケーションの実行に必要なすべてのプログラムをサーバ・マシン上に置きます。クライアント・マシンからは、パソコンを買ってくれば標準でインストール済みのWebブラウザを使ってサーバにアクセスします。そして、プログラムの多くはサーバ・マシン上で実行され、結果をWebブラウザに返します(プログラムの一部はコンテンツに埋め込まれており、Webブラウザがそれを受信してクライアント・マシン上で実行します)。このシステムであれば、すべてのクライアント・マシンにプログラムをインストールする手間もいりませんし、万一、バージョンアップがあっても、サーバ側でプログラムを更新するだけで、すべてのクライアント・マシンから新しいプログラムが即座に利用可能になります。まさにTCOは削減され、安上がりなシステムが実現されました。

 それですべて解決、ということになれば、今後WindowsアプリケーションはすたれWebアプリケーションの波に飲み込まれることになりますが、話はそんなに単純ではありません。Webアプリケーションは、Windowsアプリケーションと比較して、使い勝手、実行速度、開発のしやすさなどの点で見劣りします。例えば、戻ってもらっては困るWebページに[BackSpace]キー一発で容易に戻ることができてしまうのは、使い勝手の悪さといえます。また、ボタンをクリックしてポストバックさせると、ページ内容をフォーム上の全データが再送信され、無意味な待ち時間を発生してしまうのは、実行速度の問題といえます。特に、素早く伝票を次々と入力したい場合などには、この待ち時間が問題になってきます。そして、細かい入力値のチェックなどを行おうとするとクライアント側のプログラミングも要求されますが、サーバ側と異なるプログラム言語で記述することが要求されることも多く、開発の難度は高くなるといえます。

 このような問題があるため、一概にWebアプリケーションさえ作ればOK! とはいい切れません。しかし、クライアント/サーバ型に戻っても、やはり問題はあります。そこで、両者の特徴を共有する新しいスタイル、「スマート・クライアント」と呼ばれるスタイルのシステムが提案されています。

スマート・クライアントとは何か?

 スマート・クライアントとは何か、ということについては、

ファットからスマートへ進化する企業システムのクライアント
― マイクロソフトが普及をもくろむ「スマート・クライアント」とは何か? ―

という記事を見ていただくのがよいでしょう。

 正確ではないかもしれませんが、私なりにスマート・クライアントを要約すれば、これは「プログラムの自動配布とWebサービスを基盤にした3層システム」です。

 プログラムの自動配布というのは、例えばプログラムをバージョンアップするとしても、すべてのクライアント・マシンに更新プログラムを再インストールしてまわる必要がない、ということを意味します。最も単純なものは、「ノータッチ・デプロイメント」と呼ばれる機能です*。ノータッチ・デプロイメントでは、Webブラウザからプログラムへのリンクをクリックするだけで、プログラムがダウンロードされ、Windowsアプリケーションとして実行されます。インストールという手順は存在しません。そのほか、最新バージョンをチェックして自動ダウンロードという方法もあります。これによって、従来型(クライアント・サーバ型)システムにあった運用における管理コストの問題を解決できます。

* ノータッチ・デプロイメントについては、「特集:ノータッチ・デプロイメント」を参照。

 すごく単純化したいい方をすれば、Webサービスは、プログラムからほかのコンピュータにある機能を呼び出す方法を、特定の企業の技術に依存せず標準化したものといえます。これをシステムの基盤に据えることによって、システムの柔軟性が高まります。Webアプリケーションなら、Webブラウザさえあれば、特定の機種、OS、デバイスに限定されずに操作できる可能性があります。Webサービスでは、特定の機種、OS、デバイスに限定されずにシステム同士を接続できる可能性が与えられます。

 もちろん、Webサービスを使うためには、それを呼び出す側のプログラムが必要とされます。つまり、OSやデバイスの種類ごとに個別にプログラムを作る必要が発生します。WindowsのほかにMacintoshやLinux、さらに無数にあるモバイル・デバイスなどを含めて考えると、膨大な数のプログラムを作成する必要があるかのように思えるかもしれません。これは、インターネットで公開し、不特定多数が利用するシステムであれば致命的な問題になる可能性があるかもしれませんが、通常のイントラネット向け業務システムであれば大きな問題にはならないでしょう。そのようなシステムでは、クライアント側コンピュータの種類はある程度制限されていることが多いためです。例えば、特定バージョンのWindowsのデスクトップPCと、特定バージョンのWindows CEのモバイル端末の2種類から利用すると分かっていれば、この2種類に対応したプログラムを用意するだけでよいわけです。けして、無数のプログラムを作る必要はありません。

 3層システムとは何かというと、簡単にいえば、データベース、ビジネス・ロジック、スマート・クライアントの3つの層に分けて開発を行うということを意味します。クライアント/サーバ型システムのクライアントの役割が、3層システムではビジネス・ロジックとスマート・クライアントの2つに分割されます。クライアント/サーバ型では、データベース以外のすべての機能がクライアント側に詰め込まれ、このためファット(太った)・クライアントなどと呼ばれますが、2つに分割されることで、これがスリム化されることになります。しかし、スリム化されるといっても、ぎりぎりまで薄く削られたWebアプリケーションのクライアント(これはシン(薄い)・クライアントと呼ばれます)と同じになるわけではありません。データベース以外の何もかもが詰め込まれたファット・クライアントよりもスリムではありますが、ガリガリのやせすぎではありません。きれいにスマートに見えるバランスを取ったところに位置するのが、スマート・クライアントというものになります。

 そして、ビジネス・ロジックとスマート・クライアントの間の通信では、Webサービスの技術を用います。この2つはWebサービスのおかげで、無理矢理分割した、という雰囲気を持つことなく、柔軟性、情報の豊富さ、扱いやすさなどが実現され、役割の分担もエレガントにこなせます。Webサービスをうまく機能させるためには、ある程度のノウハウを身に付ける必要がありますが、Visual Studio .NETなどツールの支援も豊富であり、基本さえきちんと押さえればけして高いハードルではありません。

 このような3層構造を取ることで、ビジネス・ロジックとユーザー・インターフェイスが分離され、運用コストも下がることが期待されます。例えば、ビジネス・ロジックを修正する場合には、ユーザー・インターフェイスに手を加える必要がなく、影響範囲は小さなものになります。また、異なるデバイスでも利用可能にするためには、スマート・クライアントだけ追加開発すればよく、ビジネス・ロジック部は共通で使用できます。

VBプログラマよ、一歩先の未来をつかめ!

 さて、ここからが本題です。

 確かにWebアプリケーションはコストの低さ故にはやっているといえますが、完璧な解答ではありません。その先には、スマート・クライアントという別の実現方法が見えてきています。ここが最も重要な点ですが、スマート・クライアントを開発する場合、Webアプリケーションの開発者と、Windowsアプリケーションを開発していたVBプログラマを比較した場合、圧倒的に後者の方がそれに近い場所に立っているのです。スマート・クライアントは、基本的にWindowsアプリケーションとして作成されることになります。WindowsアプリケーションはWebアプリケーションとまったく構造が違うため、Webアプリケーションの開発者が、明日からWindowsアプリケーションを開発するのは難しいでしょう。それは、Windowsアプリケーションの開発者がすぐにWebアプリケーションを開発するのが難しいことと同じです。それ故に、スマート・クライアントの開発を希望するお客さんに対して、最短コースで対応可能なのは、Windowsアプリケーションの開発に慣れたVBプログラマである、といっても間違いではないように思います。

 もちろん、Webサービスやプログラムの自動配布など、従来のプログラミングにはないトピックもありますが、それらはVisual Studio .NETなどのツールの力でかなり実現できてしまうものです。難しいことは考えずに、ともかく挑戦すれば突破できる問題でしょう。

 最後に私なりの結論を書きます。VBプログラマが、Webアプリケーションの開発方法を絶対に勉強しなければならない、ということはないと思います。別の選択として、Webアプリケーションの先を見据えたスマート・クライアントに取り組むという方法も十分にありだと思います。そして、もしスマート・クライアントに取り組むなら、VBプログラマは、Webアプリケーション開発者よりも素早くそれに対応できるでしょう。もちろん、スマート・クライアントが、今後の業界の主流になっていくかどうか、神ならぬ私には未来は見通せません。しかし、スマート・クライアントを習得することで、我が世の春をおう歌する(?)Webアプリケーション開発者に、こっちの方がもっと新しくて優れたソリューションだぞ、とVBプログラマがプライドを持つことができれば、それは悪くないことだと思います。

 頑張れVBプログラマ、君たちが使うVisual Basic .NETは取り組む価値のある可能性に満ちたプログラム言語だ!End of Article

インデックス・ページヘ  「熱血VBプログラマ応援団」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH