作ったWebサービスを無料、もしくは、低コストで公開する方法まとめ

# ○はじめに
今回、個人アプリ(Laravelで作成)を低コストで公開したいと考え、色々調べてみた公開方法をまとめてみることにしました。
難易度が「簡単なもの〜初学者には学習コストが少し高いもの」まで集めています。

全項目に、「難易度とコストの参考表」を記載していますが、かなり主観で、なおかつ、一眼でわかる様に大体で書いたものです。
詳細についてはご自身でググって頂くようお願いします🙇‍♂️

# ○私が採用した運用方法

今回、私は<font color="Red">③で紹介する「VPSサーバー」を採用しました。</font>（ConoHa VPSを使用）

理由としては、
**コストを出来るだけ抑えて、なおかつ、運用して行くにあたってのそれなりのパフォーマンスを追求したいと考えてたからです。**

しかし、仮装サーバーといえど、物理サーバーは1台のため、
万が一、アクセス数が急激に増えた時が心配です。
その際は、AWSへ移行する方法もあるため、臨機応変に対応したいと思います。

#○公開の種類
| 公開方式  | サーバーの種類 | 説明  | 例 |
|---|---|---|---|
| オンプレミス型  | 物理サーバー |カスタマイズ性に優れる、高価|  会社にある物理サーバー |
| PaaS  | 共有サーバー | 一つのサーバーをみんなで共有、カスタマイズしにくい、安価 |  Heroku、Netlify |
|  VPSサービス | 仮装サーバー| 一つのサーバー上に、1つの仮装的なサーバーを立てれる、カスタマイズ性がある、安価→固定価格 |  サクラVPS、ConoHa VPS |
| クラウド |仮装サーバー | 一つのサーバー上に、複数の仮装的なサーバーを立てれる、カスタマイズ性がVPSより高い、従量課金性　|AWS、GCP、Azure　|

# ○公開方法まとめ

## ①Heroku

| 難易度 | コスト |
|---|---|
| 簡単 | 無料（毎月550時間まで→※スケールアップ時は、費用がかかる） |

初めて、Webアプリを公開する人にはおすすめです。

###メリット

- Paas（Platform as a Service）：アプリケーションを稼動するためのインフラ部分が全てカバーできる。
→アプリさえ作成すれば、あとは少しの作業でアプリを公開できる。

- 無料で使用できる
ほとんどアクセスのない、個人用のポートフォリオとかだと全然無料で使えます。（1サービスであれば）

- 簡単に公開できる
Herokuの会員登録と、コマンドラインで簡単な操作を行うだけで公開できます。

###デメリット
- 読み込みが遅い
30分ごとに使っていなければwebサーバーがスリープ状態になるため。
（ただし、使いようによっては改善も出来るっぽい）

- カスタマイズ性に欠ける
あくまでもPaasであるため、AWSなどのクラウドサービスと比べると機能や拡張性の面でも劣ります。

- デフォルトのDBはPostgreSQL。（MySQLを使う場合は、アドオンを追加しなければいけません）

##②Netlify

| 難易度 | コスト |
|---|---|
| 簡単 | 無料（個人サービスのホスティングレベルであれば）https://www.netlify.com/pricing/ |

* **静的サイトをホスティングすることが出来るWebサービスです。**
正式には**アクセスするたびにページを生成するような**動的なWordPressやWebアプリケーションをホスティングする際には適していません。
**あらかじめ、ページが用意されているような**LPや、ポートフォリオサイトなどに使用出来ます。

* SSL化も可能。小さいサービスの運用程度なら、耐えうる。

##③VPSサービスを使用する（さくらVPSやConoHa VPSなど）

| 難易度 | コスト |
|---|---|
| やや難 | （だいたい）月約600円〜4桁 |

####VPSサービスとは？
→仮装専用サーバーのことです。
1代のサーバーを複数人で共有する点では、PaaSと同じですが。
1人1台カスタマイズして作った仮装的な専用サーバーを使える事がメリットです.

* レンタルサーバーの代わりにVPSサービスや、クラウドサービスを利用する
Webアプリケーションを公開する場合、レンタルサーバーだと難しい場合があります。
1つのサーバーを他の人と共同で使用するため、技術によってはプログラムが動かないからです。

* Webサイト運用など過度なパフォーマンスを必要としないものに向いている
* 大幅なカスタマイズを行う場合は、クラウドやオンプレがいいかも

###メリット
* 1人1台カスタマイズして作った仮装的な専用サーバーを使える
* 安いコストで、カスタマイズが行える

###デメリット
* 物理サーバーや、クラウドと比べると、パフォーマンスが劣る

###参考

・Webサーバーを構築

https://qiita.com/HitoshiHaga/items/5e21f9b4f52158e28510

・サーバー上で開発環境を構築する
→これから開発を開始される方向け。既に開発済みの方は、「サーバー上に本番環境を構築する」を参照ください

https://qiita.com/Fendo181/items/3a6d77c2f4c7ac96c071

・サーバー上に本番環境を構築する
→セキュリティ対策までかなり詳しく記載されています。内容は何をしているか調べながらじゃないとよくわかりませんが、いい勉強になります。

https://flying-sheep.info/2021/02/26/conoha-vps-laravel%E3%81%AE%E6%9C%AC%E7%95%AA%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E7%AF%89/

##④PHP Lambda、DynamoDB、Layer、Brefを組み合わせて、サーバーレスでLaravelを動かす

| 難易度 | コスト |
|---|---|
| かなり難（そう） | ？？？ |

###Lambdaとは？
AWSのサービスとの1つで、あらかじめ用意しておいた関数を実行するサーバーレスのサービス。

###サーバーレスについて

https://qiita.com/baby-0105/items/f95d287f52552a371ef5

###Lambdaの料金についてです。
>関数に対するリクエストの数とコードの実行時間に基づいて課金されます。

>AWS Lambda の無料利用枠には、
1 か月ごとに 100 万件の無料リクエスト、および 40 万 GB-秒のコンピューティング時間
が、それぞれ含まれます。
https://aws.amazon.com/jp/lambda/pricing/

Lambda関数が実行されていない間は無料ということ

###メリット

* リクエスト数の少ないサービスだと、コストパフォーマンスが良さそうです。

例）ビッグデータ解析など、１日に少数の決まった動作のみのサービス

* メンテナンスはAWSが全て行ってくれる

###デメリット
* リクエスト数が多いサービスは高額になる可能性が

###参考

https://aws.amazon.com/jp/blogs/news/the-serverless-lamp-stack-part-4-building-a-serverless-laravel-application/

https://qiita.com/kai_kou/items/cf9a58c4d4e12f487b9a

https://qiita.com/tuuuuuuken/items/d07085d45c453704540b