コードの中でローマ字を使うことを許容する
はじめに
ロジック本体よりも、関数名や変数名に悩むのは開発者あるあるだと思います。
今のプロジェクトは様々な災害を扱うのですが、やはり頭を悩ませるのが関数名や変数名の付け方です。
この記事では以下を前提とします。
「土砂キキクル」をどのように表す?
プロダクトで扱う災害の一つに「キキクル」があります。普段からあまり気象情報に触れていない人は「キキクル」という単語に馴染みがないかと思いますが、気象庁が発表する気象情報の一つです。
気象庁の公式サイトではキキクルについて以下の説明があります。
気象庁は、大雨による災害発生の危険度の高まりを地図上で確認できる「危険度分布」の愛称を「キキクル」に決定しました。
さらにキキクルにはいくつか種類があります。
なお、土砂災害、浸水害、洪水の危険度分布について、それぞれ愛称を用いた表記を以下のようにいたします。
大雨警報(土砂災害)の危険度分布 ⇒ 土砂キキクル
大雨警報(浸水害)の危険度分布 ⇒ 浸水キキクル
洪水警報の危険度分布 ⇒ 洪水キキクル
では、「土砂キキクル」を表す変数名をどのようにつけたらいいのでしょうか?
ありがたいことに、気象庁が多言語辞書(xlsx形式)を提供してくれているので、「土砂キキクル」の英語表記を確認してみます。
日本語 | 英語 |
---|---|
大雨警報(土砂災害)の危険度分布/土砂災害警戒判定メッシュ情報 | Real-time Landslide Risk Map |
大雨警報(浸水害)の危険度分布 | Real-time Inundation Risk Map |
洪水警報の危険度分布 | Real-time Flood Risk Map |
「キキクル」という単語の英語表記は見つかりませんでしたが、「土砂キキクル」の正式名称である「大雨警報(土砂災害)の危険度分布」はReal-time Landslide Risk Map
と表記するようです。
気象庁の英語表記を採用するなら以下のようになります。
// 土砂キキクルを表す変数名
const realTimeLandSlideRiskMap = ...
// 土砂キキクルを取得する関数
const getRealTimeLandSlideRiskMap = ...
これで決定としたいところですが、もう一つ考慮するべき点があります。
仕様として、ユーザーに見せる画面(UI)上では「大雨警報(土砂災害)の危険度分布」ではなく「土砂キキクル」と表示されるとします。
コードのrealTimeLandSlideRiskMap
と「土砂キキクル」がすぐに結びつくでしょうか?ちなみに私が所属するプロジェクトで土砂キキクルを扱い始めてから半年ほど経過していますが、「土砂キキクル」の正式名称は何かと問われると即答できるか怪しいです。
「キキクル」は愛称なので、固有名詞と捉えてkikikuru
と表記してみます。
// 土砂キキクルを表す変数名
const landSlideKikikuru = ...
// 土砂キキクルを取得する関数
const getLandSlideKikikuru = ...
もしくは
// 土砂キキクルを表す変数名
const kikikuruLandSlide = ...
// 土砂キキクルを取得する関数
const getKikikuruLandSlide = ...
「土砂キキクル」という単語を固有名詞と捉えて、全てローマ字で表記してみます。
// 土砂キキクルを表す変数名
const dosyaKikikuru = ...
// 土砂キキクルを取得する関数
const getDosyaKikikuru = ...
landSlideKikikuru
とするかdosyaKikikuru
とするかは好みの問題かもしれません。
ただ、landSlide
が「土砂災害」を指す英単語だと知らなくてもland
とslide
から「土砂災害」を推察できそうな気もしますが、inundation
から「浸水害」を想像するのは難しい気がします。であれば、inundationKikikuru
よりもshinsuigaiKikikuru
の方が開発者に優しいかもしれません。
「気象警報」「特別警報」「注意報」をどのように表す?
これらも気象庁が発表する情報ですが、気象庁の多言語辞書での英語表記は以下のとおりです。
日本語 | 英語 |
---|---|
特別警報 | Emergency Warning |
気象警報 | Weather warning |
注意報 | Advisory |
「気象警報」「特別警報」「注意報」は、UI上でも「気象警報」「特別警報」「注意報」と表示されるとします。
// 特別警報を表す変数名
const emergencyWarning = ...
// 気象警報を表す変数名
const weatherWarning = ...
// 注意報を表す変数名
const advisory = ...
// 特別警報を取得する関数名
const getEmergencyWarning = ...
// 気象警報を取得する関数名
const getWeatherWarning = ...
// 注意報を取得する関数名
const getAdvisory = ...
多言語辞書の英語表記を採用した場合はこのようになりますが、気になる点があります。
気象系の情報しか扱わないシステムであればemergencyWarning
やadvisory
に「気象」を想像させる単語がなくても問題ないかもしれませんが、気象系以外の情報も扱う場合だとemergencyWarning
やadvisory
では抽象的すぎて何のemergencyWarning
なのかが伝わってきません。
「気象」という情報を変数名に追加してみます。
// 特別警報を表す変数名
const weatherEmergencyWarning = ...
// 気象警報を表す変数名
const weatherWarning = ...
// 注意報を表す変数名
const weatherAdvisory = ...
// 特別警報を取得する関数名
const getWeatherEmergencyWarning = ...
// 気象警報を取得する関数名
const getWeatherWarning = ...
// 注意報を取得する関数名
const getWeatherAdvisory = ...
ローマ字表記バージョンだとこのようになります。
// 特別警報を表す変数名
const tokubetsuKeihou = ...
// 気象警報を表す変数名
const kisyouKeihou = ...
// 注意報を表す変数名
const chuuihou = ...
// 特別警報を取得する関数名
const getTokubetsuKeihou = ...
// 気象警報を取得する関数名
const getKisyouKeihou = ...
// 注意報を取得する関数名
const getChuuihou = ...
英語表記とローマ字表記のどちらが良いかは好みの問題かもしれません。tokubetsuKeihou
よりもweatherEmergencyWarning
の方が読みやすい気がしますが、tokubetsuKeihou
が「特別警報」を示すことは明白であることを考えると、ローマ字表記でも案外悪くないような気がします。
ローマ字表記を許容する場合に気になるコードスタイル
1. 複数形にしたい場合はどのように表す?
英単語と同じように複数形のs
をつけてtokubetsuKeihous
とした場合、末尾のs
に気づかず、tokubetsuKeihous
が複数の値を保持していることを見逃しそうです。個人的にはtokubetsuKeihouList
やtokubetsuKeihouArray
などの方が見やすい気がします。
2. 英語+ローマ字表記? or 全てローマ字表記?
「大雨特別警報」を示す変数名はheavyRainTokubetsuKeihou
かooameTokubetsuKeihou
のどちらがいいでしょうか?これは好みの問題かもしれません。
3. ローマ字表記ぶれ
Shi
とsi
やkisyou
とkisyo
など開発者によってローマ字表記ぶれが起こりやすいです。チーム内でローマ字表記ルールを定めたほうがいいかもしれません。
さいごに
個人的には、気象庁の多言語辞書のように専門用語・業界用語に対する正式な英語表記が用意されているとしても、コードの可読性やメンテナンス性が良くなるのであればローマ字表記するのは全く問題ないと考えています。
「土砂キキクル」の正式名称は「大雨警報(土砂災害)の危険度分布」だから変数名はrealTimeLandSlideRiskMap
だ!!!「土砂キキクル」の正式名称を即答できないなんて勉強不足だ!!!という考え方も勿論あるでしょうが、プロジェクト歴の長いメンバーならまだしも新規メンバーには少し厳しいような気がします。
ただ、私が所属するチームではローマ字が許容されていますが、私がコードを書く上でローマ字表記にしたい・迷っているときはチームメンバーに意見を求めて合意をとることにしています。理由としては、例えばlandSlide
がいいかdosya
がいいかは人によって感覚が違うためです。
一般的なコーディングスタイルや命名規則に縛られすぎず、開発体験を良くするためにチームで柔軟に独自ルールを形成していけばいいと思います!
Discussion