Google 側の準備
Google APIs を利用するにあたり、前もってサービスプロバイダ (= Google) 側でクライアントの登録が必要です。以下の Google Developers Console から作業します。
- 手順(1). Create Project から新規プロジェクト "MyProject" を作成
- 手順(2). "APIs & auth > APIs" を選択。Gmail, Calendar など様々な API が並んでおり必要なものを Enable 可能ですが、今回は例として Drive API を使ってみます。
- 手順(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"
- 手順(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 に対応しているほか、入手したアクセストークンを付与してリソースを取得するリクエスト部分もサポートしてくれます。
実のところ、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 のファイル一覧を参照する例を示します。