「余ったPCパーツで、自分だけの最強サーバーが作れたら最高じゃないか?」
先日、友人からパーツを譲り受けたことで、偶然にも実質0円でハイスペックな自作PCが1台組み上がりました。
なおくん今契約してる月額数千円のVPS、スペック不足でアプリが遅いんだよな…。このPCをサーバーにすれば、コストも浮くし爆速になるのでは…?
こんな夢のような計画から、私の「自作PC・VPS化計画」は始まりました。サーバーOSをインストールし、ネットワーク設定を学び、完璧な環境を構築。しかし、その先には全く予想外の「巨大な壁」が待ち受けていたのです…。
本記事では、私が体験した自作PCのサーバー化挑戦の全記録を、技術的な解説を交えながら赤裸々に語ります。そして、多くの人が見落としがちな自宅サーバー構築の致命的な落とし穴について、私の失敗談から学んでいただければ幸いです。
この記事を読み終える頃には、あなたは自宅サーバーの夢と現実を知り、同じ轍を踏むことなく、より賢明な選択ができるようになっているはずです。
- 余った自作PCをサーバーにする具体的な計画と手順
- VPS、レンタルサーバー、自宅サーバーの根本的な違い
- Webサーバー公開に必要なネットワークの仕組み(IPアドレス、DNS、ポート開放)
- 私が直面した、自宅サーバー化を阻む「CGNAT」という壁の正体
- 挑戦が失敗に終わっても、そこから得られた学びと次のステップ
発端:月額数千円のVPSより高性能な「0円PC」が爆誕


先日、私は1台の新しいPCを組み上げました。 友人がPCを新調するとのことで、これまで使っていたパーツをいくつか譲り受けたのです。それと、私の手元で眠っていたパーツを組み合わせ、新たな自作PCが誕生しました。



すでにメインで使ってるWindows11 ProのPCがあるし、デスクトップ2台もどう使い分ければいいんだ…?
そう、デスクトップPCは1台で十分。この新しいPCをどう活用すべきか…と思案していたところ、ふとある問題を思い出しました。 現在契約しているVPS(仮想専用サーバー)で動かしている自作Webアプリが、スペック不足でどうにも動作が遅いのです。
ここで、契約中のVPSと、今回「実質0円」で組み上がったPCのスペックを比較してみましょう。
| 項目 | 契約中のVPS | 今回の自作PC |
|---|---|---|
| CPU | 4コア(vCPU) | Ryzen7 3700X(8コア16スレッド) |
| メモリ | 4GB | 48GB |
| ストレージ | NVMe SSD 150GB | NVMe M.2 SSD 1TB |
| 費用 | 月額1,000~2,000円 | 0円 |



すでにメインで使ってるWindows11 ProのPCがあるし、デスクトップ2台もどう使い分ければいいんだ…?
この圧倒的なスペック差を見て、私は決意しました。
「そうだ、この自作PCを自分専用のVPSサーバーにしてしまえば、月額料金も節約できて、アプリもサクサク動く。一石二鳥じゃないか!」
こうして、私の壮大(?)な「自作PC・VPS化計画」は幕を開けたのです。
そもそもVPSとは?レンタルサーバーや自宅サーバーとの違い
計画を進める前に、まずは「VPS」という言葉について、少しだけおさらいしましょう。サーバーにはいくつかの種類があり、それぞれに特徴があります。
簡単に言うと、VPS(Virtual Private Server)は、1台の物理的なサーバーを、ソフトウェアを使って仮想的に複数に分割し、それぞれを「あなただけの専用サーバー」のように使えるサービスです。
他のユーザーの影響を受けにくく、管理者権限(root権限)があるのでOSやソフトウェアを自由にインストールできるのが大きな特徴です。
それぞれのサーバー形式メリット・デメリット比較
| サーバー形式 | メリット | デメリット | こんな人におすすめ |
|---|---|---|---|
| 共用レンタルサーバー | ・安い ・管理が楽 | ・自由度が低い ・他ユーザーの影響を受けやすい | ブログ初心者、webサイト運営が目的の人 |
| VPS | ・自由度が高い ・コスパが良い | ・サーバー管理の知識が必要 | webアプリ開発者、自分だけの環境を構築したい人 |
| 専用サーバー | ・高性能 ・自由度が最高 | ・非常に高価 ・高度な管理知識が必要 | 大規模サービスを畝井する企業 |
| 自宅サーバー | ・初期投資のみ ・高性能 ・完全に自由 | ・電気代や回線費がかかる ・セキュリティ管理が自己責任 | 探究心旺盛な人(俺)、究極の自由を求める人(俺) |
今回私がやろうとしているのは、この「自宅サーバー」を構築し、VPSのように使おうという試みです。
デメリットとして電気代と回線費がかかりますが、実家なので電気代は自己負担0円、回線も専用回線ではなく自宅の回線を利用します。
今回目指す「自分専用VPS」の構成と技術選定の理由


さて、自宅サーバーを構築するといっても、ただPCにOSを入れれば終わりではありません。Webアプリを動かすためには、いくつかのソフトウェアを適切に組み合わせる必要があります。
OS:なぜ「Ubuntu Server」を選ぶのか
サーバーの土台となるOSには、Ubuntu Serverを選びました。 理由はシンプルで、以下のメリットがあるからです。
- 無料: 個人開発において、コストがかからないのは最大の正義です。
- 情報量の多さ: 世界中で最も使われているサーバーOSの一つなので、トラブルが起きても検索すれば大抵の解決策が見つかります。
- 安定性と実績: 長年にわたり、多くの企業や開発者に支持されてきた実績があります。
サーバー用途なので、GUI(グラフィカルな操作画面)がなく軽量な「Server」版を選択します。
Webアプリ:なぜ「Python + Flask」なのか
私は生粋のPythonプログラマーなので、Webアプリも当然Pythonで開発します。フレームワークにはFlaskを採用しました。
PythonのWebフレームワークには「Django」という有名なものもありますが、個人で小規模なアプリを作る私にとっては、最低限の機能で軽量かつ自由度の高いFlaskが最適なのです。最近では「FastAPI」も人気ですが、文法がFlaskと似ているため、Flaskが使えれば応用が効きます。
サーバー構成:なぜ「Nginx + Gunicorn」が現代の主流なのか
Flaskで作ったWebアプリをインターネットに公開するためには、「Webサーバー」と「WSGIサーバー」という2つのソフトウェアが必要です。
簡単に言うと、Webサーバー(英語話者)が外部からのリクエストを受け取り、WSGIサーバー(通訳)がそれをPython製のFlaskアプリ(日本語話者)が理解できる形に変換して橋渡しをします。この連携プレーによって、Webアプリは動作するのです。
この組み合わせにはいくつか選択肢がありますが、今回は「Nginx + Gunicorn」という構成を選びました。これが現代において最も人気があり、バランスの取れた構成だからです。
| 構成 | メリット | デメリット |
|---|---|---|
| Nginx + Gunicorn | ・パフォーマンスが高い ・設定がシンプル | ・Apachよりは機能が少ない |
| Nginx + uWSGI | ・さらに高パフォーマンス ・柔軟な設定が可能 | ・設定が複雑で上級者向け |
| Apache + mod_wsgi | ・設定の柔軟性(.htaacess) ・伝統的な実績と安定性 | ・Nginxに比べパフォーマンスで劣る |
個人開発でシンプルかつ高性能を目指すなら「Nginx + Gunicorn」が最適な選択と言えるでしょう。
自宅サーバー公開に必須!ネットワークの「住所」の仕組み


サーバーの構成が決まったら、次はそれを「世界中からアクセス可能」にするためのネットワーク設定について理解する必要があります。ここが自宅サーバー構築の肝であり、少し複雑な部分です。
グローバルIPとローカルIP:家の外の住所と部屋番号
IPアドレスには大きく分けて2種類あります。
- グローバルIPアドレス: インターネットの世界における、あなたの家(ルーター)の世界で一つだけの住所です。プロバイダーから割り当てられます。
- ローカルIPアドレス: あなたの家の中だけで使われる住所です。Wi-Fiに接続されたPCやスマホ、ゲーム機など、一つ一つの機器に割り当てられます。いわば「リビングのPC」「寝室のスマホ」といった部屋番号のようなものです。
外部の人があなたのサーバーにアクセスするには、まず「グローバルIPアドレス」を頼りにあなたの家までたどり着き、そこから特定の「ローカルIPアドレス」を持つサーバーPCに繋いでもらう必要があります。
ドメインとDNS:インターネット世界の「表札」と「電話帳」
「123.45.67.89」のような数字の羅列であるIPアドレスは、人間には覚えにくいですよね。そこで登場するのがドメイン(例: google.com)です。これはIPアドレスに付けられた、分かりやすい「表札」のようなものです。
そして、そのドメイン名とIPアドレスを結びつけて管理しているのがDNSサーバーで、インターネット世界の「電話帳」の役割を果たしています。
ポート開放:特定の通信だけを通す「専用窓口」
あなたの家(ルーター)には、外部からの通信を通すためのドア(ポート)がたくさんあります。セキュリティのため、普段これらのドアは固く閉ざされています。
Webサイトの閲覧に使われる通信(HTTP/HTTPS)は、通常80番や443番のポートを通ります。自宅サーバーを公開するには、ルーターに「80番ポートに来た通信は、サーバーPC(ローカルIP: 192.168.1.10など)に繋いでください」と設定してあげる必要があります。これをポート開放(ポートフォワーディング)と呼びます。
固定IPアドレス:サーバーの住所を固定する理由
通常、PCやスマホのローカルIPアドレスは、ルーターの再起動などで変わってしまうことがあります。サーバーの住所が変わってしまうと、ポート開放の設定が無意味になり、外部から誰もたどり着けなくなってしまいます。
そうならないために、サーバーPCのローカルIPアドレスは「常にこの番号(例: 192.168.1.10)を使う」というように固定しておく必要があります。
いざ実践!自作PCにサーバーOSをインストール


理論はここまで。いよいよ実践です!
まずは公式サイトからUbuntu ServerのISOイメージファイルをダウンロードします。そして、「balenaEtcher」のようなツールを使って、余っていたmicroSDカードにイメージファイルを書き込みます。
作成したmicroSDカードを自作PCに接続し、そこから起動します。あとは画面の指示に従って、対話形式でインストールを進めるだけ。非常に簡単です。
サーバー構築とポート開放、そして運命のアクセス確認
OSのインストールが無事完了。ここからは、私のメインPCからSSHという機能を使って、サーバーPCに遠隔で接続して作業を進めます。
SSHで接続し、各種ソフトウェアをインストール
まずは、以下のコマンドで必要なソフトウェアをインストールしていきます。
# パッケージリストを更新
sudo apt update
# NginxとPythonをインストール
sudo apt install nginx python3-pip python3-venv -y
# Gunicornをインストール
pip install gunicorn
次に、動作確認用の簡単なFlaskアプリ (app.py) を作成します。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, My VPS World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)そして、サーバーのローカルIPアドレスを192.168.1.50に固定する設定も、yamlファイルを編集して完了させました。
Flaskアプリを起動し、ルーターのポート開放設定を行う
サーバー側でFlaskアプリを起動し、準備は万端。 最後に、自宅のルーターの設定画面にアクセスし、ポート開放(仮想サーバー)の設定を行います。
「外部からの80番ポートへのアクセスは、内部のIPアドレス192.168.1.50の80番ポートへ転送する」という設定を追加しました。



よし、これで完璧だ!自分のグローバルIPアドレスにアクセスすれば、世界中どこからでも”Hello, My VPS World!”が見えるはず…!
ローカル接続は成功、しかし外部からは…
期待に胸を膨らませ、まずはスマホをWi-Fiに繋いだ状態(ローカルネットワーク内)で、サーバーのIPアドレスにアクセス。
…表示された!「Hello, My VPS World!」 サーバーは正常に動いています。
次に、スマホのWi-Fiを切り、モバイル回線(外部ネットワーク)から、我が家のグローバルIPアドレスにアクセスします。



さあ、感動の瞬間だ…!
…しかし。 いくら待っても、ページは表示されません。「このサイトにアクセスできません」という無情なメッセージが表示されるだけです。
あれ…?設定ミスかな?
その後、ルーターの設定を見直し、サーバーのファイアウォールを確認し、考えられる全ての試行錯誤を繰り返しましたが、結果は同じでした。
巨大な壁「CGNAT」とは?自宅サーバー化の夢、破れる


万策尽きた私は、途方に暮れながら原因を調べていました。 そして、ある一つのキーワードにたどり着きます。
我が家の回線は「CGNAT」だった
調査の結果、私が契約しているプロバイダー「eo光」のインターネット接続サービスが、CGNAT(キャリアグレードNAT)という仕組みを採用していることが判明しました。そして、このCGNATこそが、外部からアクセスできない全ての元凶だったのです。
CGNATの仕組みと、なぜ外部からアクセスできないのか
通常、グローバルIPアドレスは各家庭に一つずつ割り当てられます。しかし、IPアドレス(特にIPv4)は世界的に枯渇しており、数が足りません。
そこで登場したのがCGNATです。 これは、プロバイダー側で一つのグローバルIPアドレスを、複数の契約者(家庭)で共有する技術です。
例えるなら、巨大なマンション(プロバイダー)全体で、一つのポスト(グローバルIPアドレス)を共有しているような状態です。 この状態では、外部から「マンション宛」に手紙を送っても、どの部屋の住人(契約者)に届けたいのか、マンションの管理人は判断できません。
これと同じ理由で、CGNAT環境下では、グローバルIPアドレスを指定して特定のサーバーにアクセスすることが、原理的に不可能なのです。
「そんな…、サーバーのスペックでも、設定でもなく、まさか大元のネット回線が原因だったなんて…。」
ちなみに、調べてみると、月額+4,000円ほどの追加料金で固定グローバルIPアドレスを契約できるオプションもあるようでした。しかし、月額料金を節約するために始めた計画で、逆にVPSより高い料金を払うのは本末転倒です。
こうして、私の「自作PC・VPS化計画」は、夢と散ったのでした。
まとめ:挑戦は失敗した。しかし無駄ではなかった
今回の挑戦を改めて振り返ります。
- 余った自作PCパーツで、高性能なサーバーPCを構築。
- 月額料金節約のため、VPSの代わりに自宅サーバー化に挑戦。
- Ubuntu Server, Nginx, Gunicorn, Flaskで環境を構築。
- ポート開放など、全てのサーバー設定は完璧だった。
- しかし、契約プロバイダーが「CGNAT」だったため、外部からのアクセスは不可能だった。
結論として、Webサーバーを自宅で公開するという夢は叶いませんでした。 しかし、この挑戦は決して無駄ではありませんでした。IPアドレスの仕組み、ポート開放、サーバー構築の一連の流れ、そして何よりCGNATという現代のインターネット事情について、身をもって学ぶことができたからです。



これから自宅サーバーに挑戦しようと考えているあなた。まずはご自身のプロバイダーがCGNAT環境でないか、確認することから始めてみてください!
ちなみに、この高性能サーバーは今、外部公開が不要なDiscordのBotを動かしたり、定期的にデータ処理を行うスクリプトの実行環境として、元気に第二の人生を歩んでいます。これはこれで、アリなのかもしれません。
結局のところ、手軽さと確実性を求めるなら、やはり専門のVPSサービスを利用するのが最良の選択肢と言えそうです。
