'use strict'; const fs = require('fs'); const path = require('path'); const Sequelize = require('sequelize'); const basename = path.basename(__filename); const db = {}; // 必要な環境変数の確認 const requiredEnvVariables = ['DB_HOST', 'DB_PORT', 'DB_USER', 'DB_PASSWORD', 'DB_NAME']; requiredEnvVariables.forEach((envVar) => { if (!process.env[envVar]) { throw new Error(`環境変数 ${envVar} が設定されていません。`); } }); // Sequelizeの初期化(環境変数を使用) const sequelize = new Sequelize({ dialect: 'mysql', host: process.env.DB_HOST, port: process.env.DB_PORT, username: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, logging: false, // SQLログを非表示にする timezone: '+09:00' // JST (UTC+9) }); // データベース接続 sequelize.authenticate() .then(() => { console.log('データベース接続に成功しました。'); }) .catch(err => { console.error('データベース接続に失敗しました:', err); throw err; }); // モデルの読み込み fs .readdirSync(__dirname) .filter(file => { return ( file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js' && file.indexOf('.test.js') === -1 ); }) .forEach(file => { const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes); db[model.name] = model; }); // モデルの関連付け Object.keys(db).forEach(modelName => { if (db[modelName].associate) { db[modelName].associate(db); } }); // Sequelizeインスタンスのエクスポート db.sequelize = sequelize; db.Sequelize = Sequelize; module.exports = db;