Power Automate × Teamsで「勤怠管理システム」を構築する方法:スマホやPCから簡単に打刻・管理を自動化!
「毎日の出勤・退勤の打刻を、Teams(チームズ)から簡単にできないかな?」「手書きの出勤簿やExcel(エクセル)での勤怠管理が手間だし、ミスも多いんだよね…」「誰が今出勤しているか、リアルタイムで確認できる仕組みがほしいな」
こんな風に感じたことはありませんか? 毎日の勤怠管理は、会社にとって欠かせない業務ですが、その方法がアナログだったり、システムが使いにくかったりすると、従業員にとっても管理者にとっても大きな負担となります。正確な勤怠記録は給与計算の基礎であり、会社のガバナンス(統治)上も非常に重要です。
Microsoft Power Automate(パワー オートメイト)とTeamsを組み合わせることで、プログラミングの知識がなくても、簡単に「勤怠管理システム」を構築できます。これにより、従業員はスマートフォンやPCからTeamsを通じて手軽に打刻でき、その情報が自動で記録・管理されるようになります。
Power Automate × Teamsで「勤怠管理システム」を作るってどんなこと?その大きなメリット
Power AutomateとTeamsで勤怠管理システムを構築するとは、従業員がTeamsの画面上から「出勤」や「退勤」といった操作(「打刻:ダコク」と呼びます)を行うと、その日時や打刻者などの情報が自動的にSharePoint(シェアポイント)などのデータ保存場所に記録される仕組みを構築することです。
なぜTeamsとPower Automateで勤怠管理システムを作るのか?その具体的なメリット
このシステムを構築することには、たくさんの良い点があります。
- 従業員にとっての利便性向上:
- 手軽な打刻: 普段使い慣れているTeamsアプリから直接打刻できるため、専用の打刻機を探す手間がありません。スマートフォンからも操作できるため、どこからでも(オフィス、自宅など)打刻が可能です。
- 分かりやすい操作: ボタンを押すだけのシンプルな操作で打刻が完了します。
- 打刻ミスの削減: 手書きや複雑なシステムでの入力ミスが減り、正確な勤怠記録に繋がります。
- 管理者にとっての効率化と透明性:
- 自動記録: 打刻された情報が自動的にSharePointなどのデータ保存場所に記録されるため、手動での出勤簿作成やデータ入力の手間が完全に不要になります。
- リアルタイムな状況把握: 誰が今出勤しているか、遅刻や早退がないかなどを、管理者がTeamsやSharePointの画面からリアルタイムで確認できるようになります。
- データ活用: 勤怠データがデジタル化され、SharePointに集約されるため、後から特定の期間の勤怠状況を検索したり、集計したり、Power BI(パワービーアイ)と連携してグラフで可視化したりすることが容易になります。
- 承認プロセスへの連携: 勤怠データに基づいて残業申請や有給休暇の承認フローをPower Automateで自動化する基盤にもなります。
- ペーパーレス化とコスト削減:紙の出勤簿やExcelファイルを印刷・管理する必要がなくなります。これにより、紙代、印刷代、保管スペースといったコストを削減できます。
- 場所やデバイスを選ばない柔軟性:TeamsはWebブラウザやスマートフォンアプリで利用できるため、従業員はオフィス内だけでなく、在宅勤務や出張先など、場所やデバイスを選ばずに打刻ができます。これにより、多様な働き方に対応した勤怠管理が実現します。
勤怠管理システムを構築するための主要な部品と役割
勤怠管理システムをPower AutomateとTeamsで構築するために、主に以下のツールを組み合わせて使用します。それぞれのツールが異なる役割を担い、連携することでシステム全体が機能します。
1. Teams(打刻を行う「窓口」)
- 役割: 従業員が実際に「出勤」や「退勤」の操作(打刻)を行うためのインターフェース(窓口)となります。ボタンの配置や、打刻後の確認メッセージの表示など、従業員が日常的に利用する画面を提供します。
- 主な機能: Teamsチャネルへのボタン設置、Teamsメッセージからのフロー起動。
2. Power Automate(打刻処理を「自動化する司令塔」)
- 役割: Teamsからの打刻の指示を受け取り、その情報を処理し、SharePointに記録したり、従業員に確認メッセージを送ったりする「自動化の司令塔」です。打刻のロジック(出勤か退勤かの判別、重複打刻の防止など)もここで構築します。
- 主な機能: フローのトリガー(Teamsからの入力)、ユーザー情報の取得、条件分岐、データ記録アクション。
3. SharePoint(勤怠データを「記録する場所」)
- 役割: 従業員が打刻した日時や打刻者、出勤/退勤の区分などの勤怠データを、時系列で正確に記録・蓄積するための「データベース」のような役割を果たします。
- 主な機能: SharePointの「リスト」を作成し、勤怠データの列(カラム)を定義します。
4. Power Apps(打刻フォームを「もっと使いやすくする」アプリ、オプション)
- 役割: 従業員が打刻を行う際の入力画面を、Teamsの標準機能よりもさらに柔軟に、そして分かりやすくカスタマイズしたい場合に利用します。位置情報の取得や、打刻時の写真撮影など、高度な機能を追加することも可能です。
- 主な機能: カスタム入力フォームの作成、Teamsへの埋め込み。
Power Automate × Teamsで勤怠管理システムを作る具体的な手順(シンプルな打刻システム)
ここでは、Teamsのチャネルに設置したボタンを押すことで、SharePointのリストに打刻情報が自動で記録される、というシンプルな勤怠管理システムの作成手順をステップバイステップで解説します。
事前準備:SharePointリストの作成(勤怠データを記録する場所)
まず、打刻された勤怠データを記録するためのSharePointリストを作成します。
- ウェブブラウザでSharePointサイトにアクセスし、勤怠データを記録したい場所(例えば、人事部のサイトや、共有の勤怠管理サイト)を開きます。
- サイトの「+新規」から「リスト」を選択し、「空白のリスト」を作成してください。リスト名を「勤怠記録」など、分かりやすい名前にします。
- この「勤怠記録」リストに、以下の「列(カラム)」を追加します。これは、打刻された際に記録したい情報です。
- 「タイトル」(既定の列をそのまま利用): 例えば、打刻の種類(「出勤」「退勤」)を記録する列として使用します。
- 「打刻日時」: 「+列の追加」から「日付と時刻」を選択し、名前を「打刻日時」とします。時刻も記録できるように設定します。
- 「従業員名」: 「+列の追加」から「ユーザー」を選択し、名前を「従業員名」とします。
- 「打刻区分」: 「+列の追加」から「選択肢」を選択し、名前を「打刻区分」とします。選択肢として「出勤」「退勤」の2つを追加します。
- 「備考」(オプション): 「+列の追加」から「複数行テキスト」を選択し、名前を「備考」とします。
ステップ1:Power Automateで新しいフローを作成する
Teamsからのボタンクリックをきっかけにフローを動かすため、「インスタントクラウドフロー」を作成します。
- ウェブブラウザでPower Automate(https://www.google.com/search?q=make.powerautomate.com)にアクセスし、あなたのMicrosoft 365アカウントでサインインします。
- 左側のメニューから「作成」をクリックします。
- 表示されるフローの種類の選択肢の中から「インスタント クラウド フロー」(手動でボタンを押して動かすフロー)を選択してください。
- フローに分かりやすい名前を付けます(例:「Teams勤怠打刻フロー」)。
- 「フローのトリガーを選択してください」の検索ボックスに「フローボタン」と入力し、「フロー ボタンがクリックされたとき (V2)」を選択してください。これにより、このフローをTeamsのチャネルや個人で実行できるボタンを作成します。
- 【補足】: より高度な打刻ボタンとしては、Teamsのメッセージにボタンを埋め込む「メッセージが選択されたとき (Teams)」トリガーを使う方法もあります。
- 「作成」ボタンをクリックします。
ステップ2:打刻した従業員の情報を取得する
打刻した従業員の名前やメールアドレスなど、必要な情報を取得します。
- 「フロー ボタンがクリックされたとき (V2)」トリガーの下に「新しいステップ」をクリックします。
- 検索ボックスに「ユーザープロファイル」と入力し、「ユーザープロファイル (V2) の取得」アクションを選択してください。
- 「ユーザー (UPN)」: ここには、フローを実行したユーザー(打刻した従業員)のユーザープリンシパル名(UPN、通常はメールアドレス形式)を入力します。入力フィールドをクリックすると、「動的なコンテンツ」が表示されますので、その中から「フロー ボタンがクリックされたとき (V2)」セクションの「ユーザープリンシパル名 (UPN)」を選択します。
ステップ3:出勤か退勤か判断し、打刻情報をSharePointに記録する
従業員が「出勤」と「退勤」を同じボタンで打刻できるようにするために、前回の打刻を調べて、今回の打刻がどちらに当たるかを判断するロジックを組み込みます。
- 直近の勤怠記録を取得する:「ユーザープロファイル (V2) の取得」アクションの下に「新しいステップ」をクリックします。
検索ボックスに「SharePoint」と入力し、「アイテムを取得します (SharePoint)」アクションを選択してください。
- サイトのアドレス: 先ほど作成した「勤怠記録」リストがあるSharePointサイトのURLを選択または入力します。
- リスト名: 「勤怠記録」リストを選択します。
- フィルタークエリ: 直近の打刻が誰のどの区分かを特定します。
- 例:
従業員名/Id eq@{outputs('ユーザープロファイル_(V2)_の取得')?['body/id']}&$orderby=打刻日時 desc - このクエリは、「勤怠記録リスト」から、現在の従業員の打刻記録をすべて取得し、打刻日時が新しい順に並べ替えます。
従業員名/Idはユーザー列のIDを取得する表記です。
- 例:
- 上位の数:
1と入力します。これにより、最新の打刻記録だけを取得します。
- 今回の打刻区分(出勤/退勤)を判断する「条件」アクションを追加する:「アイテムを取得します」アクションの下に「新しいステップ」をクリックし、「条件」アクションを選択してください。
- 条件を設定します:
- 左側のボックスにカーソルを置き、動的なコンテンツから「アイテムを取得します」アクションの「打刻区分 Value」(最新の打刻区分)を選択します。
- 中央のドロップダウンで「次に等しい」を選択します。
- 右側のボックスに「出勤」と入力します。
- 【解説】: この条件は「最新の打刻が『出勤』だったら」というものです。これが真(はい)なら次は「退勤」、偽(いいえ)なら次は「出勤」と判断します。
- 条件を設定します:
- 「はい」のパス(最新が『出勤』なら今回は『退勤』)の処理を設定する:
- 「条件」アクションの「はい」のパスにある「アクションの追加」をクリックします。
- 検索ボックスに「SharePoint」と入力し、「項目を作成します (SharePoint)」アクションを選択してください。
- サイトのアドレス: 「勤怠記録」リストがあるSharePointサイトのURLを選択します。
- リスト名: 「勤怠記録」リストを選択します。
- タイトル: 例: 「退勤 – @{formatDateTime(utcNow(), ‘yyyyMMdd’)}」(現在の打刻区分を識別しやすくするため)
- 打刻日時: 「式」タブを選択し、「
utcNow()」と入力します。これにより、フローが実行された現在の日時が正確に記録されます。 - 従業員名: 動的なコンテンツから「ユーザープロファイル (V2) の取得」アクションの「表示名」(打刻した従業員の名前)を選択します。
- 打刻区分: ドロップダウンから「退勤」を選択します。
- 「いいえ」のパス(最新が『退勤』なら今回は『出勤』)の処理を設定する:
- 「条件」アクションの「いいえ」のパスにある「アクションの追加」をクリックします。
- 「項目を作成します (SharePoint)」アクションを再度追加し、上記「はい」のパスと同様に設定します。
- ただし、「タイトル」は「出勤 – @{formatDateTime(utcNow(), ‘yyyyMMdd’)}」とし、「打刻区分」は「出勤」を選択します。
- 【補足】: もし最初の打刻記録がなければ「アイテムを取得します」アクションでデータが取得されないため、この「いいえ」のパスに進みます。そのため、「いいえ」のパスは「初めての打刻」としても機能します。
ステップ4:打刻完了の確認メッセージをTeamsに送る
打刻が正しく記録されたことを従業員に通知します。
- 「条件」アクションの外側(つまり、「はい」のパスと「いいえ」のパスの両方が終わった後)に「新しいステップ」をクリックします。
- このステップの「構成:実行条件」を、「前のステップが成功した場合」と「前のステップが失敗した場合」の両方にチェックを入れておくと、打刻記録が成功しても失敗しても通知を送ることができます(エラーハンドリングの一環)。
- 検索ボックスに「Teams」と入力し、「チャットまたはチャネルでメッセージを投稿する (Teams)」アクションを選択してください。
- アクションの詳細を設定します。
- 投稿者: 「Flow bot」を選択します。
- 投稿先: 「Chat with Flow bot」(フローボットとの個人チャット)を選択します。
- 受信者: 動的なコンテンツから「フロー ボタンがクリックされたとき (V2)」トリガーの「ユーザープリンシパル名 (UPN)」(打刻した従業員のメールアドレス)を選択します。
- メッセージ: 打刻内容を従業員に通知します。動的なコンテンツと条件で判断した打刻区分を使って、メッセージをカスタマイズします。
打刻が完了しました! 種類: @{if(equals(outputs('条件')?['body'], 'True'), '退勤', '出勤')} 日時: @{formatDateTime(utcNow(), 'yyyy年MM月dd日 HH時mm分')}式の解説:
if(equals(outputs('条件')?['body'], 'True'), '退勤', '出勤')は、ステップ3の「条件」アクションの結果(Trueなら「はい」のパスに進んだので「退勤」、Falseなら「いいえ」のパスに進んだので「出勤」)に基づいて表示する文字列を切り替えています。
ステップ5:フローを保存してTeamsに統合する
すべての設定が完了したら、フローを保存し、Teamsで使えるようにします。
- 画面右上の「保存」ボタンをクリックします。
- Power Automateポータルで、作成したフローの詳細画面を開きます。
- 「実行のみのユーザー」というセクションで、「ユーザー提供」となっている接続があれば、それを編集し、フローを実行するユーザーが自身の認証情報で接続できるよう設定します。
- Teamsにボタンを統合する:
- 方法1: Teamsのチャネルにタブとして追加: Teamsアプリを開き、勤怠管理システムを置きたいチームのチャネルで「+」ボタンをクリックし、「Power Automate」アプリを追加します。そこから作成したフローを選び、タブとしてチャネルに追加します。
- 方法2: Teamsのメッセージアクションとして追加: Teamsのチャネルで「メッセージング拡張機能」としてフローを追加し、メッセージ作成画面の「Power Automate」アイコンからフローを呼び出せるようにします。
- 方法3: Power Appsでカスタムアプリを作成し、Teamsに埋め込む(推奨): 次のセクションで詳しく説明します。
勤怠管理システムをさらに便利に、本格的に使う応用的な工夫
上記は基本的な勤怠管理システムですが、さらにいくつかの工夫を加えることで、システムはより使いやすく、より本格的な業務プロセスに対応できるようになります。
1. Power Appsでカスタム打刻フォームを作成する(最もおすすめのUI)
Teamsの標準ボタンやFlow botからの通知だけでは、物足りない場合があります。Power Appsを使うと、従業員が打刻を行う際の入力画面を、より直感的で分かりやすくカスタマイズし、それをTeamsに埋め込むことができます。
メリット
- デザインを自由にカスタマイズし、会社のロゴや色を使うことができます。
- 「出勤」「退勤」ボタンを大きく表示したり、打刻後のメッセージをアプリ内で表示したりできます。
- 位置情報(GPS)の取得、打刻時の写真撮影、特定の部署の選択など、より高度な機能を追加できます。
- 複雑な打刻ロジック(例:出勤ボタンは一度押したら非表示にする、退勤時間が勤務開始時間より前だったらエラーにする)をアプリ側で制御できます。
やり方
- Power Appsで新しいキャンバスアプリを作成します。
- アプリの中に「出勤」「退勤」ボタンや、日付表示、備考入力欄などを配置します。
- 各ボタンの
OnSelectプロパティ(ボタンが押されたときの動作)に、Power Automateのフローを呼び出す式(例:Set(打刻区分, "出勤"); 'Teams勤怠打刻フロー'.Run(打刻区分))を記述します。 - Power Automateフローのトリガーを「Power Apps (V2)」に変更し、Power Appsからデータ(打刻区分など)を受け取れるように設定します。
- 作成したPower AppsアプリをTeamsのチャネルに「タブ」として追加します。
2. より複雑な「打刻区分」と残業・休憩管理
- 打刻区分を増やす: 「出勤」「退勤」だけでなく、「休憩開始」「休憩終了」「外出」「帰社」など、様々な打刻区分をSharePointリストとPower Automateフローで管理できます。
- 残業申請との連携: 定時外の打刻があった場合、自動で残業申請フォームを起動したり、承認フローを開始したりできます。
- 休憩時間の自動控除: 休憩開始・終了の打刻がなかった場合でも、労働時間から自動的に休憩時間を控除するロジックをPower Automateで組むことができます。
3. 勤怠データの集計とレポート作成
SharePointに蓄積された勤怠データを活用し、管理者向けのレポートを自動生成できます。
- Excelへの自動出力:Power Automateを使って、日次や月次でSharePointの勤怠データを自動でExcelファイルに集計し、管理者のOneDriveやSharePointの共有フォルダーに保存できます。
- Power BIによる可視化:SharePointの勤怠記録リストをPower BIのデータソースとして接続し、従業員ごとの勤務時間、残業時間、遅刻・早退状況などをグラフやダッシュボードで視覚的に表示できます。Power BIレポートをTeamsにタブとして追加すれば、管理者はTeamsからリアルタイムで勤怠状況を把握できます。
4. エラーハンドリングと通知の設定
勤怠管理は非常に重要なため、エラーが発生した場合の対応を必ず設定しておきましょう。
- 重複打刻の防止Power Automateフロー内で、直前の打刻からの時間間隔が短すぎる場合や、同じ区分(例: 「出勤」の後に再度「出勤」)である場合に、打刻を拒否したり、確認メッセージを送ったりするロジックを組み込みます。
- エラー通知打刻記録が失敗した場合(例: SharePointへの書き込みエラー)、自動で打刻した従業員や管理者にエラー通知(Teamsまたはメール)を送信するよう設定します。
- 未打刻アラート退勤時刻を過ぎても退勤打刻がされていない従業員に対して、自動でリマインダー通知を送ることも可能です。
Power Automate × Teamsで「スマートな勤怠管理」を実現しよう!
Power AutomateとTeamsを組み合わせることで、プログラミングの知識がなくても、従業員にとって手軽な打刻操作と、管理者にとって効率的なデータ管理を両立した「勤怠管理システム」を構築できます。これは、紙の出勤簿や手動でのExcel入力から解放され、勤怠管理業務の効率と正確性を飛躍的に向上させます。
- SharePointのリストを勤怠データの記録場所とします。
- Power Automateで、Teamsからの打刻を受け取り、記録するロジックを構築します。
- Teamsを打刻の窓口として活用し、従業員の利便性を高めます。
- 必要に応じてPower Appsでより使いやすい打刻フォームを、Power BIで勤怠状況の見える化を実現できます。
これらのツールを上手に活用して、あなたの会社の勤怠管理をデジタル化し、よりスムーズで効率的な業務運営を実現してくださいね。

