はじめに
前回のこちらの記事で、エンジニアで読み方を間違えがちな用語をまとめました。
今回は、その続編として、
「この用語とこの用語、どっちがどっちで、どう違うんだっけ・・・」
となりがちな用語をまとめてみました。
これらは大体、自分が雰囲気で使っていた用語たちです。
自分はニュアンスで会話するので、なんか成立していましたが、懺悔を込めて記事にしました。
🙅♂️で書いているのは、自分もやらかしたことのある混同や誤用です🫣
雰囲気が似ていてわかりにくいエンジニア用語7選
1. 引数(Argument) vs パラメータ(Parameter)
- パラメータ:関数を定義するときに、渡して欲しいものとして定義したもの
- 引数:関数を呼び出すときに渡すもの
function add(x, y) { return x + y; } //これはパラメータ
add(5, 3); // この「5」や「3」という具体的な値が引数
-
用法
🙅♂️「パラメータに5を代入して関数を呼び出してください」
関数を呼び出す側なので、引数に5を代入というのが正しい。
(これでも伝わる気がするから、別にいいのではという気もするが、笑)
🙆♂️「この関数のパラメータの型って、stringだっけ?」
🙆♂️「その関数を呼び出すときの引数には何を渡してる?」 -
ちなみに
URLにくっつけるのは、クエリパラメータ
Reactのコンポーネントに渡すのは、Props
とはいえ、「仮引数(Parameter)」「実引数(Argument)」と呼ぶ宗派もいるらしく、
もう翻訳の問題じゃね、、と個人的に思っていたりもします。
2. クッキー(Cookie) vs セッション(Session)
- クッキー: ブラウザ側にデータを保存できる場所
- セッション: ログインが維持されている状態や仕組み
-
用法
🙅♂️「ブラウザからセッションを送っている」
セッションは「ログインが維持されている状態や仕組み」なので、送るものではない。
🙆♂️「ブラウザからセッションIDを送っている」
🙆♂️「ブラウザからクッキーを送ってセッションを管理している」
クッキーは、ブラウザ上でデータを保存しておく場所です。
同じような場所に、ローカルストレージもありますが、
クッキーは、
- HttpOnly 属性をつければ、javascriptでクッキーを取り出せない(XSS対策)
- 有効期限が設定できる
- 自動的にHTTPヘッダーに含めて送信できる
などが理由で、セッション管理に使われます。
なお、クッキーにはユーザー情報をそのまま保存するのではなく、
- サーバー側で管理するキーのみを保存する
- クッキーを暗号化する
などをして、保存するのが一般的です。
クッキーという機能にはブラウザの偉大さが詰まっているのです。
3. イメージ(Image) vs コンテナ(Container)
-
イメージ: Dockerfileで定義されたテンプレート
-
コンテナ: テンプレートをもとに立ち上げた独立した箱
-
用法
🙅♂️「もらったイメージを立ち上げています!」
(厳密には)イメージ自体は立ち上げるものではない。
けれど、口語的には、イメージを立ち上げる、というケースもあるので伝わる(はず)。
🙆♂️「もらったイメージをpullして、コンテナを立ち上げています」
🙆♂️「Node20をベースにgitをインストールしたイメージからコンテナを立ち上げています」
ちなみに、コンテナの由来は、海運業のコンテナ。
(海運における)コンテナは、規格が共通だから、船や港で設備が一つで良いというメリットがあって、それがイノベーションになったそうです。
エンジニアの世界でも、Dockerという規格に則れば、中身がどんな言語でも、同じコマンド(docker run)で動かせるという意味で、同じですね。
なお、そういう意味でのコンテナについて興味がある方は、この本をおすすめします。
(エンジニアの仕事にはおそらく役に立ちません)
4. キュー(Queue) vs メッセージ(Message)
-
キュー: 並んでいる行列(英語の意味そのまま)
-
メッセージ: その列に並んでいるもの(列に並んでいるお客さん)
-
用法
🙅♂️「フロントエンドからキューを送っています」
送るのはキューではなく、メッセージ。
🙆♂️「キューにメッセージが溜まって詰まっています!」
🙆♂️「フロントエンド側からキューにメッセージを送っています」
「キューを送る」という表現は散々やってきました。
冷静に考えて、Queue(列)を送る、って直訳でもおかしい・・・。
5. S3のバケット(Bucket) vs オブジェクト(Object)
- バケット:S3の中の最上位の部屋
- オブジェクト:その中に放り込まれたファイル+メタデータの集合体
-
用法
🙅♂️?「S3のdevバケットに/imagesというフォルダを作って、そこに格納してください」
🙆♂️「S3のdevバケットに/images/「ファイル名」というkeyで格納してください」
AWS S3の画面を見ると /images/photo.png のようにフォルダ階層があるっぽく見えますが、あれはフォルダではなく、ただの「オブジェクト名(Key)」です。
実際は、バケットの中に仕切りはなく、すべてのオブジェクトがフラットに格納されています。
といっても、あのS3のUIは、ツリー構造だと意図的に思わせようとしているから、
「ツリー構造だと思ってくれていいよ」「ツリー構造だと思った方がわかりやすいよね?」
というAWSからのメッセージなのではないかと思います。
S3の画面上にも、フォルダの作成というボタンもあるので、「フォルダを作って」という用法も間違いとは言い切れないですが。。。
6. パース(Parse) vs シリアライズ(Serialize)vs エンコード(Encode)
| 用語 | ざっくり言うと | 具体例 |
|---|---|---|
| パース | データを解析してプログラムで扱える形にする | JSON文字列 → 連想配列 HTML文字列 → DOMツリー 日付文字列 → Dateオブジェクト |
| シリアライズ | オブジェクトを保存・送信用に一連のバイト列や文字列にする | メモリ上のオブジェクト → JSON文字列 |
| エンコード | データを別の形式に変換する | テキスト → UTF-8 画像 → Base64 URLエンコード |
そもそも、パースとシリアライズは意味が逆!!
送信する際に扱いやすいように、シリアライズして、
受信後に、扱いやすいようにパース(デシリアライズ)するということ。
javascriptだったら、
送信前に、JSON.stringify()で文字列に変換し(シリアライズの一種)、
受信後に、JSON.parse()でオブジェクトに変換する(デシリアライズ)
というのが良くあるケース。
エンコードは、データを別の形式に変換する行為の総称です。
なので、ざーーっくり言うと、シリアライズはエンコードの一部ともいえます。
-
用法
🙅♂️「サーバーから受け取ったバイナリデータを、画像オブジェクトへシリアライズしておいて!」
バイナリデータを、人間やプログラムが見られる形式(画像オブジェクトやファイル)に復元するのは、シリアライズではなく「デシリアライズ」なので、逆。
🙅♂️「フロントエンドから送るリクエストのURLに日本語が含まれるから、バグらないようにURLパースしておいて!
URLに含まれる日本語や特殊文字を、通信の規則に従って、文字列に変換する行為は、パースではなくエンコード。反対に、URLからドメイン名やクエリパラメータを抽出するのはパースというからややこしい。
🙆♂️「OpenAIからのjsonレスポンスを、デシリアライズしてオブジェクトとして扱う」
🙆♂️「OpenAIからのjsonレスポンスを、パースしてオブジェクトとして扱う」(こっちの方が自然な気はする) -
整理すると
- 結果が「オブジェクト(メモリ上のデータ)」になるなら ➡️ パース / デシリアライズ / デコード
- 結果が「文字列やバイト列(通信・保存用データ)」になるなら ➡️ シリアライズ / エンコード
似たような用語で、ごちゃごちゃになる。
7. 認証(Authentication) vs 認可(Authorization)
- 認証: そのユーザーが誰かを確認すること(本人確認)
- 認可: そのユーザーが行なっていい行為か確認すること(権限確認)
-
用法
🙅♂️「ログインはできたけどマイページが見られないので、認証エラーです!」
認可エラーの誤り。
🙆♂️「IDとパスワードが一致しないため、認証に失敗してログインできませんでした」
🙆♂️「ログインは完了していますが、管理者用ページへのアクセス権がないため認可エラー(403 Forbidden)になります」
鉄板 of 鉄板ですね。
鉄板だとわかりながら、割と最近までごちゃごちゃでした。(懺悔)
両方Authでごっちゃごちゃになる。
ちなみに、
HTTPステータスでは、
401: Unauthorized = 未認証(誰かわからない)
403: Forbidden = アクセス拒否(権限がない)
です。
ん?未認証は、Authenticationだから、401はUnauthenticationでは・・・。
はい、そういうもんだそうです。
おわりに
なんか、他にもまだまだたくさんあった気がします。
とはいえ、こうやってまとめながら調べ直すと、厳密には誤っていても、コミュニケーションとしては伝われるし、一般的に言うよね、というものも多いなと感じます。
ちなみに自分は、こういう記事を書いておいてなんですが、
伝われば良くね派です。
よかったら、皆さんが間違えていた用法たちもコメントで教えてください。
私が、💚(いいね)をつけて、供養します。