気象庁が観測している気温データをヒートマップで表示するだけのアプリを作ってみました。
https://heat-chronicle.koppepan.org

リポジトリはこちらです。 https://github.com/nkoguchi-dev/heat-chronicle
せっかくAWSで公開するところまできちんとやったのでメモを残しておきます。

なぜ作った?

過去に何かのニュースで過去100年のデータをヒートマップで表したという画像を見た記憶があり、自分の住んでいるところのデータも見てみたいと考えたのがきっかけでした。要するに模倣ですね。

また昨今のAIコーディングが非常に優れているために「有名サービスの自分専用カスタマイズ」のようなアプリケーションを作成して自分だけが楽しんで利用する、ということができるようになりました。Claude Coworkの発表が引き金となってIT企業の株価が暴落した、といったニュースが流れていたので実力を試してみたくなったというのが動機です。

どうやって作った?

作り方は現在では一般的と思われる方法で、Claude Coworkを使って仕様を詰めてClaude Codeで実装する形です。Coworkはまだ制限が多くファイルの削除ができないなどコーディングするには向いていない制約があったのでコード全体を把握したCoworkと一緒に設計を考えながら設計書を出力、Claude Codeで実装をする形にしました。感覚としては以前あったClaude Codeのプランモードでプラン部分だけOpusを使う形に近いです。

実装は全てお任せで自分では1行もコードを書いておらず、コードのチェックもコミット前におかしな箇所がないか軽く確認した程度です。そのためコード全体をきちんと確認すると改善すべき箇所は多くあると思いますが、自分で決めた大まかなコーディング規約が守られていれば細かい点は気にしなくてもよいのではないかと考えています。

実装から公開までにかかった時間はデータを表示するまで3時間程度、そこからAWSで動作できるまで1日、諸々の調整に半日ほどでした。AWSのリソース作成はTerraformで行ったため、こちらもClaude Cowork/Codeを利用して作っています。

振り返りと今後に向けて

技術選定

フロントエンド: Next.js(SPA)
バックエンド: Python + FastAPI
データベース: DynamoDB
AWSで動作させるためのランニングコストを限りなく低く抑えるためにLambda + DynamoDBで動作させるようにしています。
DynamoDBは初めてだったので少し学習する必要がありました。ほんの少しだけですが。

最初の設計と実際のズレ

ローカルでしか動かすつもりはなかったので細かいことは考えていなかったのですが、3時間程度とあまりに早くアプリケーションが動いてしまったので欲が出てAWSで稼働させるためにデータベースをDynamoDBに変更しています。
最初からDynamoDBを想定していればもっと早く作れたかもしれません。早すぎて恐ろしいですね。

上手くいった点

Claude Coworkができること/できないことを把握することができました。プログラムだけならClaude Codeだけで良いのでは?と考えていましたが、仕様を練る部分ではOpus4.6を利用したCoworkが相手の方が良いようです。Claude Codeとできることに差がなさそうですが何か違いがあるのでしょうか?
またEC2やECSではなくLambdaでバックエンドを動作させるという経験ができたのが大きいですね。
Pythonだと遅いのではないか、Rustで作る必要があるのではないかと考えながら実装を進めましたが動かしてみるとPythonでもあまり気にならない速度でした。コールドスタートは気持ち待たされますがこの程度なら許容範囲内ですね。目新しさや使ってみたい感からRustが選択肢に上がってしまうことが多いのですが、大半はPythonで何とかなる+何も問題がないという事も分かっているのでPythonで済ませることができたのは良かった点だと考えています。

次は改善したい点

DynamoDBは名前くらいしか知らない状態で把握できていなかったので、概要と簡単な利用方法くらいは把握しておけば良かったかなと少し後悔がありました。
その他は技術選定・実装期間・ランニングコストと及第点だったと考えています。

構成

  • フロントエンド: Next.js 16 / React 19 / TypeScript / Tailwind CSS v4
  • バックエンド: Python 3.12 / FastAPI
  • データベース: Amazon DynamoDB(ローカル開発は DynamoDB Local)
  • インフラ: AWS Lambda + API Gateway / S3 + CloudFront / Terraform
  • CI/CD: GitHub Actions / AWS ECR