【UiPath】変数名は日本語でもOK

# はじめに

この投稿は「UiPathのコーディングで、変数名に日本語を使うと案外良い」という内容です。
「2021 UiPath Reboot Work Festival」の視聴感想でもあります。

# 以前にあったUiPathフォーラムのトピック

UiPathユーザーが自由に書き込みできる「UiPath日本語フォーラム」で、以前に以下の投稿がありました。

　[[UiPath Forum 2019年12月]変数に日本語を使ってもいいのでしょうか？](https://forum.uipath.com/t/topic/177949)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/d160498f-c2b8-0576-823c-46992e9febe0.png)

それに対する、みなさんの意見はこちら。

```
変数は日本語派
・バリバリ日本語使っています。エンジニアにとって、変数名は英語！っていうイメージありますが
・単純に無理やり英語で変数名をつけると何の変数か分からないことが多いので、日本語でつけています。
・日本語で特に問題が起こったことはありません。たしか18.4以降は日本語OKだったと思います。
・日本語を使っていますが、日本語にしにくいものは、英語のままで。（例：添え字は「インデックス」ではなく「ix」）
・日本語の変数を使うと、読めやすいのメリットがあります。
・グループで開発する時、決めたコーディング規約を従って開発したほうがいいと思います。
・日本語変数で致命的なデメリットはたぶんないと思いますが、英語派です。
・日本語だと変換の手間(変数作成時、検索時など)があります。
・日本語だと、変数名が冗長になりがち(省略し辛い)理由です。
・日本語と英語を併用し、よくエンジニア的に使われる｢exists｣であったり｢idx｣などは英語にしています｡
変数は英語派
・なし
```

全員「日本語肯定派」で、英語派の人はいませんでした。


# UiPathの方の意見

「2021 UiPath Reboot Work Festival」の [[UiPath Reboot Work Festival] 初めてでも分かる！UiPathコーディング規約とその活用方法 ](https://uipath-today.eventos.tokyo/web/portal/278/event/1883/module/booth/48776/31622) というセッションで、UiPathの津田さんが、変数についての触れていました。（内容は、2020年9月の「UiPath AI EXPO 2.0」のものでした。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/c1e504d2-f8f6-89dc-5de4-0b24a0473d61.png)


セッションの中で以下のLiveアンケートを取っていたのですが、

`質問）UiPathで変数名には英語を使用しますか？日本語を使用しますか？回答）英語：83％　日本語：17％`

結果は「英語派」が多かったです。やっぱり結構いますよね。
ですが、変数名は日本語をおすすめしたいとのこと。理由は以下の通りでした。

```
・専門用語を英語に翻訳するのが大変
・日本固有の用語の場合、そもそも英語に出来ない
・正しい英単語を選ぶのは難しい
・間違った英単語を選ぶと、それだけで可読性が下がる
・正しい英単語を選べても、コードを読んだ人が元の日本語に変換できないかも
・プログラムを英語で書く事に慣れた人は良いけど、慣れていない人にとっては辛い
・日本語なら、より伝わりやすい単語を選ぶ工夫ができる。
・変数名が英語でないとダメ、というのは古い悪しき風習
・ぜひ「カナ漢字混じりの日本語」で書いてほしい
・UiPathJapanのお客様に対しても「変数名は日本語で書く」としていて、問題なく運用できている
```

そうなんですよね。正しい英語を考えるのって結構難しいです。


# プログラミングQ&Aサイト

UiPathに限らない話で言えば、この手の話は昔からあります。プログラミングQ&Aサイトの「teratail」でも以下の投稿がありました。

　[2017年1月 変数名に日本語を使用するのは有りか](https://teratail.com/questions/62290)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/c0cab8d7-d2dd-dac6-d83d-5178ea1b391f.png)


それに対する意見はこちら。

```
変数は日本語派の意見
・専門用語的なものを英語の変数にするために、一生懸命辞書を引いた結果、やたら長ったらしい変数名になったりする
・英語の変数にするためのの労力の割には、他者が見たときにまったく意味がわからなかったりする
・変数名を短くできるメリットもあるかもしれません。
変数は英語派の意見
・タイプし辛いので個人的には勘弁して欲しい
・タイピングする際の入力切替が面倒です。
・言語仕様上許されているからと言って、日本語を安易に使うと思わぬ副作用がありそう
・なんとなく格好悪いし、不具合の温床になりそうな気がするので、日本語にはしない。
・チーム開発で外国人が参加していると、漢字の読み方までは判らないとなれば難解なコードになってしまう
・日本語の入力中は仮名なのでIDEの補完も入らず、生産性が下がります
・2バイトにして文字化けした場合には動かなくなった経験があるので、日本語変数は正直やめたいです
```

「変数は英語派」が多いですね。IDE補完の件は確かにそうです。
でもUiPathの場合、クラスの概念がない（作れない）ので、この投稿とはちょっと前提が違うかも知れません。


# 実際にUiPathで日本語変数でフローを作ってみた感想

私は個人的に「変数は英語派」でした。
UiPath以外の開発経験も含め、今まで「日本語の変数でコーディングしたことがほぼ無い」です。（ちょっとしたテストツールならある）
「日本語の変数は嫌だ！カッコ悪いし、将来なにか起きそうで怖い」と思っていました。

が、とあるUiPathの開発プロジェクトで「変数は日本語で定義してほしい」という要望があり、試しに日本語変数でフローを作ってみたのですが、これが意外と良かったです。

例えば「引数で型番を渡して、製品の名称を取得する`」フローを作る場合、引数は

- 1）in_modelNumber
- 2）in_itemNumber
- 3）in_kataban

等が考えられますが、日本語変数なら問答無用で

- 4）in_型番

とすればOKです。シンプル。英語を考える時間が不要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154139/3cb27d0c-c1f1-ca3b-edec-83417df125f2.png)


また、他の人が作った「謎の英語（どういう意味？どうやって名付けたの？）」に悩まされることもないです。（自分の英語だって下手糞だけど）

日本語変数、使ってみると「結構良い」です。

# 日本語変数を使うときの懸念事項

UiPathの場合、ReFramework等のフレームワークを使うと思いますが、フレームワーク内の変数は英語です。なので、日本語の変数と英語の変数が交じることになります。

ただ、別に「混ざって悪い」ことはありません。逆に、フレームワーク部分とそれ以外の区別がついて、見分けやすいというメリットがあります。
また「日本語以外を使ってはいけない」訳ではないので、「製品No」とか「証明書ID」とかでもOKだと思います。
要は「日本語の文章で書きそうなもの」は、変数に使っていいと思います。伝わるならそれで良いと思います。

# 終わりに

UiPathの開発に限った話なら「日本語変数」のほうがメリットが多いみたいです。

デメリットの「エンジニアのエゴ（カッコよさカッコ悪さ）」をどう扱うか？になってしまうかも？ですが、RPAは「実務を行うユーザーのためのシステム」のはずで、エンジニアのためのシステムとは違います。

また、可読性を上げることは、運用保守する上でメリットになり、それは（私のように）「日本語変数に抵抗がある開発者」にとってもプラスになるかも知れません。

ユーザーが「英語の変数が良い、英語でも構わない」と言っているなら、英語の変数でも良いと思います。

英語、日本語、どちらを選ぶにしても、もし、開発チーム内で「日本語変数は嫌だなあ、気持ち悪いよ」という意見が合ったときに、この投稿が参考になれば幸いです。

最後までご覧いただき、ありがとうございました。