次章予告この章について何はともあれ早速GraphQLのサーバーサイドコードを実際に見てみましょう。今回はgqlgenというGo用GraphQLサーバーサイドライブラリを使用します。gqlgenコマンドには、サンプルアプリとしてTODO管理APIのコードを生成させる機能があるため、それを生成させたのちに実際に動かすところまでやっていきたいと思います。gqlgenコマンドgqlgenコマンドは、GraphQLのスキーマ情報からGoで書かれたサーバーサイドコードを自動生成させるコマンドです。installコマンドを使ってインストールします。initを実行してみましょう。initによって生成されたコードについて解説していきます。生成されたコード一覧は以下です。GraphQLスキーマ定義GraphQLにはスキーマというものが存在しており、どのようなオブジェクト型が用意されているのかどのようなクエリ・ミューテーションがあるのかという情報を拡張子.graphqlsのファイルに記述しておきます。initコマンドによって生成されるのはTODO管理のサンプルアプリコードなので、そのTODO管理で使うスキーマがここに配置されています。追加されたTODOTODOタスクのオーナーとなるユーザーの2種類のオブジェクトが存在し、それぞれのスキーマがgraph/schema.graphqlsに定義されています。String!}models_gen.goファイルには、このTODOオブジェクトとユーザーオブジェクトに対応するGoの構造体型が定義されています。リゾルバコードサーバーサイドGraphQLのコアとなる「リゾルバ」と呼ばれる部分のボイラーテンプレートがここに生成されています。resolver.goの中にはリゾルバ構造体Resolver型が定義されており、schema.resolvers.goの中にはメソッドが定義されています。todos"))}GraphQLスキーマ内で定義されていたクエリ・ミューテーションと、生成されたリゾルバメソッドの対応関係は以下のとおりです。[Todo!]!}生成時にはpanicが入っていますが、ここを書き換えてリクエスト受信時のビジネスロジック部分を作るのがサーバーサイドGraphQLを実装する際の作業です。開発者目線ではschema.resolvers.goに生成されたリゾルバメソッドの中身を埋めれば済む話ですが、そもそもGraphQLのリクエストがサーバーに届くリクエストに含まれているクエリを解釈し「呼ばれているのはスキーマに定義されたtodosクエリだ」と判断するリゾルバ構造体のTodosメソッドを呼ぶという一連の判断ロジックもどこかに必要になります。todosクエリの場合、開発者が書いたリゾルバメソッドの戻り値は[]model.Todo型ですが、この[]model.Todo型からユーザーに返すjsonレスポンスボディを生成する部分も、APIサーバーとして稼働させるためには必須のロジックです。このように、ユーザーから受け取ったHTTPリクエストボディに含まれているクエリから、適切なリゾルバを呼び出すリゾルバが返した結果をHTTPレスポンスに変換して、ユーザーに返却するという、リゾルバをHTTPサーバーとして稼働させるための橋渡し部分を実装しているコードがgenerated.goです。このgenerated.goの中に生成されるコードは、GraphQLのスキーマに応じてgqlgenが自動で生成したものです。そのため、開発者がこのファイルの中身を手動で編集・変更することはありません。!generated.goのファイル冒頭にも、「このファイルは自動生成されたものだから編集しないでね」との注意書きコメントが書かれています。サーバーエントリポイントGraphQLサーバーのエントリポイントとなる部分です。デフォルトでは8080番ポートで稼働し、/queryにGraphQLリクエストを送ったら結果が返ってきて、/をブラウザで開くとクエリを実行するためのPlaygroundが使えるというものが実装されています。nil))}gqlgen.ymlgqlgen.ymlは、gqlgenコマンドでコードを生成する際の設定を記述するyamlファイルです。以下のような項目が設定できます。model生成されたサンプルTODO管理APIサーバーを動かしてみる生成されたコードの紹介ができたところで、早速これを動かしてみましょう。リゾルバの中身を埋めるまずはgraph/schema.resolvers.goに生成されたリゾルバの中身を埋めましょう。本当はDBに接続してデータのinsertやselectクエリ実行を行うべきところですが、今回は動作を確認したいだけですので適当なTODO構造体を返すだけに留めておきます。nil}サーバーを起動させるエントリポイントであるserver.goを実行することで、GraphQLサーバーを起動させることができます。デフォルトですと8080番ポートが使われます。playgroundPlaygroundからクエリを実行http://localhost:8080/をブラウザで開くと、以下のようなクエリ実行のためのPlaygroundにアクセスすることができます。左側の入力欄に実行したいクエリを入力して、▷の実行ボタンを押すことで右側に結果が表示される仕組みです。試しにtodosクエリを実行してみます。}}このように、リゾルバ内で静的にreturnしていたTODO構造体の内容が取得できていることが確認できました。次に、createTodoミューテーションも同様に実行してみましょう。}}こちらもリゾルバでreturnした内容が表示されています。これにて動作確認は成功です。今回はgqlgenに元々用意されていたサンプルアプリを動かしてみましたが、次からはオリジナルの内容でGraphQLサーバーを作っていきたいと思います。