はじめに
データベースとWebアプリケーションの連携について学ぶため、PostgreSQLとNode.js、Expressを使って従業員管理システムのREST APIを構築してみました。本記事では、環境構築から実際のAPI作成まで、初心者の視点で学んだことをまとめます。
今回作成したもの
- PostgreSQL 17 を使ったデータベース
- Node.js + Express によるREST APIサーバー
- Sequelize を使ったORM実装
- CRUD操作 (Create, Read, Update, Delete) の完全実装
環境構築
PostgreSQLのインストール
Windows環境では、wingetを使って簡単にインストールできました
winget install PostgreSQL.PostgreSQL.17
winget install PostgreSQL.pgAdmin
ポイント:
- PostgreSQLはWindowsサービスとして自動起動
- pgAdminでGUI管理が可能
- 初期設定でパスワードの設定が必要
Node.js環境の準備
プロジェクトの依存関係:
{
"name": "intro-sq",
"dependencies": {
"express": "^4.18.2",
"pg": "^8.16.3",
"sequelize": "^6.37.7"
}
}
学んだこと:
- npmパッケージ名は小文字とハイフンのみ使用可能
introSQ
→intro-sq
への変更が必要だった
データベース設計
employeeテーブル
CREATE TABLE employee (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
tel TEXT
);
特徴:
id
:自動採番の主キーname
:一意制約付きの必須項目tel
:NULL許可の電話番号
アプリケーション構成
ディレクトリ構造
introSQ/
├── app.js # メインアプリケーション
├── routes/
│ └── index.js # APIルーティング
├── app/
│ ├── db/
│ │ ├── db-config.js # DB接続設定
│ │ └── db-client.js # CRUD操作
│ └── model/
│ └── employee.js # Sequelizeモデル
└── package.json
API エンドポイント
Method | URL | 機能 |
---|---|---|
GET | /employee/find |
全従業員取得 |
POST | /employee/register |
新規登録 |
PUT | /employee/update |
情報更新 |
DELETE | /employee/remove |
削除 |
実装のポイント
1. Express アプリケーションの基本構造
var express = require('express');
var app = express();
// JSONパーサーミドルウェア
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
// ルーティング設定
app.use('/', indexRouter);
// サーバー起動
app.listen(3000, function() {
console.log('Server is running on port 3000');
});
2. Sequelizeモデル定義
const employee = dbConfig.define('employee', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: Sequelize.STRING
},
tel: {
type: Sequelize.STRING
}
}, {
timestamps: false,
freezeTableName: true
});
3. REST APIの実装
// GET - データ取得
router.get('/employee/find', function(req, res, next) {
const query = req.query;
dbClient.find(query, function(result) {
res.json(result);
});
});
// POST - データ登録
router.post('/employee/register', function(req, res, next) {
const addData = req.body;
dbClient.register(addData, function(result) {
res.json(result);
});
});
フレームワーク vs ライブラリの理解
フレームワークとライブラリの違いについては、理解があやふやな部分がありましたが、開発を通して両者の違いを理解することができました。
また、ランタイム環境についても理解を深めることができたので、3者の違いをまとめておきます。
フレームワーク
- Express: アプリケーションの構造を提供
- フレームワークが主導権を握る
- 決められたルールに従ってコードを配置
ライブラリ
- Sequelize: 特定機能を提供
- 開発者が必要時に呼び出す
- 使用方法の自由度が高い
ランタイム環境
- Node.js: JavaScript実行環境
- ブラウザ外でのJavaScript実行を可能に
学習成果
技術的な理解
- PostgreSQL: オープンソースのリレーショナルデータベース管理システム
- Node.js: JavaScriptでサーバーを構築するための実行環境
- Express: Node.jsのための軽量なWebアプリケーションフレームワーク
- Sequelize: Node.js用のORM(DBを簡単に操作するためのライブラリ)
開発スキル
- 環境構築: wingetを活用したツール導入
- 設定管理: 認証設定とセキュリティ
- API設計: RESTful な設計原則
- テスト: Postmanによる動作確認
まとめ
今回の学習を通して、モダンなWeb アプリケーション開発の基礎を体験できました。 上述した技術の組み合わせにより、効率的で保守性の高いアプリケーション開発が可能であることを実感しました。
参考リンク
この記事が、同じように学習を始める方の参考になれば幸いです。