0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[AI Coding Challenge] 今まで見た映画を記録できるアプリを作ってみた!

0
Last updated at Posted at 2025-12-01

はじめに

毎日ひとつ、AIアプリをつくる。
日替わりでテーマに沿って小さなアプリを開発します。Claudeで。

この記事は :calendar_spiral: AI Code Challenge Advent Calender 2025 の 2 日目の記事です!

:arrow_left: 1 日目の記事:ワインのメニューからおすすめを教えてくれるアプリを作ってみた!
  3 日目の記事:リアルタイム文字予測アプリを作ってみた! :arrow_right:

AI アプリ

概要

:speech_balloon:
今まで映画たくさん見てきたけど、何回くらい映画見に行ってるんだろう?

映画好きの私は、過去に、どのくらい映画を見ているのか日記につけてました。
日記もいいけどもっと気軽に記録をつけたいと思い、今までの映画の記録ができるアプリを作りたいと思いました :grinning:

AI 実装

Claude Desktopでプロンプトを与えて実装してもらいます。

:boy_tone1: プロンプト(普通に欲しいアプリだったのでプロンプトもAIに考えてもらった):

見た映画の記録、振り返りアプリを作る
記録機能のアイデア

  • 映画ログ:タイトル、鑑賞日、場所(映画館/配信サービス)、誰と見たか、気分タグを記録。
  • 感情スコア:「泣けた度」「笑った度」「ドキドキ度」を数値化して残す。
  • 一言日記:映画を見た直後の余韻を短くメモ。「エンドロールで泣いた」「ポップコーン食べすぎた」など。

:robot:

映画日記アプリを作成しました!
ブラウザのストレージに自動保存
アプリを閉じても記録は残ります

完成したアプリ

できました!

  :film_frames: 映画日記

:point_down: のリンクからアプリを確認できます:sparkles:

使い方:

  • 「新しい映画を記録」で映画日記を追加

こんなイメージです。

image.png

「+記録する」で新しい映画を追加します。

image.png
image.png

こんな感じで記録されます。

image.png

「年間まとめ」タブを開くとこんな感じです。

image.png
image.png
image.png
image.png

年間何本の映画を見たとか、感情ランキングとか、月別鑑賞数とか、いい感じのができました!

プログラム解説

ポイントとなるプログラムを解説します。

  const [formData, setFormData] = useState({
    title: '',
    date: new Date().toISOString().split('T')[0],
    location: '',
    locationType: 'theater',
    watchedWith: '',
    mood: [],
    genre: '',
    emotionScores: {
      cried: 5,
      laughed: 5,
      thrilled: 5
    },
    memo: '',
    posterColor: '#e74c3c'
  });

  useEffect(() => {
    loadMovies();
  }, []);

  const loadMovies = async () => {
    try {
      const result = await window.storage.get('movie-diary-data');
      if (result) {
        setMovies(JSON.parse(result.value));
      }
    } catch (error) {
      console.log('初回起動: データを初期化します');
    }
  };

  const saveMovies = async (updatedMovies) => {
    try {
      await window.storage.set('movie-diary-data', JSON.stringify(updatedMovies));
      setMovies(updatedMovies);
    } catch (error) {
      console.error('保存エラー:', error);
    }
  };
  • useSateとuseEffectで状態管理
const [formData, setFormData] = useState({
  title: '',
  date: new Date().toISOString().split('T')[0],
  location: '',
  locationType: 'theater',
  watchedWith: '',
  mood: [],
  genre: '',
  emotionScores: {
    cried: 5,
    laughed: 5,
    thrilled: 5
  },
  memo: '',
  posterColor: '#e74c3c'
});

useEffect(() => {
  loadMovies();
}, []);
  • window.storage を使ってブラウザに保存/読み込み(永続化)しています。
const loadMovies = async () => {
  const result = await window.storage.get('movie-diary-data');
  if (result) {
    setMovies(JSON.parse(result.value));
  }
  ...
};
  • JSON形式で映画データを保存します。
const saveMovies = async (updatedMovies) => {
  await window.storage.set('movie-diary-data', JSON.stringify(updatedMovies));
  setMovies(updatedMovies);
  ...
};

おわりに

  • 映画日記アプリは個人的に使っていこうと思います! :grinning:
  • データベースとかに保存はしていないので(ブラウザに保存している)、外部に保存できるようにしたいですね。(データベースは使いたくないからcsvとかファイル出力でもいいかも。エクスポート/インポート機能の追加。)

AI で楽しいアプリ開発を!!

この記事は :calendar_spiral: AI Code Challenge Advent Calender 2025 の 2 日目の記事です!

:arrow_left: 1 日目の記事:ワインのメニューからおすすめを教えてくれるアプリを作ってみた!
  3 日目の記事:リアルタイム文字予測アプリを作ってみた! :arrow_right:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?