2005年8月

15日  聖者が街に

もうだいぶ前のことになりますが、ASCII社が出版していたパソコンゲーム専門誌「Login」の表紙に「戦車が街にやってくる!」という見出しが躍っているのを見かけたことがあります。おそらく実際の東京を舞台にしたシミュレーションゲームが発売されたのでしょう。そのゲームの記事に編集者が「聖者が街にやってくる」というフレーズを文字って気の利いたタイトルをつけたのだなぁ、などと思いながら本屋の棚の前を通り過ぎようとした時、僕の中になにかがひっかかったのです。

「???」なんだろうこの違和感は・・・・

数歩戻って棚の前に立ち止まり、考えること数十秒。ようやく違和感の理由が分かりました。「聖者が街にやってくる」というタイトルの曲は実はないのです。正しくは「聖者の行進」なのです。この曲名と「サンタが街にやってくる」という曲名が編集者の中でごっちゃになっていて、このようなトンチンカンな見出しができてしまったのだと思います。

その後、色んな人に「聖者の行進」のメロディを歌って聞かせて曲名を聞いてみたところ、かなりの割合でこの曲を「聖者が街にやってくる」だと思い込んでいる人がいることがわかりました。

彼らも恐らく、小さい頃は「聖者の行進」で覚えていたはずなのです。それが、大人になった頃にはいつの間にか「聖者が街にやってくる」に記憶がすりかわっているのです。なぜなのでしょうか?

思うに、この曲の日本語のタイトルは「聖者の行進」よりも「聖者が街にやってくる」もしくは「聖者が街に」の方がふさわしかったのではないかと。

その根拠はと言いますと・・・・

この曲の英語の歌詞の一部が「Saints go marchin' in」になっていて、この「marchin' in」のところが、なんとなく「ま〜ち〜に」に聞こえてしまうことがその原因ではないかと思うのです。

大人の大半がこの曲のタイトルを「聖者が街に・・・」にすりかえてしまうのは、この英語の歌詞を耳にしてしまったからなのではないでしょうか。

この曲に日本語のタイトルをつけたのが誰なのかはわかりませんが、その翻訳者が逆になぜこの「marchin' in」のところ無視して「聖者の行進」というタイトルを付けたのかが知りたいところです。確かに翻訳としては間違っていないのですが、こんな「marchin' in≠ま〜ち〜に」という「素晴らしい偶然」が曲名に生かされていないことが少し残念でなりません。日本語の歌詞の方はそうなっているのでしょうか?

31日  開発体制のレイヤ構造

常々思っていることなのですが、オブジェクト指向開発に対する批判、特に派生クラスを作ることに対する批判は、何故「プロジェクトに参加している全員が、全てのクラスを改変でき、全てのクラスの派生クラスを作ることができる」という不思議な前提をスタート地点にしているのでしょうか。

確かに、プロジェクト全員が同一の能力と権限を持っている場合、全員がそれぞれの思惑で勝手に派生クラスなどを作り始めると開発作業全体が破綻するのは目に見えています。そういう開発体制では、確かに派生クラスを作ること自体に慎重にならざるを得ません。

しかし、この体制はいわゆる「XP(エクストリームプログラミング)」の流れで起こっていることで、全員が均質なスキルで、ソースに関しての知識も均質であるべきというところからスタートしているものです。

その前提を基本的に取り払ってしまうとどうなるのでしょうか?つまり、プログラマを、フレームワーク作成者と、業務ロジック作成者に最初から分けてしまうのです。分担は以下のようになります。

多くのSEが勘違いしているフシがあるのですが、フレームワークは「あるものを使う」ものでも「買ってきて使う」ものでもなく「業務用件にあわせてプロジェクトごとに作成する」ものなのです。もちろん、既存のフレームワークの上にかぶせるように業務用件に合わせたフレームワークを作成するのです。

フレームワークができてしまえば、業務ロジック作成者はフレームワーク作成者が設計上前提としている以外の派生クラス作成は禁止されます。全ての業務ロジックは、フレームワーク作成者の監視の下で作成されるのです。

こうすることで、いくつかのメリットが生まれます。

  1. フレームワークの全体構造を、業務ロジック作成者が全て理解する必要はない。
  2. フレームワーク作成者自身が、業務ロジックのような横に広がる実装をする必要がなくなる。
  3. 業務ロジック実装者は、比較的スキルの低いプログラマでも安全に作業ができる。
  4. ややこしいロジックなどのコーディングを、フレームワーク担当者の側で処理できる
  5. スキルの低い開発者が、闇雲に派生クラスを作ることを防止できる
  6. スキルの高い開発者を、重点的にフレームワーク作成に配置できる
  7. プログラム全体を通して、統一性の取れた実装となる
とても基本的な原点に立ち返って言えば、

 「派生クラスを作っているうちに自分でコードが訳わからなくなるようなバカタレには派生クラスを作らせるな」

ということなのです。悪いのは派生クラスを作ることではなく、派生クラスを作っているうちに自分で理解できなくなってしまうようなやつ、返して言えば自分で理解不可能になってしまうような実装をするようなやつであり、そういうスキルのプログラマに実装を任せた側なのです。

この文章には何も新しいことは書いていません。オブジェクト指向が元々前提としていた開発体制を今一度みんなで見直すべきなのではないか、と提案しているだけです。クラスの派生を批判する前に、もう一度オブジェクト指向開発現場での人員配置を考え直してみるべきなのではないでしょうか。