猫でもわかるWeb開発・プログラミング

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

勝手に作り出した用語で話すのではなく「ユビキタス言語」を使う

はじめに: ユビキタス言語とは

勤勉なITエンジニアとして3年くらい仕事していればみんな知っているであろう言葉「ユビキタス言語」

エンジニアに限らずアプリケーションを開発する上で非常に重要な概念ですが、エンジニア以外で「ユビキタス言語とは何か?」を理解している人は少ない気がします。

「ユビキタス言語」とは、アプリを開発しているチームの中の用語集みたいなものです。

例えば、ディズニーが好きな人は「スタンバイパス」「ディズニープレミアアクセス」「バケーションパッケージ」と聞いたら何のことか正確に分かります。一方で、ディズニーを知らない人に分かりません。こういった用語のことを「ユビキタス言語」と言います。

例えば、バケーションパッケージとは、ホテル、パークチケット、特定のアトラクションの優先チケット、ポップコーンバケットなどがセットになった商品のことです。

一回用語の定義をしてしまえば、次回以降「バケーションパッケージ」といえば齟齬なく伝わるので話がスムーズかつ誤解なく進むようになります。

勝手に作り出した用語で話さない

企画者「今のアプリにユーザー制限機能をつけて欲しいんだけどできますか?」

エンジニア「ユーザー制限機能って何ですか?」

企画者「アプリにアクセスするユーザーを、会社のオフィスに出勤しているユーザーに制限したいんだよね」

エンジニア「(それはIP制限機能なんだよな...)」



こういう会話は非常によくあります。「ユーザー制限機能」という言葉を見ると、それを構成しているのは一般的な単語なので伝わりそうな気がしていしまいますが、どうやって制限するのか非常に曖昧ですし、実際に全く伝わってきません

エンジニア内では「IP制限機能」といえば確実に伝わりますが、この言葉もまだ企画者との共通認識はできていません (企画者は「IP制限機能」という言葉を理解していません)。 なので、まずはここの認識を合わせる必要があります。

名前の付け方は何でもいいです。

シンプルに「IP制限機能」としてもいいですし、「ウォール・マリア」*1 のような名前でもいいです。

シンプルな名前にするか、それっぽい固有名詞をつけるか、どちらを選ぶかは組織によりますが、固有名詞が多すぎると覚えるのが大変なので、基本はシンプルな名前がいいです。

名前をつけたら、用語集に定義を書きます。齟齬があってはいけないので詳細に。

  • ウォール・マリア
    • 「社内ネットワーク」の IP アドレス以外からのアクセスを防ぐ機能
    • 「社内ネットワーク」には VPN は含めない

ウォール・マリアを定義しましたが、ウォール・マリアの定義の中に出てきた「社内ネットワーク」もユビキタス言語です。「社内ネットワーク」に VPN を含むかどうかは個人の解釈による部分があるからです。*2

そこで、こいつも定義しておきましょう

  • 社内ネットワーク
    • 会社のオフィスから接続した場合のネットワークのこと
    • VPN は含まない
  • 会社ネットワーク
    • 社員が自宅から VPN 接続した場合のネットワーク、または会社のオフィスから直接接続した場合のネットワークのこと
  • ウォール・マリア
    • 社内ネットワーク以外からのアクセスを防ぐ機能

ついでに、VPN を含むものを「会社ネットワーク」と定義しました。

このようにユビキタス言語は作られていきます、

用語を定義しなかった場合、「社内ネットワーク」「オフィスネットワーク」など、毎回違った用語が使われたり、ネットワークの話の時に毎回「それはVPNを含むの?」という確認が必要になってしまいます。

名前をつけないとエンジニアは実装できない!

非エンジニアの人には想像できないかもしれないですが、ある機能をプログラムに落とし込む時に、プログラム上ではその機能に何か名前をつける必要があります。 *3

なので、エンジニアは新規機能を実装するときに、「この機能の名前どうしよう」と考えながらプログラムを書きます。

名前つけるの面倒だと思うかもしれないですが、どうせエンジニアが名前をつけているのだから、それを拝借してきてチーム全体で定義を確認するのでもいいかもしれません。

あるいは、企画者側であらかじめ機能の名前とその定義を考えてしまえば、エンジニアが名前を考える必要がなくなるので、実装がスムーズになるのです。

*1:進撃の巨人で人類が巨人から身を守るための壁の名前

*2:これは私の感覚なので、諸説あります

*3:クラス名や関数名のことです。プログラミング言語にもよりますし、書こうと思えば名前をつけないで書くこともできますが、基本的には何か名前をつけているはずです