Open6

Lighthouseを使ってみる

katoakikatoaki

Laravel + Vue + GraphQLな構成でアプリを開発することとなり、Lighthouseというフレームワークを使うこととなった。
ただ、Lighthouseは使ったことがないし、そもそもGraphQLも良くわかってない(ODataみたいなやつ?)。

とりあえず動かしてみたくなったのでやってみる。

katoakikatoaki

前提として、私の環境では以下のインストールがされています。これらは以後のインストール作業で必要そうです。

  • 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
katoakikatoaki

ほぼ公式のページの焼き増しになってしまいますが、以下の通りインストールを行いました。

https://lighthouse-php.com/tutorial/#installing-lighthouse

  • 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
katoakikatoaki

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"
    }
  }
}

katoakikatoaki

ここまでで、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
    }
  }
}