LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

日本語諸方言コーパスをDB化して遊ぶ (3) PHP Laravel で操作する

データベースに慣れるために、「日本語諸方言コーパス (COJADS) 」の元データをデータベース化してみました。第3回は前回作成した SQLite3 データベースを PHP Laravel で操作するところまで。完全に自分用の作業メモで、説明もいろいろ足りていないと思いますが、ご容赦ください。

注:この記事で作ったものは第4回以降では使わないので、飛ばしてもいいかもしれません。

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 を確認して、以下の行が ; でコメントアウトされていないことを確認しておきます。

php.ini
extension=pdo_sqlite

プロジェクトの作成

Composer で適当な場所に Laravel プロジェクトを作成します。今回は XAMPP フォルダに _projects フォルダを作成し、その中で cojads プロジェクトを管理することにします。

cmd
C:\xampp\_projects>composer create-project laravel/laravel --prefer-dist cojads

cojads プロジェクトの設定から、データベースとして SQLite を使用するように変更しておきます。DB_CONNECTIONsqlite にして、それ以降のデータベースの設定項目は不要なので、削除するかコメントアウトします。

.env内
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 に変更しておきます。

config/database.php内
'default' => env('DB_CONNECTION', 'mysql'),

↓↓↓次のように変更する↓↓↓

'default' => env('DB_CONNECTION', 'sqlite'),

データベースの設定

既存データベースのマイグレーション

まずはマイグレーションを行ないます。前回作成した cojads.sqlite3database.sqlite に改名して 1プロジェクトの database フォルダに配置します。マイグレーションは php artisan migrate コマンドで行なえます。

cmd
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 フォルダを新規作成し、以下のようにテーブルごとにモデルを作成していきます。

cmd
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 を設定します。

app/Models/speaker.php
<?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 アクションを実行するようにしています。

web.php
Route::get('cojads/speaker', 'CojadsController@speaker');

次にルーティングに沿って CojadsController コントローラーを新規作成して……

cmd
php artisan make:controller CojadsController

さっき指定した Speaker モデルに関する speaker アクションだけ作ります。ここではデータを取得して cojads.speaker ビュー、つまり views/cojads フォルダの中の speaker という名前のファイルに値を送るようにしています。

app/Http/Controllers/CojadsController.php
<?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 テーブルの内容を順に描画していきます。

/resouces/views/cojads/speaker.blade.php
<!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 にアクセスします。

table.png

きちんと表示されていますね( CSS は適当にあてています)。

次回予告

次回は検索機能など、もうちょっとリッチな機能を実装します。
実装したい機能を詰めて、アプリの全体像を作成していきます。


  1. これは Laravel がデフォルトで database フォルダの database.sqlite を参照する設定になっているからです。ファイル名を変えたくない場合は、config/database.php の内で database.sqlite を参照している部分を任意のファイル名に変更するか、ルートの .env 内でデータベースの場所をフルパスで指定する必要があります。たとえば DB_DATABASE=C:\xampp\_projects\cojads\database\cojads.sqlite3 など。 

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
What you can do with signing up
0