ユビキタス言語と日本語

コード書くときは元々日本語で表現される用語をいちいち英訳してクラス名やらメソッド名やらにしたりするんだけれど、英訳する手間が結構ばかにならない。ネット検索という便利なものがあるにはあるものの、そもそもネイティブでもないし、それが英語圏から見てまともな英語なのかどうかよくわからない*1。さらに、 DDD のユビキタス言語を使いたいとか考えると、英訳してしまったら台なしな感じになってしまう。ということでクラス名とかもう日本語使えばいいんじゃね。

例えば Redmine のチケットを表すクラスを Java で書いた場合、英語だと以下のような感じになるだろうか。実際の Redmine のコードを見たわけじゃないので色々違うと思うがそのへんはまあゆるして。

public class Issue {
	private Long no;
	private String subject;
	private Status status;
	private Member assignedTo;
	// getter, setter 略
}

これでドメインエキスパートに「 Issue No ○○の assinedTo を△△君にする」と言っても困った顔をされるだろう*2。「チケット番号○○の担当を△△君にする」と言うべきだ*3

ということで日本語にしてみる。

public class チケット {
	private Long 番号;
	private String タイトル;
	private Status ステータス;
	private Member 担当;
	// getter, setter 略
}

うーん・・・こんなコード読みたくない。ということでせめてローマ字表記にしてみる。

public class Ticket {
	private Long bangou;
	private String title; 
	private Status status; 
	private Member tantou;
	// getter, setter 略
}

いくらかましにはなった。無理に英訳するよりローマ字の方がはるかにましな場合は少なくないので、これはこれでありなやり方だとは思う。

でも、仮にここで担当が複数だったらどうするか? tantous とかにする?タントウズ?バンド名かなにか? tantoutachi とか?短刀太刀?余計わからない。 tantouList とか? Set に変更することになったらフィールド名変えんの?それなんてシステムハンガリアン?

日本語で複数形表現するのって難しいよね。どうするのがいいんだろう・・。

*1:まあ英語圏で使う想定なんかないからそこまで考える必要もないっちゃないけど、なんか無駄にこだわってしまう。

*2:そういえばなんでチケットは Ticket じゃなくて Issue になるんだろう?

*3:これはこれで動詞がまずいけども。