RubyのRFP/要件定義書/提案依頼書について

Rubyでの開発を検討するとき、発注側がまず向き合うべきは「自社のサービスに、本当にRubyを採用要件として満たすべきか」という意思決定です。RFP(提案依頼書)や要件定義書に「Rubyで開発すること」と書くべきか、あるいは「言語は問わない」とすべきか。この判断を感覚で行うと、立ち上げ後のフェーズで思わぬコストやリスクを抱え込むことになります。本記事は、Rubyという言語を技術選定・採用要件の観点から捉え直し、発注側がRFPや要件定義書に落とし込むための判断フレームを「要件定義特化」で解説します。

事業フェーズ・想定トラフィック・将来の拡張性・採用市場・TCO(総保有コスト)・引き継ぎ性という6つの要件軸でRubyを評価し、「自社はRubyを採用要件とすべきか」をチェックリスト化します。さらに、発注時に取り決めておくべきコーディング規約・ドキュメント納品・保守契約・バージョンアップ責任までを、提案依頼書の言葉として整理します。読み終えるころには、ベンダーに渡すRFPに「Rubyをどう書くか」を自分で判断できるようになるはずです。Rubyの全体像をまだ把握していない方は、まずRuby開発の完全ガイドから読むことをおすすめします。

Rubyを採用要件として評価する6つの軸

Rubyを採用要件として評価する軸のイメージ

Rubyを採用要件とすべきかの判断は、感覚ではなく要件軸に分解して行うのが定石です。ここでは、発注側が技術選定の意思決定で押さえるべき6つの要件軸を、Rubyの特性に照らして整理します。この6軸を自社のサービスに当てはめれば、Rubyの適合度が見えてきます。

事業フェーズと想定トラフィックの要件化

最初の要件軸は、事業フェーズと想定トラフィックです。立ち上げ・検証フェーズで、何より素早くプロダクトを世に出して仮説を検証したいなら、Rubyの開発速度は要件に強く適合します。逆に、要件が確定した大規模基幹システムや、ミリ秒単位の応答性能・極端な高トラフィックが事業の生命線になる領域では、Rubyの実行性能特性が要件に合わない可能性があります。

発注側が要件定義で行うべきは、「立ち上げから1〜2年でどの程度のユーザー数・データ量を想定するか」を数字で言語化することです。この想定が小〜中規模で、かつ仮説検証を重視するなら、Rubyを採用要件としても問題が表面化しにくいでしょう。一方、初期から大規模・高負荷が確実なら、Rubyだけで完結させるのではなく、負荷の高い部分を別言語で設計する前提を要件に織り込む必要があります。

重要なのは、この想定を「願望」ではなく「現実的な計画」として書くことです。すべてのスタートアップが急成長するわけではないため、過度に大規模を前提にして最初から重厚な設計を求めると、立ち上げの速さという最大の利点を自ら捨てることになります。フェーズに見合った要件設定こそが、技術選定の出発点です。

採用市場とTCOを要件に組み込む

二つ目と三つ目の要件軸は、採用市場とTCO(総保有コスト)です。将来の内製化を見据えるなら、「その言語のエンジニアを採用・定着させられるか」は重要な要件になります。Rubyは国内でRuby on Railsを軸に求人市場へ流通しており、Railsの実務経験者の層が厚いため、採用要件としては比較的満たしやすい言語です。ただし、新規学習者がGoやTypeScriptへ向かう傾向もあるため、中長期の採用見通しは慎重に立てる必要があります。

TCOの観点では、初期開発費だけでなく、インフラ費・保守費・バージョンアップ費を含めた5年程度の総額で要件を考えることが大切です。Rubyは初期開発のコストを抑えやすい一方、依存するgemやRuby本体・Railsのバージョンアップを継続する保守費が発生します。要件定義の段階で、この継続費を誰が負担するのかを織り込んでおかないと、「作ったあとに保守費が読めない」という事態に陥ります。

これらの要件軸を評価する際は、言語そのものの技術的特性への理解が前提になります。動的型付け・メタプログラミング・gemといったRubyの機能特性が事業要件にどう効くかは、本記事と対をなす機能特化の記事で詳しく解説しています。技術選定の要件評価と機能理解は両輪であり、合わせて読むことで判断の精度が高まります。

RFP・提案依頼書へのRubyの書き方

RFPへのRubyの書き方のイメージ

採用要件としてRubyの適合度を評価したら、次はそれをRFP(提案依頼書)や要件定義書にどう書くかです。ここで多くの発注企業が「Rubyで開発すること」と技術を固定して書きがちですが、それが最善とは限りません。事業要件を主に書き、技術はそれを満たす提案として求める書き方のほうが、結果的に良い提案を引き出せることが多いのです。

技術固定ではなく事業要件で書く

RFPに「Rubyで開発すること」と固定して書くと、ベンダーの提案がその枠に縛られ、より適した技術提案の機会を逃すことがあります。代わりに、「立ち上げ速度を最優先する」「初期は小〜中規模を想定し、成長後は負荷の高い部分を別言語へ切り出せる設計とする」「将来の内製化を見据え、採用しやすい技術を優先する」といった事業要件を書くのがおすすめです。

こう書くことで、ベンダーは「その要件ならRuby on Railsが適しています」という根拠とともに技術を提案することになり、発注側は提案の妥当性を要件に照らして評価できます。すでに社内にRubyエンジニアがいる、既存システムがRubyで動いているなど、技術を指定すべき明確な理由がある場合は別ですが、白紙から始めるなら要件先行で書くほうが健全です。

また、要件定義書には「なぜその技術が要件を満たすのか」をベンダーに説明させる項目を設けるとよいでしょう。Rubyを提案するなら、その開発速度や採用市場の優位がどう自社要件に効くのかを言語化させることで、提案の質と発注側の理解の両方が高まります。技術選定を「ベンダー任せ」にせず「要件で対話する」姿勢が、後の失敗を減らします。

Go・Javaとの比較を要件に含める

RFPの段階で、RubyだけでなくGoやJavaといった代替技術との比較をベンダーに求めると、より納得感のある技術選定ができます。たとえば、企業データベース「Musubu」を運営するBaseconnectがRuby on RailsからGoへ移行した事例(Baseconnect Tech blog)は、成長フェーズで性能重視の言語へ移行する現実があることを示しています。要件定義でこうした移行の可能性をあらかじめ織り込んでおくことは、賢明な発注の作法です。

具体的には、「初期はRubyで素早く立ち上げ、ユーザー数がこの水準を超えたら、負荷の高い処理をGoなどへ切り出すことを妨げない設計とする」といった条件を要件に書いておきます。こうしておけば、ベンダーは将来の切り出しを見越したアーキテクチャ(機能の境界を明確にした設計)でRubyやRailsを組むことになり、後の移行コストを大きく下げられます。

大規模な組織では、リクルートがSpringとRailsを組み合わせたり、STORESがRailsとSpringの両方を実務で扱ったりと、複数言語を適材適所で配置する事例があります(媒体:リクルート テックブログ、STORES Product Blog)。要件定義の段階から「すべてをRubyで完結させる」と決めつけず、将来の使い分けの余地を残すことが、長期的に破綻しないシステムの土台になります。

引き継ぎ性を守る要件の明文化

引き継ぎ性を守る要件のイメージ

技術選定と同じくらい、いや、それ以上に発注側の長期リスクを左右するのが「引き継ぎ性」を守る要件の明文化です。Rubyという言語を選んだかどうかより、コーディング規約の順守・ドキュメント納品・保守責任の取り決めが、別ベンダーへの引き継ぎ可否を決めます。ここを要件定義で詰めておくことが、ベンダーロックインを防ぐ最大の鍵です。

コーディング規約とドキュメント納品の要件

Rubyは自由度の高い言語で、同じ機能でも書き方が人によって大きく変わります。さらにメタプログラミングを多用すると、処理の流れが見た目から追いにくくなります。これらが放置されると、開発した本人しか理解できない属人的なコードになり、引き継ぎが困難になります。これを防ぐには、要件定義でコーディング規約の順守を明記することが有効です。

具体的には、RuboCopのような静的解析ツールでコードスタイルを統一すること、メタプログラミングの使用を必要な範囲に限定すること、複雑な処理にはコメントや設計意図のドキュメントを残すことなどを、要件として求めます。あわせて、システム構成図・データベース設計書・APIの仕様書といった設計ドキュメントを納品物に含めることを明記しておけば、別ベンダーへの引き継ぎが格段に容易になります。

発注側が見落としがちなのは、「動くコードさえあれば引き継げる」という誤解です。実際には、コードだけ渡されても、設計の意図や全体像が分からなければ別の会社は手を出せません。引き継ぎ性は技術選定よりも、規約順守と設計ドキュメント納品という要件の有無で決まる、という認識を持つことが重要です。

バージョンアップと保守責任の取り決め

Rubyで作ったシステムは、納品されたら終わりではありません。Ruby本体・Ruby on Rails・依存するgemは時間とともに新しいバージョンが出て、古いバージョンはサポートが終了していきます。サポートが切れたバージョンを使い続けると、セキュリティの脆弱性が放置され、重大な事故につながりかねません。これを防ぐ責任を、要件定義の段階で明確にしておく必要があります。

要件定義書や保守契約には、「誰が・どのくらいの頻度で・いくらの予算でバージョンアップを行うか」を明記します。たとえば、年に一度の定期バージョンアップを保守契約に含める、脆弱性が公表された場合の緊急対応の範囲と費用を取り決める、といった具合です。これを曖昧にしたまま発注すると、数年後に「バージョンが古すぎて上げるのに大規模な改修が必要」という高額な請求に直面することになります。

こうした保守要件を怠ったときに何が起きるか、その生々しいリスクは本記事と対をなす失敗特化の記事で具体的に扱っています。要件定義の段階で保守の責任分担まで踏み込んでおくことが、長期にわたって安全にRubyのシステムを運用するための前提条件です。要件定義は「作るための仕様」であると同時に、「作ったあとを守るための約束」でもあるのです。

まとめ

Rubyの要件定義まとめイメージ

Rubyの要件定義を発注企業の視点で振り返ると、その本質は「Rubyという言語を指定すること」ではなく「自社の事業要件を言語化し、それを満たす技術としてRubyが妥当かを検証すること」にあります。事業フェーズ・想定トラフィック・拡張性・採用市場・TCO・引き継ぎ性という6軸でRubyを評価し、RFPには技術固定ではなく事業要件を書くことで、より良い提案を引き出せます。

そして、技術選定以上に発注側の長期リスクを左右するのが、コーディング規約・設計ドキュメント納品・バージョンアップ保守という要件の明文化です。BaseconnectのGo移行事例(Baseconnect Tech blog)が示す将来の移行余地まで要件に織り込み、引き継ぎ性と保守責任を約束として書くことが、ベンダーロックインを防ぎます。riplaは、こうした要件定義の作成から技術選定・開発・保守まで一気通貫で支援します。

株式会社riplaでは、IT事業会社出身のプロフェッショナルが「Impact-Driven型支援」を通じて、プロダクトやシステムの納品・提供を目的とせず、お客様と同じ目線で、事業成果の達成をゴールとして、高品質なDX/開発支援をいたします。

また、弊社独自の開発テンプレート「Boxシリーズ」による標準機能の高速開発と、AI駆動開発の独自フレームワーク「GoDD」による独自機能のAI実装を組み合わせることで、低コスト・短期間で開発を実現いたします。

もし、システム開発やプロダクト開発に関するご要望がございましたら、お気軽にお問い合わせください。

・サービス概要資料のURLはこちら >>>
・お問合せページのURLはこちら >>>
・お役立ち資料のURLはこちら >>>

執筆者プロフィール
張田谷凌央
張田谷凌央

株式会社ripla 代表取締役CEOとして、システムパッケージ活用、システム開発、データ分析、生成AI活用、SaaS開発、アプリ開発、EC構築など、幅広い領域で企業のDX推進と事業成長を支援している。IT事業会社出身のプロフェッショナルが集う株式会社riplaにおいて、「Impact-Driven型支援」を掲げ、単なるシステム納品にとどまらず、クライアントと同じ目線で事業成果の実現に向けた伴走支援を行う。早稲田大学卒業後、ラクスル株式会社、LINEヤフー株式会社にて事業開発やDX推進などに従事した後、株式会社riplaを創業。

 

ブログ|株式会社riplaをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む