[シェルスクリプト]　毎週、同じ内容を送信するのがめんどくさいので自動化してみた！！！

# 概要
毎週土曜日にもくもく勉強会を開催しているが、始まる少し前に「zoomのURLを貼り付けて、メール文章を考えてメール送信」　この作業がめんどくさい。
って事で、定型分を作成してslackに自動送信出来る様にしよう！！っていう内容になっています。

■大まかな流れ
> 
1.ファイルを作成して実行権限を付与
2.slackにIncoming Webhookを登録して設定
3.コード作成(zoom URL + メール文章)
4.cronの設定(ジョブスケジューリング)




# 1.ファイルを作成して実行権限を付与
まず、プログラムを書くファイルを作成します。私は土曜日に土曜日に実行するファイルなので、shellscriptディレクトリにSaturday_executeというファイルを作成しました。(./shellscript/Saturday_executeのパスはcronの設定で使います。)
では、Saturday_executeに権限を付与していきましょ。

■ディレクトリ内のファイル情報を表示する

```ruby:/shellscript
$ ls -l     　#ディレクトリ内のファイル情報を表示する
-rw-r--r-- 1 ファイルの所有者名　ファイルの所属グループ　ファイルサイズ 更新日時 Saturday_execute(ファイル名)
```
[lsコマンドの使い方とオプション](https://eng-entrance.com/linux_command_ls)
> 
表示された情報の詳細
- 左の3文字 ： 所有者のアクセス権限
- 中央3文字 ： 所有グループのアクセス権限
- 右の3文字 ： 所有者のアクセス権限
> 
-r：読み込み可
- w：書き込み可
- x：実行可
- -：アクセス権限なし

所有者のアクセス権限の3文字目が「-」なので、実行権限がないのが分かりますね。
実行権限がないので実行権限を与えましょう。


■実行権限の付与
権限の変更にはchmodコマンドを使用します。
[chmodの使い方とオプション](https://qiita.com/ntkgcj/items/6450e25c5564ccaa1b95)

```ruby:/shellscript
$ chmod u+x Saturday_execute　　　　#chmod 権限設定　ファイルパス
```
コマンド解説

|        記号  |   意味  |
|:----------------:|:----------------:|
| u |   所有者の権限     |　　

xは「■ディレクトリの情報を表示する」で説明しましたが、実行権限の事でしたね。

「Saturday_executeファイルの所有者に実行権限を付与する」という意味になります。






# 2. slackにIncoming Webhookを登録して設定
slackの左下に「Appの横にある＋ボタン]からIncoming Webhookを検索します。
<img width="953" alt="スクリーンショット 2020-07-26 11.53.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520383/873ba3a7-487a-fd52-86dc-966f929da01f.png">
「設定を追加」をクリックします
<img width="890" alt="スクリーンショット 2020-07-26 12.48.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520383/7121adbc-ca88-e096-b403-4486f42e7db8.png">
通知をしたいチャンネルを選択し、「Incoming Webhook インテグレーションの追加」をクリックします。
<img width="875" alt="スクリーンショット 2020-07-26 12.48.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520383/52a9bf22-dac3-3080-48f1-5ff778af62bd.png">
Webhook URLをコードに埋め込んで使う為コピーしておきます。
<img width="749" alt="スクリーンショット 2020-07-26 12.49.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520383/bb9e914c-6e4b-b6b1-2f4c-e8e4e232c22a.png">

これで設定完了！！














# 3.コード作成(zoom URL + メール文章)
Incoming WebhookのURL設定、slackの送信チャンネル、送信名、アイコン、メッセージを設定してcurlコマンドで送信する。

```ruby:/shellscript/Saturday_execute
#!/bin/bash

#################################################################################
# 土曜日の朝に勉強会参加用のURLをメール送信
# 概要 : Incoming WebhookのURL設定、slackの送信チャンネル、送信名、アイコン、メッセージを設定してcurlコマンドで送信する。
# 実行日 : 毎週土曜日 9時55分
#################################################################################

#slackの「勉強会」チャンネルへ通知(Incoming WebHooksのURL)
WEBHOOKURL="コピーしたIncoming WebhookのURL"

###############################################################
#固定文文字列の作成
###############################################################
#slack 送信チャンネル
CHANNEL="#勉強会"
#slack 送信名
BOTNAME="勉強会案内のお知らせ"
#slack アイコン
FACEICON=":snail:"　　#なめくじのアイコンを使用しています。設定を変更したい場合は「https://www.webfx.com/tools/emoji-cheat-sheet/」を使用。
#メッセージ内容
MESSAGE="今からもくもく勉強会を始めます。\n 下記のURLよりお入りください。\n ■時間：10時〜17時\n <zoom　URL>"

curl -X POST --data-urlencode "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${BOTNAME}\", \"icon_emoji\": \"${FACEICON}\", \"text\": \"${MESSAGE}\" }" ${WEBHOOKURL}

```
コード内容は文字列を変数に格納してcurlコマンドで送信しているだけ！！
> 
・基本操作が分からない方は下記を参照！
[シェルスクリプトの基本コマンド](https://qiita.com/zayarwinttun/items/0dae4cb66d8f4bd2a337)
・curlコマンドの使い方が分からない方は下記を参照！
[curlコマンドのオプション](https://qiita.com/ryuichi1208/items/e4e1b27ff7d54a66dcd9)



# 4.cronの設定(ジョブスケジューリング)
ここまできたら残すは「指定の時間に指定のプログラムを実行」する設定のみ！！
■ジョブスケジューリングは、指定の時間に指定のプログラムを自動実行する機能。下記の2種類
> 
・cron
- 定期的に自動実行
- crondとcrontabコマンドで構成
・at
- 1回だけ自動実行
- 標準入力でスクリプトを指定する

今回の実装は毎週通知なので、cronで行います。
それでは「/shellscript/Saturday_execute」ファイルを「毎週9時55分」に実行する様に設定して行きましょう。

```ruby:
$ crontab -e     　#eオプションを付けて起動
```

<img width="743" alt="スクリーンショット 2020-07-26 14.13.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520383/7524bd27-cbc5-7227-fd49-66eb189b63b6.png">

iでインサートモードに切り替えて下記を入力

```ruby:crontab
# (分)(時)(日)(月)(曜日) 実行するコマンドのパス
55 9 * * sat bash ./shellscript/Saturday_execute    #毎週土曜日の9時55分「Saturday_execute」ファイルを実行

#入力後、escキー押して:wqで保存終了
```

escキー押して:wqで保存終了したら完成！！！

こんな感じでslackに通知が行きます。
<img width="592" alt="スクリーンショット 2020-07-26 14.26.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520383/3af724d5-b6b8-c24b-fee1-7141aca4b570.png">

cronの詳細が分からない方は下記を参照してください。
> 
[cronで定期処理を行う](https://qiita.com/syunyo/items/69c3523a8c500b37f33f#cron%E3%81%AE%E8%A8%AD%E5%AE%9A)
[ronの書式で曜日指定に数字を使うのやめたい](https://qiita.com/skokado/items/ef82a197350c4322a53f)