非エンジニアが業務改善のためにChatGPTと会話する際に知っておくと便利なエンジニア用語

## これはなに？

ChatGPTは非エンジニアのみなさんにとっても便利なツールです。
私が所属するチームでは、非エンジニアの方がChatGPTを使用してGASを書き、業務改善をするという実績を上げています。

本記事では、非エンジニアの方が業務改善を目的にChatGPTと会話する際に、知っておくと便利な用語をまとめました。


### 前提

ChatGPTへの指示は

- 目的（命令）
- 入力値
- 条件
- 出力形式

の要素が含まれていると意図通りに動いてくれます。

今回はその中でも「目的」、「入力値」、「出力形式」に使用しがちなエンジニア用語を紹介します。

## 目的編

### GAS

GAS(Google Apps Script)は、Googleのサービスを自動化またはカスタマイズするための機能です。

例えば、スクリプト（プログラミングのようなもの）によって以下のような自動化をすることができます。

- 毎朝特定の時間にGmailから自動的に報告書を送信する
- スプレッドシートのデータに基づいてカレンダーイベントを自動的に作成する

こうしたスクリプトを使用することでタスクを自動化し、時間を節約することができます。

GASは主に3つの使用方法があります。

- **埋め込み（サービス内での利用）**
GASが特定のGoogleサービス（Google SheetsやGoogle Docsなど）の内部で動作する形です。
サービスのユーザーインターフェイスと直接連携し、そのサービスの機能を増強またはカスタマイズするのに使用されます。

- **埋め込み（サービス間の連携）**
一つ以上のGoogleサービス間で情報を共有したり、一つのサービスから別のサービスへと操作を行うためのスクリプトです。

- **スタンドアロン**
これは特定のGoogleサービスに対して紐付けされていないスクリプトです。
そのため、GASを埋め込むことのできないGoogleサービスや、外部のWebサービスに対しても操作を行うことができます。
スタンドアロンのスクリプトは、特に一連のタスクを自動化するためのものです。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2688241/93194351-c868-cf83-455b-c74058059e7f.png)


### API

APIは**Application Programming Interface**の略で、アプリケーション同士が「会話」するための言語や規則のようなものです。
これによって、アプリケーション同士がデータを共有したり、一つのアプリケーションが別のアプリケーションの機能を使用したりすることができます。

APIは「要求と応答」のシステムです。あなたが特定の情報を要求すると（例えば、「特定のTwitterユーザーの最新のツイートを見せて」）、APIはその要求をシステムに伝え、システムからの応答（最新のツイートデータ）をあなたに戻します。

APIをたとえるならば、レストランでのオーダーです。
レストランでは、メニューを見てウェイターに食べたいものを注文します。
ここでウェイターがAPIの役割を果たします。
ウェイター（API）は、あなた（ユーザー）と厨房（アプリケーション）の間で通信を行うことにより、あなたは厨房で直接料理を作らなくても、食べたい料理を手に入れることができます。

なお、APIを利用するためには、APIの提供者から提供される「認証キー」が必要な場合があります。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2688241/82ea50c3-a196-2e80-2b77-21848eba53be.png)


## 入力値編

### データ型

データ型とは、プログラム内で操作するデータの「種類」または「形」を指します。
データ型には、大まかに以下のような種類があります：

- **文字列（String）**
  テキストデータを表す型で、ダブルクオート (" ") やシングルクオート (' ') で囲まれた一連の文字を指す。
  例えば `"Hello, world!"` や `'apple'` など。

- **数値（Number）**
  数字を表す型で、整数や小数を扱える。
  例えば `-42` や `3.14` など。

- **真偽値（Boolean）**
  真または偽を表す型。
  `true` または `false` のいずれかの値しか取れない。

### 変数

変数は、情報を格納したり操作したりするための「箱」のようなものです。

変数を宣言することは、新しい「箱」を用意するようなものです。
この箱はまだ空です。

変数に名前を付けることは、箱に名前が書かれたラベルを貼るようなことです。

変数に値を代入することは、箱の中にモノを入れるようなことです。
このモノ（情報）は何でもよく、数字だったり、テキストだったり、更には別の箱（オブジェクトや配列など）だったりします。

変数を定義し値を代入することで、その値を後で使用したり、別の値に変更したりすることができます。
また、「変数名」によってそれぞれの箱を識別し、プログラムの中でデータを参照することができます。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2688241/e4cf85da-55e2-6ac3-5f3e-ab187a554f77.png)


### 関数

関数とは、計算や操作などに名前を付けで実行できる状態にしたものです。
関数を実行すると、ひとつの出力（戻り値）が返ってきます。
関数の中には、入力値（引数）を必要とするものがあります。

関数は、いくつかの情報を取り込んで処理し、その結果を出力する「ブラックボックス」に例えることができます。
ブラックボックスとは、内部で何が起こっているか理解していなくても、**何を入力して何が入力されたか**を通じて機能を理解できるようなシステムやデバイスを指します。

ブラックボックスの例として、コーヒーマシンで説明します。
私達は`コーヒーマシン`というブラックボックス（関数）に対して、`コーヒー豆`と`水`という入力（引数）を与えます。
マシンの内部ではこれらの入力に基づいて一連の複雑な操作が行われ、それにより私達の求める`コーヒー`（出力・戻り値）が作られます。
私達はコーヒーマシンの内部で具体的に何が起こっているのかを気にせず、結果として出力されるコーヒーを楽しむことができます。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2688241/5a96fffa-f425-37bc-9bd3-269238630bc9.png)


### 配列

配列は、いくつかのデータをひとつのまとまりとして保持するための仕組みです。
これを物理的な世界の要素に例えると、「引き出しのある棚」と考えることができます。

例えば、一週間の天気を記録するとします。
それぞれの日の天気を個々に管理するよりも、一週間分の天気を一つの配列として保存し、その配列を "週間天気" という名前で呼ぶことができます：

```
週間天気 = ["晴れ", "曇り", "雨", "雨", "晴れ", "晴れ", "曇り"]
```

そして、この配列内の各要素（アイテム）は番号（通常は0から始まります）でアクセスでき、これは各アイテムが何番目の引き出しに収納されているかを示しています。


## 出力形式編

### カラム

表は一般的に、**行（Rows）** と **カラム（Columns）** の２つの要素から成り立っています。これはよくスプレッドシートやデータベースのテーブルで見かける形式です。
カラムは、表の「縦の一列」を指します。
これはスクール名簿で言う「名前」や「年齢」、「メールアドレス」などのフィールドに該当します。

例えば、次のような学生の名簿があったとします：

| 名前    | 年齢 | メールアドレス            |
|---------|------|----------------------|
| Taro    | 20    | taro@example.com    |
| Hanako | 21   | hanako@example.com |
| Jun     | 22   | jun@example.com    |

この表では、`名前`、`年齢`、`メールアドレス`がカラム名になります。

このように、表におけるカラムは情報を整理し、理解しやすくするための重要な要素です。

### マークダウン形式

マークダウンは、テキストを書くための軽量なマークアップ言語です。

その目的は、人間が読み書きしやすく、さらにそれをHTMLに変換できることです。
これにより、プレーンテキストで書かれた文書が、簡単な記号を使用して書式を追加できます。

たとえば、次のように使用されます：

* アスタリスク `*` またはアンダースコア `_` を使用して _イタリック_ や **ボールド** を作成できます。
* ハッシュ `#` を使用して見出しを作成します（`#` はh1、`##` はh2、など）。
* ダッシュ `-` またはアスタリスク `*` で項目をリスト化します。
* バックチック `` ` `` を使用して コード を示します。

マークダウンは、Web上で文章を書く際に非常に便利で、特にウィキなどでよく使われます。
Notionもマークダウンに似た書き方をすることができます。
この記事も、[Qiitaで使用できるマークダウン記法](https://qiita.com/Qiita/items/c686397e4a0f4f11683d)を活用して書かれています。

その透明性とシンプルさから、技術者だけでなく、非技術者にも広く使用されています。
マークダウンが主流となったことで、文章に構造を付けるために複雑なHTMLタグを記述する必要がなくなりました。

### マーメイド形式

マーメイドは、図表やフローチャートを生成するためのマークダウンライクなスクリプト言語です。
[Notionはマーメイドでフローチャートが書けます](https://dev.classmethod.jp/articles/mermaid-markdown-is-supported-in-notion/)。

テキスト形式で記述することにより、ユーザーフレンドリーで維持管理が容易な図を作成できます。
マーメイドの一例を以下に示します：

```
graph TD;
    A-->B;
    A-->C;
    B-->D;
    C-->D;
```

上記のコードは、ノードAから出発し、ノードBとノードCに通じ、それぞれ最終的にノードDに至るというフローチャートを示しています。
マーメイドは、シーケンス図、ガント図、クラス図、状態図、パイチャートなどのさまざまな種類の図を生成するのにも使用できます。Markdownと同じく、その目的は視覚的な情報を簡単に生成・維持するためのシンプルな記法を提供することです。
このように、マーメイドはドキュメンテーションを自己完結型で視覚的にわかりやすくするための強力なツールとなります。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2688241/f937d099-75fa-530c-b16d-2b7859a29ad5.png)


### YAML形式

YAML（ヤムル）は、データ項目の階層構造を人間が読み書きできる形式で表現するための言語の一つです。

YAMLの基本的な構造は、キーと値のペアとインデント（空白文字）によるネスト（入れ子）で構成されています。

キーと値のペアはコロン : で区切られ、インデントはネストした構造を表現します。

例えば次のような記述により、データを表現します：

```yml
owners:
  - name: John Doe
    pets:
      - name: Rover
        type: dog
      - name: Spot
        type: dog
```

このとき、`John Doe`と`Rover`は入れ子（親子）関係にあります。
`Rover`と`Spot`は並列（兄弟）関係にあります。


## まとめ

以上が、非エンジニアの方がChatGPTを使って業務改善する際に知っておくと便利なエンジニア用語です。
あまり難しく捉えず、この記事を読んでも意味や使い方が分からない言葉が出てきたらChatGPTに聞いてしまうのが良いかと思います。

一番大切なのはここに書いてあることではなく、「**自分の仕事の中で自動化できることは無いか？**」という視点を持つことです。
言い換えれば、 **ダルい仕事をやりたくない**という[怠惰さ](https://freelance-start.com/articles/575)です 笑

この記事が多くの非エンジニアの方に届けば幸いです。