データベースに慣れるために、「日本語諸方言コーパス (COJADS) 」の元データをデータベース化してみました。第3回は前回作成した SQLite3 データベースを PHP Laravel で操作するところまで。完全に自分用の作業メモで、説明もいろいろ足りていないと思いますが、ご容赦ください。
注:この記事で作ったものは第4回以降では使わないので、飛ばしてもいいかもしれません。
- 第1回: 日本語諸方言コーパスをDB化して遊ぶ (1) 構成を考える
- 第2回: 日本語諸方言コーパスをDB化して遊ぶ (2) SQLite3 で DB 化
- 第3回: 日本語諸方言コーパスをDB化して遊ぶ (3) PHP Laravel で操作する ←今ここ
- 第4回: 日本語諸方言コーパスをDB化して遊ぶ (4) サービスの全体像を決める
- 第5回: 日本語諸方言コーパスをDB化して遊ぶ (5) データベースの移行とモデルの作成
- 第6回: 日本語諸方言コーパスをDB化して遊ぶ (6) 談話ごとの発話総覧を作る
- 第7回: 日本語諸方言コーパスをDB化して遊ぶ (7) 話者ごとの発話総覧を作る
- 第8回: 日本語諸方言コーパスをDB化して遊ぶ (8) ファイル形式変換機能をつける
- 第9回: 日本語諸方言コーパスをDB化して遊ぶ (9) Heroku でデプロイする
Laravel の設定
Laravel は PHP のフレームワークのひとつです。そんな凝ったものは作らないので素の PHP でもいいんですが、Laravel の案件も多いし、せっかくなので Laravel を使ってみます(使ったことないけど、Ruby on Rails みたいなもんだろうという軽い気持ち)。
PHP と Laravel の導入
Laravel は PHP のフレームワークなので、まず PHP 環境を作って、依存関係管理の Composer を利用して Laravel を導入していきます。PHP 環境は XAMPP にしました。Windows 環境なのでインストーラーでさくっとインストールします(今回は PHP 7.4.8、Laravel 7.21.0 を使用しています)。
SQLite の有効化
SQLite をデータベースとして使えるように PHP の設定を変更します。私の環境では XAMPP でインストールした時点で有効化されていましたが、念のため php.exe と同じフォルダの設定ファイル php.ini を確認して、以下の行が ;
でコメントアウトされていないことを確認しておきます。
extension=pdo_sqlite
プロジェクトの作成
Composer で適当な場所に Laravel プロジェクトを作成します。今回は XAMPP フォルダに _projects
フォルダを作成し、その中で cojads
プロジェクトを管理することにします。
C:\xampp\_projects>composer create-project laravel/laravel --prefer-dist cojads
cojads プロジェクトの設定から、データベースとして SQLite を使用するように変更しておきます。DB_CONNECTION
を sqlite
にして、それ以降のデータベースの設定項目は不要なので、削除するかコメントアウトします。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
↓↓↓次のように変更する↓↓↓
DB_CONNECTION=sqlite
#DB_HOST=127.0.0.1
#DB_PORT=3306
#DB_DATABASE=homestead
#DB_USERNAME=homestead
#DB_PASSWORD=secret
/config/database.php
のデフォルト設定も、mysql になっているので sqlite に変更しておきます。
'default' => env('DB_CONNECTION', 'mysql'),
↓↓↓次のように変更する↓↓↓
'default' => env('DB_CONNECTION', 'sqlite'),
データベースの設定
既存データベースのマイグレーション
まずはマイグレーションを行ないます。前回作成した cojads.sqlite3
を**database.sqlite
に改名して** 1プロジェクトの database
フォルダに配置します。マイグレーションは php artisan migrate
コマンドで行なえます。
C:\xampp\_projects\cojads>php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.32 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (0.13 seconds)
モデルの作成
次に Model を設定します。初期段階では Model 用のフォルダもないので、ひとまず app
フォルダに Models
フォルダを新規作成し、以下のようにテーブルごとにモデルを作成していきます。
php artisan make:model Models/prefecture
php artisan make:model Models/location
php artisan make:model Models/speaker
php artisan make:model Models/discourse
php artisan make:model Models/utterance
そうすると、Models
フォルダ内にそれぞれのモデルのクラス設定ファイルが作成されています。作成した段階ではクラス宣言のみで何の役にも立たないので、たとえば speaker
テーブルなら以下のように属性とゲッターメソッドを書き込んでいきます。$guarded
には主キー speakerId
を設定します。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Speaker extends Model{
protected $table = 'speaker';
protected $guarded = array('speakerId');
public $timestamps = false;
public function getData(){
$data = DB::table($this->table)->get();
return $data;
}
}
ルーティングとサンプルページの作成
今回はデータベースの中身を閲覧できるシンプルなページを作ります。今回は「話者 (speaker) 」を閲覧できるページを作りましょう。まず routes/web.php
にルーティングを追加します。以下では cojads/speaker
に GET アクセスすると CojadsController
コントローラーの speaker
アクションを実行するようにしています。
Route::get('cojads/speaker', 'CojadsController@speaker');
次にルーティングに沿って CojadsController
コントローラーを新規作成して……
php artisan make:controller CojadsController
さっき指定した Speaker
モデルに関する speaker
アクションだけ作ります。ここではデータを取得して cojads.speaker
ビュー、つまり views/cojads
フォルダの中の speaker
という名前のファイルに値を送るようにしています。
<?php
namespace App\Http\Controllers;
use App\Models\Speaker;
class CojadsController extends Controller{
public function speaker(){
$md = new Speaker();
$data = $md->getData();
return view('cojads.speaker', ['data' => $data]);
}
}
最後に今のアクションの指定に沿って /resources/views
フォルダに cojads
フォルダを作り、その中にビューを作成していきます。ここでは blade 記法を使うので speaker.blade.php
を作成して、以下のようにテーブルを作って speaker
テーブルの内容を順に描画していきます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Show Speakers</title>
</head>
<body>
<table>
<thead>
<tr>
<th>話者ID</th>
<th>性別</th>
<th>生年</th>
</tr>
</thead>
<tbody>
@foreach($data as $d)
<tr>
<td>{{$d->speakerId}}</td>
<td>{{$d->speakerSex}}</td>
<td>{{$d->speakerBirthyear}}</td>
</tr>
@endforeach
</tbody>
</table>
</body>
</html>
ここまでの作業が済んだら、正しく表示されるか確認します。php artisan serve
を実行してローカルサーバを立ち上げて……
C:\xampp\_projects\cojads>php artisan serve
Laravel development server started: http://127.0.0.1:8000
先ほどルーティングした通り http://127.0.0.1:8000/cojads/speaker
にアクセスします。
きちんと表示されていますね( CSS は適当にあてています)。
次回予告
次回は検索機能など、もうちょっとリッチな機能を実装します。
実装したい機能を詰めて、アプリの全体像を作成していきます。
-
これは Laravel がデフォルトで
database
フォルダのdatabase.sqlite
を参照する設定になっているからです。ファイル名を変えたくない場合は、config/database.php
の内でdatabase.sqlite
を参照している部分を任意のファイル名に変更するか、ルートの.env
内でデータベースの場所をフルパスで指定する必要があります。たとえばDB_DATABASE=C:\xampp\_projects\cojads\database\cojads.sqlite3
など。 ↩