技術選定をするにあたって重要な視点とは

 プロジェクトを新規に立ち上げるフェーズや、新たな機能追加を行うフェーズでは、しばしば技術選定という関門が立ちふさがります。このとき、どのような視点をもってこの難題に接すればよいでしょうか。

技術選定の視点

 技術選定において持つべき視点を、重要な順に紹介していきます。

プロジェクトの目的・要件

 技術選定をする前に、目的や要件を定めましょう。何を作るため・何をするために技術選定が必要なのかを考えてみます。そうすると、自ずといくつかのフィルタが掛かってくるはずです。

 例えば、確固たるトランザクション機能が必要なのに、トランザクションを行えないDBを選択するでしょうか?一般的には、期待すべき機能を有さないものは選択肢から外れます。(もちろん無理に採択することもできますが、それには多大な困難を伴うでしょう)

 作るものが何か?どういう特性があるのか?といったことを事前に分析しておくことで、数多にある選択肢の一部を切り落とすことができます。

 尚、ここで述べている「要件」には非機能要件も含まれます。Webサービスを展開するのに、表示に10秒かかるようなサイトが生まれてしまうようなものを選択することは避けなければなりません。

信頼性

 信頼性も重要です。いわゆる「枯れた技術」と表現されるものもありますが、そこまでは行かなくても、あまりに新しい技術はよく考えてから採用すべきです。

 新しい技術は、突然開発が止まってしまってセキュリティリスクを抱え込んだり、頻繁なアップデートなどによってインターフェースが変更され、常にアップデートコストを支払うことになったりします。

  一般的には、複数のプロダクトで使われていて、かつメンテナンスがしっかりと行われているものは、実績という面から見れば信頼出来るものと考えることが出来そうです。

コスト・パフォーマンス

 技術を利用した開発にもコストが掛かります。SaaSなどをプロダクトに組み込むなら、サブスクリプション料金を支払う必要がありますし、そうでなくても有料のプロダクトを利用することもあるでしょう。

 しかし、例えば月々10万円程度の有料のプロダクトを利用したとします。その効果により月々見込まれるオペレータの人件費をまるまるカット出来るのであれば、それはコストパフォーマンスに優れていると言えます。

 何でもかんでも無料のものを使うのではなく、ある程度開発コストと天秤に掛けると、結果的にはそちらのほうが良かった、となることも少なくありません。勿論コストは安いに越したことはありませんが、それ以上のパフォーマンスを発揮できればよいのです。

人材採用

 開発メンバーを採用することを予め考えておく必要があるのなら、世の中のトレンドに沿った技術を評価するのも重要な視点です。

 例えば、「新規開発でCOBOLをやります!」というプロジェクトは、その内容がいくら魅力的であったとしても、即戦力となる人材の絶対数が今となっては少ないため、採用活動には困難を伴うことが予想されます。

 仮に、「人材採用する予定は無い」と考えていたとしても、ビジネスが拡大したり、メンバーが抜けてしまったりと、急遽人員を補充する必要がある場合もあります。あまりにニッチな技術は避けたほうが無難でしょう。

メンバーのモチベーション

 採用技術はプロジェクトメンバーがこれから長い時間を掛けて付き合っていかなければなりません。可能であれば意思決定はステークホルダーだけでなく、メンバーの意見も柔軟に取り入れながらやるのが良いでしょう。これは開発の効率を大きく左右する重大なことです。

 少なくとも、周囲の意見を十分に聞くことなく、独善的な意思決定を行うことは大きなリスクがあると言えます。

メンバーのスキルセット

 メンバーのスキルセットを考慮するのも大切です。これは、「よく知っている技術を採用するため」ではなく、「パラダイムが大きく違う技術を採用しないため」です。

 プログラミング言語で例えると、JavaとC#は兄弟のような言語ですが、Haskellなどは大きく毛色が違います。皆オブジェクト指向言語に慣れているところに、誰も触ったことのない関数型言語を取り入れると、まず勉強から始めなければなりません。場合によっては、設計技術すらも応用出来ないようなものである可能性もあります。

 冒険をするなら、最低でも誰か一人は近い技術に精通しているメンバーがいるものを採用するのが無難です。

学習コスト

 一見重要そうに見える学習コストですが、上記に比べればそうでもありません。全く違うパラダイムの技術を採用するなら別ですが、多くの場合、学習すべき差分というものは意外と少ないものです。

見直し・振り返りを忘れずに!

 技術選定が終わったとしても、 開発がそこで終わるわけではありません。その選択がどうだったか?反省すべき点はあるか?それは次回に活かせるものか?の振り返りや、その選択を陳腐化させないだけの見直しコスト(例えば、リファクタリングコスト)を定期的に支払うようにすることを忘れないようにします。

 どれだけ気をつけた完璧な開発を行っていても、時間が経過する毎に賞味期限が近づくわけですから、学習コストを度外視したとしても、このコストは必ず支払わなければなりません。そうでなければ、後々莫大なコストを利息付きで支払うことになる羽目になります。

まとめ

 技術選定にあたって重要なポイントを挙げました。もちろんこれ以外にも沢山の視点や見方、指標がありますし、評価軸も異なるものです。ある程度勇気を持って踏み込むことも時には重要ですし、総合的に判断して枯れた技術を使う選択肢を選ぶこともあるでしょう。

 ここに上げたことの他にも、人によって視点は千差万別です。もしあなたが大事にしている視点がありましたら、ご紹介させて頂きますので、是非コメント欄でお知らせください。