GAS(Google Apps Script)でDrive上のファイルをChatworkへ送信する

みなさん、こんにちは!

現役エンジニアの”ます”です。

今回はGoogle Apps ScriptとChatworkのAPIを活用したファイルの送信方法を紹介します。

Google Driveを活用していて、チャットワークと連携をしたい方必見です。
クラウド上からチャットワークにファイルをいちいちPCに保存せずとも送れるようになります。

Google Drive上のクラウド管理している業務の場合、いちいちダウンロードしてチャットワークに送信し直すなんて作業もあるのではないでしょうか。
そんな面倒な作業ともおさらばです。本記事を最後まで読むと自動化できるようになります。

チャットワークAPIのトークンを取得する

まずはチャットワークAPIの利用準備から始めましょう。
当サイトでも以前チャットワークのトークンの取得の仕方を記事にしていますので、下記をご参考にしてください。

Chatwork APIの利用申請方法

Google Apps Scriptの導入

お手持ちのGoogleアカウントを用いて、Googleドライブ上にスクリプトを作成します。

スプレッドシートを作成してから、拡張機能でApps Scriptを作成する、コンテナバインド型のスクリプトを起動してください。

GASの導入方法も当サイトでは細かく説明しておりますので、やり方に困ったらこちらをご参照ください。

Google Apps Scriptの導入方法

GASにチャットワークのライブラリを導入する(ChatWorkClient)

外部APIを使う場合はURLやパラメーターなど細かな設定が必要です。
今回、チャットワークのAPIをGASで使いやすいようにライブラリが用意されているため、そちらを活用していきます。

AppsScript画面左のサイドバーから「ライブラリ」の「+」アイコンをクリックします。

ライブラリの追加のポップアップが表示されるため、そこに下記のスクリプトIDを挿入してください。

1nf253qsOnZ-RcdcFu1Y2v4pGwTuuDxN5EbuvKEZprBWg764tjwA5fLav

 

「検索」をクリックするとChatWorkClientがヒットします。

続いて「追加」をクリックします。

これでGoogle Apps ScriptでチャットワークのAPIが簡単に使えるライブラリを導入することができます。

※ソースコードを確認したい場合は下記githubからclient.jsをご覧ください。

ChatrowkClientのGASファイルを提供しているgithub

Drive上に送りたいデータを用意

まずはチャットワークに送信したいファイルをGoogle Drive上にアップロードしていきましょう。

ファイルは画像でもPDFでもテキストファイルでも構いません。

ファイルのIDを取得

今回、チャットワークにファイルを送信することをメインに行いますので、ファイルのIDは手動で抽出します。

アップロードしたファイルを右クリックし、リンクを取得してください。

Drive上のファイルのリンクをコピー

リンクをコピーしたら続いてスプレッドシートへ連携していきます。

今回使っていくのはリンクのうち、Googleが個別で割り当てるファイルのIDを抽出します。

「https://drive.google.com/file/d/」と、「/view?usp=sharing」の間にある文字列のみを抽出してください。

https://drive.google.com/file/d/1xymzO9N2vwSjpfrrcSkZjiyKSQl8FxQ_/view?usp=sharing

スプレッドシートに必要なデータを入力

今回は下記4つのデータをスプレッドシートに入力してGASで読み取る方法で説明します。

  • Chatwork API TOKEN
  • チャットワークの送信先のルームID
  • ファイルと同時に送信するメッセージ
  • 送信するファイルのID

 

Chatwork TOKENの取得の仕方は上記、「チャッ

トワークAPIのトークンを取得する」にて解説しています。こちらより取得したAPIのトークンを記載してください。

Chatwork APIの利用申請方法

チャットワークの送信先のルームIDはチャットワークにログインした後、対象のルームを開くとURLに「#!rid」から始まる数字列がありますので、そちらを抽出します。

メッセージは送信時に投稿される文字列です。

ファイルIDは先ほど取得したDrive上のファイルURLからIDを抽出して記載してください。
※別途URLでも動作する方法もありますが、長くなるので別の記事でご紹介します。

シート名を変更

今回、プログラムを分かりやすくするためにシート名を「ファイル送信」へ変更しています。

スプレッドシート下部のタブよりシート名を「ファイル送信」へ変更しておくと、この後で記載するプログラムと整合性が取れます。

スクリプトを開く

スプレッドシートの「拡張機能」より「Apps Script」を選択してスクリプトを開きます。
※GASの導入方法で説明しています。

プログラムは順序だてて説明します。
完成形のプログラムは当記事をさらにスクロールしてください。

スクリプト説明①:スプレッドシートから指定のシート内の全データを取得する

 

// ファイル送信シートから記入がある範囲の全データを取得
const VALUES = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ファイル送信").getDataRange().getValues();

SpreadSheetAppにてGoogleのスプレッドシートを操作するクラスを呼び出します。

.getActiveSpreadsheet() で現在起動中のスプレッドシートのことを指定します。

.getSheetByName(“ファイル送信”) は指定したスプレッドシートから「ファイル送信」という名前のシートを抽出します。

.getDataRange() でファイル送信シートのデータが挿入されてる全ての範囲を指定しています。

.getValues() では選択した範囲から値を二次元配列で取得しています。

少し長くなりましたが、1つずつ分解すると簡単ですね!

スクリプト説明②:各データを変数に格納

抽出した2次元配列から必要な値のみ取り出します。

// B1セルからトークンを取得
const TOKEN = VALUES[0][1]; // B1
// B2セルからルームIDを取得
const ROOM_ID = VALUES[1][1]; // B2
// B3セルからメッセージを取得
let message = VALUES[2][1]; // B3
// B4セルからファイルIDを取得
let file_id = VALUES[3][1]; // B4

スクリプト説明③:Driveのファイルを取得

上記で抽出したファイルIDを元に、Drive上のファイルを取得します。

// ファイルを取得します。
const FILE = DriveApp.getFileById(file_id);

DriceAppはGoogle Drive上のあらゆる操作が可能なクラスを呼び出します。

.getFileById(file_id) にて引数に指定されたファイルIDを元にしてのファイルを呼び出すことができます。

スクリプト説明④:BLOBデータを作成

取得したDriveのファイルをチャットワークAPIに送信するためのBLOB型へと変換します。

※このとき、日本語ファイル名は上手く文字コードがUTF-8に変換されないため注意してください。

const BLOB = Utilities.newBlob(
    FILE.getBlob().getBytes(),
    FILE.getMimeType(),
    FILE.getName()
  );

Utilities にてGASで扱える様々な機能を持つクラスを呼び出します。

newBlob()でBOLB型のオブジェクトを作成しますが、
第1引数がBLOBのバイト(データ)、
第2引数がファイルのタイプ(textやpdf、pngなど)
第3引数がファイル名となっています。

newBlobの引数の取り方は公式ドキュメントが分かりやすいです。
英語が苦手でも日本語翻訳を使いながらGoogle Apps Scriptのドキュメントを参照してみましょう。

スクリプト説明⑤:BLOBデータを作成

APIに送信するためのパラーメーターを作成します。

ヘッダーにはAPIのトークンを設定。

methodは「post」です。

payloadにfileのBLOBとmessageのテキストを設定しましょう。

let params = {
  headers : {
    'X-ChatWorkToken' : TOKEN,
  },
  method : 'post',
  payload : {
    file: BLOB,
    message: message,
  }
};

ChatworkClientはこれらのparamsを細かく設定しなくても良いライブラリとなっていますが、
今回のファイル送信には対応しておらず、細かく設定する必要があります。

スクリプト説明⑥:APIに送信する

APIに送信するためのURLを生成し、実際にデータを送信します。

const URL = 'https://api.chatwork.com/v2/rooms/' + ROOM_ID + '/files';
UrlFetchApp.fetch(URL, params);

ファイル送信に対応したAPIのエンドポイントをURLにて設定をします。

UrlFetchApp.fetch() は第1引数にURL、第2引数にオプションとしてパラメーターを付与できます。
これにより、設定したパラーメーターをURLに送信することができます。

これらをまとめるとこうなります。

スクリプトまとめ

function sendFileToChat() {
  // ファイル送信シートから記入がある範囲の全データを取得
  const VALUES = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ファイル送信").getDataRange().getValues();
  // B1セルからトークンを取得
  const TOKEN = VALUES[0][1]; // B1
  // B2セルからルームIDを取得
  const ROOM_ID = VALUES[1][1]; // B2
  // B3セルからメッセージを取得
  let message = VALUES[2][1]; // B3
  // B4セルからファイルIDを取得
  let file_id = VALUES[3][1]; // B4

  // ファイルを取得します。
  const FILE = DriveApp.getFileById(file_id);

  const BLOB = Utilities.newBlob(
    FILE.getBlob().getBytes(),
    FILE.getMimeType(),
    FILE.getName()
  );

  let params = {
    headers : {
      'X-ChatWorkToken' : TOKEN,
    },
    method : 'post',
    payload : {
      file: BLOB,
      message: message,
    }
  };
  const URL = 'https://api.chatwork.com/v2/rooms/' + ROOM_ID + '/files';
  UrlFetchApp.fetch(URL, params);
}

function sendFileToChat()という関数にまとめました。
これを実行することで、スプレッドシートからデータを読み取り、
チャットワークにファイルを送信することができます。

まとめ

今回はGoogle Apps ScriptにてGoogle Drive上のファイルをダウンロードすることなくチャットワークに送信する方法を解説してきました。

GASではこういった少しの手間を自動で行うことができます。

当サイトでは他にも実務で使ったGASの便利な機能を紹介していきます。

Google Workspaceを活用している場合はGoogle Apps Scriptを覚えると業務の効率化および自動化ができます。
Google Apps Scriptが学べるスクールはコチラで紹介しています。よかったら見てみてください。

Google Apps Scriptを学べるスクール3選

Google Apps Scriptが学べたらコチラの記事で収益化してみてはいかがでしょうか?

Google Apps Scriptのプロが教える!成功するGAS副業完全ガイド

最後までお読みいただきありがとうございました。

最新情報をチェックしよう!