川村渇真の「知性の泉」

柔軟性:直接でなく間接的に参照する


間接参照は、まとめての変更を可能にする

 変更への柔軟性が高い(=変更しやすい)設計を実現する方法の1つとして、間接参照の利用が挙げられる。これが一番役立つのはコンピュータ上のソフトで、ソフト自体を設計する場合にも、ソフトでデータを作る場合にも適用できる。
 間接参照の重要な役割は、同じ設定が複数ある場合、まとめて変更可能にすることだ。まずは、直接参照を考えてみよう。参照する側が個々に値を持つと、それらを変更するのが面倒になる。第一に、変更すべき箇所を見付けるのが大変だ。もし全部を見付けたとしても、個別に変更しなければならない。これが直接参照の欠点である。

直接参照と間接参照の違い

 間接参照を適用して作るなら、値を持つのは一カ所にする。その値を使う参照側では、値自体ではなく、値を持った部分を参照する。値へは間接的に参照するわけだ。この構造だと、値を変えたいときは一カ所だけを変更すればよい。
 間接参照で重要なのは、どれとどれを一緒にするかである。そのときに同じ値だからといって、一緒にして良いとは限らない。まとめて変更しても構わないものだけを一緒にしないと、余分な箇所まで変わってしまう。間接参照では、グループ分けが設計のポイントいえる。「一緒に変更する設定を、1つの参照にまとめる」のが基本だ。

間接参照の段数を増やすと柔軟性が増す

 間接参照の拡張として、間接の段数を増やす方法がある。間接参照の先が、また間接参照を使っている状態だ。よく使われるのが、複数の設定を登録しておき、そのどれを用いるのか切り替える仕組み。定期的に切り替えが発生するような用途で役立つ。

段数を増やした間接参照

 このような仕組みでは、値を変更するとき、前の値も残したまま、新しい値を別に登録してもよい。すると、新しい値が気に入らなかった場合、簡単に元に戻せるメリットが生まれる。単に設定を切り替える使い方も、より柔軟になる。
 さらに段数を増やすと、柔軟性は増す。前述の例なら、「組合せ」箇所で直接値を持つのではなく、設定値に名前を付けて登録し、それを参照する形に変える。

段数をさらに増やした間接参照

値自体を登録できれば、意味を持つ名前を値にも付けられる。柔軟性が増すだけでなく、設定の意味を把握しやすい仕組みだ。
 参照の段数を増やすほど自由度が増すが、あまり多いと関係を把握しにくい。最大でも3段までに抑えたほうが無難である。

間接参照の欠点は処理速度の低下

 間接参照の利用は、良い点ばかりではない。参照先の値を求めるために余分な処理が発生し、処理時間が余分にかかる。一般的には、参照の段数が多いほど、処理の負荷が増加する。
 ただし、本当に問題となるのは、参照する処理の回数が多い場合に限られる。参照の処理が何回も発生するなら、かなり遅くなるだろう。しかし、参照回数が多くないと、負荷がほとんど影響しないこともある。たいていは自分でテストできるので、直接参照と間接参照の両方を作ってみて、処理時間を比べればよい。その際、参照部分の発生頻度は、実際に設計する内容に合わせることが大切。そうしないと、正確な影響は調べられないからだ。
 ソフトでの間接参照を利用する場合は、マシンの処理能力が年々向上する点も考慮しなければならない。コンピュータの世界では、どのクラスのマシンでも、同じコストでの処理能力が毎年向上する。評価したときには遅くても、すぐに問題が解消する場合が多い。現実には、ほとんどの処理で、間接参照による処理速度の低下が気にならなくなった。もし気になる場合でも、ソフトを変更するためのコストと比べたら、間接参照のほうがたいていは得だ。変更のコストには、変更できなかったために仕事が止まったり、変更ミスで余分なトラブルが発生するなど、重大な問題も含まれるのだから。
 我慢できる範囲内である限り、間接参照を利用しよう。マシンの処理能力はますます向上するので、間接参照を多用して困るケースはどんどんと減る。

プログラムから文書作成まで幅広く利用可能

 間接参照の利用範囲は、かなり広い。ソフトウェアのシステム開発では、システム設計からプログラミングまで、ほとんどの設計物で役立つ。ソフトウェアを使って作成する文書やデータでも、変更の手間を軽減するために利用できる。後者の形で利用する人は多いので、より多くの人が活用できることを意味する。
 間接参照を幅広く利用するためには、どこへ利用したら効果的かを十分に考えることが大切だ。利用箇所を決めるときのポイントは、どんな変更が発生するかに注目すること。その変更が簡単になるように間接参照を利用すれば、変更での手間を大きく減らせる。
 具体的な例を見たほうが理解しやすいので、以下に、間接参照の利用例を何点か紹介する。これを参考にして、自分なりの利用箇所を考えてほしい。

例1:システム開発

 システム開発では、調査分析からテストまでと作業の種類が多く、使用するツールも幅広い。網羅するのは無理なので、代表的な例をいくつか挙げる。
 プログラミングでは、間接参照を使うための機能を持った言語が多い。プログラム内で使う固定した数値や文字列は、命令の中に埋もれさせず、先頭部分に集めて定義する。まとめて変更するという使い方ではなく、変更する値を一カ所に集めるという使い方だ。かなり以前から使われている方法で、当たり前になった。これをさらに進め、システム全体で固定値を管理する形に設計することも可能だ。複数のプログラムで使うメッセージや固定値を集め、まとめて管理する。その担当プログラムを1つ用意して、利用するプログラム側から動的にリンクできれば、再コンパイルしなくても固定値を変えられる。システムは少し複雑になるが、再コンパイルが不要な点は魅力だ。また、固定値の編集ツールも用意すれば、数値やメッセージだけを独立して変えられ、変更の手間は激減する。
 会計ソフトや販売管理ソフトなど特定業務向けパッケージでは、画面レイアウトや出力帳票の種類が決まっているのが当たり前だ。ある程度なら変更は可能だが、その範囲は非常に狭い。これとはまったく異なる発想で作られたソフトに、処理内容から画面レイアウトまでを定義する形の定義型パッケージがある。会計の分野ではかなり前から存在し、外資系の一流コンサルタントが好んで使っている。定義型パッケージは、間接参照を徹底的なまでに利用したソフトと見なせる。細かな計算式、集計の単位、画面レイアウト、帳票の項目や並び方など、ほとんどの項目を定義でき、それを参照しながら動作する。最初から用意されたレイアウトなどはなく、コンサルタントが分析した結果をもとに、どんどんと定義を作成してシステムを完成させる。高いノウハウを持ったコンサルタントが、自分一人で独自のパッケージを開発するのに等しい。このように自由度の高い仕組みだが、プログラミングするのではなく、処理や項目の定義を並べる方法で作成する点が最大の特徴である。使いこなすためには対象分野の専門知識が必要なものの、それさえあれば究極のパッケージソフトになる。
 話題のオブジェクト指向も、非常に凝った間接参照とみなすことができる。とくにフレームワークを利用した開発では、基礎となるプログラムと異なる点だけを作成すればよいので、最初に作る作業自体が簡単になる。最初に作成した内容が簡単なら、変更の手間も小さい。
 データベースを利用したシステムでは、レイアウト上にボタンを配置し、それをクリックすることで何かを実行させる。ボタンに割り当てる処理として、命令を直接指定できるデータベースもある。しかし、この作り方は良くない。たとえ1命令だけしか実行しなくても、独立したプロシージャとして作成し、それをボタンとリンクさせるべきだ。複数のボタンが1つプロシージャを参照することで、機能の変更がまとめてできる。たとえば、終了するだけのボタンなら、終了の前処理を加えるのが1つのプロシージャを直すだけで済む。
 システム設計からプログラミングまで、間接参照は幅広く応用できる。ただし、間接参照だけでは実現できる内容が限られるので、他の設計技法と組み合わせて、高い柔軟性を達成することが多い。システム全体での変更のしやすさを最大にすることが大切だ。

例2:DTPソフトでのレイアウト作成

 DTPソフトでのレイアウト作成は、間接参照が大いに役立つ分野の1つである。1つの書類に含まれるページ数が多いので、まとめて変更できるメリットはかなり大きい。
 DTPソフトには、書体の組合せ、字詰め、色などを名前を付けて複数登録できる。また、これらの組合せを登録する機能もある。段数が2の観察参照であり、工夫しだいで便利に使える。その中でも、ここでは色の設定を利用した間接参照を紹介する。これを選んだのは、あまり利用されてない工夫であり、かなり役立つ使い方だからだ。
 通常のレイアウト作成で色を登録するとき、色の種類で登録してしまう。たとえば、50%グレー、薄い黄緑の形で。こうすると、登録名を見ただけでどんな色なのかすぐに分かる。しかし、この使い方は間接参照を上手に生かしていない。
 もっと賢い使い方は、色の種類ではなく、色を設定する対象の役割で登録する方法だ。たとえば、背景の左側の塗りつぶし、背景の上に付ける線、吹出しの枠線、図の枠線という具合に。また、文字の色に関しても、本文の文字色、中見出しの文字色、キャプションの文字色などと登録する。このような方法だと、たとえ同じ色であっても、役割が違えば別々に登録する。この点も、色の名前による登録方法とは大きく異なる。
 対象となる部分には、役割で登録した色を設定する。本文のテキストには「本文の文字色」を、吹出しに枠線には「吹出しの枠線色」を指定すればよい。役割ごとに色を登録しているので、色の設定ミスも起こりにくい。
 役割別の色の登録は、変更が発生したときに効果を発揮する。吹出しの枠線の色を変えるとか、キャプションの文字の色を変えるとか、たった一カ所だけを修正すればよい。役割別に分かれているので、同じ色を使っている別な箇所が変わることはない。
 このような発想での間接参照は、どのような変更が発生するかを考慮してのことだ。色の設定なら色別に登録するなどと、単純に使っていては実現できない。すべての登録機能は、間接参照の特長を生かすように、最適の登録方法を考えるべきである。

例3:ワープロソフトでの文書作成

 ワープロソフトで文書を作成する場合にも、間接参照が役立つ。ただし、間接参照を利用できるような機能を持っていないと、実現するのは無理。ここでは、スタイルシート(スタイル登録機能と呼ぶソフトもある)を利用した、文書作成を紹介する。
 スタイルシートは、多くのユーザーが便利さを理解していない機能の1つだ。こんな便利な機能は、使わないともったいない。ある程度の見栄えの書類を、最小限の手間で作成できる。スタイルシートには、左右のインデント(折り返し位置)、タブ位置、段落前後の空きスペース(改行量)、書体、文字サイズ、文字スタイルなどを指定できる。1つの書類に複数のスタイルシートを登録でき、段落単位に設定する形で用いる。
 まず最初に、目的別のスタイルシートを作成する。表紙用のスタイルシートなら、表紙のタイトル、表紙の副題、表紙の下部の組織名、表紙の下部の氏名などだ。本文用のスタイルシートでは、中見出しの階層1〜3、本文の階層1〜3、挿入文の階層1〜3などだ。中見出しは左側の余白が狭く、前後の行を広く開ける。本文は左側の余白が広く、前後の行は開けない。挿入文は、本文より左右の余白が広くして、前後の行を少し開ける。これで最低限の準備は整った。
 文書の中身を書き始めたら、段落ごとにスタイルシートを設定する。中見出しや本文なら、階層レベルの数に合わせて、それぞれのスタイルシートを選ぶだけだ。こうすると、左右の余白、改行量、書体、サイズなどが一発で設定できる。また、段落の役割ごとに最適な値に設定してあるので、見栄えもバッチリだ。通常は以下のような仕上りになる。

    本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文
    本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文

中見出し中見出し

    本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文
    本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文
    本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文

       挿入文挿入文挿入文挿入文挿入文挿入文挿入文挿入文
       挿入文挿入文挿入文挿入文挿入文挿入文挿入文挿入文

    本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文
    本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文
    本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文

 間接参照の真価を発揮するのは、段落の設定を変更するとき。たとえば、中見出しの書体を変更するとき、書類上の文字列を選んで変更する方法は採らない。スタイルシートの設定を呼び出し、書体を変更するだけ。すると、そのスタイルシートに設定された全部の段落で、書体が一気に変わる。挿入文の左右の余白を広げるとか、中見出しの前側の改行量を増やすとか、ちょっとした変更も、スタイルシート(つまり一カ所)を直すだけで済む。
 スタイルシートを利用するポイントは、段落の役割ごとに設定を用意することだ。中見出しや本文といった役割で分けたので、まとめて変更できる形に仕上がる。非常に便利なスタイルシート機能だが、残念ながら、このように利用できる形で搭載しているソフトは少ない。ワープロの文書作成で間接参照を利用するには、ソフト選びも重要である。

最初から変更を考慮して作ることが大切

 以上の例から、間接参照の使い方が理解できたと思う。良くできたソフトは、工夫しだいで上手に使えるような間接参照機能を備えている。しかし残念ながら、それを理解して役立てているユーザーは少ない。使っているソフトにどんな機能があるのか、改めて調べてみるとよいだろう。ただ調べるのではなく、間接参照が適用できないか考えながら。
 どんな設計や制作でも、間接参照のメリットを生かすには、最初の設計が重要である。そのように作っていなければ、あとから直そうと思っても大変だ。また、ワープロソフトのスタイルシート機能のように、事前の準備が必要な場合もある。それが大変な作業でも、メリットのほうが大きい。
 もう1つ重要なのは、ソフト側の機能。間接参照で工夫できる機能を持つソフトは、残念ながら少ない。今後は、間接参照が応用できるような機能を、どんどんと取り入れてほしい。上手な使い方の説明も付ければ、活用するユーザーが増えるはずだ。
 間接参照は基本的な方法だけに、幅広い分野で役立てられる。ただし、すべての変更に対処するのは無理なので、変更が発生する可能性の高い部分を中心に、適用すれば効率がよい。変更への柔軟性を高めて、無駄な作業を減らそう。

(1998年1月31日)


下の飾り