テスト/プログラミング初心者による自動化に携わった経験談


## 1.はじめに
こんにちは！
QA歴2年で現在テスターをしています。
はじめての投稿なので、拙い文章になっているかもしれませんが、最後まで見ていただけると嬉しいです！

#### 自己紹介

学生時代はゲーム関連の専門学校に入学。
2021年にQAの仕事をはじめ、現在QA歴2年
QA/プログラミングを試行錯誤しながら頑張っています。

#### 書くに至った経緯
今年は自動化、効率化に取り組む機会があり、挑戦しました。
ここではその経験と反省を踏まえて、
- やったことないけど自動化を始めてみたい人
- 自動化運用を検討しているけれど初心者に任せても平気か不安な人

上記の方を対象に、やってみてどうだったか、特に役に立った関数はどんなものか、やる際はどんなことに気を付けたら良いかなどを各ポイント毎に紹介したいと思います。

***
## 2.実装の流れ
今回は下記のような工程で、自動化/効率化を行いました。

#### 実装前

<table>
    <tr>
      <th>順番</th>    
      <th>項目</th>
      <th>内容</th>
    <tr/>
      <td>　1　</td>    
      <td>スケジュール作成</td>
      <td>要件出しや実装時などの順序や作業にかかる時間など決め、管理する</td>
    </tr>
    <tr>
      <td>　2　</td>
      <td>資料の準備</td>   
      <td>自動化/効率化を行う上で必要な資料を準備する
(仕様書やマスターデータ、検証に使用したテストケースなど)</td>
    </tr>
    <tr>
      <td>　3　</td>
      <td>仕様,
要点の確認</td>   
      <td>資料を見て、どういった仕様なのか、必要な要点を確認する</td>
    </tr>
    <tr>
      <td>　4　</td>
      <td>実装環境の構築</td>
      <td>何を用いて実装していくかを定める
(今回はスプレッドシートを使用して実装しました)</td>
    </tr>
 </table>

#### 実装時

 <table>
    <tr>
      <th>順番</th>    
      <th>項目</th>
      <th>内容</th>
    <tr/>
    <tr>
      <td>　1　</td>    
      <td>データの抽出</td>
      <td>仕様書やマスタのデータを抽出する</td>
    </tr>
    <tr>
      <td>　2　</td>
      <td>データの形成</td>   
      <td>必要に応じて、仕様書のデータをマスタデータに合うように形成する</td>
    </tr>
    <tr>
      <td>　3　</td>
      <td>仕様/マスタの照合</td>   
      <td>抽出したデータを照合し、データ同士の相違がないか検証する</td>
    </tr>
 </table>

#### 実装後
 <table>
    <tr>
      <th>順番</th>    
      <th>項目</th>
      <th>内容</th>
    <tr/>
    <tr>
      <td>　1　</td>    
      <td>使用手順の説明</td>
      <td>完成したものをテスト担当者の方などに説明する</td>
    </tr>
    <tr>
      <td>　2　</td>
      <td>試運転後の改修＆修正</td>   
      <td>説明後に改修すべき点などがあった場合はその点を修正する</td>
    </tr>
 </table>
やってきた各工程でうまくいった点、改善すべき点などがいくつかありましたので、紹介したいと思います。

***
## 3.うまくいった点
### 自動化/効率化を行う上で効果的だったこと
#### ①密なコミュニケーション
密なコミュニケーションと言ってもイメージしづらいと思いますが、
自分が意識したのはとにかく **「止まらないこと」**
少しでも悩んだり、迷ったりした際は **「聞く」** フローを自分の行動に取り入れることによって、
密なコミュニケーションが取れたと思います。
どの工程でもコミュニケーションを積極的に行うことで自動化/効率化をより良く行うことができました。
実装で迷ったらQAエンジニアの方に相談したり、進め方で分からなかったらテスト担当者、上長や同僚の方に相談してみましょう。

#### ②質より速度
実際に実装するときは時間をかけず、修正や改修時に時間をかけるやり方を意識しました。

なぜなら、数回のコミュニケーションでは相手の意図を完全に汲み取ることは難しいため、時間をかけて完璧なものを用意しても、それが相手の完璧とは限らず、また望んでいないものができる可能性も少なからずあるからです。
また、完成してみないとわからない課題感などもあると思いますので、
実装中にこまめに相談する。もしくは仮組みで完成させて、すり合わせを行ったほうが時間も短く、確実なものが出来上がると思います。

## 4.改善すべき点
### 自動化/効率化を行う上での反省点
#### ①仕様把握が甘く、改修点が多く出た
プロダクトの事をあまり知らないまま、実装に取り組んだため、仕様の把握が甘く、完成後に多くの改修点が出ることになりました。
自分で理解したと思っていても、全然理解できていないことがあるため、テスト担当者の方などと密に連携をして、何を効率化したいのか、どんな状況が想定できるかを把握しておきましょう。

#### ②スケジュール見立てが甘かった
自分は今回WBS(成果物向け作業分解構造図)を組んで自動化に取り掛かりました。

ですが、自動化/効率化を行う上で完成/運用をゴールとして定めてしまったため、改修点が多く出た時に予定が後にずれてしまいがちでした。
完成後に調整や機能追加などやることは多く、完成をゴールとして捉えると実際に運用に乗せる時には予定していた期限とは大きく離れる場合があることを今回学べたので、
次回から実装の予定を立てる場合は、その後の調整も含めた期間を取っておくと良いと思いました。

#### ③説明MTGなどの段取りが悪かった

自分は伝えることばかりに集中していて、相手のことを全く配慮できていませんでした。
事前に資料を共有したり、手順を記載しておくなど相手に伝わるような努力をしておくことでスムーズなMTGを行うことができます。

コミュニケーションの際には、 **相手に「伝える」** ことではなく、  **相手に「伝わる」** ことを意識したいと思います。

***

## 5.本取り組みにおける学び
### ①スプレッドシート関数の知識が身についた

:::note 
※以下:「スプレッドシート関数」⇒「関数」表記
:::
自動化/効率化を進めるうえで、関数の知識を身に着けることができました。
以前よりも実装のイメージが湧くようになり、実装速度が上がり、精度もよくなりました。

内容については**6.覚えておくと役に立つ関数** で触れると思いますので、具体的にはそちらで説明します。

***
## 6.覚えておくと役に立つ関数
### ここで、実装時によくお世話になった関数の紹介をしようと思います。
#### 各情報の参照用に「IMPORTRANGE」
仕様書やマスターデータがスプレッドシートだった場合は **「IMPORTRANGE」** を使用すると便利です。
簡単に説明すると別のシート情報を引っ張ってこれる関数になります。

:::note warn
※Excelには対応していないので、注意
:::

詳しい使い方は[こちら](https://support.google.com/docs/answer/3093340?hl=ja)をご参照ください。

#### 文章の形成に「FIND」「SUBSTITUTE」
仕様書とマスタの意味が同じでも、記載方法が異なると照合しづらい場合があると思います。

>仕様書 

| 日数 | 報酬 |
|:-:|:-:|
|1|スタミナ回復薬x10|
|2|HP回復薬x3|

>マスタ

| 日数 | アイテム名 | 個数 |
|:-:|:-:|:-:|
|1|スタミナ回復薬|10|
|2|HP回復薬|3|



上記だと、仕様書のアイテム名と個数を切り離した方が照合しやすそうですよね。
この場合は文章を形成してあげる必要がありますので、 **「FIND」「SUBSTITUTE」** 関数が便利です。

簡単に説明すると下記になります。
* 「FIND」関数は文言の中から特定文字の位置を検索
* 「SUBSTITUTE」関数は文言の中から特定文字だけ置換する

これらと **「LEFT」「RIGHT」** 関数を組み合わせれば基本的な形成は行えると思いますので、覚えておいて損はないと思います。

詳しい使い方は下記をご参照ください。
・ [「FIND」](https://support.google.com/docs/answer/3094126?hl=ja)
・[「SUBSTITUTE」](https://support.google.com/docs/answer/3094215?hl=ja)
#### 後の運用を楽にする「ARRAYFORMULA」
例えば仕様書とマスタの照合をしていて、セル100行に **「EXACT」** 関数を使用していたとします。
※ **「EXACT」** 関数は簡単に説明すると2つの文字列が同一であるかを検証する関数です。

そこで、別の個所との比較も追加で見てほしいと依頼された場合、100行の関数を修正するのは大変です。

そんな時は「ARRAYFORMULA」で管理してあげましょう。
↑の関数が
 **EXACT(B2,C2)**
**…**
**EXACT(B100,C100)**
だった場合、「ARRAYFORMULRA」関数を使用すると
↓下のようにすれば100行に関数を入れなくても、1行で完結できます。
 **ARRAYFORMULA(EXACT(B2:B100,C2:C100))** 

改修するときも **「ARRAYFORMULRA」** が入っている関数だけを変更すればよいので、長く運用する際には特に役立ちます。

:::note warn
※Excelには対応していないので、注意
:::
詳しい使い方は[こちら](https://support.google.com/docs/answer/3093275?hl=ja)をご参照ください。

***
## 7.まとめ

- 自動化/効率化を行う上で効果的だったこと
▲ コミュニケーションを密に取ることで、無駄な時間を省く
▲ 速度重視で取り組むことで、修正や改修に時間をかけられる

- 自動化/効率化を行う上での反省点
▲ 仕様確認などは自分だけで行わず、テスト担当者の方と共に確認する
▲ スケジュールを組む際はツールが完成した後のことまで考えて予定を立てる
▲ コミュニケーションを取る際は伝えることばかりではなく、相手に伝わることを意識する

- 本取り組みにおける学び
▲ スプレッドシート関数の知識を身に着けるなど成長ができる

- 覚えておくと役に立つ関数
▲ 「IMPORTRANGE」
▲ 「FIND」「SUBSTITUTE」
▲ 「ARRAYFORMULRA」

## 8.最後に
いかがだったでしょうか。
QA/プログラミング初心者の自動化への道のりは決して楽なものではありませんでしたが、自動化を通して得られる知見や意識の変化などはやってみないと手に入らない貴重な経験でした！
この記事を読んでいる方が効率化にチャレンジしてみたい！と思っていただければ嬉しいです。

今年もあと少しですが、気を抜かず頑張りましょう！