共同作業の効率化に Google Apps Script を使うことにしました

# はじめに
これまで読むだけだった Qiita にアカウントを作りました。[Google Apps Script](https://developers.google.com/apps-script/) を使い始めたのですが、いろいろはまることが多く、Qiita からもたくさんヒントを頂きましたが、自分の備忘録を残していこうと思います。

会社の業務ではなく、社内サークルと言うかボランティア的な活動で、かなりアナログな共同作業をしているのですが、あるきっかけからツールの見直しを始めました。どうせなら手作業で行っていることを自動化しようと、仕事の空き時間や休日にポチポチと始めました。

今後はコードについて書いていくつもりですが、この投稿では、何故 Google Apps Script(を含む一連のツール)を選んだのか説明します。

# 要求整理
公開できない話でもないのですが、一般化した表現で記載します。

## 活動内容概要
- 毎週決まった作業を行っています
- 週次で更新されるあるサイトの内容に対して、複数人で作業を分担します
    - 元データはまとめ役の方が整理して作業者に配布します
    - 分担は作業者の立候補で行いますが、最終的にはまとめ役の方が調整して決定します
- 作業結果が集まったら、まとめ役の方が整理して、有識者のレビューに回します
- レビューが終わったら、HTMLを作成してホームページに公開します
- 業務ではありませんので、予算はありません

## メンバーの特徴
- 作業者(まとめ役を含む)
    - 定年も近い、或いは定年退職後の高齢者です
    - ある技術分野の第一人者であった方々です(作業にはその専門知識が必要)
    - ITには弱く、Web、メール、オフィスは使えますが、モダンなツールを使いこなしたり、自分でツールを探したりということは苦手です
- レビュア
    - ほぼ作業者と同じです
- Web管理人
    - Web技術がわかるのは私だけです
    - 作業者、レビュアよりひとまわり若輩ですが、いいおっさんです
    - でも、コード書きたい人です
    - 自分がいなくなると、Webページが更新できなくなることをリスクと考えています

## 現在使っているツール
- 連絡
    - 全てメールです
    - メーリングリストも作成しておらず、関係者全員に送信する運用です
- ファイル交換
    - 作業者による作業ファイルのやり取りには [cybozu Live](https://cybozulive.com/) を使っています
    - ご存知の通り今年の[4/15でサービス終了](https://live.cybozu.co.jp/about/20171024.html)となります(これがツール見直しのきっかけです) 
    - cybozu live はたくさんの機能を備えたグループウェアですが、この活動で使っているのは掲示板のみです
    - 導入時の選定には関わってませんでしたが、敷居の高いユーザ登録操作を自分でしなくても、管理者がメールアドレスでユーザ登録できるのがよかったようです
- Web管理
    - 会社のホームページの一部を間借りしているので、CMSはIT部門指定のものです
    - 毎週同じようなコンテンツを作るので、HTMLファイルの雛型は情報元サイトのHTMLから自動生成しています(ローカルでJavaScript実行)
    - レビュー完了後の作業結果を雛型に埋め込む作業は、まとめ役をして頂いている作業者の方にお願いしています
    - 最終的に掲載可能な形式には、シェルスクリプトで変換しています

# ツール選定

## ポイント
- 無料である
- 作業者のアカウント登録なしで使える、または管理者側で一括してアカウント登録できる
- 継続性を考慮して、なるべくメジャーなサービスを使う
- 自動化を進めたいので、サービス連携しやすいものを使う
- とは言え、あれもこれもではなく、なるべく少ないツールで実現したい
- 私個人のモチベーションとして、あわよくば仕事にも役に立ちそうな技術を使いたい

## 連絡
メールは変えられませんが、メーリングリストは作った方がよさそうです

### [freeml](https://www.freeml.com/)
プライベートで使い慣れていたので、freemlを使うつもりでした

- 登録は管理者側で一括して実施できます
- メールに広告が入るのがうっとうしいです
- 携帯メールに届かない問題がよく発生します
    - これは何を使っても一緒ですし、この活動のユーザが携帯で見ることは少ないので、あまり問題ではありませんが

### [Google グループ](https://groups.google.com/)
Google メインで固まり始めた頃、ふと思い出して調べてみました

- 昔調べた時は、全員Googleアカウントを持っている必要があったような記憶がありました
- 改めて調べてみて、Googleアカウントなしのアドレスを、管理者側で一括登録できることがわかりました
- ということで、Googleグループで検討を進めています

## ファイル交換
これが悩みました、、、というかまだなお検討中です

### [Slack](https://slack.com/)
- よいところ
    - 私が使い慣れている(仕事でも使ってます)
    - 管理者側での一括ユーザー登録は可能です(各自パスワード設定は必要)
    - サービス連携は簡単です
    - 分担時の立候補などもチャット感覚でできそうですし、飲み会調整などのコミュニケーションにも使えそうです

まずは、一部のメンバーの連絡だけでも Slack に変えてみようと思い、HTML雛型ファイルの交換を先行して Slack に移行しました。これだけならうまく回りそうです。少し運用した後、手作業で実行していた変換プログラムを社内サーバの cron で実行するようにして、Slack への投稿も API で自動化できました。とてもいい感じと思いました、、、私は。

- 他の業務も検討するうちにわかってきた困りごと
    - ファイル管理機能がほとんどありません
    - ある週の作業ファイルをフォルダにまとめるようなことができません
        - スレッドの運用で似たことができないかなとも考えましたが、決めごとが増えてわかりにくいです
    - 作業を分担する際に、立候補用の記事を担当者がそれぞれ編集して記名するやり方をしているのですが、複数人で同一ファイルを編集する[ポスト機能](https://get.slack.help/hc/ja/articles/203950418-%E3%83%9D%E3%82%B9%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)もいまいちわかりにくいです
    - あと試行しているメンバーとのやり取りからも、高齢者の方が慣れるには時間がかかりそうな気がしました

### [Google ドライブ](https://drive.google.com/)
言わずと知れた Google ドライブですが、前述の作業分担のための立候補をスプレッドシートへの記名にしたら少しはわかりやすいかなと思い、検討を始めました。

Google ドライブのファイルは、Google アカウントを持っていない人にも共有可能です。共同編集も可能です。作業分担については、とてもいい感じです。

残念なのは、Google アカウントを持っていない誰でもファイルを投稿できる共有フォルダは作れそうにないことです。これができれば作業ファイルを同じフォルダに集めることもできそうなのですが。

ただ、作業完了後に一時ファイルを参照することはほとんどないので、このあたりの検討と前後して使い始めた Google グループ(メーリングリスト)に投稿するだけでよいのではないかと思い始めました。そうすると実は Slack もほとんど要らないという話になります。ぐるぐる回って結局スプレッドシートだけ、という感じなのですが、まずは運用が回せそうなイメージが作れました。

というわけで、ここまで長かったですが、Google Apps を自動化するには Google Apps Script というわけです。以下のようなことに使います。

- cron のような週次の自動実行
- HTML雛型ファイルを自動生成して Google ドライブに保存し、リンクを Slack に流す
- 立候補用スプレッドシートを自動生成して、リンクをメーリングリストに流す
- 立候補の状況を、スプレッドシート編集のタイミングで Slack に流す
- (当面作りませんが)メールで受信したファイルを Google ドライブに保存する

# おわりに
初投稿で気合が入ったわけではないのですが、長文駄文になってしまいました。アーキテクトの仕事をしてますので、要求→要件といった流れを説明してみようと思ったのですが、ついあれもこれも書いてしまって、あまり整理できた感じになりませんでした。今後は短いのをたくさん書くようにしてみます。