GASとGoogle Docsで大学生活を合理化する

#自動化の意義

大学のレポートの作成のとっかかりの障壁の一つに、**レポートの雛形の作成の手間**が挙げられます。
例えば、学籍番号、所属、氏名、授業名などを手動で入力し、適切に右寄せ左寄せ、スタイルの設定をする必要があります。
**面倒なことはGASにやらせましょう。**

#テンプレドキュメント作成
基本方針は**置換**です。
まず後ほど置換したい項目を{{}}で囲んで、フォントサイズや配置を決めます。
これのいいところは、GUIでテンプレートの編集が可能な点です。

<img width='600px' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614389/855eb87e-2f45-208a-dd0a-17d6307d46f6.png'>

次に、テンプレートドキュメントのドキュメントのIDを取得しましょう
テンプレートドキュメントのURLを開き,下の{document ID}の部分を取っておきましょう
このIDを次の段階で使います

```
https://docs.google.com/document/d/{document ID}/edit#
```

#GASのスクリプト記述

以下のスクリプトを.gsファイルにコピペして、先ほど取得したテンプレートファイルのドキュメントIDを置き換えましょう

```js

function createReportBoilerplate(){
  //ここだけを毎回変更してレポートを作成します
  let courseTitle='ジャガイモ入門IA';
  let reportTitle='最終レポート';
  let teacher='ジャガイモ先端研究機構 田中マイケルジャクソン';
  let deadline='昭和32年4月45日';
  let formatDescription='B3棟の研究室にA4サイズでレポート提出必要, ジャガイモの画像を最低一枚添付する必要ありと講義スライドにあった';
  //たまにファイル名を指定してくる講義があるので、その場合はここにそれを入れ、指示通りのファイル名のドキュメントを出力します
  let fileNameRequirements='';
  //そうでなければ基本、ファイル名は
  //　`${fileNameRequirements}締め切り:${deadline},${courseTitle} `
  //　のファイル名で保存します。締め切りは何よりも大事だからです。

  //テンプレートファイルのドキュメントIDを以下に記述します
  //  https://docs.google.com/document/d/{document ID}/edit#
  let docID = '1grjjqEkpBQCcYkZ84gDjml8afyioRwhq1C2WWOGdSHQ';
  
  //テンプレートからコピーの作成
  let templateDoc = DriveApp.getFileById(docID);
  //ファイル名を識別しやすい形で指定
  let createdDoc = templateDoc.makeCopy(`${fileNameRequirements}締め切り:${deadline},${courseTitle} `);

  //コピー後のドキュメントの本文を取得します
  let body = DocumentApp.openById(createdDoc.getId()).getBody();
  
  //本文中の{{}}, mustache tagsを任意の文字列に置換します
  body.replaceText('{{courseTitle}}',courseTitle);
  body.replaceText('{{reportTitle}}',reportTitle);
  body.replaceText('{{teacher}}',teacher);
  body.replaceText('{{deadline}}',deadline);
  body.replaceText('{{formatDescription}}',formatDescription);
}


```

そのあと、スクリプトをctrl+sで保存し、以下の要領で実行します


<img width='350px' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614389/024bbee8-efc2-d815-bbeb-b4e80261f787.png'>

#GASへの権限付与
Googleアカウントへの権限許可の画面に飛ぶので、「許可を確認」を力強くクリックしましょう
なお、スクリプトファイルはGoogleアカウントでほとんどのことができてしまうので、
取り扱いに十分気を付けましょう
<img width='350px' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614389/1e3d9d7c-eeb2-3eb8-dfd7-6cc10ff02155.png'>

先への進み方がわかりづらいですが、画像のように下の「詳細」をクリックしましょう

<img width='350px' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614389/19c842a9-e183-25c7-29cc-e3b07d0cdea7.png'>

さらにわかりづらいですが、画像のように「（プロジェクト名）安全ではないページに移動」を力を込めてクリックしましょう！

<img width='350px' src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614389/8e0600c6-236c-ac2a-057a-e3e6d178a57f.png'>

そのあとは、画面にしたがって権限付与を完了してください

#実行＆ファイル生成😂
関数を実行するとGoogle Driveにドキュメントが生成されます。
こうして余った可処分時間でより一層大学生活をサークルと恋愛で埋め尽くせます！

![スクリーンショット 2020-09-29 18.55.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614389/b0c20c88-88b9-979a-70c6-21d20fc661cc.png)

##Arrow演算子を使うと、GASの実行メニューに関数が表示されない
Arrow演算子ファンの皆さん、Arrow演算子かっこいいですよね

```js

let warabimochi = (kome, yasai, kinoko)=>{
  ...
}

```

でもGASでは関数定義はできても、GASの実行メニューに関数が表示されず使えないみたいです...
ランタイムがV8エンジンになったらしいですし、今後改善されるといいですね！

とりあえず、従来の関数定義の形で書きましょう！

```js

function warabimochi(kome,yasai,kinoko){
   ...
}
```

#応用の可能性は多岐にわたる

例えば、会社で商品名などが入ったドキュメントなどを作成する時に、
いちいちファイルを作成し、手入力でデータをコピーしていませんか？
GASを使えばこの手間を削減できヒューマンエラーも減らせます。
特にスプレッドシートと連携すれば、より自由度は上がりますし、定期実行も可能です。

#日常で何がボトルネックになっているか考えてみよう
今回の例では、レポートファイルの作成という退屈で着手に時間がかかる作業を効率化しました。
こうしたボトルネックを減らしていくことで、レポートの中身というより時間と労力のかかる作業に
より早く着手でき、ストレスが減るだけでなく、自己肯定感の向上にもつながります。
あなたの限られた認知的資源をより重要なタスクに回せるように、反復的なタスクは自動化しましょう。
これがdeep workの考え方です。