LoginSignup
1
3

【備忘録】PostgresSQL と Knexを使ったバックエンド開発の初期設定

Last updated at Posted at 2023-10-22

データベースを伴ったバックエンド開発・練習する際に、毎回
「アレ?なにターミナルに打ち込めばいいんだっけ?」ってなってしまうので、備忘録というかメモ
(ぶっちゃけ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でのことだけ書いてます

見にくいし読みにくいけど、自分メモメインだから自分しか読まない体で書いた。
すまんそ

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3