メインコンテンツへスキップ
見出し画像

手作業で組んだ家の防犯カメラを、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の設定を変えるときのルールができました。

    1. 今つながっているSSHは切らない

    2. パソコンに直接キーボードをつないで操作できるようにしておく

    3. 別の接続で、鍵でログインできることを確かめる

    4. 確かめてから、古いログイン方法を止める

    5. 元に戻すためのスクリプトを、先に用意しておく

    「設定ファイルの書き方が正しい」だけでは、完了ではない。実際にログインできて、はじめて完了です。

    AIに家のサーバーを任せるときの決めごと

    こうして決めたルールは、AGENTS.mdというファイルにまとめてあります。Codexが作業の前に必ず読むファイルです。

    1つの作業は、こんな流れで進めました。

    1. Issueで、目的と完了の条件を決める

    2. 小さなスクリプトを作る

    3. CIで、書き方と安全の条件を確かめる

    4. 確かめたものを、本流(main)に取り込む

    5. そのバージョンを、サーバーに置く

    6. まず読み取りだけで、事前に確認する

    7. 危ない作業なら、直前に僕がOKを出す

    8. サーバーに適用する

    9. 別の経路からや、再起動したあとにも確かめる

    10. 結果と戻し方を、Issueに書き残す

    CIは、変更を取り込む前に、自動で検査してくれる仕組みです。

    いちばん効いたのは、サーバーを手で直して終わりにしなかったことです。直したら、必ずスクリプトと手順書に戻す。そうすれば、次に作り直すときに同じところで転びません。

    危ない作業のルールは、実際にはこう書いています。

    ## 危険操作
    
    次の操作は、対象・影響・復旧方法を提示し、
    ユーザーの明示的な承認を直前に得る。
    
    - OS再インストール、ディスク初期化
    - 再帰削除、既存データ上書き、録画削除
    - SSH認証無効化、ファイアウォール有効化
    - 再起動、停止、ファームウェア更新

    全部を自動にするより、戻せない作業の直前だけ人が判断する。家のサーバーなら、これくらいがちょうどよかったです。

    同じところで止まっている人へ

    家の中の仕組みを、AIエージェントで作り直すのは初めてでした。正直、めちゃくちゃ楽しかったです。

    手作業で継ぎ足した仕組みがあって、中身をうまく説明できない。そんな人は、まず「今の状態を調べて」と頼むところから始めてみてください。読み取りだけなら、何も壊れません。

    後編では、実際に動かしてみて分かったことを書きます。物干し竿と猫の話も出てきます。

    僕の作業が、誰かのひらめきや参考になればうれしいです。


    読んでいただきありがとうございました。役に立ったら、スキを押してもらえると励みになります。

    この記事が参加している募集

     
     
    札幌でシステムエンジニアをしています。Claude CodeやCodexと一緒に、家のサーバーや道具を作り直すのが最近の楽しみ。休みの日は渓流釣り。僕の作業が、誰かのひらめきや参考になればうれしいです。

    あなたへのおすすめ