


Tomoyaいよいよ実践編です。
今回は、Node.jsを使った簡単なプログラムを実際に動かし、パッケージを使いながら「本当に24時間動くのか」を検証していきます。
動かせた瞬間、24時間稼働するシステムを自分の手で作れるかもしれない、というワクワクが溢れてきました。意外なことに、前回のセキュリティ設定よりもスムーズに進めることができました。
「24時間、自分だけのシステムで何かを自動化する」という目標を持ちながら、まずは基礎・基本の学習から進めていきます。
今回のゴール
今回のゴールは、「ブラウザから自分のプログラムにアクセスできる状態を作ること」です。
ターミナルから必要な準備を整え、開発環境を作り、実際にブラウザからアクセスできるところまで検証していきます。
nvmを導入する
まずはnvmというパッケージマネージャーを、GitHub経由でインストールしていきました。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash ※nvmのインストール
source ~/.bashrc ※設定の反映
nvm --version ※nvmのバージョン確認
余談ですが、開発を進めていく上ではGitHubのアカウントを作っておくのがおすすめです。書いたコードを保存しておいたり、そこからそのままデプロイ(公開)したりすることもできます。
Tomoyanvm自体は、VPSに限らず普段のローカルPCでの開発でもよく使うものなので、実は今回が初めてではありませんでした。
勝手がわかっている分、理解しながらスムーズに進められたのは良かったです。
Node.js(LTS版)を導入する
続けて、先ほど入れたnvm経由でNode.jsの安定版(LTS)をインストールします。
nvm install --lts ※nvmでlts版を指定してインストール
node -v ※Node.js本体の確認
npm -v ※Node.js用のパッケージ管理ツールの確認
ここもスムーズに導入できました。ここまでの2ステップは、まっさらな状態のVPSに「プログラミング言語を動かすための土台」を用意する準備段階です。これを済ませることで、この先のシステム開発やツールの導入ができるようになります。
フレームワークやツールを載せていくための【地ならし】のようなものだと捉えてもらえればいいと思います。

ファイルを作り、コードを書いてみる
VPSの中に新しくファイルを作り、そこに実際のコードを書いていきます。
mkdir ~/first-app ※作業用フォルダの作成
cd ~/first-app ※作業用フォルダへの移動
nano index.js ※nanoを使って新しいファイルの作成
以下の内容を入力しました。
const http = require('http');
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
res.end('Node.js、動いています!\n');
});
const PORT = 3000;
server.listen(PORT, () => {
console.log(`サーバーが起動しました: http://localhost:${PORT}`);
});

ターミナルだけですべてを行う経験は初めてだったので、多少の戸惑いはありました。ただ、中身自体は普段ローカルPCで使っている統合開発環境(VSCodeやCursorなど)と同じなので、思ったよりスムーズに書くことができました。
逆に、普段使っているIDEがいかにユーザー目線で作られていたかがよくわかる体験でもありました。
見やすさ・視認性が良いと、何がどうなっているのかを理解しやすいのだと、比較して初めて実感できたのは良い経験でした。
ターミナルからもnanoエディタを使えば、メモ帳のような感覚でコードを書けるので、その点ではやりやすかったです。てっきりターミナルに直接コードを打ち込むものだと思っていたので、nanoエディタが開いたときは少し安心しました。
保存して動かしてみます。《保存(Ctrl+O )→ Enter → 閉じる(Ctrl+X)》
node index.js ※実行
「サーバーが起動しました」と表示され、画面はそのまま止まった状態になります。別のウィンドウから確認してみます。
curl http://localhost:3000 ※別ターミナルで確認
「Node.js、動いています!」と返ってくれば成功です。

ファイアウォールとパケットフィルターでポートを開放する
ここで、前回のセキュリティ編の知識がまさかこんな場面で活きるとは思っていませんでした。
①ufw(サーバー内のファイアウォール)で許可
sudo ufw allow 3000/tcp ※ufw(サーバー内のファイアウォール)でPortの許可
sudo ufw status ※確認
②Xserverの管理画面からも、パケットフィルターに3000番ポートを追加します。
実際にVPSをネットワークに繋げようとすると、ファイアウォールで許可を出し、パケットフィルターでもポートを解放しない限り接続できない、ということを身をもって体験できました。
普段何気なくPCでネットを使っていましたが、その裏側ではこうしたセキュリティの関門・関所のような構造が何重にもバリアを張っていて、接続を試みてくる通信を一つひとつ厳しくチェックしているのだと理解できました。

設定できたら、ブラウザで確認します。
http://サーバーのIPアドレス:3000
「Node.js、動いています!」が表示されれば成功です。
あえてSSHを切ってみる
Tomoya気になったことがあったので、実験してみました。
今、SSH接続中のターミナルを、雑に×ボタンで切ってしまったらどうなるのか?
結果、普通にサーバーも一緒に止まってしまいました。
これでは、PCの電源を切ったら終わってしまう普段のパソコンと同じ状態で、24時間動かし続けることはできません。そこで、次の段階に進みます。

pm2を導入する
pm2というツールを導入します。
npm install -g pm2 ※pm2をインストールする
cd ~/first-app
pm2 start index.js ※pm2経由でプログラムを起動する
Tomoyapm2という名前は今回初めて聞きました。
Node.jsの世界にはまだまだ自分の知らないツールがたくさんあるのだと思うと、興味が湧いてきます。
「今の自分にはできないかもしれない」と思っていたことが、実は既に誰かが作ったツールで解決できたりする——これは面白い発見でした。
今までなら自分でひたすら調べるしかなかったことも、今はAIが知るきっかけを与えてくれるので、世界中の人の学習の視野そのものが広がっているのだと感じます。

サーバーを再起動しても動き続けるか確認する
手順通りに進めます。
pm2 save ※今のプロセス状況を保存する
pm2 startup ※起動時にpm2自体も自動で立ち上がるようにする
表示されたコマンドをそのままコピーして実行し、サーバーを再起動します。
sudo reboot ※サーバーの再起動
再接続して確認します。
pm2 list ※pm2の状態を確認する
先ほどはSSHを切ったらサーバーも切れてしまう、という当たり前の状態でした。
今回はこの仕組みを使うことで、VPSとの接続を切っても、なんなら再起動しても、ブラウザ側では動き続けているかを検証しました。
Tomoya結果、再起動後もブラウザでちゃんと動いていることを確認できた瞬間は、とても嬉しかったです。
つまり、VPSへの接続を切っても、公開しているシステムはそのまま動き続けてくれる、ということです。
これができれば、24時間常駐するシステムを作れば、自分が寝ている間も絶え間なく動かし続けることができる——そう考えると、可能性が広がってワクワクしてきます。
よくある疑問
Q. これはホスティングのようなものですか?
はい、その理解で合っています。ただし、レンタルサーバーのような「ホームページを置くためのホスティング」とは少し性質が違います。
今回やったのは、自分でサーバーの中身(OS・実行環境・プロセス管理)を全部管理する「セルフホスティング」です。VercelやNetlifyのようなサービスは、こうした管理を代行してくれる分、自由度は下がります。
VPSは「何でもできる代わりに、何でも自分でやる必要がある」というのが一番の違いです。
Q. pm2は誰でも使える?無料?
はい、無料で誰でも使えます。オープンソースのツールで、npm install -g pm2だけで導入できます。
より高度な監視ダッシュボードなど一部の追加機能は有料プランもありますが、今回使ったような「常駐させる・自動起動させる」という基本機能は無料の範囲で十分です。
Q. ずっとサーバーが立ち上がっているということは、システムも動き続けることが可能ということ?
その理解で正しいです。むしろこれこそがVPSを使う一番の理由です。
定期的に何かをチェックするbot、常に待ち構えているAPI、決まった時間に処理を行うプログラムなど、「人が操作していない時間も動き続けてほしいもの」を実現できます。
次回作る予定の価格監視システムも、この仕組みの上に成り立ちます。
Q. 普通のローカルPCでも可能?
技術的には可能ですが、現実的ではありません。PCの電源を24時間つけっぱなしにする必要があることに加え、多くの家庭のネット回線は外部から直接アクセスできない構造になっており、VPSより複雑な準備が必要になります。
VPSは最初から「外部から直接アクセスできる住所(固定IP)」を持っている点が、学習コストの面でも大きなアドバンテージです。
Q. メリットとデメリットを教えて
| 内容 | |
|---|---|
| メリット | ・自分のPCの電源に左右されず24時間稼働する ・rootとして自由に何でも構築できる ・比較的安価に始められる |
| デメリット | ・セキュリティ対策・アップデートなど、すべて自分で管理する責任が発生する ・単純なサイト公開だけならFirebase Hostingなどの方が簡単な場合もある ・設定を誤ると自分自身がアクセスできなくなるリスクがある |
まとめ・次回予告
これで、シリーズ最初の記事で残していた「本当に24時間動くのか」という宿題に、自分の手を動かして答えを出すことができました。
次回は、いよいよこの土台の上に「仮想通貨の価格変動を監視し、条件を満たしたらDiscordに通知するシステム」を作っていきます。
仮想通貨についてはほとんど触れたことがありませんが、これも新しく知るきっかけとして挑戦していこうと思います。もちろん、その過程はこのブログで正直に共有していくので、シェアやコメントで広めてもらえると嬉しいです。

また、今回使っているVPSはXserver VPSです。この記事を読んで、実際に自分のPCからも試してみたいと思った方は、以下にリンクを貼っておきます。
「VPSとは」から「導入編」、「セキュリティ設定編」までの記事も公開しているのでこちらも合わせてご覧ください。




コメント