Open6
Lighthouseを使ってみる
Laravel + Vue + GraphQLな構成でアプリを開発することとなり、Lighthouseというフレームワークを使うこととなった。
ただ、Lighthouseは使ったことがないし、そもそもGraphQLも良くわかってない(ODataみたいなやつ?)。
とりあえず動かしてみたくなったのでやってみる。
とりあえず公式のドキュメントがあるので、それを参考に進めてみる。
まずはインストール。
$ laravel new lighthouse-tutorial
bash: laravel: command not found
なるほど。
前提として、私の環境では以下のインストールがされています。これらは以後のインストール作業で必要そうです。
- php
- composer
- mysql
- laravel
上3つは以下のバージョンで入っていました
$ php -v;mysql -V;composer -V
PHP 7.4.19 (cli) (built: May 6 2021 13:25:24) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.19, Copyright (c), by Zend Technologies
mysql Ver 8.0.23 for osx10.15 on x86_64 (Homebrew)
Composer version 2.0.12 2021-04-01 10:14:59
laravelは以下の手順でインストールしました。
- Laravelをインストールしてパスを通す
$ composer global require "laravel/installer" --prefer-dist
$ vim ~/.bash_profile
$ source ~/.bash_profile
ほぼ公式のページの焼き増しになってしまいますが、以下の通りインストールを行いました。
- Laravelプロジェクトの作成
$ laravel new lighthouse-tutorial
$ cd lighthouse-tutorial
- mysqlの起動
databaseが無いとmigrateで失敗するので、先に作成しておきます
$ mysql.server start
$ mysql -u root
mysql> create database lighthouse_tutorial;
- migrate
$ php artisan migrate
- seeding
$ php artisan tinker
>>> \App\Models\User::factory(10)->create()
- Lighthouseのインストール
$ composer require nuwave/lighthouse
- Lighthouseのpublish
php artisan vendor:publish --tag=lighthouse-schema
- GraphQL Playgrountを使うための設定
$ composer require mll-lab/laravel-graphql-playground
- ローカルサーバを起動
$ php artisan serve
http://127.0.0.1:8000/graphql-playground
にアクセスして、以下のクエリを発行してみると、結果が出てきます。
{
user(id:1){
id
name
email
}
}# Write your query or mutation here
{
"data": {
"user": {
"id": "1",
"name": "Maria Weber",
"email": "luettgen.solon@example.com"
}
}
}
ここまでで、GraphQLのエンドポイントを用意することはできたものの、ダミーデータを返すだけの状態である。
オリジナルのモデルを作って、そのモデルを通して値を返す仕組みを作る。
- Postモデルを作成
$ php artisan make:model -m Post
$ vim app/Models/Post.php
$ vim database/migrations/2021_05_22_021655_create_posts_table.php
- Commentモデルを作成
$ php artisan make:model -m Comment
$ vim app/Models/Comment.php
$ vim database/migrations/2021_05_22_022815_create_comments_table.php
- Userモデルにリレーションを作成
$ vim app/Models/User.php
- スキーマ作成
$ vim graphql/schema.graphql
- シーディングの準備
$ php artisan make:factory PostFactory -m Post
$ php artisan make:factory CommentFactory -m Comment
$ php artisan make:seeder UserSeeder
$ php artisan make:seeder PostSeeder
$ php artisan make:seeder CommentSeeder
その後シーディング、以下のようなQueryでPlaygroundから動作確認可能。
{
posts {
id
title
author {
name
}
comments {
id
reply
}
}
}