POSSEPH2

PH2 トップ / W1

W1|データベースと SELECT

PH2 で育てていく POSSE大学の時間割アプリは、最初は授業の一覧が HTML に直接書かれたページです。授業が1つ増えたり教室が変わったりするたびに、HTML を書き換えなければなりません。授業が何百もある大学では、とても続けられない作り方です。

そこで、授業のデータはデータベースにまとめて入れておき、画面に出すときに「月曜の授業だけ」「必修の授業だけ」と必要な分だけ取り出すようにします。この「取り出し方」を書く言葉が SQL です。今週は、その中でいちばんよく使う SELECT を使えるようにします。W3 で Laravel に入ると、今週書いた SQL が、そのまま時間割ページを表示する部品になります。

今週の全体像

学ぶこと データベース・テーブル・カラム・レコード、SELECT / FROM / WHERE / AND / OR / IS NULL / LIKE / ORDER BY / LIMIT
作るもの 時間割ページの6つの区画と同じ結果を返す SQL(sql/w01.sql)
できるようになること 条件を組み合わせた SELECT を書き、欲しいデータだけを取り出せる
時間の目安 インプット 1.5時間、ミニドリル 1〜1.5時間、POSSE課題 4時間、Docker の準備 30〜45分
AI を使ってよいのは POSSE課題だけです

インプットとミニドリルでは AI を使わないでください。

インプット

スライドを順番に読みます。スマホでも読めます。

  1. データベースってなに?:データベースが何のためにあるのか、テーブル・カラム・レコードとは何か
  2. SELECTでデータを取り出す:SELECT の書き方と、条件での絞り込み・並べ替え

スライドに出てくる SQL は、スライドと同じデータの練習場 で実際に動かせます。読むだけで終わらせず、1つずつ書き写して実行し、結果がスライドと同じになることを確かめてください。

ミニドリル:SQL事件簿 第1章

POSSE大学で、期末試験の問題が流出しました。教員室の入退室記録を SQL で調べて、事件の夜に教員室にいた人を突き止めます。

SQL事件簿 第1章を始める

問は3つあります。問ごとに SQL を書いて「エディタの SQL で答える」を押すと、その SQL を実行した結果で正解かどうかを判定します。目で数えた答えではなく、書いた SQL そのものが判定の対象です。

SQL を書き始める前に、問ごとに次の2つをノートに書き出してください。

  • どのカラムを、どんな条件で絞るか(例:building が J棟)
  • 条件が2つ以上あるとき、AND でつなぐのか OR でつなぐのか

事件の続きは W2・W3・W4 で解いていきます。

POSSE課題:直書きの時間割ページを、SQL で再現する

やること

テンプレートの index.html は、POSSE大学の学務ポータルにある時間割ページです。「月曜日の授業」「必修科目」など6つの区画があり、どの区画も授業が HTML に直接書かれています。

同じ授業のデータが、データベースの courses テーブルに入っています。各区画に表示されているのと同じ結果を返す SELECT 文を書いてください。答えは画面に見えているので、「この表を出すには、どの条件で絞って、どの順番に並べればいいか」を考えるのが今週の課題です。

手順

  1. テンプレートを fork する

    posse-ap/template-ph2-timetable を開き、右上の「Fork」を押します。「Owner」が自分のアカウントになっていることを確かめて「Create fork」を押すと、自分のアカウントにリポジトリの複製ができます。このリポジトリは PH2 の16週を通して使います。

  2. 自分の PC に clone する

    fork した自分のリポジトリ(自分のアカウント名/template-ph2-timetable)の「Code」ボタンから SSH の URL をコピーし、ターミナルで clone します。

    git clone git@github.com:自分のアカウント名/template-ph2-timetable.git
    cd template-ph2-timetable
  3. 作業用のブランチを作る

    git switch -c w01
  4. 時間割ページを開いて、6つの区画を見る

    VSCode でフォルダを開き、index.html を Live Server で表示します。区画ごとに、表示されている授業と並び順を確かめておきます。

  5. SQL練習場で、区画ごとに SQL を書いて確かめる

    SQL練習場(授業データ) を開きます。ここには index.html と同じ授業データが入っています。区画1から順に SELECT を書いて実行し、結果が区画の表と同じ行・同じ順番になるまで直します。

  6. sql/w01.sql に書き写す

    確かめた SQL を、sql/w01.sql の各区画のコメントの下に書きます。

  7. commit して push する

    git add sql/w01.sql
    git commit -m "W1: 時間割ページの各区画を SELECT で再現"
    git push -u origin w01
  8. 自分のリポジトリの main に向けて PR を作る

    GitHub で自分のリポジトリを開き、「Compare & pull request」を押します。本文には、下の「PR本文に書くこと」をコピーして埋めてください。

    PR の送り先に注意

    fork したリポジトリで PR を作ると、送り先(base repository)が最初は posse-ap/template-ph2-timetable になっています。これは全員が共有している元のリポジトリです。必ず「base repository」を自分の 自分のアカウント名/template-ph2-timetable に変え、main ← w01 になっていることを確かめてから PR を作ってください。

  9. PR の URL を提出する

気をつけること

  • 曜日(day)は、データでは 1(月)〜 5(金)の数字です。画面では「月」「火」と表示していますが、SQL の結果は数字のままでかまいません
  • 区画1の「同じ時限の授業」のように、並べ替えのキーが同じ行どうしの順番は問いません
  • 区画ごとに、画面に出ている列だけを取り出してください(SELECT * ではなく、列名を書く)

PR本文に書くこと

## 確認結果
SQL練習場で実行したときの行数(区画の表と同じになったか):
- 区画1: 行
- 区画2: 行
- 区画3: 行
- 区画4: 行
- 区画5: 行
- 区画6: 行

## 判断の記録
条件の書き方で迷った場面を1つ書く:
- 選択肢A(例: room = 'J101' OR room = 'J201' … と並べる):
- 選択肢B(例: room LIKE 'J%' と書く):
- 採用した理由:
- 確認方法:

## AI利用
AIを使った場合は記入(使わなかった場合は「不使用」):
- 使ったAIツール:
- 何を依頼したか:
- 自分で修正した箇所:

### AIとの比較(必須)
区画3〜区画6のどれか1つを AI にも書かせ、SQL練習場で実行して自分の結果と比べる:
- AI が書いた SQL:
- 区画の表と一致したか:
- 違った場合、どこが違ったか、その理由:

発展(任意)

  • 区画にない条件で、自分が来学期に取りたい授業を探す SQL を2つ考え、sql/w01.sql の最後に問いの文と一緒に書く

Docker Desktop の準備(W2 までに)

W2 から Docker を使います。入れるのに時間がかかったり、つまずいたりする人が出やすいので、今週のうちに入れて、動くことを確かめておいてください。

Docker Desktop を入れる

チェックポイント

  • スライド2つを読み、スライドの SQL を練習場で実行した
  • SQL事件簿 第1章の問1〜問3を解いた
  • テンプレートを fork・clone し、w01 ブランチで作業した
  • sql/w01.sql の区画1〜6に SQL を書き、それぞれ区画の表と一致することを確かめた
  • 自分のリポジトリの main に向けて PR を作り、本文の確認結果・判断の記録・AIとの比較を書いた
  • Docker Desktop を入れ、docker run hello-world が成功した

参考資料

教材を読み終えてから、必要に応じて参照してください。