カナダに来てからずっと欲しかったアプリを作りました!

CrossTimely | Schedule across time zones: https://crosstimely.com/
イベントページを作ってURLを共有→参加者が出欠を回答
というシンプルなアプリですが、以下の特徴があります。
- イベントページ作成時に世界各地の時間を確認できる
- 各参加者が自分のタイムゾーンで回答できる
- アカウント登録不要
私は TechQ という Discord コミュニティの運営メンバーをやっているのですが、運営メンバーが日本・カナダ・ヨーロッパにいるため、毎回日程調整が大変なことがこのアプリをリリースする大きなモチベーションになりました。
技術スタック
- React
- TypeScript
- Ruby on Rails (API)
- PostgreSQL
- TailwindCSS
開発方法
仕様書作成
まず初めに、マークダウンで仕様書を作りました。Codex の最新モデルはすぐ limit に達するので、主に GPT-6-Luma を使いつつ、最終レビューなど大事なところだけは GPT-6.1-Sol を使いました。(仕事では Claude Code、プライベートでは Codex を使ってます)
仕様書(抜粋)
## 3. ユーザーストーリー ### US-01 世界各地の時間を確認する VancouverにいるAさんは、アプリを開くと自分の都市が初期表示される。Tokyo、Berlin、Torontoを検索して追加し、それぞれの現在の日付・時刻を確認できる。次回アクセス時にも選択都市が復元される。 自分の都市は削除できず、別の都市への変更のみ可能。他都市は削除できる。 ### US-02 時差を比較しながら日程調整ページを作る AさんはWorld Clockから連続した操作で候補選択に進む。日付を移動し、1時間刻みの比較表示で各都市の時刻を確認しながら、8件の候補を選ぶ。必要な候補だけ分を調整できる。候補一覧を確認してEventを作成し、共有URLを取得する。 ### US-03 …(略) ## 4. 機能要件 ### FR-01 都市の検索・管理 **確定:** 自分の都市を含め1〜10都市、都市名検索、他都市の追加・削除、自分の都市の変更、都市の並び替え、localStorage保存。同一都市の重複追加は不可。同じタイムゾーンでも別の都市なら追加可能。World Clockの都市行と都市選択肢には、都市名と合わせて現在時刻および`UTC+9`のようなUTCオフセットを表示する。 自分の都市は削除不可で、変更のみ可能とする。自分の都市を空にする操作は設けない。 **基本設計方針:** 自分の都市を候補日時入力の基準都市とし、都市一覧は追加順で表示する。 …(略)
Tech スタック含め仕様書が完成してから開発に入りました。
コーディング
コーディングエージェントには Codex GPT-6-Luma Medium を使用しました。

このモデルは GPT 6 の中では一番安いモデルです。このモデルなら5時間ぶっ続けで使っても limit に達することはありません。
安くて速いですが、よく間違えます。自分が読めない言語では使わない方がいいかもしれません。
たとえば、マジックナンバーを使ったり過去のマイグレーションファイルを直接書き換えたりしました。レビュー必須です。
AGENTS.md
リポジトリには AGENTS.md を含めていませんが、私の AGENTS.md では以下のような指示をしています。コミットごとにコードを自分でレビューするためです。
- コード変更時はコミット計画を示し、承認後に実装開始すること
- コミット計画には、以下の内容を含めること
- 予定されているコミット順序
- 各コミットの提案されるコミットメッセージ全文
- 各コミットに含まれる内容についての簡単な説明
- 各コミットで追加、変更、または削除される具体的なファイルパス(該当する場合は、対応するテストファイルも含む)
- 必要に応じて、関連する関数、コンポーネント、またはセクションを特定し、各箇所で計画されている変更について簡潔に説明すること
1コミット分実装されたらレビュー(必要に応じて修正)後コミット→次のコミット分実装
という感じで進めています。
CI
GitHub Actions で push 時にテストや Lint を回すようにしています。

デプロイ
アプリは、全部 Render でデプロイしています。
- Frontend (React) -> Static Site
- Backend (Rails API) -> Docker
- DB -> Postgres
簡単でした。
GitHub 上で PR を main ブランチにマージすれば自動でデプロイされます。
デプロイ関係のメモはこっちにあります→アプリ作成メモ
今後
まだ対応言語が英語だけなので、まずは日本語対応させたいです。用途がグローバルなのでゆくゆくは他言語にも対応させていきたいです。
日本だけでも使えるのでよかったら使ってみてください。フィードバックもよろしくお願いします!







