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

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

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

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

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

発表資料

ソースコード

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);
}
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も便利なのでぜひ使って欲しい!