IT Glossary
Overview
IT用語集をまとめるためのセクション。
ネゴシエート(negotiate)
ネゴシエート(negotiate)とは、一般的に「交渉する」や「調整する」という意味ですが、技術的な文脈では「ネゴシエートする」という表現は、特定の条件や設定を自動的に調整して最適な結果を選択することを指すことが多い。
「ロケールをネゴシエートする」という表現では、例えばアプリケーションがユーザーのブラウザやシステムから提供される情報(言語設定や地域設定)を元に、適切なロケール(地域と言語の設定)を自動的に選択するプロセスを意味する。
たとえば、ウェブサイトがユーザーのブラウザ設定に基づいて日本語版か英語版のコンテンツを表示するようにすることが「ロケールをネゴシエートする」と表現される。
バッファリング(Buffering)
バッファリング(Buffering)とはデータを一時的にメモリやストレージに保存し、処理をスムーズにする技術。
- データを直接処理せず、一旦バッファ(一時保存領域)に貯める
- 処理の効率化やパフォーマンス向上のために使われる
- ネットワーク通信、動画再生、データベース処理などでよく使われる
バッファリングとは、データを一時的にメモリに保存して処理をスムーズにする技術
リクエスト本文のバッファリングは、データが大きいとサーバーの負荷が増加する
最適化するには、ストリーミング処理・サイズ制限・一時ファイルの活用が有効
リクエスト本文のバッファリングとは
クライアント(例: ブラウザ、アプリ)がサーバーにデータを送るとき、データを一旦メモリに保存(バッファリング)してから処理することを指す。 例えば、APIにJSONやファイル(画像、動画)を送信するとき、サーバーはデータを直接解析せず、一旦バッファに貯めてから処理を行う。
例1: 小さいJSONデータ。
- データが小さいので、バッファリングしても問題ない。
- すぐにメモリに収まり、サーバーで解析できる。
{
"username": "naohito",
"email": "<user@example.com>"
}
例2: 大きなファイルアップロード。
curl -X POST "<https://example.com/upload>" -F "file=@large_video.mp4"
- 動画ファイルのアップロードは数百MB ~ GBになることもある
- サーバー側でバッファリングすると、メモリを大量に消費し、サーバー負荷が増加する
- 対策: ストリーミング処理を使う(後述)
バッファリングのデメリット
- データサイズが大きい場合、メモリ消費が増える
- 大量のリクエストを受けると、サーバーの負荷が増大する
- 解析処理が遅くなり、応答時間が長くなる可能性
バッファリングを最適化する方法
最適化はいくつか方法がある。
1. ストリーミング(Streaming)を使う
データを一括で読み込まず、少しずつ処理する Node.jsやNginxでは、ストリームAPIを活用する。
// Node.jsでストリーミング処理
// バッファリングせずに直接ファイルを保存できるので、メモリ消費が少ない!
const fs = require("fs");
const express = require("express");
const app = express();
app.post("/upload", (req, res) => {
const writeStream = fs.createWriteStream("./uploaded_file");
req.pipe(writeStream); // データをバッファに貯めずにそのまま書き込み
req.on("end", () => res.send("Upload complete"));
});
app.listen(3000, () => console.log("Server running on port 3000"));
2. バッファのサイズを制限する
NginxやExpress.jsでは、リクエストボディのサイズを制限できる。
過剰なメモリ使用を防げる。
3. メモリではなく、一時ファイルを使う
バッファリング時にメモリではなく、ディスク上の一時ファイルに保存することで大きなデータも処理できる。 Multer(Node.jsのミドルウェア)で実装可能。
// Multer(ファイルアップロードミドルウェア)
// メモリではなくuploads/ に保存するため、大量のデータ処理が可能
const multer = require("multer");
const upload = multer({ dest: "uploads/" }); // 一時ファイルとして保存
app.post("/upload", upload.single("file"), (req, res) => {
res.send("File uploaded successfully!");
});
ラウンドロビン(Round Robin)
英語としての意味
- 複数の対象に対して、順番に公平に処理・割り当てを行う方式。
- IT分野に限らず、スポーツの総当たり戦や当番制などの意味でも使われる。
語源豆知識: 17〜18世紀、署名の先頭が誰か分からないよう円形に署名された陳情書(petition)が「round robin」と呼ばれたことに由来。 → 公平性や匿名性が重要な場面で使われていた。
技術的な「ラウンドロビン」の仕様
- プロセススケジューリング(OS)
各プロセスに対して 等しい時間(タイムスライス)でCPUを割り当てる。
シンプルで公平な方式だが、リアルタイム性が求められる場面では非効率になることも。 - ロードバランシング
複数のサーバーに対し、リクエストを 順番に分散する。
例:サーバーA → B → C → A … のように回す。 - 当番・通知・リクエスト処理のローテーション
アラート対応、問い合わせ処理、APIリトライの宛先などを順繰りに処理。
メンバーやエンドポイントに均等に負荷を分散させたいときに有効。
パーソナライゼーション
個々人向け最適化のこと。
生成AIによって、これまでのパーソナライゼーションを超える、ハイパーパーソナライゼーションが実現した。
ad hoc(アドホック)
ラテン語起源の言葉で、主に「その場限りの」「特別目的な」「臨時的な」といった意味で使われる。
特定の目的のために一時的に設置された組織や、臨機応変へ対応するために行われる行動などを指す際に用いられる。
マルチホップ
マルチホップとは、あるリクエストが複数のサービスやゲートウェイを「中継(ホップ)」して目的地に到達する構成を指す。
ネットワークやAPIアーキテクチャの文脈でよく使われる表現。