アクティブワークス有限会社
ホーム  >>  開発者blog  >>  エントリ詳細
第一回「システム開発について」
はじめまして。
アクティブワークス有限会社(以下:当社)のシステム開発担当者です。
サイトリニューアルに伴い、サイトをご覧頂く方のためのコンテンツを作れという指令を受けましたため、これから「開発者blog」と称したシステム開発関連のコラムを連載させて頂きます。
システム開発に関する事柄のため、内容に偏りがあるかも知れませんが、その点はご理解頂けると幸いです。


さて、第一回目として「システム開発について」です。
システム開発というと、とにかく「高い」「難しい」「時間が掛かる」と思われがちですが、これには当然の事ながらちゃんとした理由が存在します。ただ、それが売り手(開発者側)と買い手(発注者側)の相互で納得出来るかというと、必ずしもそういう事にはならないケースの方が多いものです。そしてここには「どちらが悪いとも言えない」根の深い問題があり、そうであるからこそ今日に至るまでこのような事を思われている状況にあります。

まず、売り手側の問題を挙げるとするのであれば、それは「買い手側に対する理解が足りない」事が挙げられます。買い手がどうすれば不満を持たず、どうすれば買い手が満足出来るシステムを構築し提供出来るかを考え、買い手を理解し、その上で一連の活動を行なう事が出来れば、少なくとも一方的な問題にはならないのではないかと思われます。
その一方で、買い手側の問題を挙げるとするのであれば、それは「売り手側に対する理解が足りない」事が挙げられます。どのようにすれば時間を掛けずに効果的なシステムを安価で組み上げられるか、売り手側の事情を考慮して対応が出来れば、若しかしたら斯様な問題は発生しないのかも知れません。
お互いに対する理解が不足しているから問題が起きるとするのであれば、お互いを理解する事が出来れば問題は解決出来るのでしょう。ただ、それが現実的であり実現可能かというとまた別の話です。特に日本では買い手側の立場が強く、何で売り手側の事まで考えなければならないのかという考え方が一般的であり、そもそもシステム構築に関する網羅的且つ深い知識を持っていたら外注せずとも自社内で対応出来てしまうからです(ただし、自社内で開発を行なうと人件費の面でコスト割れするため、手作業を行なう部分だけ外注するという考え方もあります)。


システム開発が高い理由として大きいのは開発者の人件費が高い事が挙げられます。
近年の世界情勢の状況により一時期よりエンジニアの人件費は目減りしましたが、それでもシステムエンジニア等開発者の人件費は(一般的な職種と比較して)高いところが多いです。
これは、知的労働という性質に負う所が大きいのですが、優秀なエンジニアはその技術力の維持にコストが掛かることと、優秀なエンジニアの絶対的な人数が不足しているため、価値が低下しにくい特徴があります。何を以って「優秀」とするかは人により判断が分かれるところですが、それについては後述します。
技術力の維持にコストが掛かるというのは、意欲的なエンジニアは自ら新しい技術を積極的に取り入れようとし、その学習のために多くの時間を割いています。この時間的コストと、学術書や検証環境の構築維持に金銭的コストが掛かる事が「維持費が掛かる」とされる大きい理由です。

さて、前述の「優秀なエンジニア」ですが、システム開発の本質から考えると「業務を効率化出来るシステムを組めるエンジニア」こそが優秀なエンジニアという事になります。
単純にシステムを作る事であれば、ちょっとプログラムをかじった人間やシステムに関する事柄を知っている人間ならば誰でも出来る事ですが、それが利用者の期待通りに動作し、かつ、そこに付加価値を持たせられるシステムを組めるエンジニアとなると途端にそれが出来る人が激減します。そこには教科書レベルの技術や知識だけではなく、地面に足をつけた(実績のある)技術や知識が必要であり、更にシステムを利用する人間やシステムの運用に関する事柄まで意識した対応が求められるからです。
このような能力を持ったエンジニアに、具体的なシステム構成要件情報を渡す事が出来れば、額面通り、或いはそれ以上のシステムを組み上げる事が期待出来ます。もちろん、そのエンジニアのスキルセットと、システム構成要件が合致している事が前提となりますが、それが合致した時には素晴らしいシステムが組み上がるのではないかと思われます。

しかしながら、エンジニアは超能力者ではなく、また、システムを利用する多くの人も超能力者ではありません。
実際に利用するシステムを構築する場合には、利用者の事を充分に検討しなければならず、利用者が使えるシステムを作らなければなりません。そして何より、システムが目的とする業務が潤滑に行なえる事が大事であり、これはエンジニアだけで実現出来るものではない場合が殆どです。そこには、システム化する業務に対する知識や運用ノウハウが必要不可欠であり、それを一番持っているのはエンジニアではなくお客様自身であると言えます。
ここで重要なのは、お客様から業務に関する知識や運用ノウハウを引き出す事であり、エンジニアにはそのための対人折衝スキルが求められると共に、状況によってはお客様にご協力頂く事が必要となります。

システムやプログラムといった物は基本的には「論理の集合体」であり、そこに不整合や矛盾があると、それはシステム構築の際の足かせとなります。
システム構築において一番難しいのはここで不整合や矛盾が無いようにシステムの構成仕様を詰め切る事であり、様々な事情でこれが出来ない事が多いです。システムは傍から見ると「難しいもの」ですが、それを細かく分解していくと単純な処理の組み合わせで構成されています。単純な処理の組み合わせでシステムは構成され、そこには論理的な矛盾や「あいまい」といったものは介在し得ません。このため「良きに計らう」という事が出来ず、「適当にやっておく」「良きに計らう」を前提とするとそれはシステム化する事が出来なくなります。
そうかと言って対象業務が「これから始まるもの」であったり、お客様の中に対象業務に詳しい人がいなかった場合、これをシステム構築段階で具体的に詰め切る事が出来ず、後になって仕様変更になったり、仕様が決まらないまま話だけ進んでしまうという事になります。
この場合の対応方法は色々あるのですが、状況により実際に取り得る方法は様々なので、一概に申し上げる事は出来ず、また、どのような状況にも対応出来る(万能な)方法というものは存在しません。それぞれの状況に応じて最善手を考えて動くしかなく、その引き出しを沢山持っている人こそが優秀なエンジニアであると思われます。


システム開発に時間が掛かる大きな理由は、システムを実際に構築する手作業よりも、システムの仕様を決める作業や、システムのテストやデバッグを行なう作業に負うところが大きいです。
システムの挙動や期待される結果が具体的に明確になっている場合、後はその通りに手作業でプログラムを書きシステムを構成するだけであり、これは単純に作業量と時間の兼ね合いとなります。システムのテストについてはテスト仕様が明らかになっていればその通りに実施するだけですが、デバッグについてはプログラム起因のものと仕様起因のもの、そして環境起因のものがあり、プログラム起因のもの以外は必ずしも時間を掛けて手を動かせば解決するという性質のものではないため時間が掛かる事があります。また、仕様策定については前述の通りの理由で、ここはシステムや業務に対する知識はもちろん、場合によっては組織の政治的な事柄にまで波及するため、状況によっては多大な時間を要する事となります。
政治的な事柄に関しては、一般的なシステム開発スキルとは違う部分が求められるため、一概にエンジニアとして要求される能力に分類されるとは言えません。会社の中核となるかも知れないシステムであれば組織内での調整事項が出てくる事が多く、その状況如何では組織の上層部で話をつけて頂かなければならない事もあり、これに対して技術的な面で支援をする事は出来るかも知れませんが、大部分はお客様の方で解決して頂かなければならない事柄となります。

システムはどこまでも「人と関わる」ものであり、人を無視してシステム開発は出来ません。
一時期は「ソリューション(業務上の問題等を解決するシステム)」という言葉が持て囃され、実際には各々の会社の商品を押し付けるだけという状況が散見されましたが、システム開発の現場で本当に求められるのは「言葉通りの」ソリューションであり、そのために必要な事はお客様の事を見て、お客様の事を理解し、その上でお客様と同じ方向を見てシステム開発に取り組む事であろうと考えています。
これは多分に泥臭く、時間と手間が掛かる事ですが、システム開発者として実際に手を動かしてシステムを開発するのであれば、末永く使って頂けるシステムを作り上げたいものですし、時間や手間を掛けてでもちゃんとしたシステムを作った方が歩留まりが良いものになるであろうと考えています。ただ、そうなるとどうしても時間とコストが掛かってしまうため、その辺りの調整をどうするかが難しい問題だったりするのですが。


(2010年8月18日掲載)

トップページに戻る