LoginSignup
8
2

More than 3 years have passed since last update.

研修でSQL講座をやるときに事前準備ゼロから最速で全員分の環境を用意する

Last updated at Posted at 2019-04-19

4〜5月といえば新人研修の時期ですね。
近頃はエンジニア以外も SQL の研修をする機会が増えているかと思います。
ただそういった方面に疎い方を含めて、研修の参加者全員に事前に環境構築をしておいてもらうというのはハードルが高いときがあります。

上記の課題を解決するために、全員が一切の事前準備をせずに研修の開始数分で等しく環境を用意できる方法を説明します。使うものはブラウザだけです。

(この例では、 https://dev.mysql.com/doc/index-other.html にある sakila database というサンプルデータ使います)

事前に必要なもの

これだけは事前に管理者(担当者)が用意してください。

  • AWS アカウント (一つあれば良い)
  • 研修の参加者がログインするための IAM (Cloud9 が使えれば良い)

ワークショップ開始時にやること

参加者が自分の Cloud9 environment を作成する

AWS Web コンソールにログインしたら https://ap-northeast-1.console.aws.amazon.com/cloud9/ を開きます。

Create environment を選択します。

Image from Gyazo

適当な名前を付けます。他の人と重複しないように。

Image from Gyazo

設定は何も変更しません。

Image from Gyazo

この後 Create Environment を選択してしばらく待ちます。

Cloud9 environment に入ったらやること

Terminal のフォントサイズ変更 (任意)

フォントサイズは Preferences から変更できます。

Image from Gyazo

Image from Gyazo

Terminal でやること

mysql の設定ファイルを用意する

mysql は ver8.0 よりデフォルトの認証方式が変わりました。これを旧方式に変更するため、下記の設定ファイルを事前に用意しておく必要があります。

$ mkdir config
$ touch config/my.cnf

そして my.cnf の中身は下記をコピペして保存します。

config/my.cnf
[mysqld]
default_authentication_plugin=mysql_native_password

mysql を用意する

ポート 3306 で既に MariaDB が稼働しているので、ポート 3307 で mysql を稼働させます。

$ docker run --name mysql -v ~/environment/config:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -d -p 3307:3306 mysql:8.0

(ref: https://medium.com/@crmcmullen/how-to-run-mysql-8-0-with-native-password-authentication-502de5bac661)

※ Docker コンテナーを削除したいときは下記のコマンドで。

$ docker rm -f mysql

サンプルデータを用意する

シードデータをダウンロードします。

$ curl -OL http://downloads.mysql.com/docs/sakila-db.zip && unzip ./sakila-db.zip

mysql にログインして、シードデータをインポートします。

$ mysql -h 127.0.0.1 -P 3307 -uroot -proot

(稀に失敗するので、何回か試す)
ログインが成功すると、

$ mysql>

このような表示に切り替わります。 source コマンドでシードデータをインポートしましょう。

$ mysql> source sakila-db/sakila-schema.sql;
$ mysql> source sakila-db/sakila-data.sql;

(ref: https://dev.mysql.com/doc/sakila/en/sakila-installation.html)

ここまででサンプルデータの準備は完了です。
他に適当なデータがあればそれを使うと良いでしょう。

開始からここまでに要する時間は数分です。

SQL 実践

sakila データベースにあるテーブルに対して適当なクエリを投げます。

$ mysql> use sakila;

$ mysql> show full tables;
+----------------------------+------------+
| Tables_in_sakila           | Table_type |
+----------------------------+------------+
| actor                      | BASE TABLE |
| actor_info                 | VIEW       |
| address                    | BASE TABLE |
| category                   | BASE TABLE |
| city                       | BASE TABLE |
| country                    | BASE TABLE |
| customer                   | BASE TABLE |
| customer_list              | VIEW       |
| film                       | BASE TABLE |
| film_actor                 | BASE TABLE |
| film_category              | BASE TABLE |
| film_list                  | VIEW       |
| film_text                  | BASE TABLE |
| inventory                  | BASE TABLE |
| language                   | BASE TABLE |
| nicer_but_slower_film_list | VIEW       |
| payment                    | BASE TABLE |
| rental                     | BASE TABLE |
| sales_by_film_category     | VIEW       |
| sales_by_store             | VIEW       |
| staff                      | BASE TABLE |
| staff_list                 | VIEW       |
| store                      | BASE TABLE |
+----------------------------+------------+
23 rows in set (0.00 sec)

$ mysql> select * from actor limit 10;
+----------+------------+--------------+---------------------+
| actor_id | first_name | last_name    | last_update         |
+----------+------------+--------------+---------------------+
|        1 | PENELOPE   | GUINESS      | 2006-02-15 04:34:33 |
|        2 | NICK       | WAHLBERG     | 2006-02-15 04:34:33 |
|        3 | ED         | CHASE        | 2006-02-15 04:34:33 |
|        4 | JENNIFER   | DAVIS        | 2006-02-15 04:34:33 |
|        5 | JOHNNY     | LOLLOBRIGIDA | 2006-02-15 04:34:33 |
|        6 | BETTE      | NICHOLSON    | 2006-02-15 04:34:33 |
|        7 | GRACE      | MOSTEL       | 2006-02-15 04:34:33 |
|        8 | MATTHEW    | JOHANSSON    | 2006-02-15 04:34:33 |
|        9 | JOE        | SWANK        | 2006-02-15 04:34:33 |
|       10 | CHRISTIAN  | GABLE        | 2006-02-15 04:34:33 |
+----------+------------+--------------+---------------------+
10 rows in set (0.00 sec)

この Sakila というデータベースが なんなのか についてはこのように説明されています。

Sakilaサンプルデータベースは当初、MySQL ABドキュメントチームの元メンバーであるMike Hillyerによって開発され、書籍、チュートリアル、記事、サンプルなどの例に使用できる標準スキーマを提供することを目的としています。

(from: https://dev.mysql.com/doc/sakila/en/sakila-introduction.html)

研修が終わったら

研修が終わったら、参加者は自分が作った Cloud9 environment を削除します。

ちなみに、研修で使う程度なら Cloud9 のコストはタダみたいなものなので、SQL 以外にも有用な場面は色々あります。

8
2
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
8
2