エンジニアがつい「みんな知ってる体」で使ってしまう技術用語をふんわり解説[初級編]

# まえがき

## 書いた人について

はじめまして & おひさしぶりです🤗

「わからない」の気持ちがわかるエンジニア、のえぞうと申します。
北海道で育ち、大学で本州に出た後、また北海道に戻って参りました！

未経験で辛かったこと、理解するのが難しかったこと、たくさんありました。

この記事を読んでくださる皆様のお幸せとご活躍を願い、
ほんの少しでもお役に立てれば、
なまら（北海道弁で「とても」の意）嬉しいです。

## 経緯

今回の記事を書くことになったきっかけは、ある日、
社内の業務改善のためにGASアプリケーションの制作メンバーが募集されたことでした。

1番乗りで立候補していたのは、なんとエンジニアではなく営業担当の方。

日頃から営業さんとエンジニアが、互いにもっと理解を深める必要があると感じていた私は、共同制作を提案しました！

エンジニアと営業さんが一緒にアプリを作ることは、
相互の業務の理解を深める絶好のチャンス！だと思ったためです。

会話をしていく中で、
「営業さんはこういうワードが理解しづらいんだなぁ」と感じる場面がいくつかありました。

今回はその中でも特に
**認識齟齬が起こりそうなキーワード**
をピックアップして紹介・解説したいと思います！

## 対象読者

- 開発業務未経験の営業さん
- クライアントや営業さんと会話するとき、わかりやすく伝えられないと悩むエンジニアさん

# 概要

エンジニアとエンジニア以外の方、
両者が知っておくとより円滑なコミュニケーションが可能となる技術的なキーワードを10個選定し、
エンジニア以外の方向けに解説します。

:::note warn
エンジニア以外の方に向け、正確性より***言葉のイメージを掴んでいただく***ことを目的として記載いたしました。

有識者の方々にはところどころに違和感があるかも知れませんが、「こういう説明のしかたもあるんだな」くらいでお読みいただければと思います。
:::

****

## キーワード10選

キーワードをクリックすることで、プチ解説が表示されます。

<details><summary>1. 環境</summary>

:::note
ハードウェアとソフトウェアの両面で使用される言葉です。
広い意味を持ちますので、混同しないよう注意しましょう。
:::

</details>

<details><summary>2. プログラミング言語</summary>

:::note
言語によって様々な特徴があります。

- 実行速度
- ドキュメント（説明書）量
- 言語を扱えるエンジニア数
など
:::

</details>

<details><summary>3. 変数と定数</summary>

:::note
変数も定数も「データの入れ物」ですが、
変数は何度でも値を格納（代入）しなおすことができるのに対し、
定数はただ一度のみです。
:::

</details>

<details><summary>4. 関数（function）</summary>

:::note
関数とは処理のまとまりのことで、
データを受け取り、処理を行い、データを返却します。
:::

</details>

<details><summary>5. インデント</summary>

:::note
***可読性***において重要な役割を果たします。
:::
</details>

<details><summary>6. my○○, Hoge, Foo, Bar</summary>

:::note
サンプルコードにおいて、
***特に意味のない名前***や***文字列***に使用されます。
:::

</details>

<details><summary>7. コード中のコメントの必要性</summary>

:::note
処理の実行には影響しませんが、
開発時のメモとして一時的に記載したり、
他者の処理内容の理解を助けたりする目的で記載することが多いです。
:::

</details>

<details><summary>8. 命名規則</summary>

:::note
変数や定数、関数などの命名は基本的に開発者が行います。
ただし、ルールを守る必要があります。
:::

</details>

<details><summary>9. フレームワーク</summary>

:::note
アプリケーションを開発するために必要な機能や、
最低限アプリケーションとして動作するための枠組みが用意されているものです。
:::

</details>

<details><summary>10. ライブラリ</summary>

:::note
何らかの言語に対し、より開発しやすくするためにカスタマイズされたプログラムです。
:::

</details>

# 解説

以下にキーワードの解説を記載します。

プチ解説より少しだけ詳しく説明していますので、
必要に応じてご活用ください。

## 1. 環境

環境といっても広い意味がありますが、
本記事では3つの意味を解説します。

:::note

広い意味を持つため注意しましょう。

- ハードウェア環境
- ソフトウェア環境
- 開発環境と本番環境

:::

また、3つの意味を全て合わせて「環境」と呼ぶ場合もあります。

### 1.1 サーバの種類（ハードウェア）

例えば、エンジニアが開発したプログラムを配置し、
ユーザ（アプリケーションやシステムを閲覧・使用する者）からの要求に応えるマシンを、
***サーバ***と呼びます。

また、サーバの実体（パソコン）をクライアントなどの社内に配置することを***オンプレミス***といい、
対照的に他社のサーバにプログラムを配置して運用することを**クラウド**といいます。

クラウドの代表的なものに、***AWS***があります。

### 1.2 開発するための環境（ソフトウェア）

OSや仮想環境、
使用するマシン（パソコン）スペックやプログラミング言語、
などの意味もあります。

また、関連したキーワードとして、
「アーキテクチャ（構造、構成）」
という言葉があります。

興味のある方は、ぜひ調べてみてください。
さらにエンジニア業務の理解が深まるはずです。

### 1.3 開発環境と本番環境

開発環境：本番では使用しない、仮に壊れても問題がない環境
本番環境：クライアントが実際に使用する環境

ちなみに、

開発環境での試験に合格したプログラムを本番環境に反映させることは、

***デプロイ***　や　***リリース***

などと呼びます。

## 2. プログラム言語

:::note
数多くの言語が存在し、それぞれに特徴があります。
適切な言語を選定して使用します。
:::

エンジニアの職務経歴書やスキルセットで目にすると思いますが、
プログラム言語には様々な種類があります。

それぞれ以下のような特徴があります。
- 実行速度
- ドキュメント（説明書）量
- 言語を扱えるエンジニア数

クライアントの要求をヒアリングや調査からまとめ、
適切な環境（オンプレミス、AWS、OSなど）や言語で設計し、
製造、試験、リリース、検収などを行うことが一般的です。

## 3. 変数と定数

プログラムはデータを入れ物に入れて計算に使用します。

変数も定数も同じ「データの入れ物」であると言えます。違いは以下です。

:::note
変数：「何度も代入（入れ物にデータを格納する）可能」である入れ物
定数：「定まっている（入れ物にデータを格納できるのは処理の中で一度だけ）」入れ物
:::

つまり、変数はデータを入れ替えることができますが、
定数は一度データを入れたら、もう入れ替えることはできず、処理が終了するまで変わりません。

またこの変数と定数は、入れ物を用意（宣言）する際に開発者が適切な入れ物を決めなければいけません。

※細かい宣言のルールはプログラミング言語によります。

## 4. 関数（Function）

処理のひとかたまり、のことです。

もしすべての処理を、
1つの関数で記述した場合に発生しうるデメリットは以下です。
- 可読性が悪くなる
- 改修時などに影響範囲を絞れない

:::note
関数の基本
- 処理のまとまりのこと
- データを受け取り、何らかの処理を行い、データを返却する
- 受取データ：入力、引数（読み方：ヒキスウ））
- 返却データ：出力、戻り値（読み方：モドリチ））
:::

適切な条件で関数を呼び出し、
目的の処理全体を実行することが一般的です。

この**関数を呼び出し、実現したい一連の処理の大枠を形作る関数**は、
「メイン関数」などと呼ばれます。

関数化の粒度は人それぞれ"いい塩梅"がありますので、
レビュワーや他メンバーと相談しながら決めるのもよいと思います。

:::note alert
引数や戻り値が無い関数も存在します。
:::

## 5. インデント

営業の方でも、テキストエディタ上のコードを見たことがあるのではないでしょうか？

そして感じるはずです、
「なんだか文頭がガタガタしている」と。

それらの文頭スペースは「インデント」と呼ばます。
Officeソフトのインデントと言葉の意味は同じです。

:::note
インデントはプログラムの実行には必要ではありません※が、
***可読性***において重要な役割を果たします。
:::

そのため、ある程度の規則性をもたせ、
人間であるエンジニアがプログラムを理解しやすいように使用します。

:::note alert
※Pythonなど、可読性のためではなくインデントが実行に必要な言語もあります。
:::

## 6. コード中のコメントの必要性

営業の方でも、テキストエディタ上のコードを見たことがあるのではないでしょうか？

そして感じるはずです、
「なんだか文章とか日本語が混ざっている」と。

これはコメントです。
コード中にメッセージを織り交ぜます。

:::note
チームメンバーや将来プログラムを読んだエンジニアの、
処理内容の理解を助けるために残すことが多いです。
:::

処理には影響しません※。

:::note alert
※言語や環境によっては、コメントであっても全角スペースなどがあると正しく動作しない場合があります。
:::

コード作成中のメモとして使用されることもあります。

しかし、チーム開発の現場では、
基本的にGit※反映時などは自分用のメモは削除します。

****

**※Gitとは**

プログラムのバージョン（版）を管理するツールです。

チームで使用する際は、プログラムを派生（「ブランチを切る」と言うことが多いです）させ、
複数人が色々な部分を編集出来るようにプログラムを分けます。

開発がひと段落ついたら、プログラムを派生元に統合（マージ）して、派生元のプログラムの一部として組み込みます。

****

コード中の文字などをコメント化することを、
「コメントアウト」と呼ぶこともあります。

Docコメントという種類のコメントもあります。
これには記述ルールが存在します。

## 7. my○○, Hoge, Foo, Bar

プログラミングについて調べた際、
このような単語に出会うことがあるのではないでしょうか。

:::note
サンプルコードにおいて、
***特に意味のない名前***や***文字列***に使用されます。
:::


これらは開発者が適切に命名して使用される前提の、
ドキュメントやサンプルコードなどにたびたび登場します。

```javascript:例
myFunction(){
    //何らかの処理
}

myProject

int hoge;
char fuga;

array[0] = "foo";
array[1] = "bar";
```

## 8. 命名規則

:::note
変数や定数、関数などの命名は基本的に開発者が行います。
ただし、ルールを守る必要があります。
:::

このルールは言語によって定められているものや、
チームや会社によって定められている場合があります。

また、キャメルケースやスネークケースなど、
英単語を使って命名する際の単語の区切りルールの種類も存在します。

```javascript:関数名がキャメルケースの例
function getValue(){
    // 何らかの値を取得する処理など
}
```

```javascript:配列型の変数をスネークケースで宣言する例
array_of_example = [];
```

## 9. フレームワーク

:::note
アプリケーションを開発するために必要な機能や、
最低限アプリケーションとして動作するための枠組みが用意されているものです。
:::

適切なフレームワークを選定して開発に使用することで、
開発コスト（費用や工数）を抑えられる場合があります。

選定基準[例]
- （開発メンバーの）使用経験
- 情報の充実度（ドキュメントや参考となるサンプルコード）
- 価格
- 環境（サーバマシンやユーザの使用端末のスペックやOSなど）

## 10. ライブラリ

:::note
何らかの言語に対し、より開発しやすくするためにカスタマイズされたプログラムです。
:::

一つの言語に対して複数のライブラリが存在する場合もあります。

ライブラリを使用する際は、
それぞれのプロジェクトの目的に適したものを選択します。

プロジェクト内で使用したい機能が既にライブラリとして公開されている場合、
それを借りてくるイメージです。

# あとがき

本記事では、アプリ制作中の会話の中で挙がった**技術的なキーワード**を中心にご紹介しました。

ここまでお読みいただき、ありがとうございました！

以上、のえぞうでした。

したっけね～！（北海道弁で「それじゃあ、また」の意）

:::note info

BTMに少しでもご興味を持っていただけましたら、
ぜひ[BTM採用ページ](https://www.b-tm.co.jp/recruit/mid-career.html)を覗いてみてください。
:::