スタートアップで、あえて最先端の技術を使うメリットとデメリット

# はじめに

今、SCORERAという大会運営支援のサービスを作っています。（2019年3月にサービス終了）
 ~~「あなたの大会をスマートに」をコンセプトに、大会の集客からエントリ管理、結果のリアルタイム反映までをWEBブラウザで可能にする大会運営のプラットフォームサービスです。
（※2017年12月現在、大会運営者としてクローズドβに参加いただける方を募集中です。）~~

このサービスは**Angular**と**Firebase**という、まだリリースされてそれほど時間の経っていない技術、サービスを使って作成しています。

**「新しいことをやるのだから、最先端の技術で！」**というと勢いがあっていいのですが、実際のところ、スタートアップはサービスの**質、コンセプト**がよければよいのであって、最先端の、言い換えれば**まだまだ安定していない技術**で構築する必要は必ずしもありません。

どんなサービスであっても、実際に作り始める前に一度は技術の選定を行うと思います。
そこで最先端と思われる技術を取り入れることのメリットとデメリットを**ヒト、モノ、カネ**の視点から取り上げ、それらについて私が考慮したことを書いてみようと思います。

## トピック
- [はじめに](https://qiita.com/Yamamoto0525/items/93b8f21a2cf39c723806#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)
  - [トピック](https://qiita.com/Yamamoto0525/items/93b8f21a2cf39c723806#%E3%83%88%E3%83%94%E3%83%83%E3%82%AF)
  - [最先端技術の定義](https://qiita.com/Yamamoto0525/items/93b8f21a2cf39c723806#%E6%9C%80%E5%85%88%E7%AB%AF%E6%8A%80%E8%A1%93%E3%81%AE%E5%AE%9A%E7%BE%A9)
- [メリットとデメリット](https://qiita.com/Yamamoto0525/items/93b8f21a2cf39c723806#%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88)
  - [ヒト（立ち上げ、技術習得、採用）](https://qiita.com/Yamamoto0525/items/93b8f21a2cf39c723806#%E3%83%92%E3%83%88%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E6%8A%80%E8%A1%93%E7%BF%92%E5%BE%97%E6%8E%A1%E7%94%A8)
  - [モノ（スピード、質、マーケティング）](https://qiita.com/Yamamoto0525/items/93b8f21a2cf39c723806#%E3%83%A2%E3%83%8E%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E8%B3%AA%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0)
  - [カネ（構築費用、運用費用）](https://qiita.com/Yamamoto0525/items/93b8f21a2cf39c723806#%E3%82%AB%E3%83%8D%E6%A7%8B%E7%AF%89%E8%B2%BB%E7%94%A8%E9%81%8B%E7%94%A8%E8%B2%BB%E7%94%A8)
- [最先端技術を取り入れることにした経緯と決め手](https://qiita.com/Yamamoto0525/items/93b8f21a2cf39c723806#%E6%9C%80%E5%85%88%E7%AB%AF%E6%8A%80%E8%A1%93%E3%82%92%E5%8F%96%E3%82%8A%E5%85%A5%E3%82%8C%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AB%E3%81%97%E3%81%9F%E7%B5%8C%E7%B7%AF%E3%81%A8%E6%B1%BA%E3%82%81%E6%89%8B)
- [あとがき](https://qiita.com/Yamamoto0525/items/93b8f21a2cf39c723806#%E3%81%82%E3%81%A8%E3%81%8C%E3%81%8D)

## 最先端技術の定義

ここで私が取り上げている「最先端技術」は、次のようなものです。
WEBアプリケーション以外の分野では必ずしも該当するわけではないと思いますので、その点はご留意ください。

- WEBアプリケーションにかかる技術で、ここ1、2年のうちにリリースされているもの
- 技術（サービス）の展開が早く、更新頻度が高いもの
- 一部の界隈では注目されているが、大多数ではまだ採用されていないもの

# メリットとデメリット

## ヒト（立ち上げ、技術習得、採用）

スタートアップではとにかく何もかも足りないのですが、特に「ヒト」は一番コストになりやすく、調達が難しいものです。
最先端技術を取り入れる上で、一番のネックになる項目だと思います。

スタートアップを始めようと思ったとき、大抵の場合は自分ともう数人の仲間（運が良ければ）しかいません。
その状態で「最先端技術」を採用しようとした場合、次のようなメリット、デメリットが考えられます。

### メリット
- モチベーションがあがる
  - スタートアップに関わる人の多くは、新しいものに対する好奇心を持っています。**「最先端でやりたい！」**というミーハーな動機であっても、モチベーションの維持は大切です。
- 少人数開発で、管理コスト、教育コストが抑えられる
  - ここ数年で発表されている技術はスタートアップで使われることを意識したものが多く、その技術に習熟することで開発工数を抑えることができます。「カネ」の項目にもかかりますが、これらは開発者の時間確保、モチベーションの向上にもつながります。
- とがった人、新しいことに興味がある人を巻き込める
  - 新しいものをどんどん取り入れようとする、とがった人材と組みやすくなります。しかも、彼らにとってメリットがあるとわかれば、人件費が多少安くても手伝ってもらえることがあります。

### デメリット
- 技術習得に時間がかかる（書籍がない）
  - 多くの場合はその技術に対する知見がなく、１から勉強をすることになります。加えて、まだ母国語の書籍がほとんど出版されていないため、海外のサイトにあたることが多くなります。 
- 日本語以外（主に英語）のスキルが求められる
  - 技術習得は基本的に英語で行うので、最低限のリーディングスキルが必要です。ただ、近年は自動翻訳の精度があがっているので、以前ほどハードルが高くなくなっていると思います。
- その技術に習熟した人を採用することは難しい
  - 出たばかりの技術の場合、プロダクトレベルで使ったことのある人材はほとんどいません。なので即戦力となる人材を見つけることはほとんど不可能だと思ったほうがよく、運よく見つけた場合は大事にしてあげてください。

### 私が考慮したこと
私の場合、最初からJavaScript開発に関する知識があり、自分が開発者となって着手する方向で考えることができました。
なので、ここで挙げた「モチベーションがあがる」「開発工数が少なくなる」というメリットを上手く享受することができたと思います。特にAngularとFirebaseはGoogleがスタートアップを意識して作られた部分が多いため、環境構築やライブラリ選定、バックエンドの構築といった、開発で面倒と思われる部分を排除できたことが大きいです。
※これらは開発者がコードを書くことに集中できる環境を提供してくれます。

ただ、開発以外のこと（マーケティングや営業、経営など）が増えてきたときに、開発を手伝ってもらおうとしてもなかなかいい人材が見つからないことが困りました。人材派遣やエージェント紹介ではほとんど見つからない、または見つかったとしても金額面で折り合わないことが多いので、勉強会や交流会などでその技術に興味のある方を探す、といった方法でパートナーを見つけました。

## モノ（スピード、質、マーケティング）
スタートアップがうまくいくかどうかは、コンテンツの良さにかかっていると思っています。
明確なターゲット（顧客）に対し、かけがえのない価値（バリュー）を提供できるかどうか。勿論、価値の中には「安定して稼働すること」も含まれますので、必ずしもコンセプトだけでうまくいくとは限りません。バグがあることは仕方ないですが、「バグを見つけたら即つぶす」といった作業も大切になります。

### メリット
- コードの質が上がる
  - 最先端のWEBアプリケーション開発では、TypeScriptやFlowTypeなどの静的型付言語を使用することが多くなってきました。型を使った開発は未経験者にとってハードルがありますが、慣れてくると**コード保守性が飛躍的に向上**し、開発速度が上がっていきます。
- 開発スピードがあがる
  - スタートアップの場合、作っている最中から仕様変更がはいることがよくあります。そのたびにドキュメントを直したりしているとどんどん時間が過ぎてしまうので、開発者が少なくて済む技術はそれだけでスピード向上に貢献してくれます。
- これから流行りそうな機能を導入できる
  - Google製品に限らず、新しく登場するサービスは流行りの機能を取り入れてくることが多いです。競争の激しいマーケットであれば、その差は付加価値として取り入れられる可能性があります。
- その技術を取り入れることが宣伝材料になる
  - 基本、そのサービスが「何で作られているか」はユーザーにとってどうでもいいことです。ですが、サービスに注目してもらうためのきっかけとして「最先端技術」を利用することはありだと思います。もちろん、それはサービスの質そのものではないので、そればかり推してしまうのは逆効果かもしれませんが、より多くの人に知ってもらう手段として使うことはできると思います。

### デメリット
- 開発中に新しい機能がでる
  - これは最先端の技術に限ったことではないのかもしれませんが、まだ安定していない技術のため機能の更新、削除が頻繁に起こります。そのたびに技術検証をする必要があるので、思わぬ開発コストにつながります。（※実際、Firebaseのドキュメントを読んでいたら、次の瞬間に内容が変わったなんて場面に何度か出くわしました。破壊的な変更だった場合は結構凹みます。）
- 保守の方法が手探りになる
  - 実際にその技術を使って運用までしているケースがほとんどないので、壁にぶつかった時の解決方法が基本手探りになります。そのタイムラグはそのまま稼働率の低下につながりますので、ユーザーからの顰蹙を買いやすくなります。
- レガシー環境は切り捨てることになる
  - 新しく登場する技術の場合、IEなどの古いブラウザを切り捨てることが多いです。官公庁をターゲットにしたようなサービスの場合、その仕様は致命的になる場合もありますのでこの点の確認は必須です。


### 私が考慮したこと
私のサービスの場合、メインターゲットは大会の運営者ですが、実際の利用者はその大会に参加する選手、観客になります。使用場面は基本、屋外か運動施設なので、スマートフォンで見ることが多くなるため、レガシー環境の心配はありませんでした。
また、大きな仕様変更をいれることになったときに、TypeScriptの効果は絶大でした。やはりある程度の規模の開発を行うときは、多少面倒であっても型のチェックが欠かせないと思いました。

今年に入ってからSSR(サーバーサイドレンダリング)やPWA（Progressive Web Apps）の機能がAngularに標準ライブラリとして搭載されるようになりましたが、私は特にPWAの普及が来年以降どうなっていくかが気になっています。Railsなどの技術を使っていた場合は後手に回ってしまっていたと思うので、簡単に新しい機能を導入できることはメリットだと思います。（ちょっと博打感はありますが。）

## カネ（構築費用、運用費用）
個人開発から始まったスタートアップの場合、基本的にお金がありません。
仮にいいアイディアを思いついたとして、そのネタを元にVC（ベンチャーキャピタル）に飛び込んだとしても、いいところ300万円程度の資金調達にしかならないと聞いています。

時々話題にあがる数千万単位の資金調達ができているサービスは、すでにある程度のユーザーがついていていることがほとんどですので、本当のシード期（0から1にする段階）から多額の資金調達をあてにすることは難しい、ということを前提にしておきます。

### メリット
- 安価、もしくは無料でサービスを利用できる
  - Googleにしろ、Microsoftにしろ、スタートアップ向けのサービスは無料、もしくはかなり安価で開発環境を提供してくれることが多いです（ホロレンズなど、デバイスが必要なものは除く）。
- スケールがしやすく、サーバー管理コストが安い
  - ここ数年で登場した技術は、スケールすることを前提にサービス設計がされています。スケールすることによって料金はあがりますが、これまでサーバー管理者を雇用して運用していたことを考えると、サーバー管理コストを格段に安く済ませることができます。
- 少人数開発で人件費が抑えられる
  - WEBサービスのシード期で一番ネックになるのが人件費です。人1人をまともに雇用すれば月間で数十万、年間で数百万単位のコストがかかってきます（しかもここ最近はエンジニアの単価が高い…）。売り上げのない状況で人を雇うことはかなりリスクになりますので、少人数ですむ技術は事業継続性に多大な影響を与えます。

### デメリット
- 単価が変わることがある
  - これは最先端技術だからというより、外部サービスを利用する際によくあることな気がしますが、ある日突然料金テーブルが変わることがあります。特に出始めのサービスだと頻繁に価格改定をしてくるので、資金繰り表とこまめに相談する必要があります。
- シード期→アーリー期に費用がかかる
  - 1人で開発している分には問題ないのですが、シード期を抜けるとどうしても開発者をいれないといけない時期がやってきます。そのときのコストが新しい技術の場合多くかかることになります。正直、シード期にそこまで考えても仕方ないような気がしますが、そういう段階がくるということは認識しておいてよいかと思います。

### 私が考慮したこと
私の場合は自己資本が少しあり、また別の事業で収入もあったのでそれほどシビアにコスト管理をしていませんでした。逆に言うと、シード期で開発しかしていない段階ではほとんどコストがかかっておらず、意識する必要すらありませんでした。

コストが膨らみ始めたのは、開発がひと段落してマーケティングを始めたくらいだったと思います。売上の経っていない段階で極力コストをかけずにマーケティングをしようとすると、結構マンパワーが必要になります。また、プロモーション用の動画（今作ってます）や、利用規約のリーガルチェックなど、開発以外の費用が大きくかかってくるので、開発費用が安く済ませられていたのは本当に良かったと思います。

# 最先端技術を取り入れることにした経緯と決め手

このサービス構築にとりかかる前の段階で、私のスキルセットは次のような感じでした。

- Rails: 本2冊読了。バックエンドの構築。
- Angular： 1系のサービス構築。2系は記事を読んだ程度。
- React： プロダクト構築に半年程度参加。
- PHP： WordPressのカスタムテンプレート構築ができる程度。
- JavaScript： 簡単なプログラムを組んだことがある程度。
- Linux： nginxを使ったバックエンド構築。
- HTML：　HTML5は大体わかる。
- CSS：　SCSS、SASSは大体分かる。デザインテンプレートは大体触れる。

ちょうど今回のサービス構築にとりかかる前に、Reactの案件に関わっていたのですが、2015年当時、正直開拓期の技術だったReactにはつらみしか感じませんでした。
環境構築、ライブラリの選定、データアーキテクチャの構築と、コードを書く以前の作業ボリュームが大きく、新しい技術を取り入れることをためらう方々の気持ちがよくわかりました。

次の案件では無難にRails×Angularjsかなと考えていたのですが、ちょうどその頃にAngularの正式版がリリースされて、スタートアップとの相性の良さを感じました。
スタートアップは基本スクラップ＆ビルドの思想なので、とりあえず作ってみて、うまくいかなかったらやめればいい、くらいの気持ちで始めたと思います。

そこからその技術を使って具体的なサービスの構築にまで踏み切れたのは、**「新しいことに挑戦している感」**を感じ続けられたことに尽きると思います。

メリットの最初にも書きましたが、一人で開発を続ける場合、とにかく**「モチベーションの維持」**が大切だと私は思います。作っているうちに「こんなの誰が使うんだろ」とか、「こんなのやめてもっと遊びたい」とか、色々な雑念が湧いてきますので、これらを払拭するだけの魅力がサービスには必要です。**「新しいことに挑戦している感」**は、そんな雑念と戦うための有効な戦力になってくれたと思います。

# あとがき
ここ1年間、ひたすらサービスを作り続けてきて、ようやく形になるところまできました。
こんな大上段から見てきたようなことを書いていますが、サービスとしてはまだほんのひよっこで、ようやくよちよち歩きを始めたような段階です。
後から見返したときに「当時はこんな青臭いこと書いてたんだな」と思えるよう精進していきたいと思います。

### 追伸

先月、都内某所の勉強会でLTをやったときの資料がありましたので掲載しておきます。
サービス構築で具体的にいくらくらいかかったのかとか、もう少し込み入ったことも書いています。

[大会運営サービス「SCORERA（スコアラ）」を作ってみた](https://www.slideshare.net/ssusere0aff7/scorera)