ゼロから aiaicursor.com まで
— AIアシスタントと一緒にサイトを立ち上げた記録

以前はホームページ制作会社に勤めており、HTMLでのページ作成やFTPでの公開、既存プログラムの設置は経験がありました。ただ、サーバーを自分で借りて運用したり、プログラムを自分で作ったりすることは初めて。AIアシスタント(Cursor)と一緒に、このサイトをゼロから立ち上げました。いまでは https://aiaicursor.com で世界中からアクセスできるサイトになっています。その一連のストーリーを、同じように挑戦したい人の参考になればと思い、記録として残します。

1. きっかけ:「情報量を確保する」方針

ChatGPT や Claude を日常的に使うようになり、「AIの情報をもっと手軽に届けたい」と考えました。基本的な方針は二つ。一つは、自動的に情報量を確保する(人の手をかけずにコンテンツが増える仕組み)。もう一つは、閲覧者がページのボリュームを作り上げていく(ユーザー参加型に近い形)。その手段として、RSS(ブログやニュースサイトが更新情報を配信する仕組み)でAI関連情報を自動収集する方式を採りました。プログラムを自分で書く経験はほとんどなかったため、Cursor(AIがコードを書いてくれるプログラミング用ソフト)を使い、「やりたいこと」を言葉で伝えて一緒に作っていく形にしました。

2. プログラム作成:一つずつ機能を積み上げる

最初はシンプルな構成から。「RSSを自動取得して保存する」「キーワードで検索する」という基本機能を、Python(プログラム言語)の Flask(Webサイトを作るための土台)で実装していきました。

  • 世界中のAI関連RSS(OpenAI、Google AI、朝日新聞テック&サイエンス、Cursor、GitHub、n8n など50件以上)を収集
  • 検索機能でキーワードにヒットする記事を表示
  • データは90日分だけ保持(古いものは自動削除)
  • AI回答や和訳機能のコードも入れてある(OpenAI API という外部のAIサービスとの連携)。ただし、APIキー(サービスを利用するためのパスワードのようなもの)をまだ取得しておらず、実際には試せていません

自分のPC上(ローカル)で動くところまででき、「これをもっと多くの人に使ってもらいたい」と思うようになりました。

3. サーバーを借りる:さくらのVPS

「サイトを公開するにはサーバーが必要」と教えてもらい、さくらのVPS(サーバーを借りられるサービス)を契約。OS は Ubuntu 24.04 amd64(サーバーでよく使われるLinuxの一種)を選択しました。FTPでの公開経験はありましたが、Linuxサーバーに直接接続して操作するのは初めてでした。

SSH(遠くのサーバーに安全にログインする仕組み)や パケットフィルター(不正なアクセスを防ぐための壁)など、一つずつ調べながら進めます。PowerShell から ssh ubuntu@サーバーのIP と打って初めてログインできたときは、少し感動したのを覚えています。

4. プログラムをサーバーに置く

FTPでファイルをアップロードする経験はありましたが、Linuxサーバーへは scp(SSH を使ってファイルをサーバーに送るコマンド)で、make-001 フォルダごと送り込みました。従来のFTP(ファイル転送の仕組み)ではなく、SSH 越しに転送する方式です。

サーバー側では、Python の venv(このプロジェクト専用の環境を分ける仕組み)を作り、pip install -r requirements.txt(必要な道具を一括で入れるコマンド)で必要なパッケージをインストール。最初は venv の作り方や ensurepip のエラーに戸惑いましたが、必要なパッケージを入れることで解決しました。

5. ブラウザで表示されるまで:いくつかの壁

プログラムを起動しても、最初はブラウザからアクセスできませんでした。「このページに到達できなかった」と表示される。原因を調べると、gunicorn(本番用のWebサーバーソフト)で 0.0.0.0(外部からもアクセスできるようにする設定)にバインド(プログラムを受け付ける窓口を開くこと)する必要があること、パケットフィルターで ポート5000(通信の窓口番号)を開ける必要があることがわかりました。

つながるようになって「RSS更新」ボタンを押すと、今度は Internal Server Error(サーバー側のエラー表示)。RSS取得に時間がかかりすぎて、gunicorn の タイムアウト(待ち時間の上限、当初30秒)に引っかかっていました。-t 600 でタイムアウトを10分に延長し、さらに和訳をスキップするオプションを追加して、数分で完了するようにしました。

6. ドメインとポート番号なしのURL

aiaicursor.com というドメイン(サイトの住所のようなもの)を取得し、DNS(ドメイン名をサーバーの住所=IPアドレスに変換する仕組み)でサーバーのIPを指定。ただ、最初は http://aiaicursor.com:5000 のようにポート番号を付けないとアクセスできませんでした。「:5000」なしで http://aiaicursor.com だけで開きたい。

そのために nginx(Webサーバーソフト)を導入。80番ポート(普通のWebアクセス用の窓口)で受け付け、裏側の5000番で動くプログラムに転送する「リバースプロキシ」(外から来たアクセスを裏のプログラムに渡す仕組み)を設定しました。これでポート番号なしでアクセスできるようになりました。

7. 「セキュリティ保護なし」を解消:HTTPS化

ブラウザのアドレスバーに「セキュリティ保護なし」と表示されるのが気になり、HTTPS(通信を暗号化した安全な接続)に対応することに。Let's Encrypt(無料で証明書を発行してくれるサービス)の無料 SSL証明書(「このサイトは本物です」と証明するもの)を certbot(証明書を自動で取得するツール)で取得。メールアドレスを入力し、数分で設定が完了しました。証明書は90日ごとに自動更新されるので、継続的なメンテナンスも不要です。

8. 24時間動かし続ける:systemd

いままで、SSH の画面を開いたまま gunicorn を起動していました。SSH を閉じるとプログラムも止まってしまう。サーバーを再起動したら、また手動で起動し直す必要がある。これは運用として現実的ではありません。

systemd(Linuxでプログラムを常駐サービスとして動かす仕組み)でサービスとして登録することで、サーバー起動時に自動でプログラムが立ち上がり、SSH を閉じても動き続けるようになりました。これで本当の意味で「公開」できたと思います。

9. 振り返り:できたこと・学んだこと

HTML・FTPの経験はありつつ、サーバー運用やプログラム開発は初めてという立場でも、AIアシスタントと対話しながら、一つのWebサービスをゼロから公開まで持っていくことができました。

壁にぶつかるたびに、「どうしたらいい?」とAIに聞き、一つずつ乗り越えました。完璧な知識がなくても、やりたいことを伝え、手順を教えてもらい、実行する。その繰り返しでここまでこれたのだと思います。

このサイト(AI情報 Stock 90 Days)は、そんな試行錯誤の末に生まれたものです。AIの情報を集め、検索できる場所として、これからも更新を続けていきます。

← プログラム構築の記録
← デプロイの記録
← ボタン1つデプロイの記録
← デプロイでまたハマった話
← ログイン設定の記録
← 改善記録
← ファイル紹介の使い方
← OGP・SEOの記録
← 統合ログインの設計・経緯
← Search Console・サイトマップ
← 環境変数・.env の管理
← Git 入門・インストール
← インストール後に Git で行う設定
← カード神経衰弱の記録
← 異世界シューティングの記録
← 異世界シューティングの難易度
← 異世界戦記(全画面・迷路レイアウト)の記録
← 複数人でのゲーム進行
← 異世界衰弱(不具合の修正)
← 異世界衰弱(機能別フローチャート)
← 異世界ポイントの活用について
← 異世界ポイント市場の実装記録