スタートアップでのプロダクト開発はRailsで必要十分

Reo Mori
4 min readFeb 8, 2017

--

僕と共同創業者のSuinは2013年に起業してShouldBeeというプロダクトをPHPで作りはじめた。

起業する前にプロトタイプをPHPで1〜2週間程で開発し簡単なセールスを行ない1件の受注を獲得した。これはよい感触だと感じSuin氏を誘い起業に乗り出した。

その後もプロダクト開発はPHPで行っていたが当時はPHPに不満を感じていた。そのころの僕達は顧客数が伸び悩む原因をプロダクトの機能不足や開発速度が遅いからだと考えてしまった。後にこれはまったく検討違いな判断だったと気がつく。

本格的に顧客がつき、たくさんの利用がはじまるとPHPで作られたこのプロトタイプではフィードバックにすばやく対応できないことや、自分達のモチベーションのためにならないと考えScalaでの全面的なフルスクラッチを実施することを決定してしまった。バックエンドはScalaで記述し、フロントエンドはReact+Reduxで開発した。これにはいくつかの問題があった。

  1. 未経験な言語であるため言語そのものの学習に3〜6ヶ月の時間を要した
  2. ライブラリやフレームワークなどの調査も1から実施する必要があった
  3. 身近な開発者に同様の環境で開発している人達がおらず質問をするところがなかった
  4. Scalaは関数型も使えるハイブリッドな言語であるが、関数型を使用し”美しい”コードを記述し低い不具合率を目指したが故に関数型の考えに囚われてしまった
  5. バックエンドとフロントエンドの開発者が同一人物であるのに分割する必要はなかった。分割することによりソフトウェアの複雑さが増え開発と結合、テストに時間がより多く必要になる

他にも挙げればいくつかあるだろうが大きくはこんな感じだ。

美しく完璧に動作するものはできたのだが、それと引き換えに時間と機会を失なってしまうことになった。

この失敗からスタートアップというコンテキストにおけるプロダクト開発はアイデアをいかに早く実現し検証し学びを得ることを最優先としなければならないと考えるようになった。

その後いくつかのスタートアップで開発協力をした際にRailsのエンジニアと仕事をする機会があった。僕自身も多少Railsでの開発経験はあった。

失敗を経験する前はMVCフレームワークは時代遅れでDDD(DDDLiteではない)こそが今後のプロダクト開発の本命であると錯覚していたので本気でRailsを習得しようとは考えていなかった。しかし失敗の経験でなにより早く作れることに魅力を感じていた僕はよい機会なのでRailsを習得することにした。それから1年程度業務をしながら学習を続け今ではRails流を理解して素早くプロダクトを作れるところまできた。

僕がRailsに感じる利点は、

  1. ドキュメントが非常に豊富にあり迷うことはあまりない
  2. こういうことがやりたい、と思うと大体gemが見つかる
  3. 周りにRailsを使っているエンジニアが多く質問もできる
  4. Railsで記述されたオープンソースのプロダクトがあり、それらのコードも参考にできる

大まかに考えてもこれだけの利点がある。逆に不満点を挙げるならば、

  1. Railsのメジャーバージョンが変った瞬間は対応していないgemがある(ちょうどRails5がでた時の話)
  2. 学習にある程度の時間が必要。片手間で学習するならおよそ3〜6ヶ月程度は必要そうだ

これらがパッと思いつく。

スケーラビリティがとか、拡張性がとか、モノリシックなアーキテクチャは柔軟性がないんじゃとかいう声が聞こえてきそうだが(もっとも僕も前はそう思っていたのだが…)、こんな技術的な美しさやなんちゃらビリティなんてものはスタートアップにおける開発速度の重要性に比べたらなんの意味もないものである。そういうのが大事になるころ、つまり沢山の顧客がいて収益も伸び続けている状況だ、そこでRailsではもうどうしようもなくなる2、3歩くらい手前にはじめて考えるべきである。

これはウェブ開発における意見だが、モバイルアプリがメインの開発であればサーバレスアーキテクチャのバックエンドを採用するのもよいかもしれない。

これからスタートアップでウェブサイトを立ち上げようとしている人は、よいRailsエンジニアを見つけ1ヶ月以内に初期のMVPを完成させ一早く顧客に提供し学びを最大限に得ることを最優先にすべきということを強くお勧めする。

--

--

Reo Mori

Founder at Craftsman Software, inc. Ruby and Ruby on Rails/Scala/Functional Programming/React/Redux/Docker