個人開発におけるインフラ設計~どのような点に考慮するべきか~

# 個人開発におけるインフラ設計~どのようにインフラを構築するべきか~

こんにちは、[InfraAcademy](https://engineer-ninaritai.com/infraacademy/)というインフラ学習サービスを運営しておりますryuと申します。

私は、InfraAcademyというインフラ学習サービスを個人(1人)で開発しました。
インフラエンジニアからキャリアをスタートして、大企業の業務システムやスタートアップのプロダクト開発などに携わってきました。
そのような経験から、個人開発でどのようにインフラを構築するべきかについて解説します。

:::note warn
警告
今回の内容は、個人の意見です。作りたいプロダクトに合わせて、最適なインフラを構築しましょう。
:::

## プロダクトのインフラ設計で考慮するべき点
まず、インフラを設計する際に、考慮するべき点を洗い出してみましょう。これは、個人開発に限らず、全てのインフラを設計する際に考えます。

* プロダクトの仕様や要件
* コスト
* パフォーマンス
* 可用性と信頼性
* セキュリティ
* 監視や運用体制

### プロダクトの仕様や要件
まずは、プロダクトの仕様や要件を考えます。どのようなアプリやシステムを作るのかです。
ブログなどのコンテンツ系のサービスや、マッチングサービス、AI系のサービス、Iot系のサービスなど、世の中にはさまざまなサービスがあります。ご自身や会社でどのようなサービスを作りたいのかを決定します。

どのようなサービスを作るかによって、ある程度のインフラ設計が考えられます。
そのサービスを作るための最低限のインフラは必要だからです。

例えば、ブログなどのコンテンツ系のサービスについて考えてみましょう。
* コンテンツを公開するためのWebサーバーやドメインは必要。
* Studioなどのノーコードで構築するか、1から自社で構築するのか？
* 自社で構築する場合、Wordpressが良いのか、Headless CMSを使ったJAM Stack構成が良いのか
* AWSやAzureなどのクラウド環境にするのか、レンタルサーバーにするのか？

といった、さまざまな点が考えられます。しかし、作りたいものが決まっているだけではインフラは決まりません。
その他の点を考慮する必要があります。

### コスト
まずインフラを設計する上で、コストは必ず考慮する必要があります。
例えば、毎月の予算が10万円の場合、100万円/月のコストがかかるインフラは構築できないからです。
コストについては、作りたいものから逆算して決める場合と、最初に予算が決まっている状態から設計する場合があります。これは、会社や個人のお財布事情によって変わります。
### パフォーマンス
続いて考慮するべき点は、パフォーマンスです。
Webページ応答時間や処理の速さです。
例えば、Webページの閲覧に10秒以上かかると、誰もそのページを見なくなるでしょう。

パフォーマンスを高くするには、サーバーの性能強化、キャッシュの利用、データベースの最適化などが考えられます。
### 可用性や信頼性
続いて考慮するべき点は、可用性と信頼性です。
システムをお客さんに安定して提供できるかどうかです。
例えば、決済システムであれば、24時間365日稼働し続ける必要があります。
可用性や信頼性を高くするためには、データセンターの地理的分散、冗長性の確保、バックアップなどが考えられます。
### セキュリティ
続いて考慮するべき点は、セキュリティです。
セキュリティ対策がされていないと、個人情報が流出する恐れがあります。

セキュリティを高くするためには、データの保護、アクセス管理、ネットワークセキュリティ、脆弱性の監視といったセキュリティ対策が考えられます。
### 監視や運用体制
続いて考慮するべき点は、監視や運用体制です。
システムが正常に動作しているかを監視し、問題が発生した際に迅速に対応できるようにします。
異常が発生した場合にアラートを上げる監視システムや、異常を復旧させるエンジニアチームの人員確保などをする必要があります。

プロダクトやシステムによっては、上記で紹介した以外にもさまざまな点を考慮する必要があります。
では、個人開発をする場合は、どのような点を考慮するべきでしょうか？

## 個人開発のインフラで考慮するべき点

個人開発でプロダクトを作成する場合、以下の点に気を付けてインフラの設計をしましょう。
* 作りたいプロダクトの目的や仕様
* コスト
* その他はバランス良く

### 作りたいプロダクトの目的や仕様
個人開発において、作りたいプロダクトの目的や仕様をまずは決めましょう。
"どのようなプロダクトを作るのか"と、"目的"です。

目的は、趣味なのか、転職のポートフォリオ用なのか、収益のためなのかです。
### コスト
目的が決まれば、コストも検討できます。
例えば、"趣味だから最低限のコストに抑えたい"や"月5万円の売り上げがある想定だから月5,000円くらいは使える"などです。

### その他はバランス良く
個人開発の場合は、コストに見合ったインフラを用意するべきです。
しかし、コストがないからといってセキュリティが低すぎてもいけません。

ただ、パフォーマンスや可用性などを高くしようとしても、コストが掛かってしまいます。
コストの範囲内で収まるようにバランスよくシステム設計をしましょう。
個人のポートフォリオであれば、バックアップや冗長構成などは必要ありませんが、収益目的であれば必要になるかもしれません。作りたいプロダクトやコストに合わせて、考えてみましょう。

## 個人開発で使える低コストなインフラ
ここまで、個人開発のインフラで考慮するべき点について解説しました。
では、具体的にどのようなインフラを使えばよいのでしょうか？

個人開発で使えるものとしては、以下のようなものがあります。
* AWSやAzureなどのクラウド
* VercelやHerokuなどのホスティングサービス
* レンタルサーバー
* StudioやBubbleなどのノーコードツール

### AWSやAzureなどのクラウド
AWSやAzureで構築している方は多いと思います。
特に、学習目的やポートフォリオ作成のためにクラウドを使っている方が多い印象です。

AWSやAzureのメリットは、さまざまなサービスがあり柔軟なシステムを作成できる点です。私が運営しているInfraAcademyのLinuxシミュレーターはAWSで構築されています。

デメリットとしては、コストが予想以上に掛かる場合があります。クラウドで構築する前に、しっかりとコスト計算を行いましょう。しかし、無料枠などもあるので、有効的に使うとコストを低く抑えられます。
### VercelやHerokuなどのホスティングサービス
VercelやHerokuなどのホスティングサービスはVueやReactなどをデプロイする際に便利なサービスです。
GitHubとの連携も簡単で、簡単にCI/CDを構築することができます。

一部無料で使えるサービスも多く、コストを低く抑えることができます。
しかし、サーバーを柔軟にカスタマイズできないので、プロダクトの仕様によっては使えないものもあります。
以前、ChatGPTのAPIと連携したシステムを作成した際、APIの応答時間がサーバーのタイムアウトの時間を超えていたため、Vercelが使えず断念したという経験があります。
### レンタルサーバー
レンタルサーバーはXserverやさくらのレンタルサーバーといったものです。WordPressを簡単にインストールできるものが多く、ブロガーさんに重宝されています。
レンタルサーバーはクラウドやホスティングサービスよりも簡単にWebサイトを公開することができます。

コストは、月数千円から数万と幅広くあります。無料では使えないので、少しコストは掛かってしまいます。

### StudioやBubbleなどのノーコードツール
StudioやBubbleなどのノーコードツールでは、コードを書く必要なくWEBシステムを作ることができます。インフラについても、数クリックで簡単に公開することが可能です。
プロダクトをStudioやBubbleで作成する場合は、インフラは気にすることなく、プロダクト作りに集中することができます。

ただ、カスタマイズなどの自由度は下がったり、コストもある程度かかります。

今回紹介したインフラを使って、個人開発のインフラを設計してみましょう。今回紹介したものは一般的で良く使われるものをご紹介しました。最近では、さまざまなクラウドやホスティングサービスがリリースされています。ご自身が作りたいプロダクトやコストに合わせてインフラの選定をしましょう。


## その他よくある疑問
個人的に、さまざまな方からインフラについて質問をいただくのでよくある疑問をご紹介します。

### Q.インフラの構築方法が分からない
A.インフラ構築方法が分からない場合は、以下の3つをアドバイスしています。
1.インフラエンジニアにやってもらう(お金があれば)
2.ホスティングサービスやレンタルサーバーなど設定が簡単なものを使う
3.自分で勉強して構築する

早く構築したい方であれば、1か2を選びましょう。
学習目的も兼ねている方は、大変ですが、3を選びましょう。

### Q.どのくらいアクセス数があるか見込めないからサーバーの性能が決められない
A.個人開発の場合、最初の数ヶ月はアクセスはほぼありません。個人開発の場合、最低限サービスが動作するインフラを選定しましょう！
まずは、お客さまに使っていただき、収益が見込める、価値があると分かった場合にサーバーを増強しましょう。今後増強することを前提にインフラを構築すると良いでしょう。

### Q.インフラについて勉強したい
A.インフラについて勉強したい場合、InfraAcademyという学習サービスがおすすめです。(宣伝です笑)
Linuxのシミュレーターを使って、DNSサーバーやWebサーバーなどさまざまなサーバーをハンズオンで学習できます。インフラ構築に必要な知識を一通り学ぶことができます。
インフラについて相談したい方も是非ご利用下さい！

https://qiita.com/ryu235464345/items/54b29c56dd118d8ae4a0

## まとめ
今回は、個人開発におけるインフラ設計について解説しました。インフラ設計については、システムの要件や個人の力量、コストなどによってさまざまな設計が考えられます。
これが正解というものはなく、環境や状況に応じて、臨機応変にインフラを変えていく必要があります。
この記事が誰かの助けになれば幸いです。

また、インフラ設計についてはさまざまな考え方があると思います。ご意見、ご感想がある方はコメント欄に書いてください！ご批判も大歓迎です！