【要約】GeminiとClaudeを行き来したらJSが死んだ|自作ツールを安全にVPS公開するまでの失敗全部 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が自作ツールをインターネットに公開する際、セキュリティ確保と機能維持の両立に直面した。具体的には以下の問題が発生した。
- ・VPNによるアクセス制限を試みたが、コンテナのネットワーク構造により接続に失敗した。
- ・Basic認証導入後、WebSocket接続が機能しないと誤認し、不要な除外設定を検討した。
- ・AIの使い分けにより、Jinja2のテンプレート内でエスケープ漏れが発生した。その結果、JSが実行不能となった。
// Approach
開発者は、ネットワーク層の複雑な制御を避け、アプリケーション層での確実な保護を選択した。以下の手法で解決を図った。
- ・Caddyを用い、Basic認証とHTTPSを組み合わせた全パス保護構成を採用した。
- ・Jinja2の
tojsonフィルタを使い、特殊文字を安全にエスケープした。 - ・上書き直前に日付付きコピーを作成する、自動バックアップ機能を実装した。
- ・
pyproject.tomlを活用し、ツールをCLIとしてパッケージ化した。
// Result
セキュリティと利便性を両立した、安定的な運用環境を構築した。以下の成果を得た。
- ・Basic認証により、WebSocketを含む全通信の安全な保護を実現した。
- ・JSのSyntaxErrorを解消し、デバイス間のリアルタイム同期を確立した。
- ・自動バックアップにより、誤操作によるデータ消失リスクを低減した。
- ・CLI化により、ターミナルからの高度な操作性を確保した。
Senior Engineer Insight
> AIとの協調開発における「コンテキストの断絶」という現代的なリスクを突いている。複数のLLMを使い分ける際、エスケープ処理等の境界部分の責任が曖昧になり、バグを誘発する。また、VPN制御よりCaddyによる認証の方が、コンテナ環境では運用コストが低く確実である。小規模なツールでも、バックアップとCLI化は運用の継続性を高める上で極めて重要である。