昨日に引き続き、VALU Advent Calendar 2019 二日目の記事になります。

※ VALUではPHPを利用していますが、使い慣れているRubyを使います。

Access Tokenの発行

github explorerではsign inするだけでGraphQL APIを利用することが出来ましたが、自作のプログラムで利用するためにはAccess Tokenが必要になります。

https://github.com/settings/tokens でAccess Tokenの発行をしましょう。

rubyプロジェクトの作成

RubyMineからプロジェクト作成します。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/240b3376-9707-45fb-9c38-7762ea99d4dc/_2019-12-02_8.35.21.png

依存Gemの指定

visualize_activities.gemspec に必要なgemを追加します。

+  spec.add_dependency "thor"
+  spec.add_dependency "graphql-client"
 end

thor はCLIツールをかんたんに作れるgemです。

graphql-client は言わずもがな、GraphQLのクライアントとなるgemです。

bundle install

bundle install --path .bundle

コマンド一発ですね。

GraphQL::ClientのConfiguration

lib/visualize_activities.rb を以下のように修正します。

ドキュメントどおりに着実に。

+++ b/lib/visualize_activities.rb
@@ -1,6 +1,22 @@
 require "visualize_activities/version"
 
+require "graphql/client"
+require "graphql/client/http"
+
 module VisualizeActivities
+  HTTP = GraphQL::Client::HTTP.new('<https://api.github.com/graphql>') do
+    def headers(context)
+      {
+          "Authorization" => "Bearer #{ENV['GITHUB_ACCESS_TOKEN_FOR_VISUALIZE_ACTIVITIES']}"
+      }
+    end
+  end
+
+  Schema = GraphQL::Client.load_schema(HTTP)
+  Client = GraphQL::Client.new(schema: Schema, execute: HTTP)
+
   class Error < StandardError; end
   # Your code goes here...
 end