GraphQLを使ってシンプルな電子掲示板を作ってみる(1)

2020.4.29 12:00

GraphQL自体は3年前くらいに知って使ってみたものの、イマイチ使いづらかったので一旦放置していたが、
ようやく時代が追いついてきたっぽいので、GraphQLを使ってシンプルな電子掲示板を作ってみることにした。

GraphQLをざっくり説明してみる

GraphQLはクエリ言語と呼ばれている。感覚としてはSQLに近いだろうか。
例えば、usersテーブルからのデータの取得をSQLで行うなら

SELECT * from users;

になるが、GraphQLなら

query {
  users {
    id
    name
    ...
  }
}

になるだろう。
書き方は違えど、表現していることは「usersのデータをください」である。

REST vs GraphQL

時々、RESTとGraphQLを比較している記事があるが、
そもそもGraphQLは上記の通りただのクエリ言語なので、
そのまま対比で考えようとすると混乱しやすいような気がする。

表に整理すると下記の通り。

REST GraphQL
とは何か 思想 クエリ言語
WebAPIへの応用 RESTの原則に従ってエンドポイントを作る GraphQLを取り扱えるエンドポイントを作る
通信プロトコル HTTP なんでも (HTTP, WebSocket, etc...)
エンドポイント 複数 1つ
データプロトコル なんでも (JSON, XML, etc...) GraphQLスキーマ
提供者の主な責務 リソースとその取扱方法を正しく定義する リソースの公開範囲やクエリの権限管理を適切に設定する
利用者の主な責務 取り扱い方法を理解し正しく利用する 効率の良い取得クエリを書く

GraphQLが解決しそうなこと

今のWebAPIの主流はRESTful APIであるが、 GraphQLはRESTが抱える難しい問題の一部を解決してくれる可能性が高い。

  • 横断的なリソースの取得のためには複数の通信を行う必要があり実装が複雑化する
  • リソースに対する複雑な操作をどのように提供するかは熟練した人でも設計が難しい

詳しくは下記の文献を参照すると良い。

https://www.howtographql.com/basics/1-graphql-is-the-better-rest/

なぜ電子掲示板を作るのか

よくあるテーマだとTODO管理やTwitterクローンになるが、 最近のウェブサービスはかなり高機能であり、
ちょっと実装してみるには大変(そしてできたものと本家との差を感じて微妙な気持ちになる)なのと、
Perl/CGIが全盛期だった90年代に少ない情報で道を切り開いてきた先人へのリスペクトを込めて電子掲示板にしてみる。

# ただの懐古厨とか言ってはいけない...

作るもの

プログラミングを学び始めた頃、よくソースコードの書き方で参考にさせてもらっていた
kent-web さんの YY BOARD を題材にしてみる。

主な機能要件

  • 誰でも記事を投稿できる

    • 記事にはタイトルと本文が存在する
    • 記事には投稿者名、メールアドレス(任意)を含めることができる
    • 投稿日時が分かる
  • 記事に返信ができる

    • 返信には本文のみ存在する
    • 返信の際も投稿者名、メールアドレス(任意)を含めることができる
    • 投稿日時が分かる
  • 記事、返信を作成するときに削除用のキーを設定できる

    • 記事、返信ごとに削除用のキーを指定して削除することができる
  • 記事、返信を対象として全文検索ができる

次回

次回はスキーマを定義してみる。

graphql

Copyright 2020 tkzwhr's tech notes. All Rights Reserved. Built with Gatsby.