AQ Tech Blog

Slack + GAS + Google Driveで脱PPAPツールを作ってみた | AQ Tech Blog

作成者: yudai.kubo|2023年01月12日

はじめに

こんにちは、情報システム部の久保です。

アジアクエストでは2022年6月より、パスワード付きzipファイルを使用したファイルの送受信をやめる、いわゆる脱PPAPに向けた取り組みを行っています。

※PPAPの説明やアジアクエストの脱PPAPに向けた考え方については以下の記事をご参照ください。

とある企業の脱PPAP戦記~方針編~

この記事は、アジアクエストの脱PPAPに向けた取り組みの一環として、パスワード付きzipファイルに代わるファイル共有ツールを自作した際の記録をまとめたものです。

なぜ市場にある脱PPAP製品の利用ではなく自作するという選択をしたのか、どのように作成したのか、社内で運用してみてどうだったか、などをご紹介していきます。

なぜ自作したのか?(簡単に)

2022年12月現在、脱PPAPの動きは加速しているもののまだまだ過渡期だと思います。

脱PPAPのためのソリューションは世の中に乱立しており、デファクトスタンダードといえる製品はまだ存在していないと言えるのではないでしょうか。

パスワード付きzipをやめるとなると、当然それに代わるファイルの共有方法が必要になります。とはいえ、「何か製品を採用するとしたら、世の中のデファクトが決まってから採用したいよね」というのが我々の本音でした。

そこで、採用すべき策が決まるまでの期間の共有手段として、自作しよう!となったわけです。

とはいえ、既にあるもの(契約しているSaaSなど)を利用して、なるべく工数をかけずライトに実装することも意識しながら作りました。

作成したツールの利用イメージ

アジアクエストでは、Slack・Google Workspaceを利用しています。

今回作成したツールは、Slackワークフローから共有フォルダの作成リクエストを送ると、Google Drive上に指定したメールアドレスとの共有フォルダを作成するというものです。

利用イメージは以下のような感じです。

Slackのチャンネルのショートカットからワークフローを起動します。

※Dappyというのはこのツールの社内での愛称です。「脱PPAP」から来ています

すると、下記画像のようにリクエストフォームが表示されるので、ファイルを共有したい相手のメールアドレスを入力して、リクエストフォームをSubmitします。

Submitすると、SlackのDMで以下のようなメッセージが届きます。

フォルダのURLをクリックすると、自分と共有先に指定したメールアドレスとの共有フォルダにアクセスできます。

こちらに共有したいファイルを配置して利用するイメージです。

全体構成図

このツールの全体構成図は以下の通りです。

SlackワークフローでSubmitされた内容はスプレッドシートに記録されます。1リクエストにつきスプレッドシートに1行挿入される形です。

そして、スプレッドシートへの行の挿入をトリガーに

  • Google共有ドライブ配下にフォルダを作成し、共有相手に権限設定
  • 作成したフォルダのURLをSlack App経由でDM通知

という2つの処理を行うのがメインのスクリプトとなります。

また、今回作成したツールには、作成した共有フォルダが一定期間(弊社では1週間に設定)経過すると自動削除するスクリプトも含まれています。

セキュリティ上、アップロードしたコンテンツへのアクセスに有効期限を付与したかったのですが、共有ドライブではファイルやフォルダの有効期限を設定する機能がありませんでした。

そのため、「フォルダの作成された日時を確認し、1週間以上前に作成されたものは削除する」というスクリプトを別途作成し、定期的に実行されるようにしています。

作成の流れ

大まかな作成の流れを記載します。

今回の記事にはソースコードの中身や詳しい設定値はありませんので、あくまで参考程度にお願いします。

 

Slackワークフロー

Slackワークフロービルダーにて、ユーザーに共有先メールアドレスを指定してもらうためのワークフローを作成します。

Slackワークフローでしていることは以下の3点です。

  • 共有先メールアドレスを指定するためのフォームを開く
  • 回答内容(回答者、共有先メールアドレスなど)をGoogleスプレッドシートに記録
  • チャンネルに案内メッセージを送信する

Slack App

Slack Appは以下の用途で使用しています。

  • ユーザーにDMでフォルダURL等を送信する
  • スクリプト実行中に何らかの理由でエラーが発生した場合、担当部署の運用通知用のSlackチャンネルに通知する

 

GAS フォルダ作成スクリプト

GASのフォルダ作成スクリプトは、スプレッドシートへの行の追加をトリガーに、追加された行の内容を元に処理を実行します。

大まかに記載すると以下のことをしています。

  • スプレッドシートの追加行から、リクエスト実行者と共有先のメールアドレスを取得
  • Google共有フォルダを作成
  • 作成したフォルダに、リクエスト実行者と共有先メールアドレスに対してアクセス権限を付与
  • 前述のSlack Appを呼び出し、リクエストを実行したユーザーにSlackのDMを送信

 

GAS フォルダ削除スクリプト

本ツールで作成する共有フォルダは、全て特定のルートフォルダ配下に作成されます。

フォルダ削除スクリプトでは、ルートフォルダ配下にあるフォルダを1つずつ確認し、指定日数(7日間に設定しています)以上経過しているものを削除していきます。

こちらのスクリプトは1日1回深夜に実行されるバッチ処理のような感じです。

 

余談ですが、マイドライブであればGoogle Driveの機能だけでファイルやフォルダへのアクセスに有効期限を付与することが可能です(2022年12月現在共有ドライブでは未サポート)。

共有ドライブでも使えるようになったらそちらを利用するのもありかと思います。

ファイル アクセスの有効期限を設定する

作って良かったこと

本格運用を開始して半年ほど経過した現時点で感じているよかったことをご紹介します。

 

ライセンスコストがかからない

実装するための工数は多少かかったものの、ライセンスコストとしてかかるのはこれまでも利用していたSlack、Google Workspaceくらいです。

新たに他の製品を導入する場合は別途ライセンスコストがかかるので、それが必要ないことはメリットだと感じました。

 

機能をカスタマイズしやすい

自分でコードを書いた部分は、後から自由に機能をカスタマイズすることができます。今回の場合だと、例えば以下のような機能追加を検討しています。

  • 今はフォルダが作成されてから削除されるまでの日数を1週間に設定しているが、これをユーザーが選択できるようにする(例:3日、7日、14日の中から選択)
  • 今はアジアクエスト→社外の一方向のファイル送信しかできないようにしているが、社外→アジアクエストの送信も可能にし、双方向でやり取りできるようにする

実際に社員から「〇〇な機能を追加してほしい」という要望が来ることもあり、それにすぐに対応できるのはメリットだと思いました。

悪かったこと

利用しているSaaSによる制約を受ける

自作とはいってもSaaSの機能を使用しているので、それに由来する制約もありました。今回の場合、例えば以下のような制約がありました。

 

① 共有先がGoogleアカウントを持っている場合・いない場合で挙動が異なる

Googleアカウントの有無によって微妙に挙動が異なる部分があり、社内外それぞれの利用者にとって少し分かり辛い部分がありました。

弊社でももともと社内向けマニュアルは作っていたのですが、営業部門から「社外(共有先)向けの利用マニュアルも作ってほしい」という依頼を受けて別途作成する、といったことがありました。

 

② 企業のルールでGoogle Driveの使用を禁止している組織とのファイル共有には使用できない

実態はGoogle共有フォルダなので、当然Google Driveの利用を禁止しているお客様にファイルを送信する用途には使用できません。

他の共有手段を使用するよう調整するなど、ここは別の対応が必要となってしまいます。

 

管理すべきものが増える

既存のSaaS等を単体で使用する場合と比べて、どうしても管理すべきものは増えます(ソースコード、Slack App等)。

仮にGoogleのAPIの仕様変更があった場合それに対応できるようにソースコードを変更する必要があるなど、対応すべきことは増えてしまうかと思います。

また、お手軽とはいえ全社で利用するツールなので、ツールを動かすための部品に特定の個人しかアクセスできない状況は避けるようにしなければなりません。

弊社ではソースコードをGithubで管理する、Slack AppのCollaboratorsに担当部門のメンバーを複数人追加するなどの対応を取っています。

最後に

今回は、脱PPAPのために自作したツールについて書きました。

GASとSlack・Google Workspaceの機能を連携すれば、工夫次第で他にも色々なことができそうです。

脱PPAPに向けたアプローチの1つとして、この記事が誰かの参考になれば幸いです。