元底辺エンジニアが語る、エンジニアとしての生き様、そしてこれからの生き方

生き様077. 日本語プログラミング

»

月イチで技術的な話をしよう

エンジニアたるもの、技術力で勝負したい!

これを読んでらっしゃる皆さんは、そう思いませんか?
僕はそう思いません、今は。

『今は』ということは、かつてはそう思っていました。
そして、ある出来事を経てから、そう思わなくなりました。

でも、それでもやっぱり技術は好きです。
技術的なことの情報収集は適度にしています。
ですから、及ばずながらでも、技術的な話をしたい!と思うわけです。

「そんなのQiitaでやればいいじゃないか」
成程、そういう声もあるでしょう。

ただ折角エンジニアライフという媒体があります。
エンジニアライフを盛り上げたい、という思いもあります。
ですから、月に一度ぐらいのペースで、無理なく技術に関するお話をしていきたい。
そう考えています。

やりたい、というだけなら「傾聴」の話が一番やりたいのですけどね。


「日本語をプログラミングに使うこと」について考える

しばらく前に、ある記事のコメント欄で「日本語で命名すること」について、熱い議論が交わされました。

そこでお話された内容は興味深いものでした。
今回は、僕の経験をベースに、「日本語をプログラミングに使う」ということについて、考えます。

まず「日本語をプログラミングに使う」ことを定義します。

日本で書かれた大多数のコードに含まれている「日本語のコメント」は含みません。
当たり前のことですが、コメントはプログラムではないからです。

では、「なでしこ」の様な日本語プログラミング言語はどうでしょう。
言うまでもなく、この話題のド本命ですね。
ただし、若干マニアックな話になりそうな感じはあります。

そして、多くの人が興味を寄せる話題はこれでしょう。
クラスや変数、メソッドの命名に日本語を用いることです。
当然、日本語プログラミング言語以外のプログラミング言語で、の話です。
便宜上まとめて「日本語命名」としましょう。
クラス名、変数名、メソッド名それぞれで分けることも考えましたが、今回はまとめて扱います。


日本語プログラミング言語を考える

この話題を話す前に、一つだけ断っておくことがあります。
それは、白栁のプログラミング初期学習は日本語プログラミング言語だったということです。
当然、自分が学習した方法ですから、好意的な内容になります。

日本語プログラミング言語のメリット

一番のメリットは、普段から慣れ親しんでいる文字を扱える、ということです。
これは僕自身が強く体験したことです。
当時は、BASIC等のプログラミング言語に魅力を感じませんでした。
「日本語でプログラミングできるのに、何故英語で書かなければいけないのか」と。

ひらがなであれば、5歳ぐらいで読めるでしょう。
もし、その言語の命令がひらがなだけで構成されていれば、多くの人がコードを読めることになります。
そして、おおよその内容を理解もしくは推測することができるでしょう。
この読んでおおよその内容を推測できるというのも、大きなメリットです。

同時に英文字を新しく覚える必要がない、というのは学習コストを下げるという点で大きな魅力です。
また、僕の様に英語に拒否感がある人でも、とっつきやすいでしょう。

日本語プログラミング言語のデメリット

一番大きなメリットである普段から慣れ親しんでいる文字を扱える、は同時にデメリットでもあります。
何故なら普段から慣れ親しんでいる言葉を使おうとするからです。
どういうことでしょう?

プログラミング言語は命令言語であり、自然言語ではありません。
演算装置としての特性も関係してきます。

1 + 2 の答えを変数に格納したい場合、自然言語では

1 + 2 の答えを a に入れる

となるでしょう。
これがプログラミング言語では

a = 1 + 2

もしくは

a へ入れる 1 + 2

で実現されることになります。
頑張れば、これぐらいなら自然言語での命令にも対応できそうな気がします。
しかし、計算がもっと複雑になったらどうなるでしょう?
演算装置としての特性に沿った命令方法を使用して、効率よく処理しようとするはずです。

「普段使っている言葉」だからこそ、このギャップを苦痛に感じる人が居ます。

また、日本語は主語の省略等、表記ゆれの多い言語でもあります。
そして、表音文字であるひらがなだけを使用した場合、同音異義語の問題も出てきます。
かな漢字混じりとすることで解決はできますが、どこまで漢字を使うのか?という問題がでます。
不特定多数の人が扱うプログラミング言語ですから、この為の合意形成は大切です。
つまり「日本語を扱う」というのは、意外とコンピュータには難しいことなのです。

そして、日本語を読み書きするのは日本人だけです。
日本国内だけのローカルな言語・開発環境となります。
他のグローバルに使われる言語に対して、様々な面で後れを取るでしょう。
それは、多くの言語がOSS化している現代ではとても顕著に現れます。

「プログラミング教育の為の言語」と限定するなら、言葉に頼らないScratchの方が優秀でしょう。


日本語命名を考える

僕自身の立場を先に表明すると、日本語命名については『限定的に』賛同する立場です。
日本語で命名されたクラスが入ったコードをメンテナンスしていた時期もあります。
その経験から、全てが「悪」とは言いませんが、積極亭に推奨する立場でもない、ということです。

日本語命名のメリット

一番のメリットは、命名から意味を瞬時に理解・推測しやすいでしょう。
これは日本語プログラミング言語でお話したことと同じです。

人数、価格、個数、単価、小計、合計、税抜、税込、行、列 etc…
システム開発でよく出てきそうな言葉は、日本語で書けば一発で理解できます。
ドメイン駆動開発で重視されるユビキタス言語との相性も良いでしょう。
かな漢字の制約も、開発グループ内だけの合意が取れれば良いのです。

特にメソッドの命名の場合には、動詞と名詞の順番を決めておく等、合意形成を行うべきです。
そうすることにより、命名のルールが統一され、スムーズに進みます。
ただし、これは英文字だけで命名した場合にも言えることです。
表記ゆれに対しても、同じ内容で対処できるでしょう。

日本語命名への誤解

過去にあった「全角文字が壊れる」というデメリットは、UTF-8が標準化されている現代では問題になりません。
半角カナも気にせず使えます。全角カナが使えるのに半角を利用するメリットは解りませんが。

入力時に日本語入力モードに切り替える必要がある、というデメリットも些細なことです。
「ではあなたはコメントを全て英字で打つのですか?」の問いがその答えです。
また、多くのIDEではサジェストにより強力な入力補助機能もあります。

つまり、これらをディメリットとして上げるのは筋違いです。

日本語命名のデメリット

よくディメリットとして挙げられることがあります。
それは「オフショアができない/しにくい」ということです。

確かに、日本国外で開発した場合、変数等を日本語で入力するのは苦労するでしょう。
ただ「意味が通じないから」と言う理由は素直に頷けません。
その一方でローマ字命名をしている例があるからです。
これには苦笑するしかありませんね。

ただ、真面目な話、オフショアやOSSへのコミットを考える場合のみ、言葉のディメリットがあります。
それらを考えないのであれば、特にデメリットを感じません。

「普段からグローバルを意識して英語命名に拘る」のは個人では結構です。
ただし、開発はチームです。
そこに個人の拘りをどこまで入れるのかは、マネジメントの話です。
政治的な綱引きを頑張りましょう。


白栁が日本語命名を避ける理由

僕の日本語命名に対する意見をまとめるとこうなります。

  • テストコードのメソッド名は積極的に日本語を使う
  • ローマ字で命名するぐらいなら日本語で命名する
  • 英語での命名に悩むなら日本語で命名する
  • それ以外では積極的に日本語命名は使用しない

前項で日本語命名を称賛しておきながら、日本語命名を避ける理由が2つあります。

  1. DBの項目名が日本語ではない
  2. HTTP通信のGETリクエストで全角文字が使いにくい

これらの理由について、一見関係ないのでは?と思うかも知れません。
僕は、各種命名には基本的にDB上のテーブルに定義された項目名を使っています。
DBから一貫した名前を使うことで、各種変数や引数等の役割を明確にするのです。

DBの項目名に日本語名を使わない理由は、なんとなくです。
強いて言うならば、DBの文字設定がUTF-8になっていない環境を使っているからです。

そして、コメント以外で日本語入力に切り替えるのがめんどくさいというのがあります。

さあ、問いかけましょう。

「ではあなたはコメントを全て英字で打つのですか?」
「いいえ。ですが手が慣れてるので気になりません」

どうもおあとがよろしいようで。

以上!




ミニコーナー:こちらヤマネコシステム技術部三課!

ここは日本のどこかにあるかもしれない「ヤマネコシステム」社。
そこはかとなく、ブラックの香りがするこの会社の日常を、少し覗いてみましょう。

登場人物

三課:受託開発&新サービス開発
 ヒノモト : 主人公 アラサーエンジニア
 ホンドくん : 同僚 どっちかが1年先輩だった気がする
 オラフ先輩 : 社内事情通、噂好き。技術的には…
 オナガさん : 後輩

先輩の威厳

ホンドくん「なっ、これで動くと思ったんだよ」
ヒノモト「確かに、これなら動きそうだね」
ホンドくん「でも、動かない。ダメだーっ」
オラフ先輩「大きな声だしてどうしたんだい?」
ホンドくん「あ、オラフ先輩。今ちょっと、コードが動かなくて」
「オラフ先輩は、わかりません?」
オラフ先輩「ああ、それならここじゃないかな?」
ヒノモト「おお!動いた。オラフ先輩すごい」
オラフ先輩「まぁね。伊達に長くやってないからね」
オナガさん「この前、同じところをゴリタ主任に教わってましたよ」
オラフ先輩「それ今言わなくてもいいじゃない~」

(つづく)




ITエンジニアの視点で、時事ニュースを5分間で紹介する動画を平日毎日公開してます。
「日々の生活の中にエンジニアリングがある」からこそ、
身近な時事ニュースから学ぶことが重要です。

#ほぼ日ITエンジニアニュース

栃木県以外の緊急事態宣言の延長。
改正特措法等関連法案の改正。
コロナに関する状況はまだまだ動きが多そうです。
情報収集だけでなく、その意図も考えるようにしたいですね。


Comment(2)

コメント

ちゃとらん

プログラミング『言語』というから、日本語だとか英語だとかの議論になると思っています。あれは、数学と同じで『記号』だと思います。


1.Java風
public static long factorial( final long n ) {
 if(n <= 0L){
  return 1L;
 }
 return n * factorial(n-1L);
}


2.なでしこ風
(VをAのBで)階乗計算とは
  もし、Bが0以下ならば、Vを戻す。
  (V*A)をAの(B-1)で階乗計算して戻す。
ここまで。


3.Java風を日本語風にアレンジ
公開 静的 長整数 階乗(確定 長整数 変数) {
 もし 変数 が 0 より 小さい時 {
  返す (1) ;
 }
 返す 乗算(変数,階乗(変数 引く 1);
}


4.Javaで書ける風
public static long 階乗( final long 変数 ) {
 if(変数 <= 1L){
  return 1L;
 }
 return 変数 * 階乗(変数-1L);
}


でも、おっしゃるように、日本語は、揺れますから。
積極亭に推奨する
デメリット
ディメリット

コメントを投稿する