使用すべきでない用語と包括的な用語、およびホワイトボックス/ブラックボックスの置き換えは必要か調べた

社内のドキュメントを読んでいた時に、用語について引っかかった。

まず、「ホワイトリスト」と「ブラックリスト」が使われていた。

これらは前者に肯定的、後者に否定的、すなわち差別的な意味が含まれるため、「Allow List」と「Deny List」、日本語では「許可リスト」と「拒否リスト」に置き換えた。

続いて、「ホワイトボックステスト」と「ブラックボックステスト」が使われていたが、ここで引っかかる。

ホワイトボックスとブラックボックスは、内部構造を把握しているか、していないかの意味で使用されているし、航空機のレコーダーの通称としてブラックボックスが使われてたりしているが、名前を変えようという動きは聞いたことがない。置き換えるのが適切だとしても何と置き換えていいかわからない。

遅ればせながら調べてみたのでメモ。

Inclusive Naming Initiative

このあたりについて調べると、Inclusive Naming Initiativeという組織が昨年発足していた模様。

有害で排他的な用語を、包括的な用語へ置き換えるための取り組みを促進するとのこと。

概要にロードマップの記載あり。ブログによるとKubernetesコミュニティの取り組みから生まれたとのことで、Cloud Native Computing Foundation(CNCF)、CiscoRed HatVMWareIBMらが参加している。また、IETFも参加している。

ブログ内での略称はINI。Windowsの設定ファイル拡張子と被ってるなぁ

置き換えるべき言葉のリストを公開しており、2021/5/30現在、以下が記載されている。

置き換えるべき言葉 代替案
whitelist, blacklist allowlist, denylist
master, slave control plane, control plane node
controller, doer
primary, replica
primary, secondary
master main
original
source
control plane

引用元ページには、それぞれの言葉が、なぜ置き換えるべきなのかの理由などが記載されている。Githubの初期リポジトリ名変更にもリンクあり。

ここにはホワイトボックス/ブラックボックスの記載がないのでさらに調べてみると、IBMのGitHubリポジトリらしきものがあり、善悪の価値観ではないので問題ないと判断してる模様。

IBM Watsonの日本語ページを見ると、現時点ではブラックボックスなど使用している。

f:id:hepokon365:20210531011622p:plain
IBM Watsonのページキャプチャ

その他の参考

もう少し検索していると、以下のページを見つけた。

https://www.duncannisbet.co.uk/removing-harmful-language-from-my-lexicon

イギリスのソフトウェアコンサルタントのページのようで、いくつか用語の置き換え候補、およびそれらの出典が記載されている。

whitebox/blackboxについてもいくつか例があり、個人的にしっくりきたのはclear box/closed box。文脈によってはopen/closeなどでいいかもしれない。

また、「Mob programming」や「Grandfather」、「Whitespace」なども好ましくない用語として記載されている。モブプログラミングやホワイトスペースが好ましくない理由はわからない(ホワイトスペースは「White」が使われているから?)が、グランドファーザー・ルールについては、祖父条項*1に由来するものなので、確かに使うべきではない。

Spring Framework

Java屋なので、Javaの有名どころのライブラリでどうなっているか調べたところ、Spring Frameworkで変更が入っていた。

github.com

「white box/black box」は「clear box/opaque box」に変更してほしいとのリクエストで、white boxは利用箇所がなかったが、black boxは使われていたため修正されていた。

結論

ホワイトボックス/ブラックボックスの置き換えについて、2021/5/30時点では、積極的な置き換えは不要と判断した。

ホワイトリスト/ブラックリストに対する許可リスト/拒否リストのように、置き換えるべき用語が確定していないのが最大の理由。

一方で、ホワイトリスト/ブラックリストの表現を不快に感じる方々が、少なからず存在することも把握できた。仮に置き換えるべき用語が確定・定着したら、積極的にそれらを使用すべきだと思う。

また、すでに置き換えるべき包括的な用語が確定している、INIのリストに記載されている用語の使用は、明確に禁止すべきだろう。

今回は社内向けのドキュメントだったが、社外に公開するドキュメント、特に海外向けの英語のドキュメントなどを作成する場合、注意する必要があると感じた。

振り返り

置き換えるべき言葉のリストに記載されているリンクに、DjangoのPR#2692がある。チケットは#22667

master/slaveleader/follower を経由して primary/replica に変更したものだが、これが出されたのが2014年、コメント欄はなかなか荒れている。

2020年になって、 whitelist/blacklist を変更するPR(#12755, #13031)が出されたが、そちらには否定的なコメントはついていない。

当時の状況は把握おらず、#2692を見るとDjangoのユーザー以外もコメントしていたり、用語も異なるので一概に比較はできないが、こうした取り組みに公然と異を唱える人がいなくなっているあたり、意識は変わっているんだなと感じた。

ちなみに、#2692のこのコメントが好き。

余談

冒頭で「Allow List」と「Deny List」と書いたが、どうもスペースを入れずに「allowlist」や「denylist」と書くらしい。