タイトル通り、Microsoft Graph API を Ruby で操作してました。
パッと検索してもあまりわかりやすい情報が出てこなかったため、手順をメモ書きしておきます。
準備編
1. Microsoft Azure にサインイン
Microsoft Azure にアクセスし、Microsoftアカウントでサインインします。
2. アプリを作成
サインインに成功したら、アプリの登録 からアプリを新規作成します。
- 名前
- test
- サポートされているアカウントの種類
- 任意の組織ディレクトリ内のアカウント(任意の Microsoft Entra ID テナント - マルチテナント)と個人用の Microsoft アカウント(Skype、Xbox など)
- リダイレクト URI
3. API のアクセス許可を設定
「管理」 -> 「APIのアクセス許可」と進み、「Microsoft Graph」を追加し、必要な許可を追加します。
今回は試しにカレンダーへの読み書き権限(Calendars.ReadWrite
)を追加してみました。
4. クライアントシークレットを追加
「管理」 -> 「証明書とシークレット」と進み、「新しいクライアントシークレット」からクライアントシークレットを追加します。
「値」列に表示されている文字列がクライアントシークレットです。初回以降は見えなくなってしまうため、忘れずにメモしておきましょう。
実践編
諸々の下準備が完了したので、いよいよ実践に入っていきましょう。
1. 環境構築
下記コマンドを実行し、実行環境の構築を行います。
$ mkdir outlool-api-for-calendar && cd outlool-api-for-calendar
$ touch Gemfile Gemfile.lock
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem "oauth2"
gem "httparty"
$ bundle install --path vendor/bundle
2. アクセストークンを取得
API リクエスト時に使用するアクセストークンを取得するためのコードを書きます。
$ touch get_token.rb
require "bundler/setup"
require "oauth2"
require "httparty"
client_id = "*************" # 「概要」ページ内の「アプリケーション (クライアント) ID」
client_secret = "*************" # 「管理 -> 証明書とシークレット」ページ内の「値」
redirect_uri = "http://localhost:3000/auth/microsoft_graph/callback"
tenant = "common"
authorize_url = "https://login.microsoftonline.com/#{tenant}/oauth2/v2.0/authorize"
token_url = "https://login.microsoftonline.com/#{tenant}/oauth2/v2.0/token"
client = OAuth2::Client.new(client_id, client_secret, {
site: "https://login.microsoftonline.com",
authorize_url: authorize_url,
token_url: token_url
})
# 認証 URL を生成
auth_url = client.auth_code.authorize_url(redirect_uri: redirect_uri, scope: "openid email profile https://graph.microsoft.com/Calendars.ReadWrite")
puts "Open the following URL in your browser and authorize the application: #{auth_url}"
# 認証後に取得したコードを入力してアクセストークンを取得
puts "Enter the authorization code: "
code = gets.chomp
token = client.auth_code.get_token(code, redirect_uri: redirect_uri, scope: "openid email profile https://graph.microsoft.com/Calendars.ReadWrite")
puts "Access token: #{token.token}"
client_id
は「概要」ページ内の「アプリケーション (クライアント) ID」に表示されているものをセットしてください。
$ ruby get_token.rb
=> Open the following URL in your browser and authorize the application: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=*************&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Fmicrosoft_graph%2Fcallback&response_type=code&scope=openid+email+profile+https%3A%2F%2Fgraph.microsoft.com%2FCalendars.ReadWrite
コードを実行すると、認証用の URL(Open the following URL in your browser and authorize the application:
以下)が生成されるので、そちらにアクセスします。
アプリを許可し、認証に成功すると次のような画面にリダイレクトされるはずです。
URL 内に含まれる code=
の部分を Enter the authorization code:
以下に入力してください。
特に問題が無ければ Access token:
以下にアクセストークンが表示されるので、こちらをメモっておきましょう。
3. カレンダーを操作してみる
アクセストークンが取得できたら、早速カレンダーを操作してみましょう。
$ touch create_event.rb
require "bundler/setup"
require "httparty"
require "json"
access_token = "*************************"
new_event = {
"subject": "test",
"body": {
"contentType": "HTML",
"content": "test test test"
},
"start": {
"dateTime": "2024-05-20T19:00:00",
"timeZone": "Asia/Tokyo"
},
"end": {
"dateTime": "2024-05-20T20:00:00",
"timeZone": "Asia/Tokyo"
},
}
response = HTTParty.post(
'https://graph.microsoft.com/v1.0/me/events',
headers: {
'Authorization' => "Bearer #{access_token}",
'Content-Type': 'application/json'
},
body: new_event.to_json
)
if response.code == 201
puts "Event created successfully."
else
puts "Failed to create event: #{response.body}"
end
$ ruby create_event.rb
上手くいけばカレンダーにイベントが追加されているはずです。
その他にも
- 一覧取得
- 更新
- 削除
といった操作が可能なので、ドキュメントを参考に色々遊んでみるといいでしょう。
まとめ
以上、Microsoft Graph API を Ruby で操作してみました。
ちなみに、Ruby 向けの SDK としてこんなものも出ているみたいです。
今回は使用しませんでしたが、時間のある時にチェックしてみたいと思います。