DDDのユビキタス言語と非英語圏としての日本語についてのセルフまとめ

2
西田和史(k.bigwheel) 開発基盤EM @k_bigwheel

変数名やクラス名に母国語使えないの辛い。DDDのすべての基礎であり基盤であるユビキタス言語の実践難易度が格段に上がる。非英語圏の人間にとってはDDDを実践する上でかなりの足かせになっているよなー。

2018-09-09 20:28:53
西田和史(k.bigwheel) 開発基盤EM @k_bigwheel

各々取っている対策は以下の3パターンぐらいk。

2018-09-09 20:28:54
西田和史(k.bigwheel) 開発基盤EM @k_bigwheel

1. 日本語のユビキタス言語を単語集で管理し、その英訳をコード中で使う 真面目にDDDやっている人はこのパターンが多そうだが同じドメインモデルを英語・日本語2種類で呼ぶことになりやすく、呼称の統一というユビキタス言語の中核理念がたやすく崩壊する。 一見正統的な手法だが実は非常に危険。

2018-09-09 20:28:54
西田和史(k.bigwheel) 開発基盤EM @k_bigwheel

2. ユビキタス言語もコード中もすべて英語に寄せる これも比較的取られると思うがドメインエキスパートとユビキタス言語を大抵共有できず、これも理念から外れる。また共有できなかったことによりドメインモデルの中核概念をユビキタス言語で追従できなくなり、ユビキタス言語が育たなくなりがち。

2018-09-09 20:28:54
西田和史(k.bigwheel) 開発基盤EM @k_bigwheel

3. ユビキタス言語もコードもすべて日本語(UTF-8)に寄せる 変数やクラス名としてUTF-8を許容するJavaやRubyなどで取れる方法。 ある意味理想的で我々が求めたアヴァロンだがタイピングに若干の手間がかかる、隠された全角スペースで血反吐吐いたことある人が反射的に反対するなど障害は多い。

2018-09-09 20:28:55
西田和史(k.bigwheel) 開発基盤EM @k_bigwheel

またScalaではバッククオート(`)で囲ってやらないと駄目なケースがあるなど、特別に追加で知識が必要なことも多い。IDEやlinterがサポートしていないことも多くfalse positiveな警告・エラーが出がち。かくも理想郷は遠いのである。

2018-09-09 20:28:55
西田和史(k.bigwheel) 開発基盤EM @k_bigwheel

英語圏ではなんの苦労もなくこれが実現できていると思えば嫉妬で血反吐吐きそう。

2018-09-09 20:28:55
西田和史(k.bigwheel) 開発基盤EM @k_bigwheel

4. ユビキタス言語を日本語に寄せ、コードではそのローマ字表記を使う 参加者 → Sankasya な感じ。一見素人くさいが①でユビキタス言語が二重化されてしまうデメリットを回避できるのは大きい。 「sya」「sha」などの表記ブレが多少のデメリット。 現状ではわりと最適解かなと思っているのはこれ。

2018-09-09 20:28:56
西田和史(k.bigwheel) 開発基盤EM @k_bigwheel

まともなコーダーは思考時間とタイプ時間の比が9:1以上らしいので、IDEやLinterがエラーさえ吐かなければ僕はメイン言語がScalaなのもあって③が良いと思っている。

2018-09-09 20:28:56