テーマの整理:「カラム削除」とは何か
ここでの「カラム削除」は、オブジェクト配列から「いらない列(プロパティ)」を取り除くためのユーティリティです。 業務だと、次のような場面でよく使います。
機密情報(パスワード、トークン、内部メモなど)を外部に出す前に消したい。 ログや CSV に出すときに、ノイズになる項目を削りたい。 API 連携で「相手に渡してはいけないフィールド」を確実に落としたい。
つまり、「全部渡すと危ない・重い・読みにくいから、不要なカラムを削る」という発想です。
基本コンセプト:元データを壊さず「不要なカラムを取り除いたコピー」を作る
なぜ“削除専用ユーティリティ”があると安心なのか
直接 delete obj.secret のように書いてもカラムは消せます。 でも、それをあちこちでバラバラに書くと、次のような問題が出ます。
どこで何を消しているか分からない。 元データそのものを書き換えてしまい、後続処理が困る。 新しい機密カラムが増えたときに、消し漏れが起きる。
だからこそ、「カラム削除専用のユーティリティ」を用意して、 「ここを通せば安全に不要カラムが消える」という“約束の場所”を作るのが大事です。
ユーティリティ 1:オブジェクト配列から指定カラムを削除する
実装:omitColumns
まずは、初心者でも読めるシンプルなカラム削除ユーティリティを書きます。
function omitColumns(objects, keysToOmit) {
if (!Array.isArray(objects) || objects.length === 0) {
return [];
}
if (!Array.isArray(keysToOmit) || keysToOmit.length === 0) {
return objects.map((obj) => ({ ...obj }));
}
const omitSet = new Set(keysToOmit);
return objects.map((obj) => {
const copy = {};
Object.keys(obj).forEach((key) => {
if (!omitSet.has(key)) {
copy[key] = obj[key];
}
});
return copy;
});
}
JavaScript重要なポイントをかみ砕いて説明します。 まず「オブジェクト配列かどうか」「空かどうか」をチェックし、空なら空配列を返します。 keysToOmit が空の場合は「何も削除しない」ので、単にコピーを返します。 削除対象のキーは Set に入れておき、has で高速に判定します。 各オブジェクトについて、「全キーを走査しつつ、削除対象でないものだけコピー」に入れています。 元のオブジェクトは一切書き換えず、「削除済みの新しいオブジェクト」を返しているのが重要です。
例題 1:ユーザー一覧から機密情報カラムを削除する
const users = [
{
id: 1,
name: "Alice",
email: "alice@example.com",
passwordHash: "xxx",
internalNote: "VIP",
},
{
id: 2,
name: "Bob",
email: "bob@example.com",
passwordHash: "yyy",
internalNote: "Trial",
},
];
const publicUsers = omitColumns(users, ["passwordHash", "internalNote"]);
console.log(publicUsers);
JavaScript出力イメージはこうなります。
[
{ id: 1, name: "Alice", email: "alice@example.com" },
{ id: 2, name: "Bob", email: "bob@example.com" },
]
JavaScriptここでのポイントは、外部に出してはいけない passwordHash と internalNote がきれいに消えていることです。 元の users にはまだ両方のカラムが残っているので、内部処理では引き続き使えます。 「外に出す直前で omitColumns を通す」というルールにしておくと、機密情報の漏れを防ぎやすくなります。
例題 2:ログ出力用に「ノイズになるカラム」を削除する
ログに全部のカラムを出すと、巨大で読みにくくなります。 そこで、「読みやすさのために削るカラム」を決めておきます。
const users = [
{
id: 1,
name: "Alice",
email: "alice@example.com",
lastLoginAt: "2024-07-01T10:00:00Z",
createdAt: "2024-01-01T00:00:00Z",
updatedAt: "2024-06-30T12:00:00Z",
},
];
const logUsers = omitColumns(users, ["createdAt", "updatedAt"]);
console.log(JSON.stringify(logUsers, null, 2));
JavaScriptログには、業務的に意味のある id, name, email, lastLoginAt だけが残ります。 「ログにはこのカラムだけ」という方針をユーティリティで表現しておくと、 後からログを読む自分やチームメイトがかなり楽になります。
ユーティリティ 2:削除対象を“ポリシー”としてまとめる
シナリオ
機密カラムが増えたり減ったりするたびに、あちこちの omitColumns 呼び出しを直したくない。 「外部公開用ユーザー」「ログ用ユーザー」など、用途ごとに削除ポリシーをまとめたい。
実装例:ポリシー関数を作る
const OMIT_FOR_PUBLIC = ["passwordHash", "internalNote", "token"];
const OMIT_FOR_LOG = ["passwordHash", "token"];
function sanitizeForPublic(users) {
return omitColumns(users, OMIT_FOR_PUBLIC);
}
function sanitizeForLog(users) {
return omitColumns(users, OMIT_FOR_LOG);
}
JavaScript使い方はこうです。
const publicUsers = sanitizeForPublic(users);
const logUsers = sanitizeForLog(users);
JavaScriptここでの重要ポイントは、「何を削るか」を配列定数として一箇所にまとめていることです。 機密カラムが増えたら、その配列を直すだけで、全体の振る舞いが変わります。 業務的な「情報公開ポリシー」をコードに落とすイメージで設計すると、チームで共有しやすくなります。
ユーティリティ 3:カラム削除とカラム抽出の違いを意識する
カラム抽出(pickColumns)は「欲しいものだけを選ぶ」ユーティリティでした。 カラム削除(omitColumns)は「いらないものだけを消す」ユーティリティです。 どちらも結果として「軽いオブジェクト配列」を作りますが、考え方が少し違います。
「外部に出してはいけないもの」が明確なときは、削除(omit)のほうがポリシーを表現しやすいです。 「この処理ではこれだけ使う」と明示したいときは、抽出(pick)のほうが意図が伝わりやすいです。
初心者のうちは、「機密情報対策には omitColumns」「処理の意図を表すには pickColumns」と使い分ける感覚を持つとよいです。
カラム削除ユーティリティで意識してほしい重要ポイント
元データを絶対に直接いじらない
delete obj.secret をその場で書くと、確かにカラムは消えます。 でも、それは「元データそのもの」を書き換えているので、後続処理が困る可能性があります。
omitColumns は、必ず「新しいオブジェクト」を作って返しています。 この“コピーしてから削る”スタイルを徹底すると、 「内部ではフルデータ」「外部には削ったデータ」という構造が保てます。 ここは安全性の面でかなり重要なポイントです。
削除対象のカラムを“名前で管理する”
削除対象を ["passwordHash", "token", "internalNote"] のように配列で持つことで、 「何が機密なのか」「何を外に出さないのか」がコードから読み取れるようになります。 仕様変更やセキュリティレビューのときも、この配列を見れば議論がしやすくなります。
手を動かして「カラム削除」の感覚をつかむ
次のコードを実行して、 「機密カラムを削った配列」「ログ用に軽くした配列」の動きを体感してみてください。
function omitColumns(objects, keysToOmit) {
if (!Array.isArray(objects) || objects.length === 0) {
return [];
}
if (!Array.isArray(keysToOmit) || keysToOmit.length === 0) {
return objects.map((obj) => ({ ...obj }));
}
const omitSet = new Set(keysToOmit);
return objects.map((obj) => {
const copy = {};
Object.keys(obj).forEach((key) => {
if (!omitSet.has(key)) {
copy[key] = obj[key];
}
});
return copy;
});
}
function demo() {
const users = [
{
id: 1,
name: "Alice",
email: "alice@example.com",
passwordHash: "xxx",
internalNote: "VIP",
},
{
id: 2,
name: "Bob",
email: "bob@example.com",
passwordHash: "yyy",
internalNote: "Trial",
},
];
console.log("=== public ===");
console.log(omitColumns(users, ["passwordHash", "internalNote"]));
console.log("=== log ===");
console.log(omitColumns(users, ["passwordHash"]));
}
demo();
JavaScriptまとめ:カラム削除ユーティリティで「出していい情報だけを外に出す」
カラム削除は、 「配列の中から、外に出すべきでない情報を確実に落として、“出していい情報だけ”を外に出すためのユーティリティ」です。
プロジェクトに例えば次のような形で置いておくイメージです。
export function omitColumns(objects, keysToOmit) { ... }
export const OMIT_FOR_PUBLIC = [...];
export const OMIT_FOR_LOG = [...];
JavaScriptそして、
外部 API へのレスポンス、 CSV/Excel のエクスポート、 ログ出力、 外部システム連携
といったところでは、必ずこの「カラム削除」を通す。 こう決めておくと、セキュリティと読みやすさの両方がぐっと安定します。
「何を出すか」だけでなく、「何を出さないか」をコードでちゃんと表現する。 それを支えるのが、カラム削除ユーティリティです。
