「放っておいても大丈夫」を作る ― バイブコーダーがVPSの見張り番を自作した話

「放っておいても大丈夫」を作る バイブコーダーがVPSの見張り番を自作した話

VPSでBotやアプリをいくつか動かすようになると、ふと不安になる瞬間があります。

「これ、今もちゃんと動いてるんだよね……?」というやつです。

今回は、その不安を解消するために、AIと相談しながら「見張り番」を作ってみた話をまとめます。

プログラミングの専門知識がなくても、AIと会話しながらアプリを作っている人(いわゆるバイブコーディング勢)に向けて書いているので、難しい言葉が出てきたら、その都度、簡単な補足を挟んでいきます!


目次

STEP0:きっかけは「これ、本当に動いてるんだっけ?」という不安 – はじめに

VPS上でDiscord BotやWebアプリをいくつか常駐させていると、ある日ふと気づきます。

「そういえば、あのBotちゃんと反応してるかな?」と。

Tomoya

見に行けば分かります。でも、毎日見に行くわけにはいきません。

なぜなら何のために自動化しているのかわからなくなります。

忙しい時期が続けば、1週間くらい放置してしまうこともあります。もし途中でエラーが起きて止まっていたら、気づくのはずっと後になってからです。

「自分が見に行かなくても、何かおかしくなったら向こうから教えてくれる」

Tomoya

そんな仕組みが欲しいと思ったのが、今回のきっかけでした。


STEP1:「あとから増やせる」土台にする、という考え方 – 意義を定める

最初に決めたのは、細かい機能よりも先に「土台の形」でした。

Tomoya

見張りたい対象は、これから増えていくかもしれません。

そのたびにコードをゴリゴリ書き直すのは大変なので

「設定ファイルを1つ追加するだけで、見張る対象を増やせる」

という作りにすることをAIに相談しながら決めました。

🔍ちょっと補足:設定ファイルって?

プログラムの中身(コード)を直接いじらなくても、「何を」「どういう条件で」動かすかを指定できる、テキストの命令書のようなものです。

今回の場合は「このアプリが生きているか、5分おきに見に行ってね」といった指示を、ファイル1つにまとめています。

この考え方にしておくと、あとで見張りたいものが増えても、コード自体はほとんど触らずに済みます。

バイブコーディングで進めていると、こういう「あとから拡張しやすい形」を最初に相談しておくと、後々かなり楽になると実感しました。


STEP2:作ってもらった仕組みのおおまかな中身 – システム詳細

キャップを被った3Dキャラクターの人物が画面の縁から覗き込んでいる様子
画面の向こう側から興味深そうにこちらを覗き込む、帽子を被った3Dキャラクターの表情です。

AIに実装してもらった仕組みは、大きく分けて2つの見張り方を持っています。

  1. 反応があるか見に行くタイプ:ブログやアプリに「元気?」と聞きに行き、ちゃんと返事があるか確認する
  2. 起動中かどうかを見に行くタイプ:Botのように、直接話しかける方法がないものは、サーバー側の管理ツール(pm2)に「今動いてる?」と聞きに行く

🔍ちょっと補足:pm2って?

VPS上でアプリを動かし続けるための管理ツールです。アプリが落ちたら自動で再起動してくれたりする、いわば「常駐アプリの管理人」のような存在です。

そして、通知を送るタイミングにも工夫を入れてもらいました。

「正常→異常」に変わった瞬間と、「異常→正常」に戻った瞬間だけ通知する、という形です。

毎回「今も元気です」と連絡が来ると、それはそれでうるさいので、変化があった時だけ教えてもらう形にしています。


STEP3:VPSの「今の状態」を先に確認しておく大切さ – 現状把握

Tomoya

コードができたら、すぐに動かしたくなります。

でも、その前に確認しておくべきことがありました。

「自分のVPSでは、実際どういう名前でアプリが動いているか」です。

AIが書いてくれたコードは、あくまで一般的な想定で作られています。自分のVPSでBotがどんな名前で登録されているか、どのポート番号(アプリごとの窓口番号のようなもの)を使っているかは、実際に確認しないと分かりません。

PM2のプロセス一覧画面でmonitor-engineなどのオンライン状態とリソース使用量を表示
PM2で管理されているアプリケーションプロセスの一覧と、システムリソースの使用状況です。

実際に確認してみると、Botの名前もポート番号も、想定通りで無事に一致していました。

拍子抜けするくらい何も問題はなかったのですが、これは「確認したから分かったこと」です。

もし確認せずにそのまま進めていたら、「なんで反応しないんだろう」と、見当違いのところで悩んでいたかもしれません。

「AIが書いたコードだから」と鵜呑みにせず、自分の環境に合わせて一度答え合わせをする一手間。

Tomoya

今回は結果的に杞憂でしたが、この一手間自体は省かない方がいいと感じた場面でした!


STEP4:一番つまずいたのは、実は「ファイルを送る」ところだった – 問題発生

ここまでは、実は思ったよりスムーズに進みました。

一番つまずいたのは、コードの中身ではなく、できあがったファイルをVPSに送るという、地味な作業でした。

「ログインした画面」で送ろうとしていた

ファイルを送るコマンド(scp)は、「自分のパソコンから、送りたい相手(VPS)へ」使うものです。

ところが最初、VPSにログインした後の画面でこのコマンドを打ってしまい、うまくいきませんでした。

Tomoya

今思えば当たり前なのですが、当時は「あれ、なんで動かないんだろう」としばらく悩みました。

🔍ちょっと補足:ログインって何のこと?

VPS(自分専用のサーバー)に、手元のパソコンから「入る」操作のことです。家の中(VPS)に入ってから、家の外にあるもの(自分のパソコンのファイル)を送ろうとしても送れない、というイメージです。

①:大文字・小文字ひとつで動かなくなる

ssh接続時に「Invalid argument」と出力されscp接続が切断されたエラー画面
ターミナル上でSSH/SCP接続時に発生した「Invalid argument」エラーログです。

次にぶつかったのは、こんなエラーでした。

port 22: Invalid argument

原因は、送り先の「窓口番号」を指定する部分を、小文字で書いていたことでした。似たコマンドでも、使う場面によって大文字・小文字が違う、というだけの話なのですが、見た目がほぼ同じなので、気づくまで地味に時間がかかりました。

②:名前が分からない、鍵が見つからない

その後も、こんなエラーが立て続けに出てきました。

Could not resolve hostname
Permission denied (publickey)

それぞれの原因

前者Could not resolve hostname

コマンドの見本にあった「〇〇の部分」を、そのまま実際の値に書き換えずコピーしてしまっていたのが原因でした。

後者 : Permission denied (publickey)

普段のログインでは自動的に使われていた「鍵」(本人確認用のファイル)が、今回のコマンドの書き方だと見つけてもらえなかった、というものでした。

🔍ちょっと補足:鍵(公開鍵認証)って?

パスワードの代わりに、手元のパソコンに保存された特別なファイルを使って本人確認する仕組みです。安全性は高いのですが、「そのファイルがどこにあるか」を正しく伝えられないと、今回のように弾かれてしまいます。

エラーメッセージを1つずつ読みながら、「今度は何が違うんだろう」と原因を探っていく作業は、正直かなり地味です。

ただ、1つ分かるたびに「なるほど、そういうことか」と腑に落ちていく感覚がありました。

Tomoya

振り返ってみると、今回いちばん学びが多かったのはここでした。


STEP5:ちゃんと動くか、あえて壊してみる – 確認と検証フェーズ

ファイルを送り終えて、設定を自分の環境に合わせたら、いきなり常駐させず、まず手動で動かしてログを確認しました。エラーが出ていないこと、見張りたい対象がちゃんと表示されていることを目で見て確認してから、常駐する仕組み(pm2)に登録します。

Tomoya

そして最後に、一番大事な確認をしました。

わざと見張り対象を止めてみるというテストです。

Tomoya

止めてしばらく待つと、Discordにこんな通知が届きました。

🚨 異常を検知しました
Tomoya

これが届いた瞬間、「あ、ちゃんと機能してる」と、初めて実感が持てました!

その後、止めていたものを元に戻すと、今度はきちんと「復旧しました」という通知も届き、一通りの動きを確認できました。

監視BotからのDockerコンテナ異常検知とHTTP 200による復旧通知画面
チャットツール上で監視Botがサービスの異常検知と、その後の正常復旧を通知している画面です。

🔍ちょっと補足:Discordの通知(Webhook)って?

あるサービスで何かが起きた時に、別のサービス(今回はDiscord)へ自動でメッセージを送る仕組みです。設定さえしておけば、スマホの通知のように知らせてくれます。


STEP6:これからのこと

今回作ったのは、派手な機能ではなく、地味な「見張り番」です。でも、これがあるとないとでは、VPSに対する安心感がまったく違います!

振り返ると、一番のつまずきポイントは設計でも実装でもなく、ファイルを送るという、ごく基本的な部分でした。

AIと一緒に仕組み自体はスムーズに作れても、こういう地味な足元の部分でつまずくのが、バイブコーディングのリアルなところだと思います。

この見張り番の仕組みは、今後も土台として少しずつ使い道を広げていく予定です。まずは、VPSの安心感を底上げする一歩として、今回はここまでにしたいと思います。


この記事のQ&A

n8nのような自動化ツールや、パソコン内で動くAIモデルは使わなかったの?

はい、あえて使いませんでした。新しいツールを覚える手間より、すでに使い慣れているpm2だけで完結させる方が、今の自分には合っていると判断したためです。

pm2の「online」表示だけでは何が分からないの?

アプリが起動していることしか分かりません。中の処理がちゃんと動いているか、外部とうまく通信できているかまでは、この表示だけでは分からないのです。

なぜ通知先にDiscordを選んだの?

元々Botの通知先として使っていて慣れていたのと、設定が手軽だったためです。他の通知サービスに変えることもできます。

「放っておいても大丈夫」を作る バイブコーダーがVPSの見張り番を自作した話

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

始めまして。このブログを運営するTomoyaです。
未経験個人開発者。AI×個人開発(Vibe Cording)で学習して参入してくれる人が増えて広がっていくと良いなと思って始めました。

実際に作成→デプロイ(公開)→運営を行ってそれについての問題や疑問を記録していきます。
また行っていく上で内容(セキュリティ・制限など)にもこだわっていきたいなと思っています。

コメント

コメントする


目次