シェアリングスのコラム

column.jpg

シェアリングスのコラムを不定期に掲載していきます。

1. なぜRuby On Railsなのか?

2. 要件定義と虚構



要件定義という虚構

日経コンピュータに「要件定義技術」
というキーワードが載っていました。

某大手SIベンダーが取り組みを行っており、要件定義の専門家を養成するとのことでした。

この記事に対して、システムの要件定義に関する持論をひとつ述べたいと思います。

まず、ウォーターフォール開発の場合、
システム発注の段階で顧客は発注するシステムに関する要件
はっきりしていることが前提となっています。
システム屋の仕事は、それを聞き出し、書きならべることで、
いかに「漏れをなくすか」ということに重点が置かれています。

不可能です。

不可能以前に、前提条件が破たんしています。
「システムに関する要件がはっきりしていること」
なんていう前提は、
絵の中のトラをお殿様が追い出してくれたら」と言っているのと等しいのです。
それどころか、
システムに関する要件がシステム開発前に存在している」ことですら、
あり得ないことだと断言できます。

ちなみに、要件の存在有無については、議論の分かれるところかもしれませんが、
ことの本題から外れますので、本当はどっちでもよいのです。
大切なことは、
「システム開発時点では、全ての要件を手に入れることは不可能」
ということを前提に話を進めることです。
数学界では、虚数の導入に際して激しい議論があったと聞きます。
確かに、理解の範疇を超える概念のため、
その存在を素直に受け入れることが難しかったことは想像できます
しかし、虚数を使ったほうが、あれこれ計算をするのに便利だったため、
結局は受け入れられることとなりました。
また、量子論についても同様に、
アインシュタインは最後までその存在を否定し続けました。
しかし、その計算結果は驚くほど正しかったのです。

余談が長くなりましたが、この場合も、
システム要件は存在しない」
と確定してしまったほうが、開発がスムーズに進むということが言いたいのです。

存在しない物に対して、「専門家」というのも馬鹿げていますよね。

うまくいくはずがないと思います。

要件は、常に変化し、追加されます。これは、事実であり真実であり、現実であり、実績値です。
どんなに否定しようとも、クラアントを馬鹿にしようとも、憤慨しようとも、泣いてもわめいても、
どんなプロジェクトでも必ず発生します。

当初決まっている要件ですが、筆者の経験を元にざっくり言うと、
良くて7割ぐらいです。
半分も固まっていれば良いほうだと思います。3~4割が普通なんじゃないでしょうか。

世のシステム開発会社は、その3~4割を100%として要件定義し、契約を結びます。
これでシステム開発がうまくいくわけがないですよね?
要件だけでも、2~3倍に膨らむわけです。開発中に。
それ以前に、当初の要件分を開発するだけでも、
中間マージンを取られたり、ダメな技術者やマネージャが居たり、
そもそも営業が信じられない値引きをして受注してきたりで、アップアップしているわけです。

システム屋さんの苦悩が目に浮かびます。

そんな惨憺たる状況の中ですので、
開発要件が変わることは絶対に避けたいと思うのは当然のことだと思います。

でも、それが一番の罠なのです。


無いものねだりです。


前提条件が間違っているのです。


ありもしない要件を確定するために心血を注ぐぐらいなら、同じパワーを使って、
「変化する要件に対して、いかに効率的に追従していけるか?」
という命題の解決にリソースを割いたほうが、はるかに有意義で効率的です。
そして、この方法は必ず成果が表れます。

効率的なプログラミングツール、言語、データベースを使い、可能な限り作業を自動化し、
スモールスタートで徐々に拡張していくような開発手法をどんどん取り入れていくことです。
注意してほしいのは、
要件ありき」で進めたのでは、どんな方法でもうまくいかないということです。

要件が確定していない」ところからスタートして、いかに素早く要件を"作りこむ"か?

失敗しないシステム開発のコツは、この一点です。
簡単なことです。
拍子抜けするほど単純なことが、案外一番大事なことだったりするのです。


さらに余談

システム開発に要件が存在しない」ことを実感する、簡単な方法があります。
それは、自分のために、自分が必要なシステムを作ってみることです。
自分自身がクライアントなんだから、要件を聞き出す」必要がないので、
コミュニケーション能力も業務知識も必要ありません。

ハンディ0です。

要件定義が存在するが聞き出せないだけ」が事実なら、
100%成功するプロジェクトとなるはずです。

が、

うまくいきません。
うまくいかないのです。自分自身がお客様なのに。

なぜ?

開発前に、要件が存在しないからです。

またまた経験則ですが、
当初予定していた機能の3倍ぐらい作りこまないと、満足に動作するシステムは作れません。
本当に使いやすいシステムとするためには、さらに3倍。
当初見込みの10倍は、パワーが必要になります。

これが現実なのです。

なぜRuby On Railsなのか?

弊社が開発に主に利用する言語は「Ruby On Rails」。では何故シェアリングスの開発チームはRubyを選んだのか?それについてご説明します。

Ruby On Rails で開発するメリット

  • 開発スピード向上
  • 変更の容易性
  • 開発工数の削減
  • 開発標準化
  • 品質確保

開発の側面から見た、最大のメリットは、開発スピードの向上です。
「とにかく動くものを」作るスピードは(Java, C++, PHP, Perlなど)他を圧倒します。これによるビジネス・メリットは、とにかくニーズにマッチしたシステムを供給できるようになることです。

今、我が国で一般的に行われている開発スキームは、ウォータフォールモデルと呼ばれるものです。これは、要件定義から、製造、テストという風に段階を進み、最初のデリバリーまでにすべての要件を固定していくという思想に基づいたシステム開発手法です。この方法の問題点は、お客様が最初にシステムに触れるまでどのようなシステムが出来上がるのか全く見えてこないということです。

要件に現れないようなシステムの動きや暗黙知としてのビジネス要件は、お互いに十分に理解することが難しく「出来上がったシステムがビジネスニーズにマッチしない」という結果となって表面化します。しかも、要件を変更するには多大なコストを伴うため、気づいた時には「手遅れ」だったということも少なくありません。その場合、多大なコストを払って修正していくか「使えないシステム」と諦めてごまかしながら使っていくしかありません。

この問題に対する打開策は、1秒でも早く「実際に動く形で」システムをデリバリーすること以外にありません。良いシステムを作るには、スケジュールや予算に余裕があるプロジェクトの初期の段階から実際に動くシステムを情報伝達のツールとすることが必要です。動くシステムを見ながら認識を合わせることは、ビジネスニーズに即した「使えるシステム」の構築の足掛かりとなります。

このことを信条に最も適した開発ツールとして、Ruby on Rails(以下Rails)をお勧めしているのです。

Ruby言語には、『複雑な機能を非常に少ないコード量で柔軟に記述することができる。』という特徴があります。ビジネスの変化やシステム習熟に伴う要望の変化に柔軟に素早く、低コストで対応することができます。導入費用だけでなく、その後のメンテナンスコストも低く抑えることができるのです。

とはいえ、システムの増改築に伴い複雑さが増加することは避けられないことです。しかし、同じ複雑さを持つのであれば他の言語より柔軟簡潔に記述することができる、Ruby言語の特徴が大きな武器になります。つまり、Railsで構築されたプロジェクトは、他のシステムで作られたプロジェクトよりも多くの増改築に耐えうるということです。Ruby言語上に構築された、Railsというフレームワークは、非常に規約の多い開発環境といえます。この「規約が多い」という特徴は業務システムを構築する上では大きなメリットとなります。なぜなら、規約に従うことで標準化が促されコードの統一性が保たれることになるからです。開発者は必然的に規約に従ったコードを書きますので、無法者コードが氾濫することを抑止します。このことは新たにRailsを学習する者にとっても大きなメリットとなります。簡単なルールさえ覚えてしまえば、システムの全体を"規約に従って"理解することができるようになるのです。

加えて私たちは、Railsの強固なフレームワークの上に独自のノウハウを結集した「業務システム開発用」の開発スキームを構築しました。いわば、『業務用Ruby on Rails』ともいうべきもので、DB設計からコードの実装、テストまで、業務開発で特に必要となる機能について、あらかじめ用意された規範に従って、より素早く開発することができます。このフレームワークを活用することで、Railsの特徴である、素早さ、柔軟さ、堅牢さをさらに進化させることに成功しました。

Ruby On Rails で開発するデメリット

  • 実績
  • メンテナンスコスト
  • パフォーマンス
  • スケーラビリティ

Railsを利用するにあたって、不安となる要素もあります。

まず、まっさきに思うのが「稼働実績」ですが、このことについては問題ないレベルまで来ていると思います。海外を含めて既に非常に多くの稼働実績があり、そのうちいくつかは非常に大規模なシステムに適用されています。また、私たちも既にいくつかのプロジェクトでの利用実績があり、システムの安定稼働についてはノウハウを有します。

Rubyに関しては、開発要員の確保が難しいといった声も聞きます。特に保守要員の確保が難しく、リリース後のメンテナンスを不安に感じるというのも事実だと思います。しかし、上記に述べたとおりRailsでのシステム稼働実績も増加しており、学習曲線も急峻であることから、今後確実に要員数は増えていくと思われます。特にPHP、PerlなどWeb開発経験を有する技術者であれば、スムーズに移行することができるでしょう。

Rails単体としても常にパフォーマンスチューンが行われています。現在最新版となる2.1.0では、十分高速なフレームワークとなりました。また私たちは、これまでの開発実績によってRailsを使ったシステムでのパフォーマンスを確保するためのノウハウを有しています。過去の実績から、システムの設計を正しく行えばストレスなく軽快に動作するシステムを構築できることが分かっています。

スケーラビリティの問題についても、大きな不安材料とは言えません。Railsで構築されたシステムは、アプリケーションサーバを複数台に増やすことが容易であるため、システム要件にしたがって、柔軟にスケールアップしていくことが可能です。超高負荷環境やバッチ処理での稼働となると、他の手段(Java やC++など)と比べて見劣りするかもしれませんが、通常利用する範囲でシステムパフォーマンスが不足することはありません。

これらのことからシェアリングスではRuby On Railsを採用し多くのお客様に喜んで頂いております。