Skip to content
Playground

1.環境構築

学習目標

  • Docker コンテナーで MySQL サーバーを起動し、停止や再起動を行える
  • MySQL Shell for VS Code 拡張機能からデータベースに接続し、SQL を実行できる
  • USE 文で操作対象のデータベースを切り替えられる

本講義では、MySQL サーバーをローカルで動かし、VS Code から SQL を実行する環境を構築します。構成は次の通りです。

構成図

VS Code から MySQL Shell for VS Code で Docker コンテナー内の MySQL サーバーに接続し、kakeibobookstoreworld の3つのデータベースに対して SQL を実行します。

Docker Desktop は、コンテナー という仕組みでソフトウェアを動かすためのアプリケーションです。コンテナーは、ソフトウェア本体と必要な設定を1つにまとめたもので、起動すれば設定済みの環境がすぐに使えます。

MySQL サーバーは PC に直接インストールすることもできますが、コンテナーで動かすと、PC 上の他のソフトウェアに影響を与えず、不要になったら削除も簡単です。

  1. インストーラーをダウンロードする

    Docker Desktop の公式ダウンロードページ からインストーラーをダウンロードして実行します。

  2. Docker Desktop を起動する

    インストール後、Docker Desktop を起動し、タスクトレイの Docker アイコン(クジラ)が安定した状態(アニメーションが止まった状態)になるまで待ちます。

  1. ターミナルを開く

    VS Code のメニューから「ターミナル → 新しいターミナル」で開きます。

  2. バージョンを確認する

    以下のコマンドを順に実行します。

    Terminal window
    docker --version
    docker compose version

    次のようにバージョン番号が表示されれば、Docker Desktop は正常に動作しています。

    Docker version 27.3.1, build ce1234
    Docker Compose version v2.30.3-desktop.1

本講義で使うファイルを1つのフォルダーにまとめて管理します。

ターミナルで以下のコマンドを実行し、作業用のフォルダーを作成します。

Terminal window
mkdir sql-practice
cd sql-practice

VS Code のメニューから「ファイル → フォルダーを開く」を選択し、作成した sql-practice フォルダーを開きます。

compose.yaml は、Docker に対して「どのコンテナーを、どの設定で起動するか」を指示するファイルです。

VS Code のエクスプローラーで新しいファイルを作成し、以下の内容を書いて保存します。

compose.yaml
services:
mysql:
image: mysql:8.4
container_name: sql-practice-mysql
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "3307:3306"
volumes:
- ./mysql/init:/docker-entrypoint-initdb.d:ro
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 5s
retries: 5
volumes:
mysql-data:
設定項目の説明
  • image: 使用するコンテナーイメージ(コンテナーのテンプレート)。mysql:8.4 は MySQL 8.4 系(LTS)を指定している。
  • environment: コンテナー内の環境変数。MYSQL_ROOT_PASSWORD は管理者(root)のパスワード。
  • ports: PC の 3307 番ポートを、コンテナー内の MySQL(3306 番ポート)につなげる。3306 は MySQL のデフォルトポートで、PC にすでに MySQL がインストールされていると衝突する可能性があるため、3307 にずらしている。
  • volumes: コンテナーの外側にデータを保持する設定。
    • ./mysql/init:/docker-entrypoint-initdb.d:ro: PC 上の ./mysql/init フォルダーをコンテナー内にマウントする。このフォルダー内の SQL ファイルは、コンテナー起動時に自動で実行される。
    • mysql-data:/var/lib/mysql: Docker が管理する ボリューム mysql-data に MySQL のデータを保存する。
  • healthcheck: MySQL が接続を受け付けられる状態かを確認する設定。mysqladmin ping が成功すると、docker compose psSTATUS(healthy) が表示される。

MySQL のコンテナーには、コンテナー起動時に /docker-entrypoint-initdb.d/ 内の .sql ファイルを自動で実行する仕組みがあります。この仕組みで、3 つのデータベースをセットアップします。

sql-practice/mysql/init/ フォルダーを作成し、以下の3つのファイルをダウンロードして配置します。

書籍の各リスト用に、kakeibo データベースの初期状態を再現する SQL ファイルを配布しています。ファイル名は書籍のリスト番号と対応し、たとえば pre_list0302.sql はリスト 3-2 想定の初期状態です。特定のリストを試したいときに、対応するファイルを実行すれば kakeibo がそのリスト想定の状態にリセットされます。

  1. setup.zip をダウンロードする
  2. sql-practice/ 直下に展開する(sql-practice/setup/chapXX/... となるように)

実行手順は 4-2. setup ファイルの実行 で扱います。

ここまでで、フォルダー構成は次のようになります。

  • Directorysql-practice/
    • compose.yaml
    • Directorymysql/
      • Directoryinit/
        • bookstore.sql
        • kakeibo.sql
        • world.sql
    • Directorysetup/
      • Directorychap01/
      • Directorychap02/

MySQL サーバーを起動し、状態の確認や停止・初期化などの基本的な操作コマンドを確認します。

sql-practice フォルダー内で、以下のコマンドを実行します。

Terminal window
docker compose up -d

compose.yaml に定義したコンテナーが起動し、その中で MySQL サーバーが立ち上がります。-d は「バックグラウンドで動かす」ためのオプションで、これを付けないとターミナルがコンテナーのログ表示に占有されます。

初回はコンテナーイメージをダウンロードするため数分かかります。2回目以降は数秒で起動します。

以下のコマンドで、コンテナーの状態を確認します。

Terminal window
docker compose ps

sql-practice-mysqlSTATUSUp で、かつ (healthy) と表示されていれば、MySQL サーバーは利用可能な状態です。

NAME IMAGE STATUS
sql-practice-mysql mysql:8.4 Up 30 seconds (healthy)

MySQL サーバーの起動・停止などに使う主なコマンドは以下の通りです。

コマンド動作
docker compose up -dコンテナーをバックグラウンドで起動
docker compose psコンテナーの状態を確認
docker compose stop一時停止
docker compose start再開(stop 後の再起動)
docker compose downコンテナーを削除(データは残る)
docker compose down -vコンテナーとデータ(mysql-data ボリューム)を両方削除

./mysql/init の SQL ファイルは、mysql-data ボリュームが空のとき(初回起動時)にのみ実行されます。SQL を書き換えて反映したい場合や、データを初期状態に戻したい場合は、次の手順でボリュームを削除してから立ち上げ直します。

Terminal window
docker compose down -v
docker compose up -d

MySQL サーバーの起動を確認できたら、VS Code から接続できるようにします。

  1. 拡張機能をインストールする

    VS Code のアクティビティバーから拡張機能のアイコンをクリックし、検索窓に MySQL Shell for VS Code と入力します。Oracle が公開している拡張機能を選んで Install を押し、インストール完了後に再起動を求められたら再起動します。

  2. データベース接続を追加する

    アクティビティバーの MySQL Shell のアイコン(イルカ)をクリックし、DATABASE CONNECTIONS ビューにある「+」アイコンから新しい接続を追加します。以下の値を入力します。

    項目
    Captionlocal(任意の名前)
    Host Name127.0.0.1
    Port3307
    User Nameroot
    Default Schema空欄

    Test Connection で接続を確認します。パスワードを求められたら root と入力します。Connection successful と表示されれば、OK を押して接続を保存します。

  3. SQL を実行する

    DATABASE CONNECTIONS に追加された接続をクリックすると、ノートブック形式のエディターが開きます。エディターに以下の SQL を入力します。

    SHOW DATABASES;

    カーソルを SQL の行に置いた状態で Ctrl + Enter を押します。画面下部に結果が表示されます。

    Database
    --------------------
    bookstore
    information_schema
    kakeibo
    mysql
    performance_schema
    sys
    world

information_schemamysqlperformance_schemasys は MySQL が内部で使うシステム用のデータベースです。これら以外に bookstorekakeiboworld の3つが並んでいれば、初期化 SQL が正しく実行されています。

書籍の特定のリストを試す前に、2-4 で配置した対応する setup ファイルを実行して、kakeibo をそのリスト想定の初期状態にします。

  1. setup ファイルを MySQL Shell で開く

    VS Code のエクスプローラーで sql-practice/setup/chapXX/pre_listXXYY.sql を右クリックし、Open with MySQL Shell を選びます。ファイルの内容が MySQL Shell のノートブックに読み込まれます。

  2. 実行する

    ノートブック上で Ctrl + Enter を押して実行します。