AUTOMATION NOTE — 055

M365からGWSへの移行:Power AutomateワークフローをGASとAppSheetで再構築する実践ガイド

Microsoft 365 (M365) から Google Workspace (GWS) への移行プロジェクトでは、メールやファイルの移行手順が確立されつつありますが、Power Automateで構築された業務ワークフローの再構築は、多くの情シス担当者にとって見通しが立ちにくい課題の一つです。この記事では、Power AutomateワークフローをGoogle Workspace環境でGoogle Apps Script (GAS) やAppSheetを使ってどのように代替し、再構築していくかについて解説します。

この記事を読んだほうが良い人

  • M365からGWSへの移行を計画・実行中の情シス担当者
  • Power Automateで構築された承認、通知、データ同期などの業務ワークフローの移行方針を検討している方
  • GASやAppSheetを活用したGWS環境でのワークフロー自動化に興味がある方
  • 既存のM365移行記事ではカバーされていないワークフロー自動化レイヤーの課題解決策を探している方

M365からGoogle Workspaceへの移行で直面する「ワークフローの壁」

M365環境で業務効率化を推進してきた企業にとって、Power AutomateはSharePoint OnlineやMicrosoft Teams、Outlookなどと連携し、承認フローや通知、データ同期といった様々なワークフローを自動化する強力なツールです。しかし、GWSへの移行時には、これらのPower Automateで構築されたワークフローをどう引き継ぐかという問題に直面します。ファイルやメールのデータ移行はツールや手順が確立されてきていますが、ワークフローという「ロジック」の移行は単純な引っ越しでは済みません。

SharePointとPower Automateによるワークフローの特徴

Power Automateは、SharePointリストやライブラリのアイテム追加・変更をトリガーとして、承認プロセスを開始したり、特定のユーザーに通知を送ったり、あるいは他のSaaSと連携してデータを同期したりする場面で広く利用されています。その特徴は、GUIベースで比較的容易に複雑なフローを構築できる点にあります。特に、SharePointのサイト構造と深く結合したワークフローは、GWS環境での代替を考える上で最も難しい部類に入ります。

Power AutomateワークフローをGoogle Workspaceでどう代替するか

GWS環境でPower Automateの代替となる主要なツールは、Google Apps Script (GAS) とAppSheetです。これらのツールはそれぞれ異なる特性を持つため、ワークフローの種類や複雑度に応じて使い分けることが重要です。

Google Apps Script (GAS) の特性と活用シーン

Google Apps Script (GAS) は、JavaScriptベースのスクリプト言語で、Google Workspaceの各サービス(Gmail, Google Drive, Google Sheets, Google Calendarなど)と連携して自動化や機能拡張が可能です。

GASの主な特性:

  • 柔軟性: JavaScriptの知識があれば、非常に複雑なロジックや高度な外部連携も実装できます。
  • Google Workspaceとの深い連携: 各種Googleサービスに特化したAPIが豊富に用意されており、GWSネイティブな自動化に最適です。
  • 無料利用枠: Googleアカウントがあれば無料で利用でき、小規模な処理であれば追加コストなしで運用できます。
  • コードベース: 開発にはプログラミングスキルが必須です。

活用シーン:

  • Google Sheetsのデータ変更をトリガーにしたメール通知や承認フロー
  • Google Drive上のファイル操作(移動、コピー、権限変更)の自動化
  • 外部APIとの連携によるデータ同期やシステム連携
  • 定期的なレポート生成やデータ集計

AppSheetの特性と活用シーン

AppSheetは、ノーコード/ローコードでモバイルアプリやWebアプリを開発できるプラットフォームです。Google Workspaceと親和性が高く、Google SheetsやGoogle Formsをデータソースとして、業務アプリを素早く構築できます。

AppSheetの主な特性:

  • ノーコード/ローコード: GUIベースでアプリを開発できるため、プログラミングスキルがなくても利用可能です。
  • データ入力・表示に特化: ユーザーインターフェースを伴うデータ入力、参照、編集、承認といった業務プロセスに強みがあります。
  • モバイル対応: 開発したアプリは自動的にモバイルデバイスに対応します。
  • Google Workspace連携: Google Sheetsをデータベースとして活用するなど、GWSサービスとの連携が容易です。

活用シーン:

  • 申請・承認フォームを伴うワークフロー(例: 経費申請、備品貸出申請)
  • 現場でのデータ入力(例: 巡回点検記録、営業日報)
  • 簡易的なプロジェクト管理やタスク管理
  • マスターデータの参照・更新インターフェース

Power AutomateとGAS/AppSheetの機能マッピング

Power Automateで実現していたワークフローが、GWS環境でどのツールに置き換えられるかを以下にまとめます。

Power Automateの機能/役割 GASでの代替 AppSheetでの代替 GAS + AppSheetでの代替
トリガー Time-driven (定期的), Spreadsheets (変更時), Forms (送信時), Gmail (受信時), Calendar (イベント時), Webhook (外部システムから) User Action (ボタンクリック, データ変更), Scheduled Automation (定期的) User Action (AppSheet) → GAS Function (AppSheetからGASを呼び出し)
アクション Google Workspace API (Gmail送信, Drive操作, Sheets更新, Calendarイベント作成), 外部API呼び出し データ更新, メール送信, レポート生成, ウェブフック呼び出し AppSheetでUIを提供し、GASで複雑なバックエンド処理を実行
条件分岐・ループ JavaScriptのif/else, for/while文で柔軟に実装 Automation機能でシンプルな条件分岐、ステップ実行 GASで複雑なロジックを実装し、AppSheetでトリガー/結果表示
承認フロー Gmailで承認メールを送り、返信をトリガーに処理を継続 AppSheetのワークフロー機能で承認ステータス管理、通知 AppSheetで承認UIを提供し、GASで承認後のデータ更新や通知を自動化
データソース Google Sheets, Google Drive, 外部DB/API Google Sheets, Google Forms, Cloud SQL, Salesforceなど Google Sheetsを介して連携、またはAppSheetからGAS経由で外部DB/API
ユーザーインターフェース Google Sheetsのカスタムメニュー, Google SitesのWebアプリ, Google Forms AppSheetアプリ自体がUIを提供 AppSheetで入力UI、GASで裏側の処理と結果の表示を連携

ワークフロー再構築の判断フロー

Power AutomateのワークフローをGASとAppSheetのどちら、あるいは両方で再構築するかは、ワークフローの特性によって判断が分かれます。

難易度、規模、Google Workspace連携度で選択肢を絞る

ワークフローの再構築を検討する際は、以下の3つの観点から評価します。

  1. 難易度: ロジックの複雑さ、条件分岐の多さ、外部システム連携の有無
  2. 規模: 利用ユーザー数、処理データ量、実行頻度
  3. Google Workspace連携度: どのGWSサービスと深く連携するか

判断フローチャートの考え方

概念的なフローチャートは以下のようになります。

  1. ユーザーインターフェースは必要か?
    • Yes: ユーザーがデータを入力したり、ステータスを確認したりする必要がある場合
      • 複雑なロジックや外部連携が必要か?
        • No (シンプルな入力/表示/承認): AppSheet単独での実装を検討します。
        • Yes (複雑な処理): AppSheetでUIを提供し、バックエンドの複雑な処理をGASで実装する「GAS + AppSheet」の組み合わせを検討します。
    • No: 定期実行や特定のイベントをトリガーにした裏側の処理のみの場合
      • プログラミングスキルがあるか?
        • Yes: GAS単独での実装を検討します。GWSサービスとの連携や外部API呼び出しに柔軟に対応できます。
        • No: Power Automateのようなノーコードツールを強く求める場合、GWSネイティブの自動化機能(Google Sheetsの組み込み機能など)や、外部のiPaaS(Integration Platform as a Service)ソリューション(例: Zapier, Make(旧Integromat))の導入も視野に入れます。ただし、これらは追加コストが発生する可能性があります。

この判断フローを通じて、最適なツール選択が可能になります。

実践例:GASでシンプルな承認フローを再構築する

ここでは、Google Sheetsのデータに基づいて承認依頼を送り、承認・却下をメールで受け付けるシンプルなフローをGASで実装する例を紹介します。

フローの概要

  1. Google Sheetsに申請データが入力される(例: 経費申請)。
  2. GASがシートの変更を検知し、承認者へ承認依頼メールを送信。
  3. 承認者はメール内のリンクをクリックし、承認/却下を選択。
  4. 選択結果がGoogle Sheetsに反映され、申請者に通知。

GASコード例

以下のGASコードは、Google Sheetsの特定のシートに新しい行が追加されたときにトリガーされ、承認メールを送信する基本的な例です。

Code.gs

function onEdit(e) {
  const sheet = e.source.getActiveSheet();
  const range = e.range;

  // 特定のシートと列にデータが入力されたら処理を実行
  if (sheet.getName() === '申請シート' && range.getColumn() === 1 && range.offset(0, 4).getValue() === '') { // A列にデータ入力、E列が空の場合
    const row = range.getRow();
    const 申請ID = sheet.getRange(row, 1).getValue(); // A列
    const 申請内容 = sheet.getRange(row, 2).getValue(); // B列
    const 申請者メール = sheet.getRange(row, 3).getValue(); // C列
    const 承認者メール = sheet.getRange(row, 4).getValue(); // D列

    if (申請ID && 申請内容 && 申請者メール && 承認者メール) {
      sendApprovalRequest(申請ID, 申請内容, 申請者メール, 承認者メール, row);
    }
  }
}

function sendApprovalRequest(申請ID, 申請内容, 申請者メール, 承認者メール, row) {
  const scriptUrl = ScriptApp.getService().getUrl();
  const approveUrl = scriptUrl + '?action=approve&id=' + 申請ID + '&row=' + row;
  const rejectUrl = scriptUrl + '?action=reject&id=' + 申請ID + '&row=' + row;

  const subject = '【承認依頼】申請ID: ' + 申請ID + ' - ' + 申請内容;
  const body = '申請ID: ' + 申請ID + '\n'
    + '申請内容: ' + 申請内容 + '\n'
    + '申請者: ' + 申請者メール + '\n\n'
    + '以下のリンクから承認または却下してください。\n\n'
    + '承認: ' + approveUrl + '\n'
    + '却下: ' + rejectUrl;

  GmailApp.sendEmail(承認者メール, subject, body);
  Logger.log('承認依頼メールを ' + 承認者メール + ' に送信しました。');
}

function doGet(e) {
  const action = e.parameter.action;
  const 申請ID = e.parameter.id;
  const row = e.parameter.row;
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('申請シート');

  let message = '';
  if (action === 'approve') {
    sheet.getRange(row, 5).setValue('承認済み'); // E列にステータスを更新
    message = '申請ID: ' + 申請ID + ' は承認されました。';
  } else if (action === 'reject') {
    sheet.getRange(row, 5).setValue('却下'); // E列にステータスを更新
    message = '申請ID: ' + 申請ID + ' は却下されました。';
  } else {
    message = '無効な操作です。';
  }

  // 申請者に結果を通知
  const 申請者メール = sheet.getRange(row, 3).getValue();
  GmailApp.sendEmail(申請者メール, '【通知】申請ID: ' + 申請ID + ' の結果', message);

  return ContentService.createTextOutput(message);
}

連携とトリガーの設定

  1. Google Sheetsの準備: 「申請シート」という名前のシートを作成し、A列に「申請ID」、B列に「申請内容」、C列に「申請者メール」、D列に「承認者メール」、E列に「ステータス」などの列を設定します。
  2. GASプロジェクトの作成: Google Sheetsから「拡張機能」>「Apps Script」を開き、上記のコードを貼り付けます。
  3. ウェブアプリとして公開: 「デプロイ」>「新しいデプロイ」を選択し、種類を「ウェブアプリ」に設定します。「実行ユーザー」は「自分」、「アクセスできるユーザー」は「全員」または「組織内のユーザー」を選択してデプロイします。これにより、doGet 関数がHTTPリクエストを受け付けられるようになります。
  4. トリガー設定: 「トリガー」アイコン(時計のマーク)をクリックし、「トリガーを追加」を選択します。

    • 実行する関数: onEdit
    • イベントの種類を選択: 「スプレッドシートから」
    • イベントのタイプを選択: 「編集時」

    この設定により、シートが編集されるたびにonEdit関数が実行されます。

ウェブアプリ公開時のセキュリティ: アクセス設定を「全員」にした場合、承認/却下URLがメール転送などで外部に漏洩すると、URLを知っている誰でも承認・却下の操作が実行できます。本番運用では少なくとも「組織内のユーザー」に限定することを推奨します。ただし「組織内のユーザー」に設定した場合でも、承認者以外の組織内ユーザーがURLを踏めば操作が通ってしまう点は変わりません。承認者本人だけに操作を限定するには、doGet 関数内で Session.getActiveUser().getEmail() でログインユーザーのメールアドレスを取得し、シートに記録した承認者メールアドレスと照合してください。一致しない場合は ContentService.createTextOutput('アクセス権限がありません') を返してスプレッドシートへの書き込みをスキップする設計が安全です。

この例は非常にシンプルですが、これを応用してより複雑な承認フローや通知フローを構築することが可能です。

再構築が困難なワークフロー類型と妥協案

すべてのPower AutomateワークフローがGASやAppSheetで完全に再現できるわけではありません。特に以下のケースでは、再構築が困難になったり、根本的な見直しが必要になったりする場合があります。

複雑な条件分岐や外部システム連携が多い場合

Power Automateは、GUIで複雑な条件分岐や、多種多様なSaaSコネクタを介した外部システム連携を容易に実現できます。これをGASで再現する場合、JavaScriptによる詳細なコーディングが必要となり、開発コストが増大する可能性があります。

妥協案:

  • ワークフローの簡素化: 不要な分岐や過剰な連携を見直し、必要最低限の機能に絞ります。
  • iPaaSの活用: GWSのサービスだけでなく、SalesforceやZendeskなど多くのSaaSと連携する必要がある場合、ZapierやMake(旧Integromat)といったiPaaSソリューションの導入を検討します。ノーコード/ローコードで多様なSaaS連携を構築できる一方、追加のライセンス費用が発生します。

大規模なRPA的処理が必要な場合

デスクトップ版Power Automate(Power Automate Desktop)のようなRPA(Robotic Process Automation)機能を利用して、特定のアプリケーションの操作やファイルダウンロード、データ入力などを自動化していた場合、GWS環境でそのまま代替するツールはありません。GASは主にクラウドサービス間の連携に特化しており、ローカルPC上のアプリケーション操作はできません。

妥協案:

  • 業務プロセスの見直し: RPAで自動化していた業務自体を、GWSネイティブなサービスやクラウドベースのツールに移行できないか検討します。例えば、デスクトップアプリでのデータ入力が必要だった業務を、AppSheetアプリからの入力に切り替えるなどです。
  • 専用RPAツールの導入: どうしてもRPA機能が必要な場合は、UiPathやAutomation Anywhereなど、GWS環境でも利用可能なRPAツールを別途導入することになります。これは大きなコストと運用負荷を伴います。

まとめ:移行は計画的な棚卸しから

M365からGWSへの移行において、Power Automateワークフローの再構築は、ファイルやメール移行とは異なるアプローチが求められます。成功の鍵は、既存のPower Automateワークフローを一つ一つ棚卸しし、その機能や目的、複雑度を正確に把握することです。

  • 棚卸し: 各ワークフローのトリガー、アクション、条件、連携先、目的、利用頻度、重要度をリストアップします。
  • 代替ツールの選定: 棚卸し結果に基づき、GAS、AppSheet、またはその組み合わせ、あるいは外部iPaaSツールのどれが最適かを判断します。
  • 段階的な移行: 影響度の低いシンプルなワークフローからGASやAppSheetでの再構築に着手し、ノウハウを蓄積しながら徐々に複雑なワークフローへ移行します。

この計画的なアプローチによって、M365からGWSへの移行をスムーズに進め、業務の継続性を確保しながら、Google Workspace環境での新たな自動化基盤を構築できます。

コーポレートITのご相談はお気軽に

この記事で書いたような業務改善・自動化の設計から実装まで、DRASENASではコーポレートITの現場に寄り添った支援を行っています。 「まず相談だけ」でも大歓迎です。DRASENAS 公式サイトからお気軽にどうぞ。

CONTACT

御社の IT 部門、ここにあります。

「ITのことはあまりわからない」── そのような状態からで、まったく問題ございません。まずはお気軽にご相談ください。

一社ずつ、一から。