Developers.IO 2019 in TOKYO で「claspではじめるサーバーレス開発 Google Apps Scriptで簡単自動化」を話しました #cmdevio

2019年11月01日に開催された「Developers.IO 2019 in TOKYO」で「claspではじめるサーバーレス開発 Google Apps Scriptで簡単自動化」というタイトルで発表させていただきました。
2019.11.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。サービスグループの武田です。

2019年11月01日に開催された「Developers.IO 2019 in TOKYO」で「claspではじめるサーバーレス開発 Google Apps Scriptで簡単自動化」というタイトルで発表させていただきました。

内容はGASとclaspの入門となっています。スライドの順番で手を動かしてもらえれば試せるようになっていますので、使ったことのない方はぜひ触ってみてください。

スライド中に掲載したソースコードを、コピペしやすいようにこちらにも載せておきます。ご自由にお使いください。

発表資料

ソースコード

コード.gs

function outputGmailFilterSettings() {
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear();

  var filters = Gmail.Users.Settings.Filters.list('me').filter;
  var headers = [
    'id',
    'criteria.from',
    'criteria.to',
    'criteria.subject',
    'criteria.query',
    'criteria.negatedQuery',
    'criteria.hasAttachment',
    'criteria.excludeChats',
    'criteria.size',
    'criteria.sizeComparison',
    'action.addLabelIds',
    'action.removeLabelIds',
    'action.forward',
  ];
  var values = filters.map(function(f) {
    return [
      f.id,
      f.criteria.from,
      f.criteria.to,
      f.criteria.subject,
      f.criteria.query,
      f.criteria.negatedQuery,
      f.criteria.hasAttachment,
      f.criteria.excludeChats,
      f.criteria.size,
      f.criteria.sizeComparison,
      f.action.addLabelIds != null ? f.action.addLabelIds.join() : '',
      f.action.removeLabelIds != null ? f.action.removeLabelIds.join() : '',
     f.action.forward,
    ].map(function(v) {
      return v == null ? '' : v;
    });
  });
  values.unshift(headers);
  sheet
    .getRange(1, 1, values.length, headers.length)
    .setWrapStrategy(SpreadsheetApp.WrapStrategy.CLIP)
    .setValues(values);
}

src/Code.ts

function outputGmailFilterSettings() {
  const sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear();

  const filters = Gmail.Users.Settings.Filters.list('me').filter;
  const headers = [
    'id',
    'criteria.from',
    'criteria.to',
    'criteria.subject',
    'criteria.query',
    'criteria.negatedQuery',
    'criteria.hasAttachment',
    'criteria.excludeChats',
    'criteria.size',
    'criteria.sizeComparison',
    'action.addLabelIds',
    'action.removeLabelIds',
    'action.forward',
  ];
  const values = filters.map(f =>
    [
      f.id,
      f.criteria.from,
      f.criteria.to,
      f.criteria.subject,
      f.criteria.query,
      f.criteria.negatedQuery,
      f.criteria.hasAttachment,
      f.criteria.excludeChats,
      f.criteria.size,
      f.criteria.sizeComparison,
      f.action.addLabelIds != null ? f.action.addLabelIds.join() : '',
      f.action.removeLabelIds != null ? f.action.removeLabelIds.join() : '',
      f.action.forward,
    ].map(v => v == null ? '' : v)
  );

  const data = [headers, ...values];
  sheet
    .getRange(1, 1, data.length, headers.length)
    .setWrapStrategy(SpreadsheetApp.WrapStrategy.CLIP)
    .setValues(data);
}

さいごに

GASもclaspも便利なのでぜひ使って欲しい!