
手作業で組んだ家の防犯カメラを、Codexと作り直した話(前編)
はじめまして。これが僕の、noteでの初めての投稿です。
家の防犯カメラの録画サーバーを、AIエージェントのCodexと一緒に、まるっと作り直しました。このやり方にかなり感動したので、書いてみることにしました。
前編は、AIにどこまで任せるか、という線引きの話です。途中で、sudoのパスワードを渡そうとして止められたり、自分で自分を締め出したりもしています。
家のサーバーを手作業で育ててきた人や、AIエージェントに作業を任せてみたい人に向けた記事です。

手作業で継ぎ足してきた録画サーバー
家には、Reolinkのネットワークカメラがあります。もともと4台でしたが、1台が壊れて今は3台です。
録画は、小さなパソコン(ミニPC)で動くAgent DVRというソフトにお任せでした。
ミニPCは、GMKtecのNucBox5です。CPUはCeleron N5105で、メモリは8GB。録画用に、8TBのHDDをUSBでつないでいました。
外出先でも録画を見たい。そう思って、最初はshellスクリプトを自分で書きました。
Agent DVRが保存した動画を小さく変換して、Google Driveに置く。容量を見張って、あふれそうなら古いものから自動で消す。そんな仕組みです。
その後、Google Driveは卒業。VPNとNextcloudで、外から見られるようにしました。
VPNは、外から家のネットワークに安全に入る仕組み。Nextcloudは、自分で立てるファイル共有サービスです。
VPNのセキュリティチェックは、ときどき手でやっていました。
これでも、ちゃんと動いてはいたんです。記録を見ると、このパソコンは約2年、一度も止まらずに動いていました。
作り直す前に、まずCodexに今の状態を調べてもらいました。読み取りだけで、パスワードや録画の中身は見ない約束です。
返ってきた報告を読んで、ちょっと焦りました。
誰でも書き込める共有フォルダが残っていた
録画ソフトの画面が、必要以上に広い範囲から開ける状態だった(ほかの人に見れるリスク)
セキュリティの更新が、けっこう溜まっていた
録画にどれくらい容量が要るか、一度も計算していなかった
自分で作ったのに、いちばん中身を分かっていなかったのは僕でした。
Codexと壁打ちして決めたこと
新しい構成は、Codexと壁打ちしながら決めました。壁打ちは、相手に話しながら考えをまとめていくことです。
僕から伝えた希望は、こんな感じ。
Dockerで管理したい
人や車だけじゃなく、猫や犬、鳥も見分けたい
外出先のiPhoneから、安全に見たい
設定をGitHubで管理して、パソコンを替えても作り直せるようにしたい
AIに作業を任せつつ、危ないところは自分でOKを出したい
Dockerは、アプリを箱に詰めて、どのパソコンでも同じように動かす仕組みです。
猫の件は、わりと本気でした。カメラ本体のAIでは、猫をうまく拾えなかったんです。
録画ソフトは、Frigateに
Frigateは、AIで人や車、動物を見分けられるオープンソースの録画ソフトです。決め手は、この3つでした。
Celeron N5105に入っているGPUで、映像の処理とAIの判定ができる
人や車だけでなく、猫や犬、鳥も見分けられる
Dockerで動くので、設定ごと別のパソコンに持っていける
そもそも、この小さなパソコンで足りるのか。調べてもらうと、今の録画ソフトが使っていたCPUは、全体の1割ほどでした。余裕は十分です。
VPNは、自前のWireGuardに
前は、Tailscaleというサービスを使ってVPNにしていました。候補は、それを続けるか、OpenVPNか、自分で立てるWireGuardか。
Tailscaleは、ルーターの設定がいらなくて楽です。ただ、接続の管理はTailscale側のサービスに頼る形になります。
OpenVPNは高機能です。でも、家でスマホをつなぐくらいなら、そこまでの機能はいりません。
WireGuardは仕組みが小さくて、端末ごとに鍵を分けられます。スマホをなくしても、そのスマホだけ外せばいい。
相談した結果、全部を家の中で管理できる、自前のWireGuardにしました。Tailscaleは、家の回線の事情でWireGuardが使えなかったときの予備です。
持っていかないものも決めた
古い録画は残さない。Nextcloudとファイル共有も、新しい環境には持っていかない。パソコンとHDDは、防犯カメラ専用にします。
ただし、新しい仕組みが動くまで、古いほうは止めません。家の防犯カメラは、作り直している間も止められないので。
sudoのパスワードを渡そうとしたら、止められた
作業をCodexに任せるにあたって、僕はひとつ楽をしようとしました。
sudoのパスワードをファイルに置いて、Codexに読んでもらえばいいのでは、と。sudoは、管理者として実行するための権限です。
相談すると、パスワードをそのままファイルに置くのはやめよう、という話になりました。言われてみれば、たしかにそうです。
代わりに作ったのが、決まった作業だけをパスワードなしで実行できる専用の入り口です。できるのは、こういう作業だけ。
状態の確認
定期点検
設定のバックアップ
決まったサービスの再起動
確認の言葉を添えたときだけ、パソコンの再起動
好きなコマンドを打つことや、SSHやファイアウォールの設定を変えることはできません。ディスクの初期化もです。危ない作業は、僕が中身を見てから、自分で実行します。
作業を始める前に、Codexと一緒に、全体を23個のIssueに分けました。Issueは、GitHubの「やることリスト」の1件です。
1件ずつに、完了の条件と確かめ方、失敗したときの戻し方まで書いてあります。
セットアップも、1本の大きなインストーラーにはしませんでした。OS、Docker、セキュリティ、ログ、HDD、Frigate……と、小さなスクリプトに分けています。
こうしておくと、失敗したときに、どこで何が起きたかすぐ分かるんです。
自分で自分を締め出した
OSの入れ直しは、手を動かす作業なので僕の担当です。
このとき、録画用の8TBのHDDは、物理的に外してから作業しました。インストール先を間違えて消さないためです。単純ですけど、これがいちばん確実でした。
USBから起動しようとしたら、メーカーのロゴで止まったのも、ちょっとした洗礼です。電源を入れ直したら、あっさり起動しました。
本番の転び方は、そのあとでした。
SSHを、鍵でしかログインできない設定にした直後のことです。SSHは、ほかのパソコンから遠隔で操作する仕組み。鍵は、パスワードの代わりに使うログイン用のファイルです。
Windowsから、PuTTYというソフトで入ろうとしたら、入れない。「使える認証方法がない」という趣旨のエラーが出ました。
原因は単純で、PuTTY側に鍵を設定していなかったんです。サーバーはもうパスワードを受け付けないのに、僕は鍵を持っていない。鍵を置いたまま、玄関のドアを閉めたようなものでした。
これをきっかけに、SSHの設定を変えるときのルールができました。
今つながっているSSHは切らない
パソコンに直接キーボードをつないで操作できるようにしておく
別の接続で、鍵でログインできることを確かめる
確かめてから、古いログイン方法を止める
元に戻すためのスクリプトを、先に用意しておく
「設定ファイルの書き方が正しい」だけでは、完了ではない。実際にログインできて、はじめて完了です。
AIに家のサーバーを任せるときの決めごと
こうして決めたルールは、AGENTS.mdというファイルにまとめてあります。Codexが作業の前に必ず読むファイルです。
1つの作業は、こんな流れで進めました。
Issueで、目的と完了の条件を決める
小さなスクリプトを作る
CIで、書き方と安全の条件を確かめる
確かめたものを、本流(main)に取り込む
そのバージョンを、サーバーに置く
まず読み取りだけで、事前に確認する
危ない作業なら、直前に僕がOKを出す
サーバーに適用する
別の経路からや、再起動したあとにも確かめる
結果と戻し方を、Issueに書き残す
CIは、変更を取り込む前に、自動で検査してくれる仕組みです。
いちばん効いたのは、サーバーを手で直して終わりにしなかったことです。直したら、必ずスクリプトと手順書に戻す。そうすれば、次に作り直すときに同じところで転びません。
危ない作業のルールは、実際にはこう書いています。
## 危険操作
次の操作は、対象・影響・復旧方法を提示し、
ユーザーの明示的な承認を直前に得る。
- OS再インストール、ディスク初期化
- 再帰削除、既存データ上書き、録画削除
- SSH認証無効化、ファイアウォール有効化
- 再起動、停止、ファームウェア更新全部を自動にするより、戻せない作業の直前だけ人が判断する。家のサーバーなら、これくらいがちょうどよかったです。
同じところで止まっている人へ
家の中の仕組みを、AIエージェントで作り直すのは初めてでした。正直、めちゃくちゃ楽しかったです。
手作業で継ぎ足した仕組みがあって、中身をうまく説明できない。そんな人は、まず「今の状態を調べて」と頼むところから始めてみてください。読み取りだけなら、何も壊れません。
後編では、実際に動かしてみて分かったことを書きます。物干し竿と猫の話も出てきます。
僕の作業が、誰かのひらめきや参考になればうれしいです。
読んでいただきありがとうございました。役に立ったら、スキを押してもらえると励みになります。