7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

筆者は、実はほとんど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というそれらしいリンクを踏みます。image.png

OSバージョンをmacOS 15 (ARM, 64-bit)にして、DMGアーカイブをダウンロードします。
image.png
「Download」ボタンをクリックしたあと、ログインするか尋ねられましたが、めんどくさかったので「No thanks, just start my download.」をクリックしました。

dmgファイルを開くと中にpkgがあるのでクリックします。
image.png

このあと「rootのパスワード」を求められ困惑しましたが、どうやらデータベースのrootユーザの話だそうです。パスワードを設定して、ウィザードを閉じます。
image.png
まずはインストールできました! なお、もちろんですがLaunchpadには追加されません。

MySQL Workbenchをインストール

Microsoft SQL Serverのときは管理ツールがあったので、MySQLでもあるだろうと思い、探してみます。

探したらありました。MySQL Workbenchです。https://dev.mysql.com/downloads/workbench/ からダウンロードし、今回はドラッグ&ドロップでインストールします。

なお、今回は最初から自分のサーバが登録(?)されていました。
image.png
しかし、バージョンが合っていない、というメッセージが表示されました。とりあえず動作させたいだけなので無視してみます。
image.png
起動しました!

テーブルを作る

まず、スキーマとやらを作成してみます。
image.png

次に、テーブルを作ります。
image.png

できました!

テーブルにダミーデータを挿入します。今回はSQLでやってみます。

INSERT INTO my_schema.comments (comment,created_at) VALUE("初めてのMySQL",now());
INSERT INTO my_schema.comments (comment,created_at) VALUE("これからのMySQL",now());

image.png
うまく実行できました!

ここで、権限の設定をしておいたほうがいいと聞いたので、ユーザを新規作成し、SELECTだけできるように設定しました。
image.png

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コードは以下のとおりです。

index.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;

実行!

image.png

動いた!!

感想

まず、MySQLは全体的に使いやすかったです。

  • 調べなくてもUIがわかりやすいし
  • ライブラリも使いやすいし
  • 情報も多いし
  • とっつきやすい

初めてのMySQL体験でしたが、とても良かったです。これからプロジェクトでデータベースを使うときはMySQLも使っていきたいなと思いました。

  1. SQLインジェクション。まあ、ローカルな運用なので良かったですが......

7
4
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
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?