Google 側の準備

Google APIs を利用するにあたり、前もってサービスプロバイダ (= Google) 側でクライアントの登録が必要です。以下の Google Developers Console から作業します。

Google Developers Console

  • 手順(1). Create Project から新規プロジェクト "MyProject" を作成
  • 手順(2). "APIs & auth > APIs" を選択。Gmail, Calendar など様々な API が並んでおり必要なものを Enable 可能ですが、今回は例として Drive API を使ってみます。
apis
  • 手順(3). "APIs & auth > Credentials" を選択、Create New Client ID から新しいクライアントを以下のパラメータで登録します。今回は開発段階としてローカルでクライアント(Rubyプログラム)を動かすためlocalhostの適当なポートを指定しています。
    • Application type = "Web application"
    • Redirect URIs = "http://localhost:8080/oauth2callback"
    • JavaScript origins = "http://localhost:8080"
cred
  • 手順(4). クライアントが登録できたら、"Download JSON" ボタンからクライアント実装に必要となるデータを入手します。次のようなJSONが落ちてきます(一部置換していますが)。

それではこれを使って OAuth 2.0 認可フローを Ruby で進めて行きます。とりあえずの目標は Google Drive のデータにアクセスすることです。

oauth2 と signet について

まず Google APIs における OAuth 2.0 利用情報は以下の公式ドキュメントに詳しく記載されています。

Using OAuth 2.0 to Access Google APIs | Google Identity Platform | Google Developers

Ruby で OAuth 2.0 を使う際にデファクトスタンダードとなっているのが、以下の oauth2 gem です。前述の 4 Grant Types に対応しているほか、入手したアクセストークンを付与してリソースを取得するリクエスト部分もサポートしてくれます。

intridea/oauth2

実のところ、Google APIs に限っては Google が独自に実装した signet という gem が存在しており、Google APIs 機能と OAuth 2.0 認可が統合されているため Google はこちらを使うことを推奨しています。

OAuth 2.0 | API Client Library for Ruby (Alpha) | Google Developers

しかし本記事では解説に汎用性を持たせるため、signet ではなく oauth2 の方を利用していますのでご了承ください。

最後のページでは Google APIs のアクセストークンを入手し、Google Drive のファイル一覧を参照する例を示します。