AI任せのWeb開発奮闘記【第74話】

レビュー機能との格闘

深夜のコーディング作業。レビュー機能の実装に取り組んでいるが、なかなか思うように進まない。

TAKA: 「えーと…レビュー機能ってどう実装するんでしたっけ…」

AI老師: 「まずは基本的なファイル構成を確認するのじゃ。models/review.js、routes/reviews.js、そしてindex.jsの内容を見せなさい」

TAKA: 「はい…こんな感じです」

// models/review.js
const mongoose = require('mongoose');

const reviewSchema = new mongoose.Schema({
    videoId: { type: mongoose.Schema.Types.ObjectId, ref: 'Video', required: true },
    user: { type: String, required: true },
    rating: { type: Number, required: true, min: 1, max: 5 },
    comment: { type: String, required: true }
});

AI老師: 「なるほど。モデルの定義は問題なさそうじゃ。次にルーティングの設定を見せなさい」

TAKA: 「routes/reviews.jsはこんな感じです…」

// routes/reviews.js
router.post('/', auth, async (req, res) => {
    const { videoId, rating, comment } = req.body;
    try {
        const review = new Review({
            videoId,
            userId: req.user._id,
            rating,
            comment
        });
        await review.save();
        res.status(201).send(review);
    } catch (error) {
        res.status(400).send(error);
    }
});

AI老師: 「ここに問題があるぞ。モデルでは’user’フィールドを定義しているのに、ルーティングでは’userId’を使っているではないか」

TAKA: 「あ…そうなんですね。でも、どう直せばいいんでしょう?」

AI老師: 「自分で考えてみるのじゃ。モデルとルーティングの定義を比較して、違いを見つけられないか?」

TAKA:(心の声)「めんどくさいなぁ…AI老師に答えを教えてもらえばいいのに…」

デバッグの試行錯誤

AI老師: 「では、Postmanを使ってテストしてみよう。まずはログインしてJWTトークンを取得するのじゃ」

TAKA: 「え?なんですかそれ…」

AI老師: 「認証用のトークンじゃよ。これがないとレビューを投稿できんのじゃ」

TAKA: 「はぁ…なんで認証とか必要なんですか…面倒くさい…」

AI老師: 「セキュリティは重要なのじゃ!誰でも自由にレビューを投稿できてしまったら、スパムだらけになってしまうぞ」

問題の特定

TAKA: 「とりあえずPostmanで試してみます…あれ?エラーが…」

Cannot POST /api/users/login

AI老師: 「ログインのエンドポイントが正しく設定されていないようじゃな。routes/users.jsの内容も確認する必要があるぞ」

TAKA: 「もう…なんでこんなに複雑なんですか…」

AI老師: 「Web開発では、一つの機能を実装するにも様々な要素が絡み合っているのじゃ。すべてAIに頼るのではなく、自分で理解する努力も必要じゃぞ」

TAKA: 「はい…分かりました…」(心の声:「いや、それが嫌だからAI使ってるんですけど…」)

【AI任せプログラマーTAKAの今日のひとこと】

TAKA: 「今日はレビュー機能の実装で苦戦しました。モデルとルーティングの設定の違いを見つけられたのは良かったけど、認証周りの設定で詰まってしまって…。AI老師には『自分で考えろ』って言われるし…。ま、気にせずこのままGo!」

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です