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

今回はユーザー認証機能の実装に挑戦。bcryptモジュールのインストールでつまずきながらも、なんとかサインアップとログイン機能を実装できた一日でした。

ユーザー認証機能への第一歩

TAKA: 「よし、今日はユーザー認証機能を追加するぞ!AI老師さん、手順を教えてください!」

AI老師: 「まずはユーザーモデルの作成から始めるのじゃ。models/user.jsファイルを作成して…」

TAKA: 「はいはい、コピペすればいいんですよね?」

AI老師: 「待ちなさい。まずはモデルの構造を理解することが大切じゃ。usernameとpasswordのフィールドがあり…」

TAKA:(心の声)「めんどくさ…とりあえずコピペしちゃおう」

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
  username: { type: String, required: true, unique: true },
  password: { type: String, required: true },
});

const User = mongoose.model('User', userSchema);

module.exports = User;

bcryptとの格闘

TAKA: 「エラー出た!Cannot find module ‘bcrypt’って…AI老師さん、助けて!」

AI老師: 「npmでbcryptモジュールをインストールする必要があるのじゃ。ターミナルで以下のコマンドを実行しなさい:」

npm install bcrypt

TAKA: 「おっ、エラーが消えた!やっぱAI老師さんに聞くのが一番早いですね!」

AI老師: 「依存関係の管理も開発者として重要なスキルじゃ。package.jsonを確認する習慣をつけるとよい」

TAKA:(心の声)「そんな面倒なことしなくても、エラー出たら聞けばいいでしょ…」

認証機能の実装

TAKA: 「次は何をすればいいですか?」

AI老師: 「サインアップとログインのエンドポイントを実装するのじゃ。index.jsに以下のコードを追加…」

TAKA: 「はいはい、コピペコピペ…」

app.post('/api/users/signup', async (req, res) => {
  try {
    const { username, password } = req.body;
    const hashedPassword = await bcrypt.hash(password, 10);
    const user = new User({ username, password: hashedPassword });
    await user.save();
    res.status(201).send(user);
  } catch (error) {
    res.status(400).send(error);
  }
});

TAKA: 「よし、これでOK…って、まだあるんですか?」

AI老師: 「ログイン機能も必要じゃ。そしてフロントエンドのフォームも実装せねば」

TAKA: 「えぇ…めんどくさ…」

フロントエンド実装の苦労

TAKA: 「HTMLファイルも作るんですか…?」

AI老師: 「そうじゃ。signup.htmlとlogin.htmlの2つが必要じゃ」

TAKA: 「2つも!?…まぁ、コピペすれば終わりですよね」

AI老師: 「安易なコピペは危険じゃ。フォームの送信先やエラーハンドリングをしっかり理解して…」

TAKA: 「はいはい…(すでにコピペ開始)」

動作確認とトラブル

TAKA: 「よし、これで完璧…のはず」

AI老師: 「実際にサインアップとログインを試してみるのじゃ」

TAKA: 「おお!できた!AI老師さんすごい!」

AI老師: 「君自身が理解することが大切じゃ。セキュリティの観点から…」

TAKA:(心の声)「動いてるんだからいいでしょ…理解なんて必要ない」

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

TAKA: 「今日もAI老師さんのおかげで機能追加できました!やっぱりAIに頼るのが最強ですね!理解しなくても動けばOK!…でも本当はちゃんと勉強しないとまずいんでしょうけど…まぁいいや!」

実装自体は成功したものの、セキュリティや基本概念の理解を放棄し続けるTAKA。果たしてこのままでよいのだろうか…。

コメントを残す

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