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つの観点から評価します。
- 難易度: ロジックの複雑さ、条件分岐の多さ、外部システム連携の有無
- 規模: 利用ユーザー数、処理データ量、実行頻度
- Google Workspace連携度: どのGWSサービスと深く連携するか
判断フローチャートの考え方
概念的なフローチャートは以下のようになります。
- ユーザーインターフェースは必要か?
- 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))の導入も視野に入れます。ただし、これらは追加コストが発生する可能性があります。
- プログラミングスキルがあるか?
- Yes: ユーザーがデータを入力したり、ステータスを確認したりする必要がある場合
この判断フローを通じて、最適なツール選択が可能になります。
実践例:GASでシンプルな承認フローを再構築する
ここでは、Google Sheetsのデータに基づいて承認依頼を送り、承認・却下をメールで受け付けるシンプルなフローをGASで実装する例を紹介します。
フローの概要
- Google Sheetsに申請データが入力される(例: 経費申請)。
- GASがシートの変更を検知し、承認者へ承認依頼メールを送信。
- 承認者はメール内のリンクをクリックし、承認/却下を選択。
- 選択結果が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);
}
連携とトリガーの設定
- Google Sheetsの準備: 「申請シート」という名前のシートを作成し、A列に「申請ID」、B列に「申請内容」、C列に「申請者メール」、D列に「承認者メール」、E列に「ステータス」などの列を設定します。
- GASプロジェクトの作成: Google Sheetsから「拡張機能」>「Apps Script」を開き、上記のコードを貼り付けます。
- ウェブアプリとして公開: 「デプロイ」>「新しいデプロイ」を選択し、種類を「ウェブアプリ」に設定します。「実行ユーザー」は「自分」、「アクセスできるユーザー」は「全員」または「組織内のユーザー」を選択してデプロイします。これにより、
doGet関数がHTTPリクエストを受け付けられるようになります。 -
トリガー設定: 「トリガー」アイコン(時計のマーク)をクリックし、「トリガーを追加」を選択します。
- 実行する関数:
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 公式サイトからお気軽にどうぞ。
御社の IT 部門、ここにあります。
「ITのことはあまりわからない」── そのような状態からで、まったく問題ございません。まずはお気軽にご相談ください。