
2025.03.27
「過去1年でインシデントが増加」と回答した人は約8割 大規模化かつ高速化するDDoS攻撃から企業を守る、最新セキュリティ
リンクをコピー
記事をブックマーク
山本祥太氏:ここからはgqlgencの紹介に移りたいと思います。gqlgencはIntorospectionからスキーマ情報を取得できます。なので、先ほども説明したとおり、スキーマファイルが手元になかったとしてもスキーマの情報を取得することが可能です。
定義したクエリからクライアントの型を生成できます。こちらもスキーマ情報からの型生成になっているので、間違った型が生成されることはありません。生成した型を使ったクライアントを生成します。
最後にgqlgenのプラグイン機構をベースにgqlgencは構築されています。例えばすでにgqlgenでAPIを作成しているのであれば、gqlgencをプラグインとして読み込むことによって、そのサーバーに適応したクライアントを生成することが可能です。
では次にGitHubのサンプルを見ていこうと思います。gqlgencのExampleが入っているので自由に見られます。
まずは生成に必要なConfigファイルを上から順番に見ていこうと思います。このmodelフィールドは、スキーマ情報から生成されるGoファイルに関して、どこに生成するかを指定する項目です。
次にclientは、クライアントが用意しているクエリ情報から、生成されるクライアントのファイルがどこに生成されるかを指定する項目です。
次にmodelsです。これはgqlgenでも同じような項目があります。GraphQLのデフォルトの型は、IntやFloatなどがあるのですが、それら以外の型をサーバー側では定義することが可能です。
ただそれを別の型にアサインしたいという場合は、ここに書く必要があります。例えばGitHubの場合だと、DateTimeというものが定義されているので、こちらをGoのtime.Time型に置き換えたい場合、gqlgenがそれ用のパッケージを用意していて、このgraphql.Timeを読み込むとStringではなくてtime.Time型に置き換えてくれます。
次にendpointフィールドです。これはIntorospection用のフィールドになっていて、このURLに対してリクエストヘッダーを指定することによって、Intorospectionのクエリを投げてそのスキーマ情報を取得できます。
今回GitHubのAPIですが、GitHubのAPIは少し特殊で、GitHubのトークンのスコープによってクライアントが見られるスキーマが変わってくるので、このAPIのトークンに関しては、適切なスコープを設定する必要があります。
最後にqueryフィールドです。これはクライアントが指定しているクエリファイルの在処を指す場所です。
では次に、クエリを見ていこうと思います。今回はGitHubの自分のID、名前、レポジトリを取得するクエリを用意しました。viewerが自分で、IDと名前とrepositoriesを取得します。引数として、firstとprivacyを受けるようになっていて、firstに関しては引数で受けるものです。
GraphQLやRelayに馴染みのない方は、firstがあまりわからないかなと思うのですが、これはLimitと同じような意味合いであると今は思ってもらって大丈夫です。
もう1つのprivacyという引数には、PUBLICを入れると公開レポジトリのみを取得するので、このように指定しています。
では実際に生成してみたいと思います。gqlgencと叩くと、Intorospectionクエリが叩かれて、クエリファイルを読み込んで、この2つをガッチャンコしてファイルが生成されるはずです。
2つのファイルが生成されました。models_gen.goは、スキーマファイルに書かれている型がすべてGoのstruct、ないしはtype、interfaceなどで生成されています。
もう1つがクライアントの型で、先ほど自分たちが定義したクエリに対応する型が生成されて、そのクライアントが生成されたファイルになっています。先ほどのGetUserという型はここに定義されています。GetUserという名前のstructで、viewer、ID、Name、Repositoriesと続く、クエリと同じ構造になったstructが吐かれます。
リクエストを投げるためのドキュメントも必要で、クエリ名のドキュメントも生成されます。
この2つを利用してリクエストを投げると、関数がクライアントに生えて、先ほどの引数であるfirstもきちんとGoの関数の中でも引数として受けられるようになっています。
では実際にコードを動かしてみたいと思います。GitHubのAPIトークンが環境変数にセットされているので、それを取得して、リクエストヘッダーにセットします。
クライアントをNewして、その時にhttpのクライアントとリクエストする先と、httpヘッダーをセットするためのオプションである関数をセットします。
このクライアントに対してGetUserが生えているので、あとは呼び出します。firstは引数として入れなければいけないので、今回は10件だけ取得するので10と入れます。
このコードを実行してみると……このように自分のユーザー名とレポジトリ10件が取得されているのがわかると思います。
では次に、クエリを編集して生成し直してみます。今回はcreatedAtを追加してみようと思います。gqlgencコマンドを叩いてしばらく待っていると、おそらくもう一度さっきと同じフローが走ってクライアントが生成し直されます。
これを見ると、きちんとcreatedAtが入っているのがわかると思います。先ほど説明したとおり、DateTimeをこのように変換しているので、本来であればstring型で生成されるはずなのですが、ここで生成しているおかげでtime.Time型に変換されているのがわかると思います。ドキュメントにもきちんとCreatedAtが追加されているのが見えると思います。
では今度は、これも一緒に表示してみたいと思います。このようにして、あとは実行するだけでcreatedAtがきちんと表示されます。このように、クエリを変更して、genし直してという開発フローになるので、非常に扱いやすいと思います。以上で、gqlgencの紹介は終わります。
最後に、弊社が行っているGraphQL、Go関連の活動について紹介します。最近gqlgoというGitHubのオーガナイゼーションを作成しました。こちらにはGraphQL、Goの関連のツールを入れていて、これからも追加していく予定なので、興味のある方はぜひ見に来てください。
これで僕の発表は以上です。少しでも発表に興味をもってもらえたら幸いです。ありがとうございました。
2025.03.21
マネージャーの「自分でやったほうが早い」という行動で失うもの 効率・スピード重視の職場に足りていない考え方
2025.03.25
減点を恐れてモチベ低下、果ては離職も… あらゆる“会社の害虫”を大繁殖させる「ラスボス」の正体
2025.03.17
不確実な時代だからこそ「知らないこと」を武器にする ハーバード首席卒業生の逆説的なメッセージ
2025.03.19
組織をダメにする“害虫”の正体は間違った思い込み AIやDXなど手段のみにこだわるダメ上司の見極め方
2025.03.24
最悪の場合、組織を死に至らせる“会社の害虫”とは 誤った意思決定や品質不祥事を招く要因
2025.03.19
フェデラー氏が語る「ただの1ポイント」の哲学 ウィンブルドン敗北から学んだ失敗からの立ち直り方
2025.03.24
気づけばモラル崩壊……人材育成に無頓着な企業の末路 業績アップや採用にもつながる“人への投資”の重要性
2025.03.19
OpenAIのAIエージェント「Deep research」はビジネスをどう変革するのか? サム・アルトマン氏ら4人がデモンストレーション
2025.03.19
大企業だけじゃない、「モーレツ×内向き」な組織の2つのリスク “悪気なく染み付いた文化”は個人のキャリアにも悪影響
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.03.21
マネージャーの「自分でやったほうが早い」という行動で失うもの 効率・スピード重視の職場に足りていない考え方
2025.03.25
減点を恐れてモチベ低下、果ては離職も… あらゆる“会社の害虫”を大繁殖させる「ラスボス」の正体
2025.03.17
不確実な時代だからこそ「知らないこと」を武器にする ハーバード首席卒業生の逆説的なメッセージ
2025.03.19
組織をダメにする“害虫”の正体は間違った思い込み AIやDXなど手段のみにこだわるダメ上司の見極め方
2025.03.24
最悪の場合、組織を死に至らせる“会社の害虫”とは 誤った意思決定や品質不祥事を招く要因
2025.03.19
フェデラー氏が語る「ただの1ポイント」の哲学 ウィンブルドン敗北から学んだ失敗からの立ち直り方
2025.03.24
気づけばモラル崩壊……人材育成に無頓着な企業の末路 業績アップや採用にもつながる“人への投資”の重要性
2025.03.19
OpenAIのAIエージェント「Deep research」はビジネスをどう変革するのか? サム・アルトマン氏ら4人がデモンストレーション
2025.03.19
大企業だけじゃない、「モーレツ×内向き」な組織の2つのリスク “悪気なく染み付いた文化”は個人のキャリアにも悪影響
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
【仕事に直結】頭がいいとは?|知見の幅と高さで決まる。【東大卒 ベンチャー企業社長が語る】
2025.01.18 - 2025.01.18
退職をチャンスに捉える企業文化のつくり方
2025.03.10 - 2025.03.10
青木耕平さんとザッソウ(#156〜158)
2025.02.05 - 2025.03.19
片付けパパ対談【特別編】豊かな人生を過ごすための「投資」&「交渉術」 ~チャンスを逃さず信頼関係も育むコツ~
2025.02.10 - 2025.02.10
グローバルの経営理論に学ぶ、企業アルムナイ成功への示唆〜中央大学ビジネススクール 犬飼知徳教授
2025.02.18 - 2025.02.18