ソフトウェアの法則 ソフトウェアと名前 識別と表意について
ソフトウェアの法則
(46)

ソフトウェアと名前


── 識別と表意について

 ソフトウェアの分野では名前のことを“識別子”と呼ぶ場合がある。特にプログラム言語の文法規則を論ずる場合には、これはしばしば登場する用語である。この語に初めて接したとき私は何か変な呼び名だなあとは思ったが、英語の“identifier”の訳語だと知ってからは、そんなものかと自分を納得させそれ以上深く考えることもなかった。そのようにして二十数年が経過した後、ある日私は忽然と感ずるところがあり「この訳語はやはりおかしい」という結論を得るに至ったのである。随分と間の抜けたのろまな話ではないか。
 ここでは名前の持つ役割について少しく考察し、なぜそう思うに至ったかを説明してみようと思う。

◆自分の名前
 私は子供の頃から自分の名前がどうしても好きになれなかった。自分の名前というのは、誰でも物心ついて気が付いたときにはもう決められてしまっていて異議を差し挟むことができない。人によっては生まれる前から決められてしまっていたりする。誰でもその決定権についてはどうにもならぬものなのだ。私は事前に一言くらい相談があってもよかろうと思うのであるが。

 私の名前が“恂”となった経緯については長い長い話があるのだが、人の名前の由来など聞いても誰も面白くも何ともなかろうから省略する。とにかくこの字で“しゅん”と読む。自分の姓の字画が簡単なので名の方は適当に画数があって、習字などで自分の名前を書くときは納まりが付いてよいのは確かである。したがって漢字の方に不満はないのだが読みが気に入らないのだ。「しゅんくん」などと人から呼ばれると何か中国古代の皇帝の名を彷彿とさせ、どうも日本人の名前らしくないと思うのである。二十歳を過ぎて後、親からは自由に名前を変えてもよいという承諾を得たが、その頃には自分の名前に結構愛着を感ずるようになっていて結局改名はしないで今日に至っている。

◆名前の識別機能
 そうして日本人の“しゅんくん”は学校を卒業し社会人となった。聞くところによると会社での管理者としての最初の仕事は部下の名前を覚えることであるという。入社して4〜5年目の頃のことであるが、外部からの異動で着任したばかりの課長から初日にいきなり自分の名前を呼ばれたことがあった。あわてて机から顔を上げると課長の視線は私の視線を確実に捕らえている。あぁ、もう私の名前を知ってくれている。多くの社員の中で私という人間を確実に“識別”してくれているのだと知って、そのとき大いに感激したものであった。

 ナポレオンは部下の名前を覚える名人であったという。戦場で「何処そこ部隊の、何の誰れ兵衛、前進!」などといきなり自分の名前を呼ばれたとしたら、部下達は感激して勇気百倍、死にもの狂いで敵に立ち向かい戦ったことであろう(フランス人に「何の誰れ兵衛」はなかろうが、ここは気にしない)。逆に、上司が自分の名前を覚えていないということが明らかになったとしたら、そのときの部下の落胆は大変なものであろう。他の一般社員と一緒くたで自分は識別されてはいないのだから。

 アメリカに長期出張していたときの経験だが、オフィスではいつも“Good morning”とか“Hi”などと言ってお互いに挨拶をする。そのとき彼等は必ずその後に相手の名前を言い添えるのであった。“Hi Bob”とか“Good morning Ken”という具合である。そういうとき日本人の名前は彼等にとって発音しにくいので適当に米国流のニックネームに変えてしまうことが多い。そのニックネームを自分のミドルネームとして名刺に印刷している男がいて、私はそれが羨ましくて仕方がなかった。私もそういう格好いいミドルネームが欲しかったのだが、幸か不幸か「しゅん」という名前は彼等にとっては発音しやすかったのであろう、いつも「シューン」などと呼ばれていた。廊下の向こうの方から“シューン”と尻上がりの発音で声を掛けられると「私は貴方を識別していますよ」という感じが伝わってきて、日本の職場では普通体験できないような親近感、充実感を味わったものである(特に相手が妙齢の女性のときには)。

 このような識別という目的では身分証明書や自動車免許証の名前は非常に重要な役割を持っている。以前、本籍地の変更を行ったとき自動車免許証の記載事項の変更を最寄りの警察署に申請したことがあった。そのとき不本意にも私は自分の名前を変えたことにされてしまったのである。というのは、私が提出した戸籍簿の写しには手書きされた私の名前の“恂”という字のりっしん(心)偏が、十(たとえば“協”という字の偏と同じ)に見える形で書かれていたからである。これは出生に際して最初に書類に名前を記入したとき、勢いでそうなってしまったのであろう。そんな字は存在しないのだから「これは書き間違いです」と私は説明したのだが警察はこちらの言い分など一向に聞き入れてはくれなかった。改名届を出さない限り戸籍上での名前でしか書類は受け付けられないというのである。とうとう根負けした私はその文字で書いた書類提出に同意せざるを得なかった。

 以来、私の免許証の名前の欄にはいつもこのいんちき文字が手書きで記入されることになってしまった。実に不本意なことである。警察にとっては人を確実に識別するためには、このような細かいところまで厳密に区別することが必要だったのであろう。市町村役場などで使われるコンピュータシステムで外字の種類が多いのは、大抵はこのような嘘字が多いためであろうと思う。自動車免許証はいずれICカード化されるという噂であるから、そのとき私の名前がどのようにコード化されるのか今から心配なことである。

◆自動車のナンバープレート
 識別のための番号といえば自動車のナンバープレートが代表的なものであろう。識別だけを目的として番号付けされるので日本では特別意味のあるつづりの番号が欲しいと思ってもそれは許されない<*1>。しかしアメリカでは特別に申請すればそれが可能になっていた。ボストン郊外を車で走っていたとき、たまたま前を走っていた車が“HIKARI”という番号を付けていたのを覚えている。多分ドライバー氏は日系の人で特別な申請をしてその番号を取得したのであろう。日本では精々“い−0001”のような特別に良い番号を順番待ちして取得するくらいのことしかできない。

【注】<*1>1996年1月、日本の運輸省は全国約十カ所の
陸運支局で1998年春をめどに、ドライバーが希望する四
桁の番号を有料で交付する「希望番号制」を導入すると発表
した。

 ところで、この番号付けのルールもうまく決めておかないといくら桁数があっても不足する事態になってしまう。たとえば日本では“品川 55 い−0001”<*2>といった具合に桁数は十分にあるのに、地域によっては番号不足に陥りそうになっているところがあるという。これは番号の付け方が下手だからだ。それぞれの桁に特別な意味を持たせる使い方にすると組み合わせの総数は極端に減ってしまう<*3>。普通は、番号を発行した西暦年数の下1桁だけを含ませておきさえすれば10年間は重複することがないようにして毎年沢山の識別番号を発行することができるはずなのだ。10年経てば大半の車の寿命は尽きてしまうから実用上は問題が起こらないということである。もっとも、日本の自動車は性能がよくて長持ちするから1桁では無理という主張があるかもしれない。そのような場合は、年数の位置を変える英国流のやりかたがある<*4>

【注】<*2>プレート番号は以下のように意味付けされている。
    陸運支局 車種 分類番号 仮名 車両番号
      品川  5   5   い  0001

【注】<*3>特定の陸運支局に限っても、数字2桁(100種)、仮名
1桁(48種)、数字4桁(10,000 種)が使えるから、単純に計算
しても 100*48*10,000=48,000,000 で4千8百万種類の番号が
作れるはずである。しかし実際には、最初の2桁の番号にそれぞれ
特別な意味を持たせていて自由には使えないから、実際に使える番
号はずっと減ってしまう(しかも、縁起の悪い番号の組み合わせも
除外される)。

【注】<*4>「リンボウ先生、イギリスへ帰る」林望(文芸春秋社)

 確かアリゾナ州では、ナンバープレートを毎年登録し直して交換することができるようになっていたと記憶している。その際に古いナンバープレートを記念にもらえるようになっていた。そんなことができたのはプレート番号に発行の年数が含まれるようになっていたからであろうと思う。

 私がアリゾナに滞在していたときは、このことを知らずにいたので私はナンバープレートを手に入れることができなかった。帰国後に知って大いに悔しがったものだ。それで、そのときまだアメリカに滞在していた友人に頼んで、後にアリゾナ州のナンバープレートを手に入れてもらったことがあった。こうして手に入れた金色に輝く“ARIZONA 73 SZX-395”というナンバープレートは今や私の宝物の一つとなっている。

 このナンバープレートがすっかり気に入った私は、欲張りにも、もう一つ宝物を増やそうと考えた。次にアメリカに出張するときには必ず新たなナンバープレートを一つ手に入れてやろうと決意したのである。機会は程なくして訪れた。オハイオ州のシンシナチに1か月程仕事で滞在することになったのである。
 

 困難だった仕事も何とかけりがつき明日はいよいよシンシナチを離れるということになったとき、私はナンバープレートのことを思い出した。いよいよ計画を実行する時が来たのである。私が空港で借りて以来ずっと乗り回していたレンタカーのナンバープレートをここで失敬してしまおうと思ったのだ。そのために、わざわざスクリュードライバー(ねじ回し)まで日本から持参してきたのである。アメリカでは車の後部に付いているナンバープレートが重要であって前部に付いている方は飾りと同じでどうでもよいのである。その、前に付いているナンバープレートの方を失敬してやろうと私はけしからんことを目論んだのであった。

 オフィスからホテルへ戻って地下の駐車場に車を止め自分の部屋へ戻るべく車を離れようとしたまさにそのときに、私はナンバープレートのことを思い出したのである。そこで何気なく振り返って自分の車の前部を見ると、ない! ないのだ! 私の車の前部に付いているはずのナンバープレートが既にしてないのである。

 私は一瞬、先手を打って盗んでいった者がいたのかと考えたが、そんな物好きなことをするのは恥ずかながら私くらいのものであろう。よくよく見ると、これは何としたことか、もともと私の車には前部にナンバープレートなど付いていなかったのである。冷静に考えて見ると、日本から到着したとき飛行機はケンタッキー州のグレイター・シンシナチ空港に着陸したのである。私はその空港でレンタカーを借りてシンシナチのオハイオ州側まで来て仕事をしていたのであった。したがって私の車はケンタッキーナンバーだったのだ。実はケンタッキー州では車の後部にナンバープレートを付けるだけで前には付けない習慣になっていた。

 それを知らない私は前後にナンバープレートを付けている車の多いオハイオ州にいたので、自分の車もそうなっていると信じて疑わなかったのである。車の番号を緊急に識別する必要があるのは交通違反や事故などを起こした車が後ろを見せて逃げようとする場面などであろうから、後ろにだけ番号を付けるのは合理的な判断であろうと思う。識別という目的だけなら後ろだけで十分なのだ。

 結局このけしからぬ計画は未遂に終り、私は東芝社員としての品位を汚すことなく何食わぬ顔をしてシンシナチを後にしたのであった。もっとも、内心では出張目的が完遂できなかったことで幾分気落ちしてはいたが。そしてスクリュードライバーの方も本来の役目を果たすことなく空しく日本へ戻ることになったのである。‥‥だいぶ話が脱線してしまった。

◆名前のもう一つの役割
 ところで名前の役割というのは、この自動車のナンバープレートのように単に対象を識別できればよいというだけのものではない。名前についてはもっと根の深い様々な問題を我々は抱えている。

 たとえば中国人や韓国・朝鮮人の名前を読むとき、我々日本人は普通日本語読みをしてしまうがこれは彼等から見ると明らかな偏見・差別と映るらしい。つまり一般的な名前として発音するのなら構わないが、特定の個人に向かってはその名前の持ち主が期待するように(あるいはそれに近い)発音をしてあげないとその人の人格を侵害したことになるというのだ。個人の名前というのはその人の人格・人間性を反映したものになっているということなのであろう。

 名前の目的が識別ということだけならば別の方法がいくらもあろう。たとえば国民総背番号制の導入がよく話題になるが、これが実現すれば全国民が確実に識別されることになる。しかしその導入に反対する論も根強い。それは全国民が確実に識別されれば行政の効率化は計れるであろうが、国家による個人の管理が強化されてしまうことを恐れるからである。更には、ダイレクトメールの氾濫で我々が日々悩まされているように、民間によるプライバシーの侵害という問題も起こり得る。つまり識別ということにだけ拘ってはいけないのである。

 結婚した女性が自分の姓を夫の姓に変えるのは今までは当然の事と考えられてきた。しかし最近は「夫婦別姓」の問題がよく取り上げられ世の中に受け入れられるようになってきている。特に女性の身になるとそれまで十数年(あるいは数十年)に渡って使ってきた愛着のある名前が無くなってしまうのであるからこれはショックであろうと思う。特に学者や研究者なら、それまでの自分の研究実績と密接な関係にある自分の名前を変えなければならないというのは大変に辛いことであろう。名前というのは人格表現(物の名前なら内容表現と言うべきかもしれない)としても重要な役割をはたしているのである。

 たとえば“ピカソ”といえば大抵の人は抽象的な絵を好んで描いた画家を思い出すかもしれない。若い頃からの作品に精通している人なら作風を様々に変転させた偉大な(版画、彫刻、陶器も手掛けた)芸術家を想起するに違いない。あるいは「ゲルニカ」という作品のことを知っている人にとっては独裁者に反抗し戦争の凶暴さと悲惨さを訴えた芸術家を尊敬の念を持って思い浮かべることであろう。このように名前には識別ということだけでなく、その名前の持ち主の人格とか主義主張のすべてが込められているものなのである。

◆長い名前
 コンピュータのプログラム言語で使われる名前も最初は識別という目的だけから出発していた。私が扱った初期のアセンブラ言語では識別子は英字1字か、英字の後ろに数字1字を添えたものに限定されていた。たとえば、

  a, i, b6, x1, z9

などである。これだと 26*(1+10)=286 であるから、286 種類の異なる名前を定義できることになる。当時のプログラムの大きさからいえばこれは十分過ぎるくらいの数であった。

 初期のFORTRAN(1)言語では、定義できる名前の長さは1〜6文字と制限されていた。名前の最初の文字は必ず英字でそれ以降の文字は英字または数字を自由に使うことができる。そして先頭文字が I、J、K、L、M、N のいずれかで始まる名前は、すべて整数型変数の名前と解釈される約束になっていた。これは頭文字だけを見ればそのデータ型を容易に識別できるようにするための便法である。これらの規則は識別という目的だけで考えるなら特別に厳しい制限とは思えない。識別し得る名前を事実上無制限に作ることができたからである。

 初期のFORTRANにはもう一つ特長的な規則があった。それは空白コード(ブランク)をプログラム中のどこにでも自由に使うことができたことである(文字列の中以外では特別な意味はなく文法上無視されることになっていた)。したがって空白を名前の間に挟んでもよかったのだ。たとえば、

     VALUEA, VALUE A
     STDOFX, STD OF X

はそれぞれ同じ一つの変数名と解釈される。この機能をうまく使えば単語を連ねて名前を作ることができたのだが、何せ名前の長さが6文字以内という制限があるので結局はうまく使いこなせなかった。つまり識別だけでなく内容的に意味のある名前を付けようとすると6文字ではどうしても不十分だったのである。

 この結果、英単語の頭文字だけを適当につなげて名前とすることが多くなり、訳の分からない単語が氾濫することになった。例の“IBMジャーゴン(2)”が生まれるようになった素地はこのようなところにもあったのではないかと私は思うのだが。

 したがってFORTRAN言語の利用者は、たとえば“RTNCE”という単語を見たらこれは“roots of normalized cubic equation”の略だと即座に了解できなければならなかった。“PVOCC”ときたら(これは簡単だ)“parameter values of cartesian coodinates”の略だというくらいのことは誰にでも容易に(?)推測が付くことであった。“RVOMP”ときたらこれは“real value of multivariable polynomials”の略なのである。左様、慣れると案外に簡単なものなのだ(?)。

 しかしPL/I(3)言語の出現により名前の長さは32文字以内ということになった(外部名の長さのみは相変わらず制限されていたが)。更にPL/Iでは、英数字以外に英字の一種として下線(“_”)が使えるようになった(特殊文字“#”“@”も使えた)。これを利用すれば次のようにして長い変数名を定義することが可能となったのである。

     COMPUTER_SCIENCE
     STANDARD_DEVIATION_OF_X
     scale_factor
     length_of_leftside

 一方PASCAL(4)言語の普及の過程で、下線の代りに大文字と小文字の組み合わせで単語を連ねるという表現方法が考案された。

     ComputerScience
     StandardDeviationOfX
     ScaleFactor
     LengthOfLeftside

このようにすれば単語を連ねて長い名前を作るのは極めて容易になる。

 余談になるけれど、以前プログラム言語の入門書を作ったときその中で「世界一長い名前の駅」(58文字 <*5>)という問題を取り上げたことがあった。そのとき、ついでに「日本一長い名前の駅」は“やながわ希望の森公園前”(11文字)であると書いておいたのだが、その内にもっと長い名前の駅が誕生してしまい、この記述は訂正しなければならない事態になってしまった<*6>

【注】<*5>世界一長い駅名
  “LLANFAIRPWLLGWYNGYLLGOGERYCHWYRNDROBWLLLLANTYSILIO
    GOGOGOCH”
    (読み:フランバイルプフルグウィンギフルゴゲールクウィ
      ルンドロブフルフランティシリヨゴゴゴク。
      意味:聖ティシリヨ教会の赤い洞穴のそばのうず巻く急流
      に近い白いハシバミの木立の淵にある聖メアリー教会)

【注】<*6>日本一長い駅名
 日本一長い駅名はここには記さない。再び同じ失敗を繰り返し
たくないからである(実は知らないのだが)。

 共産圏諸国などでは政変があると地名や通りの名前が一夜にして変わってしまうことが多い。日本では政変がなくても由緒ある地名があっさりと変更されてしまって、惜しいなあと思うことがしばしばある。駅の名など直ぐに新しいものが出現するから油断がならない。あのとき「長い名前」ではなく「短い名前」としておけばよかったと後から大いに悔やんだものだ。最も短い駅名といえば、それは間違いなく“津”である。これは多分「世界一」で、この記録が破られることはよもやなかろう<*7>

【注】<*7>名前の短さにもかかわらず、津駅での駅内放送ではこれを「ツー〜〜〜」と発音している。一字にしては世界一番長い発音ではなかろうか。津を通るときに確かめてみるがよい。

 ついでに駅名ではなく一般的な地名で言えば、世界一長い地名はニュージーランドにある丘の名前(83文字 <*8>)だそうである。日本では、北海道南部の日高山脈から流れ出る川の名前(12文字 <*9>)が、現在(1998)のところ一番長いものである。

【注】<*8>世界一長い地名
 “TAUMATAWHAKATANGIHANGAKOAUOTAMATEATURIPUKAKAPIKIMAUN
    GAHORONUKUPOKAIWHENUAKITANATAHA”
    (53文字の正式名が変化したもの)
 (読み:タウマタワカタンジハンガコアウオタマテアトゥリプカ
         カピキマウンガホロヌクポカイホエヌアキタナタハ。
  意味:船を操って大陸を回ったタマテアという名の男が、愛す
         る女性に向かって鼻を鳴らして歌を奏でた丘の頂上
  (ニュージーランドのポリネシア系先住民のマオリ族の言葉))

【注】<*9>日本一長い名
 “コンポクウシシピチャリ川”
  (意味:西の方を流れるサケの産卵場)

 これらの長い名前はいずれも短い単語を書き連ねて作られたもののようである。一方、単独で長い名前としてはどのようなものがあるだろうか。たとえば日本の実在した人の名では小倉百人一首に出てくる“法性寺入道前関白太政大臣”(ほっしょうじ にゅうどう さきの かんぱく だじょう だいじん)というのが、古来最も長い名前であると言われている(真偽の程は分からない)。実在の人物でなければ、落語の“寿限無寿限無‥‥”(106文字 <*10>)というのが日本一長い名前であろう。

【注】<*10>日本一長い人名
 “寿限無寿限無五効の摺り切れ海砂利水魚の水行末雲来末風来末食う寝る所に住む所ヤブラコウジのブラコウジパイポパイポパイポのシューリンガンシューリンガンのグーリンダイグーリンダイのポンポコピーのポンポコナの長久命の長助”

 しかし、世界ではもっと長い名前がある。たとえば前出のピカソの本名<*11>は、実に109文字だそうである。もっともっと長い名前の人がいるかもしれない。

【注】<*11>本名の発音は次のようになる。
 パブロ・ディエゴ・ホセ・ツランチェスコ・ド・ポール・ジャン・ネボム・チェーノ・クリスバン・クリスピアノ・ド・ラ・ンチシュ・トリニダット・ルイス・イ・ピカソ

 ただ、最近、製造物責任法(PL法 <*12>)という法律が施行され利用者が購入した製品の使い方を間違えて事故を起こしたような場合に、その責任の所在が明確化されてきている。このことに鑑み、私は次のような注意書きを抜かりなく記しておくことにする。

   【警告】これらの名前を一気に発音しようとすると、
       あなたの健康を損なう恐れがあります。

 【注】<*12>製造物責任法(1995-7-1 施行)

◆表意名
 さて本論に戻ろう。このようにして名前の長さに関する制限が実質的になくなってしまうと、我々は名前の命名に当たってはもっと工夫する余地があることに気が付いた。単に対象を識別するだけでなく、その保持する値の意味や利用方法の説明を変数の名前に反映させるようにすれば、その変数の使用目的がもっと明確になるからである。このような使い方は、変数だけでなく定数にも適用できるはずである。その結果、プログラム言語の仕様は定数にも名前を付けられるように機能拡張されていった。そしてプログラマはこれらの機能を積極的に利用することによって、プログラムの保守性を高めることが可能になったのである。このような意図で命名された名前を我々は“表意名”と呼んでいる。

 例:  const messageMask = "100011000";
     const isEMPTY = "000000000";
     ‥‥
     if ( InputMessage && messageMask == isEMPTY )
     { ‥‥
      ‥‥
     }

 オブジェクト指向プログラミング(5)では、各種のプログラム部品を有効に活用することが求められる。使う側ではそういった部品の機能をブラックボックスとしてとらえ、内部的な詳細には深入りしないのが普通である。それには部品としての機能を抽象化する必要があり、そのための手段として部品の名前の命名法を工夫する必要が出てくる。たとえば、ウィンドウズプログラミング(6)を行うとき必要になるAPI<*13>関数の名前で一番長いのは、現在のところ29文字<*14>だそうであるが、これからのプログラマはこういった名前の識別(これだけ長いと識別は簡単だが、今度はつづりを間違えないように気を付けなければならない)だけでなく、その機能・使い方などの情報も沢山覚えなければならない。そしてうまく命名しさえすれば、そういった情報を覚えやすくすることが期待できるのである。

 このように、名前というのは決して“識別子”という呼び方で代表される識別機能のみの単純なものではなく、うまく命名しさえすればその機能とか内容とか性質とかを表現できるものなのである。

 人の名前についても同じことが言える。人間は齢を重ねるにつれ名前で人格の内容表現ができるようになってくる。人が自分の名前に愛着を持つようになるのは、多分そういった意味での自身の人格表現ができるようになってきた証しであろう。日本の自動車のナンバープレートも利用者の希望する任意のつづりを(それも数字だけでなく英字も含めて)許すようにすべきである。それが、これからの多様な時代の要請に応えることになるのではなかろうか。

 自分の子供に“悪魔”という名前をつけようとして物議をかもした親がいた。彼は識別という観点ではこの上なく優れた選択をしたと思う。しかし彼は名前の表意名としての役割を知らなかったのではなかろうか。将来、その子が大人になったとき、その名前が自己の人格表現としても機能することに全く思いが至らなかったのであろう。

 我々は、プログラム上で使う名前に対しても自分の名前に対しても、単にそれを識別名として機能させるだけでなく、表意名としても意味を持つようにさせたいものである。■

【注】<*13>Application Program Interface の略
【注】<*14>“HelpMessageFilterHookFunction”
   多分、これもいずれ訂正しなければならなくなろう。

【プログラムの命名法】
◆プログラムは使い易くなくても一向に構わないが、プログラムの名前だけは発音し易くなければならない。

【用語解説】
(1)FORTRAN
 科学技術計算用のプログラム言語 Formula Translator の略
(2)IBMジャーゴン
 IBM社が使う特有の略語をさす言葉
(3)PL/I
 IBM社が開発した汎用のプログラム言語の名称
(4)PASCAL
 教育用途によく使われるプログラム言語の名称
(5)オブジェクト指向プログラミング
 データとそれを扱う方法とを一体にして、これをオブジェクトとして扱うことを基本とするプログラム作成法
(6)ウィンドウズプログラミング
 Windowsなどで代表される、いわゆるウィンドウズ環境のもとで動作するプログラムを作ること
(1996-11-05:掲示、1998-5-1:削除、2006-10-1:加筆再掲示)