(last updated: August 27, 2005. These are written in Japanese.)
私がVBを辞めた理由 Copyright(c) 2000 by Tsukasa Jitoh create: 2002/07/10 update: - 1. はじめに ソフトウェア製品は他の工業製品とは違い、技術者が脳でゼロか ら生成する。今日ソフトウェアにバグが避けられない主要な理由は そこにある。しかし、バグをゼロに出来ないまでも、減らすことは 出来る。 また、ソフトウェア製品の単価が下がっている現状において、競 争力のある製品を作るためには、短期間で品質の良い製品を作る技 術を持つことは武器になる。 更にこのことは、カスタムアプリケーション作成を依頼する顧客 から見ても、安心して開発を任せられるソフト会社を選択するとき の尺度にもなるだろう。 特にVisual Basic(以降VB)やVBAによる開発の、語られない現実 についても言及した。これは.NETの登場によって、これまでのVBが、 事実上過去のものになってしまおうとしている事から、もう公にし てもいいだろうと判断したからだ。 これらは私の開発スタンスについての説明でもある。簡単だが、 参考にして頂けたら幸いである。 2. 障害要因と高効率化の探求 システム開発の成否は、最初に仕事を取って来たときにほぼ決ま っている。営業の責任は最も重いと云える。 また引き渡された開発を実際に遂行し、指揮するのがプロジェク トリーダだが、ここでのプロジェクトの進め方が次にネックになる。 開発範囲と期間の決定、要員の配分。実作業では標準の作成や共 通辞書、方式とサブシステム分割、テスト方式の決定等。 上記がクリアできたら他の要因はあまり大きくない。と、当初私 も考えていた。しかし、実際の開発現場では少し違った原理が動い ている。 バグの入りにくい、変更に強い、安定したもの。しかも、低コス トでそれを実現する方法。これまでシステムの実装を担って来て、 それが不満だった。もっと良い方法が必ずある。それを常に模索す るようになった。システム開発は空に描いた幻を掴むような物でな く、より現実的で確実なものである筈だ。 現在ではXPという方法も提案されているが、これはプロジェクト 単位で取り組みが必要だ。それに一般には要員の余裕が無いだろう。 そこで個人で出来ることで、しかも改善の余地がありそうなのは、 やはり「やり方」を改善すること。 「バグのないプログラム」を書くにはどうしたらよいか。この答 えは既にある。プログラムを書かないことだ。しかしこれは実際に は出来ない。しかし、コード量を減らす工夫は出来る。 効率化のために出来る事は片っ端から試した。小さな工夫でも、 累積すれば全体では大きな効果が出せる。ここら辺は、業務上のノ ウハウなので公開できないが、誰にでも簡単に出来ることがあるの でそれを紹介したい。 それは、良い道具を使うことだ。 開発ツールの選択で、開発効率は大きく変わる。品質の良いもの がコンスタントに作れるなら、テスト工数も、納品後の障害発生も 抑えられる。適材適所で考えるなら、複数の選択肢があるように思 われるシチュエーションでも、最適で唯一のものが必ず見つけられ る筈だ。 単純な例えで云えば、優れた料理人は包丁を選ぶ。大工も名巧に なると他人の道具は使わない。 ソフトウェア開発も同じで、速くて安定したコンピュータ、良い エディタ、優れた処理系(開発言語環境)が必要なのである。 3. Visual Basicで体験した地獄 開発言語選択。これは適材適所でシチュエーションに合った物を 選択していくのが理想だ。しかし、いかなるケースでも、選択肢か ら外した方が良いと判断できる処理系があった。 VBだ。 では、どうして市場で絶大な人気を誇ってきたVBが、品質の高い アプリケーション開発に不利なのか掻い摘んで説明したい。 VBはとても簡単だ。殆ど教育を必要としないのも確かだ。だが魔 法の箱ではない。私が問題を感じるのは、第一に品質。次にその単 純・低機能ゆえに、技術者の努力で生産性を高めることが殆ど出来 ないことだ。 まず、教育の浅い技術者でも開発が出来るのは大きな利点だが、 高い品質のアプリケーションを作る為には、これはマイナスに働か ないだろうか。 また問題はそれだけではない。開発規模にも寄るが、VB自体が低 機能な事と、効率の良い開発技法を選択できない為、Delphiなど代 表的な他の言語による開発よりも、ライフサイクル全体で、最終的 に2~3倍以上の開発コストが掛かる。 また特に納品後に問題が発生する確率が高く、感覚的には他の言 語で作った場合の5倍以上になるだろう。多くの失敗したプロジェ クトを見、自分自身も経験してきた。元が取れない仕事になってし まう確率が格段に高いのだ。 しかしこれは何故なのか。 もともとVBやAccessなどはエンドユーザが自分自身で、日常の事 務処理を手軽に解決するための手段として設計されている。そのた めに、単純で低機能に作られている。 充分な機能が無いために、顧客の要求の実現に無理をしなければ ならないシチュエーションが常に付きまとう。特に、VB固有の実装 による不可思議な挙動と、本来のビジネスロジック以外のところで、 他の処理系以上に時間を使うこと。このようなトラブルは技術者に とって面白いものだが、本来ならシステムの実装に集中したいとこ ろだ。 また特に、私にとっては効率の良い開発手法が殆ど使えない事が 大きい。機能が低く、ランタイム内までデバッグ出来ないので、ど こに問題があるのか調べられない。最適化性能が低い為、コーディ ングで吸収しなければならない、等、他にもっとよい物を使ってき た者から見ると、問題点が多すぎる。 信頼性の高い、充分なパフォーマンスのあるプロダクトを開発す るのは、VBではとても難しい。これを使ってシステム開発を行って 成功するケースとは、エンドユーザの作業を一部肩代わりする仕事 に限られ、それはまた、極めて小規模で単純なものになる筈だ。 だが、Windows 3.1の時代ならともかく、現在では優れた開発手 段は他にいくらでも存在する。Delphi、C++、Java、適材適所で使 い分ければいい。また.NETはすべてに適用できるオールマイティな 処理系で、もし一元化したいなら最初の選択肢になるだろう。 また技術者自身にとっても、メリットがある。他の言語なら安定 したアプリケーションを、VBより低コストで作れるからだ。 無駄に残業することも、バグを頻発して上司や顧客に頭を下げる ような機会も減るだろう。まぁ残業が減ると手当てが減る方にはお 勧めできないが。 それでも、簡単に首を切られる心配や、スキルがなかなか上がら ないと憂う(VBはスキルが最も上がりにくいという統計から)必要も 減るだろう。 4. 私がVBやVBAを辞めた理由 ソフトハウス経営者にとってVBやAccessでの開発は大きな魅力が ある。何しろこれなら技術者の教育が殆ど要らない。VB技術者なら スキルを気にせず気軽に雇えるし、永年雇ってサラリーが上がって いく社員を、いつまでも雇用しておく必要もない。 実際多くの会社でVBが使われている。以前にVBを採用する会社で 経営者に直接聞いたことがある。非常に賢い経営者だったが、結果 的に方針にギャップを感じて、私はこの会社を辞めた。このときの 言葉は端的に現在の状況を表していると思う。 「中国製品が売れる理由を知ってるだろう。同じだよ、何が悪 い? VBで良いじゃないか。顧客がそれを買ってくれてるうちはそれ でいく。また、不安定さもOSそのものが悪いんだとMicrosoftのせ いにしておけば納得するだろう。 もうVisual Basicを買っちゃったんだもの、Delphiとか他のを買 う余裕はないね。大体、VB以外が出来る技術者なんてあんまりいな いだろう。それに新しい技術者入れても、今以上高い給料を払うつ もりも無い」 この会社は、バグが出たらそれは担当者の責任だと云って、手当 てなしで残業させていた。だから納品後のコストはあまり考えなく て良いのだ。 また一般にも、ゴーイング・コンサーンを前提としない経営で、 顧客を顧みない、作り棄てでいい、安かろう悪かろうで構わないケ ースでは、これは大して重要なファクターにはならないだろう。 それは経営の選択としては間違っていない。またその技術や、そ の仕事に従事している、愛すべき技術者貴兄を責める気も毛頭ない。 これはビジネスであり、その選択も正当で正しい。 すべての人にとってこれが適切な選択ではないし、VBだからこそ 仕事として成立している方々から、その仕事を奪う気もない。 しかし、これ以外に「周りがみんな使っているから」という理由 で単純にVBを選択しているケースも多いだろう。その場合にこの資 料は参考になると思う。 私は、より良いものを顧客に提供する事がよりお互いのためにな ると考える。だから、よほどの理由が無い限り、VBやVBAでの開発 を断って今日に至った。多くの方に安定した使いやすいアプリケー ションを使って欲しい。そしてそれによって、適正な対価を頂くこ とも出来る筈だ。 顧客に満足して頂ければ、次の商談にもきっと繋がる。また、VB で売っている会社と差別化することで、市場に訴えることが出来る のではないか。また絶えず競争のこの業界で、VB市場で生きている 方と競合せずに住み分けも出来るのではないか。 これは余談だが、私自身もVBで作られたアプリが嫌いだ。開発環 境を導入しただけでOSが挙動不審になることも多かった。自分自身 が作ったものを含めて、重く、不安定な製品ばかり見てきた。 フリーソフトもやめて欲しい。どうかDLしてしまう前に「これは VBで作られています」と書いて欲しい。そうすれば、無駄なトラフ ィックを減らせる。 「仕事なら手を汚すことも厭わない」という考え方もあるが、私 は自分が使いたくないものを顧客に提供する事は、是非避けたかっ たというのも大きい。 とまぁ、以上単純な理由であった。しかしVBが.NETに完全にリプ レースさてれしまう近い将来には、これら利点も自ずから大した意 味はなくなってしまうが... 5. 最近の開発言語について(おまけ) 現在初心者にとって一番簡単な言語は、JavaScriptだろう。継承 こそ出来ないが、そこそこオブジェクト指向的な実装も出来る。 JavaはJDK1.4で少し良くなったらしいが、以前の版しか試してい ない。しかしJava Applicationは酷い印象。せめてキーボードだけ で操作できるアプリケーションを作れるようになってたら良いが。 でも.NETがある今、殆ど興味が失せている。 最も業務アプリ開発に向いているのがDelphiだろう。軽く、コン パイルも一瞬だ。特にDBが得意で、ビジネス物では実績の上でも横 に並ぶものはまだ無い。個人的にはPascalよりもC++の方が好きな のでC++Builderを挙げたいが、こちらはコンパイルがちょっと遅い。 また、もっとも高機能で簡単さを両立しているのがC#。Win32API を呼ふ時は、残念ながらVBのように自分で宣言するようになってし まった。勿論ポータビリティを考えたとき利用は辞めるべきだが、 使いたいシチュエーションはまだあるので、非常に不便だ。しかし C#でnativeアプリが書けたら最高だか、Borlandあたり、出してく れないだろうか... Windows XPについても少し。いろいろ内部に手が入れられていて、 既存の開発言語ではアプリ作成するといくつかの問題があることが 判っている。プログラム上でどうにか小手先の対策することは出来 るが、今のところは.NETを使うのが一番だろう。