最速でサービスをローンチする


# はじめに

細かいことは良いから早くローンチしてそもそもイケてるプロダクトなのか検証したい人向けに書いています。

---

# Done is better than perfect.
完璧を目指すよりもまずは終わらせろ
<img width="500" src="https://qiita-image-store.s3.amazonaws.com/0/55077/311b99c1-1e7d-7d69-d58c-6262b3984351.jpeg"/>

---

# JavaScriptでプロトタイプ開発
初動でプロダクトのプロトタイプを作成するとして、JavaScriptでフロントエンドとバックエンドを言語統一するのが最速だと思います。
学習コスト的にもnpmのライブラリも豊富のため、フルスクラッチで作る必要がない。

---

## [圧倒的npmパッケージ数](http://www.modulecounts.com/)
<img width="400" alt="スクリーンショット 2018-11-25 12.24.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/55077/fc73c689-b17b-f6b8-e05f-df36af4e54d1.png">

---

# SPA(Single Page Application)
また、SPAで作成するとページ間の遷移などもサーバ不要で実現できます。

つまり、html+js+img等の静的リソースをホスティングするだけでAPIサーバ不要で簡単なウェブページくらいは実現可能です。

---

# 個人的におすすめの構成

- SPA: ReactJS
- APIサーバ: nodejs + express
- DB: MongoDB + mongoose

JS統一で楽だし、情報が多いし柔軟性が高い

---

# プロダクトファースト
プロダクトの初期開発においては最初から完璧なインフラ構築に注力するよりも、
うまく行ったら、ステップバイステップで環境移行したほうがコストも労力もかからず済みます。
それよりもプロダクトの本質に注力したほうが良いです。

---

# 最速でローンチする

---

# ngrok

- [ngrok](https://ngrok.com/)はlocalhostサーバをトンネリングしてグローバルホストとして公開するサービス
- デモ用とか、https検証用にサーバをグローバル公開する手段としては多分これが一番早いと思います。

---

# 導入方法
ngrokの導入方法に関してはこちらを参考にしてください。
参考：[ngrokが便利すぎる](https://qiita.com/mininobu/items/b45dbc70faedf30f484e)

webpack-dev-serverのproxyと併用する場合は、 
--host-header=rewriteのオプションが必要です。

```sh
$ ngrok http --host-header=rewrite (ポート番号)
```

---

# 制限

- PCが一台犠牲になる
- 同時アクセスが多いとすぐToo Many Requestを受けるとアクセスできなくなる（１分で解除）

やはり検証用やデモ用です・・・

---

# GitHub Pages
GitHubの機能
GitHubリポジトリをそのままホスティングする

---

# ローンチ
GitHubリポジトリの公開設定を公開branch指定してindex.htmlを置くだけ
<img width="500" alt="スクリーンショット 2018-12-03 3.55.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/55077/53b60181-1c32-17ec-d034-407683ec6747.png">

---

<img width="350" alt="スクリーンショット 2018-12-03 3.49.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/55077/f7124ba7-fae8-cb7e-7886-72b4d87e50bb.png">

---

# 制限

- 10万リクエスト/月が上限
- 静的ホスティングのみ、APIサーバは置けない

---

# Netlify
[Netlify](https://www.netlify.com/)はCLIでdeployできるのと独自ドメインの設定も特に制限がないのが良いです。
静的ホスティングのみだとベストかも知れない。
バックエンドがAWS Lambdaを使っていて、APIの書き方がNetlify専用になるのが・・・

---

## メリット

- 専用のCDNにより、ホスティングが高速
- 独自ドメイン設定の制限がない

## デメリット

- APIがNetlify専用の書き方になる

---

# Glitch
[Glitch](https://glitch.com/)はTrelloなどを開発しているチームが提供しているサービス
特にnodejs+expressのプロジェクトに関してはテンプレが用意されているので特にバックエンドの実験に便利です。
GitHub経由でのimport(deploy)も可能です。

---

<img width="800" alt="スクリーンショット 2018-12-04 22.29.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/55077/303d66e5-88bd-afc6-3d4d-94cf1442bddb.png">

---

## package.jsonの設定
サーバ起動前提なのでscripts: "start"が必須
静的ホスティングのみしたい場合はserve等を使う

```package.json
  "scripts": {
    "start": "serve ."
  },
  "dependencies": {
    "serve": "^10.1.1"
  },
```

---

## メリット

- オンラインエディタ付きで編集時に即時反映
- package.jsonも即時判断してnpm installする

## デメリット

- GitHubからのimport時の初期化に時間がかかる（表示上ではタイムアウトしたりする）
- 独自ドメイン設定には[Thanks](https://glitch.com/help/how-can-i-get-help-with-code-in-my-project/)を２つ付けてもらわないといけないのでちょいだるい

---

# Heroku
SalesForceに買われたホスティングサービス、昔からある。
nodejsに限らず、大体どの言語のサーバのフレームワークもサポートしている。
CLIでデプロイも可能です。

---
# Setting

Settingのbuildpacksでnodejsを追加

<img width="1233" alt="スクリーンショット 2018-12-04 23.37.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/55077/389a1339-b6ac-710b-395e-224e90ea0b30.png">


---
## package.jsonの設定
サーバ起動前提なのでscripts: "start"が必須
heroku専用のengines属性にnodejsの設定が必要

```package.json
  "scripts": {
    "start": "node app.js"
  },
  "engines": {
    "node": "8.11.3",
    "yarn": "^1.9.4"
  }
```
---

## メリット

- カスタムドメインが設定できる
- 継続的デプロイが可能（CIツール）

## デメリット

- dynoがAWS Lambda同様アクセスがないと起動に時間がかかる（定期的にキックする仕組みが別途必要）
- 550時間／月の無料Dyno時間(クレジットカード登録で1000時間/月)の上限、それ以上は有料

---

# mLab
[mLab](https://mlab.com/welcome/)はMongoDB公式のMongoDBサーバホスティングサービスです。
グローバルからアクセスすることもできるし、
Herokuは[プラグイン](https://elements.heroku.com/addons/mongolab)があります。

---

# まとめ

静的ホスティングのみの場合はNetlify
API込みの場合はGlitch、Herokuが良さそう。

軌道に乗ったらAWS等に移行すれば良いと思う。

---

# デモ
同じ[サンプル](https://qiita.com/teradonburi/items/785085c109cd55d92d32)をそれぞれデプロイしてみた

- [GitHub Pages](https://teradonburi.github.io/threejs/demo)
- [Glitch](https://teradonburi-threejs.glitch.me/demo)
- [Heroku](https://startup-jab.herokuapp.com/demo)
- [Netlify](https://admiring-mcclintock-85c17f.netlify.com/demo)

---

# ドメイン取得
AWSのRoute 53でサクッと購入できます。
大体$12/年
![スクリーンショット 2018-12-04 23.41.33.png](https://qiita-image-store.s3.amazonaws.com/0/55077/928c6005-df27-34d3-bc3c-bb9ba5fba4dc.png)