こんにちは、高木です。
今回は前回に引き続き、母国語でプログラミングを行うことについていろいろ考えていくことにします。母国語でプログラミングといっても、新しいプログラミング言語を作るといった話ではありません。あくまでも関数名や変数名などの識別子を母国語(私たちの場合は日本語)で命名するということです。
今回のテーマは、識別子に母国語を使った方がいい状況と英語を使った方がいい状況の分類です。前提として、読者の皆さんが識別子に母国語を使うかどうかを決定できる権限があることを想定しています。そうした決定権がない場合は決められたルールを守る以外にありませんので、勝手にルール違反は犯さないようにしましょう。
識別子に英語を使った方がいい状況
順序が前後しますが、先に識別子に英語を使った方がいい場合から考えていくことにします。
言語処理系が母国語に対応していない場合
最近は減ってきましたが、使っている言語処理系(コンパイラやインタープリタなど)が母国語に対応していない場合があります。前回も書いたように、ちょっと前までのGCCでは国際文字名を数値でしか表記できませんでした。そんな非人間的な環境では英語を使わざるを得ません。
そのとき使っている言語処理系は母国語に対応しているけれども、将来的に母国語に対応していない処理系に移植する可能性がある場合も、識別子の命名は英語にしておいた方がいいでしょう。
関連ツールが母国語に対応していない場合
言語処理系自体は母国語に対応しているけれど、関連ツール、たとえばデバッガー、コードジェネレータ、IDEの入力補完機能などが母国語に対応していない場合があります。そういうときは無理をして母国語を使うより、英語を使った方が結局は作業性が高いと思います。かな漢字変換が不自由なプラットフォームも若干ありますので、そういう場合も英語にしないとストレスがたまる一方です。
具体例を挙げると、私は以前からQt Creatorが好きで、Qtを使わなくてもIDEにQt Creatorを使うことが普通にあるのですが、Qt CreatorはUTF-8で識別子を付けるとデバッガーがうまく処理できないようです。こんな場合は、識別子を英語で行うか、別のIDEを使うかせざるを得ません。
すべて英語で統一している場合
理由が何であれ、すべてを英語で統一すると決めたのであれば、識別子の命名も英語で行うべきです。具体的には、ソースコードのコメントはもちろん、仕様書や設計書、評価書など一切の関連ドキュメントもすべて英語、バージョン管理システムのコミットメッセージもすべて英語という場合です。そんな状況で識別子だけ英語以外を使うと違和感しかありません。
メンバーの母国語が混在している場合
外国人がメンバーにいる場合はこういうこともあるでしょう。そのメンバーが多数派の母国語を十分使いこなせるのであれば、その言語で識別子を命名してもいいでしょうが、そうでないなら英語で命名する方がいいでしょうね。ただ、こういうことは人選の段階でもっと考えるべきだと思います。
識別子に母国語を使うべき状況
ちょっと乱暴な言い方になりますが、先ほどの「識別子に英語を使った方がいい状況」にあてはまらないすべての状況で、識別子の命名には母国語を使った方がいいでしょう。といっても、すべての識別子を母国語にしないといけないということではありません。たとえば、関連ツールの利便性などを考慮して、クラス名や自動生成されるイベントハンドラは英語にするけれど、自分で定義する変数名などは母国語にするのでも構わないと思います。
それでは、識別子に母国語を使うべき状況の具体例をいくつか挙げてみることにします。
そのプロジェクト特有の用語が母国語しかない場合
これは非常に多い状況です。そのプロジェクト特有と書きましたが、業界用語なんかも同じだと思ってください。そんな状況で識別子の命名に英語をどうしても使うのであれば、事前に完全な対訳表を作成すべきです。そうしないと、コーディング時に担当者が勝手に翻訳してしまうので、同じ概念に対して異なる英訳が発生してしまいます。
なお、海外向けの製品などの開発であれば、さまざまな概念に英語の名称が付けられていることでしょう。そういう状況であれば、識別子の命名も英語で行う方が自然なケースはあります。ただし、複雑な概念や難解な概念を表す必要があるなら、その部分だけでも母国語を使った方が圧倒時に便利です。
メンバーの英語力が乏しい場合
ネイティブと同じように英語を操れなくても、メンバー全員に高卒程度の英語力があるなら、英語で識別子を付けても大きな支障はないかもしれません。ところが、プログラマーの仕事をしている方々の中には、中学生レベルの英語力も怪しい方がいることも少なくありません。そんな状況で英語での命名を強要すると、おかしな表現、ミススペル、ローマ字表現などが多発することは間違いありません。ローマ字表現は読みにくいのはもちろん、スペルが間違っていたり、統一されていなかったりすることが容易に予想できます。
プログラミング能力と英語力は必ずしも連動しません。本質ではないところ(この場合は英語による識別子の命名)にエネルギーを使わせるより、本質的なところに注力させる方がずっと得策です。
最後に
現実にはさまざまなしがらみがあります。しかし、母国語による識別子の命名が嫌がられる理由の多くは、合理的とはとてもいえないものが多いのです。言語処理系が対応していないという思い込みであったり、単なる食わず嫌いであったりします。不合理とはいえ、そんなしがらみがある中、いきなり本番のプロジェクトで導入するのは抵抗もあると思います。まずは個人開発で試してみるところから始めてはどうでしょうか?