今回はちょっと硬い、ソフトウェアの話です。
今まではソフトウェアは多機能が良しとされてた傾向があります。
基幹業務のパッケージソフトウェアなども典型的な例で、すべての機能を備えていることが売りになっています。
したがって、プロモーションの仕方も、他社の製品に比べてどれだけ多機能なのかを○×表で比較して優位性をアピールします。
しかし、ここにきて、それぞれの分野が細分化されかつ高度化しているため、すべてのコンポーネントや機能で単体機能のものと比べて上回っているというのは困難になってきています。
さらに、クラウドコンピューティング、モバイルコンピューティング、他社のシステムとの接続など、コネクティビティーが高く要求されてきています。
コネクティビティーについても、従来はTCP/IPなどの様に通信プロトコルレベルでの接続性があれば良しとされていましたが、最近では、アプリケーション分野ごとのコンテンツのスタンダードフォーマットでのコネクティビティーが主流になろうとしてます。
従って、これから新しいソフトウェアシステムを設計するのであれば、すべてを備えたオールインワンパッケージを作るのではなく、自分のコアな分野のみを作り、それ以外は他のプロダクトに依存する作り方の方が賢明となります。
たとえば、iphone用に使いやすい会議室予約システムを作るとします。
今までであれば、一から設計を行い、そのシステムに必要な機能をすべて作成します。
大体、システムというのはあらかじめプリセットしておくようなマスターファイルというのと、都度のトランザクションを登録する入力機能、それらのを閲覧するための表示や帳票印刷機能が必要になります。定期的にたまっているデータをリセットしたり、中身を確認や保守する為のハウスキーピング系の機能も考えると、必要なプログラムは裕に10本を超えます。複数で情報共有する事を考えるとサーバーとの同期機能などさらに本数は拡大します。
これに使いやすさの為の検索機能や状態によって色分けする機能など、あるいはセキュリティーの為の認証機能などを加え出すと、システムはさらに肥大になっていきます。
ところが、たとえば、会議室予約のデータベースとしてiphoneにすでに備わっているカレンダー機能を使ったらどうでしょうか。
会議室が10部屋あるのであればカレンダーを色分けして10個作り、それぞれに利用者の権限を与えればそのままで使えます。
操作性を良くするために、予約入力は会議室リストから選んで予約したり、あいている会議室を選んで予約するなどで専用のプログラムを作った方が良いとは思いますが、その結果はiphoneのカレンダーに入れれば、そのメンテナンス、ホストとの同期はすでにそこにある仕組みを使えば良い事になります。
なによりもいいのは、iphoneが成長してiphoneOSのバージョンが上がった時、その新機能がすぐに使えるというところです。時代追従性を、常に追いかけて開発するんではなく、自動的に追従するようになります。
iphoneのカレンダーの場合はアップルよりカレンダーAPIというのが用意されているので、これを使ってプログラムを作成すれば良いだけです。
他の例では、プレゼンス機能を作る場合でも言えます。
プレゼンス機能とは、今自分がどこにいるとか、どういう状態か(忙しいのか暇なのか、移動中なのかなど)をメンバーで共有する機能ですが、これも一から作ると、メンバーのアカウント管理プログラムなど含めると2-30本以上のプログラム開発が必要です。
しかし、世の中にはすでにチャットなどプレゼンスを管理するしくみはあり、これらがJabberというオープンなスタンダードでオープンソースとして公開されています。
したがって、サーバー側の機能はJabberサーバーのソフトをそのまま使い、利用者側でステータスを設定したり閲覧するプログラムだけを作れば、業務に特化したプレゼンス機能のソフトが開発出来ます。
逆にクライアント機能は市販のものを使い、Jabberでクライアントとやり取りする、業務に特化したサーバーを開発するという手もあります。この場合は、利用者にはJabber対応であれば好きなiphoneアプリを自分で調達してくださいと言え、ソフトウェアの配布、操作教育などの心配から解放されます。
以上の様に何か新しいシステムを開発したいとき、一からすべて開発するのではなく、すでにあるポピュラーな機能を使う事によって大幅に開発工数や期間が短縮でき、作る量が少ない訳ですから品質も当然上がります。使う方にしても、上記のプレゼンス機能などの場合は使いなれたJabberクライアントを使えば良い訳で、操作法を新たに勉強する必要があります。
開発するソフトの本質に注力して開発出来るので、そのエッセンスの部分に関してはより競争力の高いものを作る事が出来るようになります。
唯一注意を払わなければならないのは、採用するオープンスタンダードの方式です。同じような機能を果たすのに複数の方式があります。これらのどれが本流でみんなが採用しているのか、今後も本流であり続けられるのかを見分けなければいけません。
残念ながら、一番すぐれたものが本流とは限らないというのがこのオープンの世界で、したがって、ISOやIEEEなどで定められたものが必ず本流とは限りません。デファクトスタンダードという言葉があるくらいで、この本流を正しく見極めて採用しないと、ただの亜流のソフトになってしまいます。
今のところ一番簡単な本流の見つけ方は業界をリードしているメーカーが採用しているスタンダードを選ぶことです。今までは、これはMicrosoftでしたが、今、まさにこれがGoogleやTwitterといったインターネット世代の企業に移りつつあります。
位置情報のKMLやGPX、同期情報のSyncML、書籍形式のePUB、IMのXMPP、twitterのTwitAPI、ポータルサイトのガジェットインターフェースであるポートレットなどコンテンツやアプリケーションレベルで多数あるので、この中から最適でかつ本流を選ばなければなります。(余談ですが、大体、このようなスタンダードは、かつてはプロトコルの”P”がついた、xxxPというものが多かったのですが、最近はXMLの普及に伴いコンテンツの構造に言及したxxxxMLとかxxxLといったネーミングが多くなってきたような気がします)
現時点で何よりも有力でかつ基盤となるオープンスタンダードはHTML5で、各ブラウザーベンダーも対応しだしているし、Flashなどを置き換える可能性もあり、また、Webベースでもオフライン運用が出来るなど、設計思想を大きく変える可能性があり、HTML5のスペックもさることながら、普及のペースも含めて要研究だと思います。
これらを実現する唯一の方法は常に世の中にアンテナを張って、早く、早く、対応をしていく事でしょう。
開発者の開発への取り組みも、まず、調査、勉強、評価、POC(Proof Of Concept)というプロセスが大事で、いきなり一から設計では高い生産性、保守性、時代追従性、弾力性は望めないという事になると思います。
技術者に求められる能力や、仕事のプロセス自体が大きく変わる(単に言語がVisual BasicからJavaに変わると言ったような話ではない)時期だと思います。
なんか大変な時代のような気がしますが、Good Newsは昔と違って、その勉強をしたり、自分でハンズオンしてみるのに、インターネットにすべてあるという事です。大金を払って講習会に出たり、サーバーや開発ソフトを買ったりする必要が無い訳ですから、すべての人に平等にチャンスがあるという事だと思います。(英語は出来なければダメかなと思いますが)
ライセンス料がいらないOSSに注目が集まっているようですが、私はこのオープンスタンダードこそが今後のキーワードだと思います。(もちろん、オープンスタンダードを使うにあたって、そのオープンソースが常にある訳で、利用する訳ですが、それはライセンス料節約とは目的が違いますよね)