GAS×勤怠管理:DriveApp.getFolderByIdでフォルダ管理を自動化

GASで勤怠管理を効率化!DriveApp.getFolderByIdでフォルダ管理を自動化する

勤怠管理システムの構築において、従業員のタイムカードや休暇申請などの関連書類をGoogle Drive上で効率的に管理することは、業務効率化の鍵となります。しかし、従業員が増えるほど、フォルダの整理やアクセス権の管理が煩雑になりがちです。そこで、Google Apps Script(GAS)のDriveApp.getFolderByIdを使用することで、フォルダ管理を自動化し、勤怠管理業務を大幅に効率化することができます。

DriveApp.getFolderByIdとは

DriveApp.getFolderById(id)は、指定されたIDを持つGoogle Driveのフォルダオブジェクトを取得するためのGASの関数です。この関数を使用することで、フォルダ名やパスに依存せず、一意のIDに基づいて確実にフォルダを取得できます。

基本的な使い方

フォルダIDは、Google Drive上でフォルダを開いた際のURLに含まれています。例えば、URLがhttps://drive.google.com/drive/folders/1234567890abcdefghijkの場合、1234567890abcdefghijkがフォルダIDです。

function getFolder() {
const folderId = "1234567890abcdefghijk"; // 取得したいフォルダのID
const folder = DriveApp.getFolderById(folderId);
Logger.log(folder.getName()); // フォルダ名を表示
}

勤怠管理システムでのDriveApp.getFolderByIdの実装例

ここでは、DriveApp.getFolderByIdを勤怠管理システムに組み込み、具体的な業務課題を解決する例をいくつか紹介します。

1. 従業員ごとのフォルダを自動で作成・管理

従業員ごとにタイムカードや休暇申請書を格納するフォルダを作成し、DriveApp.getFolderByIdで管理します。フォルダIDをスプレッドシートに記録しておけば、GASから簡単にアクセスできます。

function createEmployeeFolder(employeeId, folderId) {
// フォルダIDが格納されたスプレッドシートとシート名を指定
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("従業員フォルダ管理");

// 従業員IDをキーにフォルダIDを検索(A列が従業員ID、B列がフォルダIDとする)
const lastRow = sheet.getLastRow();
for (let i = 2; i <= lastRow; i++) { // 2行目からデータ開始と仮定
if (sheet.getRange(i, 1).getValue() === employeeId) {
folderId = sheet.getRange(i, 2).getValue();
break;
}
}

// フォルダIDが存在しない場合、新規作成
if (!folderId) {
const rootFolderId = "ルートフォルダのID"; // 親フォルダのID
const rootFolder = DriveApp.getFolderById(rootFolderId);
const employeeFolder = rootFolder.createFolder(employeeId + "のフォルダ");
folderId = employeeFolder.getId();

// スプレッドシートにフォルダIDを記録
sheet.appendRow([employeeId, folderId]);
}
const folder = DriveApp.getFolderById(folderId);
return folder;
}

カスタマイズ: フォルダ名を「従業員ID_氏名」に変更したり、部署ごとにフォルダを分けたりすることも可能です。

2. 特定の期間のタイムカードを自動で集計

DriveApp.getFolderByIdで指定したフォルダから、特定の期間のタイムカードファイルを検索し、集計処理を行います。

function aggregateTimecards(folderId, startDate, endDate) {
const folder = DriveApp.getFolderById(folderId);
const files = folder.getFiles();
let totalHours = 0;

while (files.hasNext()) {
const file = files.next();
const fileName = file.getName();
const fileDate = new Date(fileName.substring(0, 10)); // ファイル名から日付を抽出(例:2024-01-01_タイムカード.pdf)

if (fileDate >= startDate && fileDate <= endDate) {
// タイムカードの内容を解析して労働時間を取得 (ここでは仮に1ファイル5時間とする)
totalHours += 5;
}
}
return totalHours;
}

カスタマイズ: ファイル名から日付を抽出する方法は、タイムカードのファイル名形式に合わせて変更する必要があります。OCR技術と組み合わせることで、PDFファイル内の労働時間を自動で読み取ることも可能です。

3. 休暇申請書の承認状況を自動で確認

従業員が提出した休暇申請書が格納されたフォルダをDriveApp.getFolderByIdで取得し、承認状況(ファイル名やメタデータから判断)を自動で確認します。

function checkLeaveRequestStatus(folderId) {
const folder = DriveApp.getFolderById(folderId);
const files = folder.getFiles();
let approvedCount = 0;
let pendingCount = 0;

while (files.hasNext()) {
const file = files.next();
const fileName = file.getName();

if (fileName.includes("[承認済]")) {
approvedCount++;
} else if (fileName.includes("[申請中]")) {
pendingCount++;
}
}
return { approved: approvedCount, pending: pendingCount };
}

カスタマイズ: ファイル名による承認状況の判断だけでなく、Google Docsのコメント機能やカスタムメタデータを利用することで、より詳細な承認ワークフローを構築できます。

よくある問題とトラブルシューティング

  • フォルダIDが間違っている: フォルダIDを正しくコピー&ペーストしているか確認してください。
  • 権限がない: スクリプトを実行するユーザーが、指定されたフォルダへのアクセス権を持っているか確認してください。
  • フォルダが見つからない: フォルダが削除されていないか確認してください。

まとめ

DriveApp.getFolderByIdは、GASでGoogle Driveのフォルダを操作する上で非常に強力なツールです。勤怠管理システムに組み込むことで、フォルダ管理の自動化、タイムカードの集計、休暇申請の承認状況確認など、様々な業務を効率化できます。ぜひ、この記事で紹介したコード例を参考に、自社の勤怠管理システムにDriveApp.getFolderByIdを導入し、業務効率化を実現してください。

PR

CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。

CodeCampで理想の働き方を実現しよう