0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Microsoft Graph API を Ruby で操作してみる

Posted at

タイトル通り、Microsoft Graph API を Ruby で操作してました。
パッと検索してもあまりわかりやすい情報が出てこなかったため、手順をメモ書きしておきます。

準備編

1. Microsoft Azure にサインイン

Microsoft Azure にアクセスし、Microsoftアカウントでサインインします。

スクリーンショット 2024-05-19 19.06.28.png

2. アプリを作成

サインインに成功したら、アプリの登録 からアプリを新規作成します。

スクリーンショット 2024-05-19 20.06.30.png

  • 名前
    • test
  • サポートされているアカウントの種類
    • 任意の組織ディレクトリ内のアカウント(任意の Microsoft Entra ID テナント - マルチテナント)と個人用の Microsoft アカウント(Skype、Xbox など)
  • リダイレクト URI

3. API のアクセス許可を設定

「管理」 -> 「APIのアクセス許可」と進み、「Microsoft Graph」を追加し、必要な許可を追加します。

スクリーンショット 2024-05-19 19.21.24.png

今回は試しにカレンダーへの読み書き権限(Calendars.ReadWrite)を追加してみました。

4. クライアントシークレットを追加

「管理」 -> 「証明書とシークレット」と進み、「新しいクライアントシークレット」からクライアントシークレットを追加します。

スクリーンショット 2024-05-19 19.23.05.png
スクリーンショット 2024-05-19 19.24.38.png

「値」列に表示されている文字列がクライアントシークレットです。初回以降は見えなくなってしまうため、忘れずにメモしておきましょう。

実践編

諸々の下準備が完了したので、いよいよ実践に入っていきましょう。

1. 環境構築

下記コマンドを実行し、実行環境の構築を行います。

$ mkdir outlool-api-for-calendar && cd outlool-api-for-calendar
$ touch Gemfile  Gemfile.lock
./Gemfile
# 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
./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}"

スクリーンショット 2024-05-20 4.14.43.png

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: 以下)が生成されるので、そちらにアクセスします。

スクリーンショット 2024-05-20 4.22.51.png

アプリを許可し、認証に成功すると次のような画面にリダイレクトされるはずです。

スクリーンショット 2024-05-19 20.16.05.png

URL 内に含まれる code= の部分を Enter the authorization code: 以下に入力してください。

スクリーンショット 2024-05-20 4.17.46.png

特に問題が無ければ Access token: 以下にアクセストークンが表示されるので、こちらをメモっておきましょう。

3. カレンダーを操作してみる

アクセストークンが取得できたら、早速カレンダーを操作してみましょう。

$ touch create_event.rb
./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

上手くいけばカレンダーにイベントが追加されているはずです。

スクリーンショット 2024-05-20 4.36.15.png

その他にも

  • 一覧取得
  • 更新
  • 削除

といった操作が可能なので、ドキュメントを参考に色々遊んでみるといいでしょう。

まとめ

以上、Microsoft Graph API を Ruby で操作してみました。

ちなみに、Ruby 向けの SDK としてこんなものも出ているみたいです。

今回は使用しませんでしたが、時間のある時にチェックしてみたいと思います。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?