Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20250325_Logic Apps / Power Automate の SharePoi...

20250325_Logic Apps / Power Automate の SharePoint コネクタの裏側を知る 〜Graph APIで直接操作してみよう〜

Graph APIを利用すると、SharePoint Listにデータを登録したり、Document Libraryにファイルをアップロードすることができますが、Logic AppsやPower Automateでは、専用のコネクタが内部的にAPIを呼び出して処理を実行しています。このブラックボックスな部分を理解するために、コネクタを使用せずにGraph APIを直接呼び出す方法や、C#でGraph SDKを活用する方法について具体的な実装例をみていけたらと思います。

アジェンダ
- Introduction
- はじめに
- SharePoint コネクタの仕組み
- Graph API を使った直接操作
- Graph API の基本
- Microsoft Entra IDの設定
- SharePoint Listへのデータ登録
- Document Libraryへのファイルアップロード
- サービスプリンシパル(SP)を利用したGraph API操作の流れ
- C# を使った Graph API 活用
- まとめ

yutakaosada

March 25, 2025
Tweet

More Decks by yutakaosada

Other Decks in Technology

Transcript

  1. Agenda • Introduction • はじめに • SharePoint コネクタの仕組み • Graph

    APIを使った直接操作 • Graph APIの基本 • Microsoft Entra IDの設定 • SharePoint Listへのデータ登録 • Document Library へのファイルアップロード • SPを利用したGraph API操作の流れ • C#を使ったGraph API活用 • まとめ DO WHAT MATTERS 2
  2. Yutaka Osada (長田 豊) • DevOps Engineer @Avanade Japan •

    業務 • Azureコンポーネントを活用したサー ビス構築 • 技術検証、パフォーマンスチューニン グを得意とし、T-SQLが好き。 • 技術スタック • C#, .NET, Azure(PaaS), Azure DevOps, GitHub • Please follow me DO WHAT MATTERS 3 https://github.com/yutaka-art
  3. はじめに DO WHAT MATTERS 4 • 目的 • Logic Apps

    / Power Automate のSharePointコネクタ の内部動作を理解する • Graph APIを直接利用してSharePointを操作する方法を 学ぶ • 対象 • Power Platform ユーザー • M365 開発者 • C# 開発者 • ゴール • SharePointコネクタの裏側を理解し、利用シーンを適 切に判断できるようになる • Graph APIを利用して、SharePoint List や Document Library を操作する実装例を把握する • C# で Microsoft Graph SDK を利用する際の基本的な コードの流れを理解する
  4. SharePoint コネクタの仕組み DO WHAT MATTERS 5 • POWER AUTOMATEやLOGIC APPSのSHAREPOINTコネクタの役割

    • ユーザーが直接APIの操作を意識することなく、SharePointのデータ操作を可能にする • 代表的なアクション • Create Item:SharePoint List に新しいアイテムを追加 • Get Items:List からデータを取得 • Update Item:既存のアイテムを更新 • Delete Item:アイテムを削除 • Create File:Document Library にファイルをアップロード • Get File Content:Document Library からファイルを取得 • 認証の自動管理 • Microsoft EntraID 認証を内部で管理し、トークンの取得や更新を自動化 • GRAPH API / SHAREPOINT REST APIの内部利用 • Logic Apps / Power Automate の SharePoint コネクタは、内部的に Graph API また は SharePoint REST API を呼び出して操作を実行している • 新しいアクションや複雑な処理は Graph API が利用されることが多い • 一部のレガシー機能は SharePoint REST API (/_api/...) を使用 • では、コネクタを使わずに GRAPH API を直接呼び出すとどうなるのか?
  5. Graph APIを使った直接操作 (1/5) DO WHAT MATTERS 6 Graph API の基本

    • GRAPH API とは • Microsoft 365 のサービスに統一的にアクセスするための API • SharePoint、Teams、Outlook などのデータ操作が可能 • REST ベースの API で、HTTP リクエストを使用して操作を実行 • エンドポイントの基本構成 • https://graph.microsoft.com/{version}/{resource} • 例: • SharePoint List のデータ取得 • GET https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list- id}/items • Document Library にファイルをアップロード • PUT https://graph.microsoft.com/v1.0/drives/{drive- id}/root:/path/to/file:/content • 認証の仕組み • Microsoft Entra ID (旧Azure AD) を利用した OAuth 2.0 認証 • アクセストークン を取得して API を呼び出す • アプリ(サービスプリンシパル) を登録し、必要な権限を付与 • Bearer トークン を Authorization ヘッダーに含めてリクエストを送信 https://learn.microsoft.com/ja-jp/graph/overview
  6. Graph APIを使った直接操作 (2/5) DO WHAT MATTERS SP(サービスプリンシパル)を利用したGraph API操作の流れ(サマリ) 1. Microsoft

    Entra ID に SP(サービスプリンシパル)を作成 2. API Permissions を設定 • SharePoint の操作に必要な権限を付与 3. アクセストークンの取得 • Client ID、Client Secret、Tenant ID を利用してトークンを取得 4. Graph API の呼び出し • アクセストークンを Authorization ヘッダーに設定して Graph API を呼び出す 5. データの取得・操作 • site-id / list-id / drive-id を取得して、目的のリスト・ライブラリにアクセス • POST / PUT メソッド を利用して、リストの作成、ファイルのアップロードを実行
  7. Graph APIを使った直接操作 (3/5) DO WHAT MATTERS 8 Graph API を利用するために必要な準備(Microsoft

    Entra ID の設定) • MICROSOFT ENTRA ID に サービスプリンシパル (SP) を作成 • アプリ登録 → Client ID と Client Secret の取得 • 必要な権限 (API Permissions) の付与 • Sites.ReadWrite.All:SharePoint のデータの読み書き • Files.ReadWrite.All:Document Library へのファイル操作 • アクセストークンの取得 (OAUTH 2.0 フロー) • Client Credentials フロー を使用 • 例: • POST https://login.microsoftonline.com/{tenant- id}/oauth2/v2.0/token • Content-Type: application/x-www-form-urlencoded • client_id={Client-ID} • scope=https://graph.microsoft.com/.default • client_secret={Client-Secret} • grant_type=client_credentials これを利用してAPIを操作する
  8. Graph APIを使った直接操作 (4/5) DO WHAT MATTERS SharePoint List へのデータ登録 •

    エンドポイント • POST https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list- id}/items • Authorization ヘッダー にアクセストークンを設定 • Authorization: Bearer {アクセストークン} • SITE-ID の取得 • GET https://graph.microsoft.com/v1.0/sites/{hostname}:/sites/{site- name} • LIST-ID の取得 • GET https://graph.microsoft.com/v1.0/sites/{site-id}/lists • リクエスト例(リストアイテムの追加) • POST https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list- id}/items • { • "fields": { • "Title": "新しいタスク", • "Description": "Graph API で追加" • } • }
  9. Graph APIを使った直接操作 (5/5) DO WHAT MATTERS Document Library へのファイルアップロード •

    エンドポイント • PUT https://graph.microsoft.com/v1.0/drives/{drive- id}/root:/path/to/file:/content • Authorization ヘッダー にアクセストークンを設定 • Authorization: Bearer {アクセストークン} • DRIVE-ID の取得 • GET https://graph.microsoft.com/v1.0/sites/{site-id}/drives • リクエスト例(ファイルアップロード) • PUT https://graph.microsoft.com/v1.0/drives/{drive- id}/root:/folder/filename.txt:/content • Content-Type: text/plain • {アップロードするファイルの内容} • ファイルの更新 も同じエンドポイントで実施 • ファイルサイズが 4MB 以上 の場合は、セッションを 確立しての大容量アップロード が必要
  10. C#を使ったGraph API活用 DO WHAT MATTERS アーキテクチャ Azure SDK <認証系クラス> •

    DefaultAzureCredentialクラス • ClientSecretCredentialクラス ※特定のサービスプリンシパルを利用する場合 ClientSecretCredentialクラスを利用 サービスプリンシパル • クライアントID • クライアントシークレット • テナントID アプリ Microsoft Graph アプリの登録 クライアントIDの登録 Microsoft Entra ID ②トークンを提示 ④情報をリターン SharePoint ①トークンを取得 ③情報を取得 APIのアクセス許可 Sites.ReadWrite.All:SharePoint のデータの読み書き Files.ReadWrite.All:Document Library へのファイル操作
  11. C#を使ったGraph API活用 DO WHAT MATTERS Microsoft Graph SDK for .NET

    を利用して、SPO Document LibraryへファイルをUL using Azure.Identity; using Microsoft.Graph; // 環境変数から認証情報を取得 var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID"); var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID"); var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET"); // 認証 - ClientSecretCredentialを利用 var clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret); // Microsoft Graph クライアントの設定 var graphClient = new GraphServiceClient(clientSecretCredential); // アップロードするファイルのパス string filePath = "C:¥¥Work¥¥sample.txt"; string fileName = Path.GetFileName(filePath); // SharePoint 情報 string siteId = "YOUR_SITE_ID"; // 例: {tenant}.sharepoint.com, {site-name} string driveId = "YOUR_DRIVE_ID"; // ドキュメントライブラリのDrive ID string folderPath = "Shared Documents"; // アップロード先のフォルダパス // ファイルの読み込み using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { // Graph API を利用してファイルをアップロード var createItem = await graphClient.Drives[driveId].Root.ItemWithPath($"/test/{fileName}").Content.PutAsync(fileStream); Console.WriteLine($"ファイル '{fileName}' がアップロードされました。URL: {createItem.WebUrl}"); }
  12. まとめ • Logic Apps や Power Automate の SharePoint コネクタの

    裏側では、Graph API が動いている • ローコードツールの利便性 の背後にある API の仕組み を理 解することで、 • トラブルシューティングがスムーズになる • カスタマイズの幅が広がる • Graph API を直接利用することで、ローコードツールの制 限を超えた高度な操作が可能に • 例:Power Automate ではできない複雑な条件分岐やエラーハ ンドリング の実現 • エンタープライズ要件に対応した柔軟な開発が可能に DO WHAT MATTERS 13
  13. References DO WHAT MATTERS 14 サンプルSrcは下記に配置しています。 https://github.com/yutaka-art/AzDoToSpoSample ツール ダウンロードURL Visual

    Studio 2022 Enterprise 17.12.3 https://visualstudio.microsoft.com/ja/thank-you-downloading-visual- studio/?sku=Enterprise&channel=Release&version=VS2022&source=VSLandingPage&cid= 2030&passive=false Visual Studio Code 1.97.0 https://code.visualstudio.com/download 環境前提