今回はユーザー認証機能の実装に挑戦。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。果たしてこのままでよいのだろうか…。