2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

雰囲気似ていて、混同しがちなエンジニア用語集 ~ 先輩、ごめんなさい。私、実はテキトーに使ってました ~

2
Posted at

はじめに

前回のこちらの記事で、エンジニアで読み方を間違えがちな用語をまとめました。

今回は、その続編として、
「この用語とこの用語、どっちがどっちで、どう違うんだっけ・・・」
となりがちな用語をまとめてみました。

これらは大体、自分が雰囲気で使っていた用語たちです。
自分はニュアンスで会話するので、なんか成立していましたが、懺悔を込めて記事にしました。
🙅‍♂️で書いているのは、自分もやらかしたことのある混同や誤用です🫣

雰囲気が似ていてわかりにくいエンジニア用語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では・・・。
はい、そういうもんだそうです。


おわりに

なんか、他にもまだまだたくさんあった気がします。
とはいえ、こうやってまとめながら調べ直すと、厳密には誤っていても、コミュニケーションとしては伝われるし、一般的に言うよね、というものも多いなと感じます。

ちなみに自分は、こういう記事を書いておいてなんですが、
伝われば良くね派です。

よかったら、皆さんが間違えていた用法たちもコメントで教えてください。
私が、💚(いいね)をつけて、供養します。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?