Slide 1

Slide 1 text

アプリエンジニアのための GraphQL⼊⾨

Slide 2

Slide 2 text

note inc. ‧2024年2⽉にnoteにジョイン ‧note Appチームリーダー ‧2015年〜モバイルアプリを専⾨に扱うようになる ‧それ以前はPHPやRubyでのバックエンド開発がメイン Spycwolf Kota KANEKO 2

Slide 3

Slide 3 text

note inc. GraphQLとは https://graphql.org/ ● API のクエリ⾔語であり、既存のデータを使⽤してそれらのクエリを実⾏するた めのランタイムです。GraphQL は API 内のデータの完全でわかりやすい説明を 提供し、クライアントが必要なものだけを正確に要求できるようにします。 ● GraphQL クエリを API に送信すると、必要なものだけが正確に取得されます。 それ以上でもそれ以下でもありません。GraphQL クエリは常に予測可能な結果 を 返します。 ● GraphQL クエリは、1 つのリソースのプロパティにアクセスするだけでなく、そ れらの間の参照もスムーズに追跡します。⼀般的な REST API では複数の URL か らの読み込みが必要ですが、GraphQL API では 1 回のリクエストでアプリに必要 なすべてのデータを取得します。

Slide 4

Slide 4 text

note inc. GraphQLとの出会い ● GraphQLは元々Facebookの内部で開発されたもので、2015年に⼀般に公開さ れ、その後、2018年に現在のGraphQL Foundationに移譲された ● 2017年に新規アプリサービスの開発に伴い、当時のチームメンバーとGraphQL の導⼊を決めた ● APIとクライアントアプリとを並⾏してゼロから開発するタイミングで、関係す るエンジニア4⼈全員がAPIもアプリも両⽅を開発していった GraphQL導⼊の判断 ● 実装する前段階の設計についてほぼ検討する箇所がない ● REST APIは会社ごと、チームごとに設計が異なり、新規に開発するにも設計部分 に検討が必要そうだった ● 単純に新しいものを使ってみたかった!

Slide 5

Slide 5 text

note inc. 当時の感想 ● 当時はまだ細かい配慮が必要ではあったが、とにかく直感的に実装しやすい ● indexとshowの区別を厳密に考慮しなくても後々困ることが少ないため、クライ アント側の画⾯要件が固まっていなくてもAPI側の開発を進められる ● REST APIに対しても当時からCodegeneratorはあったが、Apolloが扱いやすい ● Grapiqlのようなプレイグラウンド環境が標準で備わっていて、クライアントか らのスキーマ確認&レスポンス確認がしやすい サーバーサイドの開発に慣れていないモバイルアプリエンジニアで も実装しやすい!

Slide 6

Slide 6 text

note inc. 覚えておくべきことはたった3つ

Slide 7

Slide 7 text

note inc. Schemaを定義する ● 取得系はQuery、更新系はMutationという概 念 ● 基本的にはリソースごとに取得できるカラム 情報を定義する ● ここで定義するスキーマは、そのままクライ アントからクエリとして指定できるものにな る ● QueryもMutationもinputとして引数を設定 できる ● 基本的にはこれだけ

Slide 8

Slide 8 text

note inc. Resolverを定義する ● Resolverはリソースとスキーマとの関連を定 義する ● データベースから取得したデータをそのまま スキーマに当てはめる場合が多いが、取得し たデータを加⼯して返却する場合もある ● UseCase的なレイヤー

Slide 9

Slide 9 text

note inc. Serviceを定義する ● データベースとのやり取りは別定義にする ケースが多い ● ここで定義したデータ取得する、もしくは更 新系の処理を⾏う ● Repository、DataSource的な役割

Slide 10

Slide 10 text

note inc. プロジェクトの覗きかた ● graphqlはエンドポイントが1つなので、/grapql というディレクトリを探す ● その配下に schema や resolver などが⾒つかるはず ● データリソースへのアクセスは resolverから辿れるはず ● レスポンスを確認したいときは schema のネーミングから、該当する resolver を探す ● resolver の定義を確認すれば何をしているのか、どこからデータを持ってきてい るのか、どこでデータを処理しているのかがわかるはず

Slide 11

Slide 11 text

note inc. 実際にプロダクトで扱うには3つ だけ理解しておけばいいなんてこ とはありません!

Slide 12

Slide 12 text

note inc. 普段あまりAPIの実装をしたこと がない⽅もチャレンジしてみてく ださい

Slide 13

Slide 13 text

Thank you 
 !