ゼロから始めるIT業界人事生活（Slack連携編）

# はじめに

この記事を書いた人：榎本
前職はエステティシャンとして働いていたのでIT業界については全くの無知。
システムアイには異世界に飛び込んでしまったかのように思っている今日この頃w


# ある日・・・

白井※「榎本さんGoogleフォームの回答Slackに連携しといて～」

榎本「えっ」

白井「えっ」

榎本「（あっGoogleフォームからSlackに連携するのってそういう機能があるわけじゃないんだ・・・）」

※白井：HRの先輩。最近海苔のはさみ焼きわさび味が好き。

## じゃあどうなってんの？調べてみよう！

榎本「（一旦ぐぐる）」

それっぽい記事見つかったぁ

https://www.yukibnb.com/entry/gas_form_auto_slack_to_channel#google_vignette

うわ～～～・・・なんかやり方ややこしそう・・・だけど一旦コピペで出来るらしいしやってみるわ💦

## 榎本「できた！　けど・・・」

できたけどどういう処理でこうなってんだ・・・？

コピペでOKって書いてあるけどちょっとちゃんとソースコードを見て調べてみるか！


``` 
function autoSlack(e) {
  /* ステップ1: フォームのデータを取得する */
  //すべての質問と回答を取得する
  let itemResponses = e.response.getItemResponses();

  /* ステップ2: 必要なデータを抽出する */
  //個々の質問と回答を格納するための空配列を宣言する
  let questionAndAnswers = [];

  //for文(ループ)で変数itemResponsesから個々の質問と回答を取得する
  for(let i = 0; i < itemResponses.length; i++) {
    //質問のタイトルを取得する
    let questionTitle = itemResponses[i].getItem().getTitle();

    //回答を取得する
    let answer = itemResponses[i].getResponse();
    
    //未回答の質問かどうかで送信文章を調整する
    if(!answer) {
      questionAndAnswers.push(questionTitle + ": 未回答");
    } else {
      questionAndAnswers.push("*≪" + questionTitle + "≫*\n" + answer + "\n");
    }
  }
  ```

（参考：[【コピペでOK！】GASでGoogleフォームの回答をSlackに自動通知する方法](https://www.yukibnb.com/entry/gas_form_auto_slack_to_channel#google_vignette)）

# 実際にググってみる

![スクリーンショット 2024-11-29 11.12.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935040/497f9cc3-a110-4b2b-a2e8-ace94722a911.png)

色々わからないことが出てきた💦

一旦、

```
for(let i = 0; i < itemResponses.length; i++)
```

これを解読してみる！

# /* */とは

そもそも/* */これって何？

ほうほう、なんかググってみたら、「/*」がコメントの開始で、「*/」がコメントの終了という意味らしい。

メリットは他のエンジニアがプログラムを理解する手助けになるって書いてある。

## forとは


>ある回数処理を繰り返したい場合に使用します。

ていうことは、これは繰り返し何かが行われているっていうことか。

>for (初期化; 条件; 更新) {
  // 繰り返す処理
}

この形式で使うみたい！

そもそも、

>//for文(ループ)で変数itemResponsesから個々の質問と回答を取得する


と書いてあるにはその下でその動作が行われる言葉が並んでいるということを知らなかった💦

## letとは

> letは再代入できるものの、再宣言できない。


ふむよくわからん。

再代入は「値が入っている変数に上書きで代入すること」
再宣言は「一度宣言した変数名で再度宣言すること」で、それができないということ。

なかなか難しい💦
![necchusyou_face_girl4 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935040/43e75f05-08a8-d44a-ad3e-771dd6022a93.png)

うーーん・・・

# 更に深掘りをしてみる

そもそも再宣言って？変数って何のこと？？

# 変数
>値を入れたり取り出したりできる箱が「変数」です。
# 宣言
> 宣言とは、「この型で、こんな要素を持つ配列を作ります」ということをプログラムに記述すること。

つまりもう一回同じことをするってことか！

ふむー・・・わからんからこれを例に白井さんに聞いてみよっ！


# 榎本「再宣言がよくわかりません💦」

```
// 再宣言
var hoge1 = 1;
var hoge1 = 2;
console.log(hoge1);  // 2
 
let hoge2 = 1;
let hoge2 = 2; // ここでエラーが発生
```
（参考：[JavaScriptのletとは](https://techplay.jp/column/1619#:~:text=JavaScript%E3%81%AElet%E3%81%A8%E3%81%AF,%E5%80%A4%E3%82%92%E4%BB%A3%E5%85%A5%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82)）

白井「これを例にすると、var hoge1 = 1;っていうのはhoge1の中に1が入っているってことなんだよね」

榎本「ってことは、次はhoge1の中に2が入れられて、最終的には2だって再宣言したとってことであってますか？」

白井「そうだね」

榎本「なるほど！」

やはり、むずい。

私はエンジニアには、向いていない頭をしているw

# でもまだまだ調べてみる・・・
もうちょっとで少しはわかってくるかもしれない・・・！

## 再代入とは？

> 再代入は値が入っている変数に上書きで代入すること

らしい。

なんとなく、どういう風に回答が取得されているのかわかった気がする！

言葉で指示を出している役割をしているのか。

## let i = 0 とは？

>この部分は、ループのカウントを始めるためのスタート地点を設定するもの
	•	let は変数を作るときに使う言葉（キーワード）で,
	•	i はカウントに使う変数の名前（よく使われる記号ですが、他の名前でもOK）。
	•	0 はカウントのスタート地点。

## なぜ i = 0 なの？

>プログラミングでは、配列（リスト）の中の位置（インデックス） は 0 から始まります。

つまり、リストの最初のアイテムは インデックス0 という番号で呼ばれることになるんだ〜。

なるほど🧐

## i < itemResponses.lengthは？

> 条件式です。

この条件が true である限り、ループが続くんだ！

## i++は？

> ループごとに i を 1 増やします（インクリメントとという）。

つまりiの値を返すということなのか！

## if - else 文とは

> 「もし～ならば～であり，そうでないならば～である．」 ということを意図する文だと。


```
//未回答の質問かどうかで送信文章を調整する
    if(!answer) {
      questionAndAnswers.push(questionTitle + ": 未回答");
    } else {
      questionAndAnswers.push("*≪" + questionTitle + "≫*\n" + answer + "\n");
    }
  }
```
あ〜、だから未回答の質問かどうかを判断してるってことなんだ。


最初に比べた時よりは色々調べたからわかってきたかも・・・

# 終わりに

私にはプログラミングって未知の世界だと思っていたけど、まあまあ調べる前よりはなんかわかるようになったような気がするかも。
でもやっぱり難しいな・・・これを理解して書けるエンジニアってすごい！
![kirakira_woman.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935040/1b42667b-8aa8-f905-1f75-483ce958872a.png)



# 参考サイト等
Slack連携や本記事執筆のために拝見したサイト・記事は以下のとおりです。この場をお借りして御礼申し上げます！

[【コピペでOK！】GASでGoogleフォームの回答をSlackに自動通知する方法](https://www.yukibnb.com/entry/gas_form_auto_slack_to_channel#google_vignette)
[変数](https://wa3.i-3-i.info/word1603.html)
[for](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for)
[変数の宣言](https://wa3.i-3-i.info/word18069.html)
[JavaScriptのletとは](https://techplay.jp/column/1619#:~:text=JavaScript%E3%81%AElet%E3%81%A8%E3%81%AF,%E5%80%A4%E3%82%92%E4%BB%A3%E5%85%A5%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82)
[i++と++iの違い](https://qiita.com/suuungwoo/items/e054fdcb5a4805bb226b)
[6. if-else 文と制約条件
](https://www.msi.co.jp/solution/nuopt/docs/techniques/articles/if-else-condition-and-constraints.html)