データベースを伴ったバックエンド開発・練習する際に、毎回
「アレ?なにターミナルに打ち込めばいいんだっけ?」ってなってしまうので、備忘録というかメモ
(ぶっちゃけGPTに聞けばいいんだろうけど、一応)
まず、管理者として実行したターミナルで
(VCStudioのターミナルだとたまにCONNECTIONだのあーだこーだエラー吐くので)
・PostgreSQLのセットアップ
psql -U ユーザー名でログインして
CREATE DATABASE データベース名;
データベースをデータベースを作成。
\l(エル)*たまにバックスペースじゃなくて¥とか出るけど気にするな!
でデータベースのリストを表示して確認。
・Knexのセットアップ:
mkdirとかカッコいい作り方あるけど、自分はいまだに右クリ=>新しいフォルダーを作る
パスをコピーするか手入力で、ターミナル(この際VSでも管理者ターミナルどちらでも)にて
cd プロジェクトディレクトリ
npm init -y
npm install express knex pg dotenv
をインストール
*ここで少々時間かかるので一息いれる
・ディレクトリ内のknexfile.js を作成・設定。
多分中こんな感じになってるから
module.exports = {
development: {
client: 'pg',
connection: {
host: '127.0.0.1'
user: 'ユーザー名',<=ここ
password: 'パスワード',<=ここ
database: 'データベース名'<=ここ
},
migrations: {
directory: './migrations'
}
}
};
を入力してあげれば、データベースと接続するんだけど、
後々本格的に外部サーバーにアップロードするさいに、このHost,User,Password書いたまんまアップするのは好ましくない(というかパスワードを全世界に公開するな)ので、
.envファイルを使うのもアリ
例
DB_HOST=127.0.0.1
DB_USER=ユーザー名
DB_PASSWORD=パスワード
DB_NAME=データベース
それでknexfile.jsの冒頭に
require('dotenv').config({path: "./.env.local",});とか入れとく
・マイグレーション
knex migrate:make テーブル名 でマイグレーションファイルを作成。
中はGPTさんの例だと
exports.up = function(knex) {
return knex.schema.createTable('users', (table) => {
table.increments('id').primary(); // 自動増加のID
table.string('name').notNullable(); // 名前カラム
table.string('email').unique().notNullable(); // ユニークなメールアドレスカラム
table.timestamps(true, true); // created_at と updated_at のカラムを追加
});
};
exports.down = function(knex) {
return knex.schema.dropTable('users'); // users テーブルの削除
};
になるんだけど
UpとDownのreturn 以降に色々とキーを書いていく。
ちなみに複数テーブル作る場合は、テーブルを書き終わった後に、さらに.createTableとつなげることできる。
マイグレーション実行するには
npx knex migrate:latest
*めったにないけど万が一ロールバック(なかったことにする)には
npx knex migrate:rollback
・Seedする場合
Knex seed:make 番号 タイトル
でつくってあげる。
タイトル前に番号入れるのは、一応見やすくするため
中身は(GPTさんありがとう)
exports.seed = function(knex) {
// Deletes ALL existing entries
return knex('users').del()
.then(function() {
// Inserts seed entries
return knex('users').insert([
{ id: 1, name: 'John', email: 'john@example.com' },
{ id: 2, name: 'Jane', email: 'jane@example.com' },
{ id: 3, name: 'Doe', email: 'doe@example.com' }
]);
});
};
で必ずオブジェクトのキーと値(NotNullで設定してるところ等)がキチンと入力されてるか、空欄でもいいかを注意しつつ入力
シード実行は
npx knex seed:run
後々プロジェクトをネット・サイバー空間にアップ・デプロイするときに
このマイグレーションとシードを実行とかいろいろめんどいことあるんだけど、
今はLOCALHOSTでのことだけ書いてます
見にくいし読みにくいけど、自分メモメインだから自分しか読まない体で書いた。
すまんそ