Slide 1

Slide 1 text

LaravelでGraphQL を試してみた

Slide 2

Slide 2 text

Hello! ● @AkogareSe ● エンジニア 7年目 ● 最近「風が強く吹いている」を観る泣く ● 今の開発チームは主にPHP ● Laravelを勉強中 ○ 勉強会を開催/参加したい 2

Slide 3

Slide 3 text

What is GraphQL? ● APIのクエリ言語 ● 仕様であり製品ではない 3

Slide 4

Slide 4 text

特徴 ● 型安全 ● 必要な情報のみを取得可能 ● レスポンスの形式が予測しやすい 4

Slide 5

Slide 5 text

● Laravel用GraphQLライブラリ 5 Lighthouse

Slide 6

Slide 6 text

Example 6

Slide 7

Slide 7 text

Database Table 7

Slide 8

Slide 8 text

8 Users ● id ● name Posts ● id ● user_id ● content 1 * Users and Posts

Slide 9

Slide 9 text

Laravel Model Class 9

Slide 10

Slide 10 text

namespace App; class User extends Model { public function posts(): HasMany { return $this->hasMany(Post::class); } } namespace App; class Post extends Model { public function user(): BelongsTo { return $this->belongsTo(User::class); } } app/User.php app/Post.php 10

Slide 11

Slide 11 text

GraphQLの スキーマ定義(SDL) 11

Slide 12

Slide 12 text

複数のPostを持つ User::posts(): HasManyと対応付け type User { id: ID! name: String! posts: [Post!]! @hasMany } type Post { id: ID! content: String! user: User! @belongsTo } type Query { userById(id: Int! @eq): User @find } タイプ定義 Modelと自動で対応付け フィールド名と型( !はNOT NULL, [ ]は配列) 1人のユーザに所属する Post::user(): BelongsToと対応付け 特別なタイプ データ取得クエリを定義 graphql/schema.graphql idに一致した1ユーザ分の情報を返す 12

Slide 13

Slide 13 text

API Access 13

Slide 14

Slide 14 text

14 Request Respons

Slide 15

Slide 15 text

15 Request Respons

Slide 16

Slide 16 text

まとめ 16

Slide 17

Slide 17 text

● GraphQLはAPIの仕様 ● LighthouseでGraphQLを実装できる 17

Slide 18

Slide 18 text

Thanks! Sample Project https://github.com/2bo/laravel-graphql-sample 18

Slide 19

Slide 19 text

References ◎ GraphQL ◎ Lighthouse ◎ GraphQL入門 - 使いたくなるGraphQL ◎ 「GraphQL」徹底入門 ─ RESTとの比較、API・フロント双方の実装から 学ぶ ◎ LaravelにLighthouseを導入してGraphQLサーバーを作る ◎ [Laravel] Fakerで日本語を扱う ◎ Laravel Lighthouse GraphQL - Sorting on server side 19

Slide 20

Slide 20 text

1. Laravelのプロジェクトを作る 1.1. $ laravel new lighthouse-sample 2. マイグレートする(デフォルトでUsersテーブルが作成される) 2.1. $ php artisan migrate 3. lighthouseとlaravel-graphql-playgroundを追加する 3.1. $ composer require nuwave/lighthouse 3.2. $ composer require mll-lab/laravel-graphql-playground 4. graphql/schema.graphqlを生成する 4.1. $ php artisan vendor:publish --provider="Nuwave\Lighthouse\LighthouseServiceProvider" --tag=schema 5. http://[hostname]/graphql-playgroundをブラウザで開く おまけ~Lighthouseを試す際の導入手順~ 20