はじめに
筆者は、実はほとんどSQLデータベースを使ったことがありませんでした。せいぜいSQLiteをNode.jsで簡単に使ったり、Microsoft SQL ServerをASP.NETで脆弱性たっぷりに使った程度です。1
そこで、今回はMySQLをM3 macOSにインストールして、Node.jsから使ってみたいと思います。
環境
- M3 MacBook
- macOS 15.5
- Node.js v22.16.0
- Express.js
- EJS
- Express-Generator
- npm-check-updates
MySQLをインストール
2.4 Installing MySQL on macOSを見ながらインストールします。Mac向けには「ネイティブ・パッケージ」が配布されているようです。2.4.2 Installing MySQL on macOS Using Native Packagesに飛んで、hereというそれらしいリンクを踏みます。
OSバージョンをmacOS 15 (ARM, 64-bit)
にして、DMGアーカイブをダウンロードします。
「Download」ボタンをクリックしたあと、ログインするか尋ねられましたが、めんどくさかったので「No thanks, just start my download.」をクリックしました。
このあと「rootのパスワード」を求められ困惑しましたが、どうやらデータベースのrootユーザの話だそうです。パスワードを設定して、ウィザードを閉じます。
まずはインストールできました! なお、もちろんですがLaunchpadには追加されません。
MySQL Workbenchをインストール
Microsoft SQL Serverのときは管理ツールがあったので、MySQLでもあるだろうと思い、探してみます。
探したらありました。MySQL Workbenchです。https://dev.mysql.com/downloads/workbench/ からダウンロードし、今回はドラッグ&ドロップでインストールします。
なお、今回は最初から自分のサーバが登録(?)されていました。
しかし、バージョンが合っていない、というメッセージが表示されました。とりあえず動作させたいだけなので無視してみます。
起動しました!
テーブルを作る
できました!
テーブルにダミーデータを挿入します。今回はSQLでやってみます。
INSERT INTO my_schema.comments (comment,created_at) VALUE("初めてのMySQL",now());
INSERT INTO my_schema.comments (comment,created_at) VALUE("これからのMySQL",now());
ここで、権限の設定をしておいたほうがいいと聞いたので、ユーザを新規作成し、SELECTだけできるように設定しました。
Node.jsで使う
Node.js MySQLと、Node.jsアプリケーションとMySQLを接続しよう!によると、mysql
パッケージを使ったら簡単にできることがわかりました。
しかし、ここで問題が起こりました。試しにコードを書いて実行すると、Client does not support authentication protocol requested by server; consider upgrading MySQL client
エラーが出てしまいましたが、Node.js 【MySQL 8.0 に接続できない。】で同じエラーについて書かれていたため、解決しました。今回はバージョン9.3.0をインストールしましたが、mysql2
パッケージを使う必要があるようです。
EJSを使ったindex.ejsのコード
<!DOCTYPE html>
<html>
<head>
<title>MySQLのコメント欄テスト</title>
</head>
<body>
<h1>MySQLのコメント欄テスト</h1>
<% for(let comment of comments) { %>
<p><%= comment.name %> : <%= comment.comment %></p>
<% } %>
</body>
</html>
また、JSコードは以下のとおりです。
var express = require('express');
var router = express.Router();
let mysql2 = require('mysql2');
/* GET home page. */
router.get('/', function(req, res, next) {
//MySQLデータベースからコメントをもらう
let con = mysql2.createConnection({
host: "localhost",
user: "read_user",
password: "read_user_a8",
database:"my_schema"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
con.query("SELECT comment,created_at FROM comments", function (err, result) {
if (err) throw err;
res.render('index', { comments:result });
});
});
});
module.exports = router;
実行!
動いた!!
感想
まず、MySQLは全体的に使いやすかったです。
- 調べなくてもUIがわかりやすいし
- ライブラリも使いやすいし
- 情報も多いし
- とっつきやすい
初めてのMySQL体験でしたが、とても良かったです。これからプロジェクトでデータベースを使うときはMySQLも使っていきたいなと思いました。
-
SQLインジェクション。まあ、ローカルな運用なので良かったですが...... ↩