GitHub Codespacesで MySQL学習環境をつくろう!

スポンサーリンク
DALL·E 2025-02-24 06.26.17 - A futuristic workspace with a holographic screen displaying SQL code. A person is interacting with the holographic interface, running SQL queries and MySQL

GitHubアカウントの作成

手順

  1. GitHub公式サイトにアクセスする
  2. 右上の「Sign up」をクリックする
  3. メールアドレスを入力しよう
  4. パスワードを設定する
  5. ユーザー名を入力(半角英数字、ハイフン、アンダースコアのみ)する
  6. メール認証を完了

ポイント:

  • ユーザー名は後から変更できるが、URLに使われるので慎重に選ぼう。

リポジトリの作成

手順

  1. GitHubにログインする
  2. 右上の「+」アイコンをクリックする
  3. 「New repository」を選択しよう
  4. リポジトリの情報を入力:
    • Repository name: mysql-learning(任意の名前でOK)
    • Description: MySQL学習用リポジトリ(任意)
    • Public / Private: どちらでもOK
      • Public: 誰でも見られる
      • Private: 自分だけ、または招待した人だけ見られる
    • Add a README file: チェックを入れる(推奨)
  5. 「Create repository」をクリックする

必要なファイルの作成

.devcontainer/devcontainer.json を作成

  1. リポジトリのページで「Add file」→「Create new file」をクリック
  2. ファイル名に .devcontainer/devcontainer.json と入力しよう
    • スラッシュ(/)を入れると自動的にフォルダが作成される
  3. 以下の内容をコピー&ペーストしよう
{
  "name": "MySQL Learning Environment",
  "dockerComposeFile": "docker-compose.yml",
  "service": "app",
  "workspaceFolder": "/workspace"
}

4.そのまま「Commit changes」をクリックする(コミットメッセージはデフォルトでOK)

.devcontainer/docker-compose.yml を作成

  1. 「Add file」→「Create new file」をクリックする
  2. ファイル名に .devcontainer/docker-compose.yml と入力しよう
    ※すでに.devcontainer/が表示されている場合、docker-compose.yml` と入力すること。
  3. 以下の内容をコピー&ペーストしよう
version: '3.8'

services:
  app:
    image: mcr.microsoft.com/devcontainers/base:ubuntu
    volumes:
      - ..:/workspace:cached
    command: sleep infinity
    network_mode: service:db
    depends_on:
      - db

  db:
    image: mysql:8.0
    restart: unless-stopped
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: password

volumes:
  mysql-data:

4.「Commit changes」をクリックする

README.md を作成(既にある場合はスキップ)

  1. リポジトリのトップページに戻る
  2. README.mdが既にある場合は、鉛筆マーク(Edit)をクリックして編集
  3. 「Commit changes」をクリック

Codespacesの起動

手順

  1. リポジトリのページで緑色の「Code」ボタンをクリックする
  2. 「Codespaces」タブを選択する
  3. 「Create codespace on main」をクリックする
  4. 新しいタブが開き、Codespacesが起動する(初回は5〜10分かかる)

画面の見方:

  • 左側: ファイルエクスプローラー(ファイル一覧)
  • 中央: エディター(ファイルを編集する場所)
  • 下部: ターミナル(コマンドを実行する場所)

ポイント:

  • Codespacesは一定時間操作しないと自動的に停止する
  • 停止したCodespacesは「Code」→「Codespaces」から再開できる
  • データは保持されるので、続きから作業できる

MySQL学習環境のセットアップ

Codespacesが起動したら、以下の通りMySQL学習環境をセットアップしよう。

テーブル構成

部署表(departments)

カラム名データ型制約説明
department_idINTPRIMARY KEY部署番号
department_nameVARCHAR(100)NOT NULL部署名

社員表(employees)

カラム名データ型制約説明
employee_idINTPRIMARY KEY社員番号
nameVARCHAR(100)NOT NULL氏名
genderENUMNOT NULL性別(男/女)
birth_dateDATENOT NULL生年月日
salaryDECIMAL(10,2)NOT NULL給与
department_idINTFOREIGN KEY部署番号

MySQLクライアントをインストール

ターミナルで以下の通り実行する。

sudo apt-get update && sudo apt-get install -y mysql-client

MySQLの起動を確認

# MySQLが起動するまで待つ(準備ができるとエラーが出なくなります)
mysql -h db -u root -ppassword -e "SELECT 1"

データベースとテーブルを作成

MySQLに接続しよう。

mysql -h db -u root -ppassword

以下のSQL文を順次実行する。

-- データベース作成
CREATE DATABASE company_db;
USE company_db;

-- 部署表
CREATE TABLE departments (
    department_id VARCHAR(10) PRIMARY KEY,
    department_name VARCHAR(100) NOT NULL
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 社員表
CREATE TABLE employees (
    employee_id VARCHAR(10) PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    gender ENUM('男', '女') NOT NULL,
    birth_date DATE NOT NULL,
    salary DECIMAL(10, 2) NOT NULL,
    department_id VARCHAR(10) NOT NULL,
    FOREIGN KEY (department_id) REFERENCES departments(department_id)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 部署データ
INSERT INTO departments (department_id, department_name) VALUES 
    ('001', '総務部'),
    ('002', '経理部'),
    ('003', '営業部');

-- 社員データ
INSERT INTO employees (employee_id, name, gender, birth_date, salary, department_id) VALUES 
    ('0001', '佐藤一郎', '男', '1951-01-01', 450000, '002'),
    ('0002', '鈴木二郎', '男', '1962-02-02', 400000, '003'),
    ('0003', '高橋花子', '女', '1973-03-03', 350000, '001'),
    ('0004', '田中四郎', '男', '1984-04-04', 300000, '001'),
    ('0005', '渡辺良子', '女', '1995-05-05', 250000, '003');

-- MySQLから抜ける
EXIT;

動作確認

# MySQLに接続(データベースを指定)
mysql -h db -u root -ppassword company_db

MySQLプロンプト内で以下を実行しよう。

-- テーブル確認
SHOW TABLES;

-- データ確認
SELECT * FROM employees;
SELECT * FROM departments;

注意: データベースを指定せずに接続した場合は、以下を実行しよう。

USE company_db;

基本的な使い方

MySQLへの接続

# データベースを指定して接続(推奨)
mysql -h db -u root -ppassword company_db

または、

# データベースを指定せずに接続
mysql -h db -u root -ppassword

# MySQLプロンプト内でデータベースを選択
USE company_db;

テーブル確認

-- テーブル一覧
SHOW TABLES;

-- 社員データを表示
SELECT * FROM employees;

-- 部署データを表示
SELECT * FROM departments;

データ検索

-- 給与が35万円以上の社員
SELECT * FROM employees WHERE salary >= 350000;

-- 営業部の社員
SELECT e.* 
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE d.department_name = '営業部';

-- 名前に「田」を含む社員
SELECT * FROM employees WHERE name LIKE '%田%';

データ集計

-- 部署別の社員数
SELECT 
    d.department_name,
    COUNT(e.employee_id) as employee_count
FROM departments d
LEFT JOIN employees e ON d.department_id = e.department_id
GROUP BY d.department_name;

-- 部署別の平均給与
SELECT 
    d.department_name,
    AVG(e.salary) as average_salary,
    MIN(e.salary) as min_salary,
    MAX(e.salary) as max_salary
FROM employees e
JOIN departments d ON e.department_id = d.department_id
GROUP BY d.department_name;

結合クエリ

-- 社員と部署を結合して表示
SELECT 
    e.employee_id,
    e.name,
    e.gender,
    e.birth_date,
    e.salary,
    d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;

並び替え

-- 性別で分けて、各性別内で生年月日順
SELECT gender, name, birth_date 
FROM employees 
ORDER BY FIELD(gender, '男', '女'), birth_date ASC;

ターミナルから直接実行

MySQLプロンプトに入らずに、ターミナルから直接SQLを実行することもできる。

# テーブル一覧(データベース名を指定)
mysql -h db -u root -ppassword company_db -e "SHOW TABLES;"

# 全社員表示
mysql -h db -u root -ppassword company_db -e "SELECT * FROM employees;"

# 複雑なクエリも実行可能
mysql -h db -u root -ppassword company_db -e "
SELECT d.department_name, COUNT(*) as count
FROM employees e
JOIN departments d ON e.department_id = d.department_id
GROUP BY d.department_name;"

重要: ターミナルから実行する場合は、必ず -e オプションの前にデータベース名 company_db を指定しよう。

学習リソース

接続情報

  • ホスト: db
  • ユーザー: root
  • パスワード: password
  • データベース: company_db
  • ポート: 3306

ファイル構成

mysql-learning/
├── .devcontainer/
│   ├── devcontainer.json    # Codespaces設定
│   └── docker-compose.yml   # Docker構成
└── README.md               

次回以降の起動

Codespacesを再起動した場合

  1. データは保持されているので、すぐに使える
  2. 以下の通りMySQLに接続しよう
mysql -h db -u root -ppassword company_db

変更をコミット&プッシュ

Codespacesで作業した内容をGitHubに保存(プッシュ)する方法を説明しよう。

変更を確認

ターミナルで以下のコマンドを実行する。

git status

変更をステージングに追加

# すべての変更を追加
git add .

# 特定のファイルだけ追加する場合
git add ファイル名

コミット(変更を記録)

git commit -m "コミットメッセージ"

コミットメッセージの例:

  • git commit -m "練習用クエリを追加"
  • git commit -m "VIEWを作成"
  • git commit -m "README修正"

ポイント:

  • コミットメッセージは何を変更したか分かるように書こう
  • 日本語でOK

プッシュ(GitHubに送信)

git push

成功すると以下の通り表示される。

Enumerating objects: 4, done.
...
To https://github.com/ユーザー名/mysql-learning
   abc1234..def5678  main -> main

コメント

タイトルとURLをコピーしました