







第50回
■
■SqueakではじめるSmalltalk入門 第50回
■
本連載では、名前は知っていてもなかなか触れる機会のないSmalltalkについて、最近話題のSqueakシステムを使って紹介しています。今回から数回にわたって、システムに対して散発的に施された改変を管理するための機構「チェンジセット」を取りあげます。
▼チェンジセットとは
我々はすでに、システムブラウザを使うことで、クラス単位やクラスカテゴリ単位、メソッド単位やメソッドカテゴリ(プロトコル)単位で、そのソースコードをファイルアウトし、他の仮想イメージにそれを読み込ませる(ファイルインする)ことが可能であることを知っています。しかしシステムブラウザには、クラスをまたいで複数のメソッドを追加したり改変を加えるような作業を行なった場合に、それらを一括してファイルアウトする仕組みは用意されていません。
こんなとき役に立つのが「チェンジセット」という機構です。チェンジセットは、その名の示すとおり、システムに加えられた主に複数の“改変”箇所を、あとで確認できるよう“ひとまとめ”に扱うために提供された機構です。あるいは、そうして改変箇所が登録されたデータベース(もちろんオブジェクト)の呼称としても用いられます。
じつは、Smalltalkシステムは、あらかじめ指定されたチェンジセット(変更箇所のデータベース)に、システムのどの部分、つまり、“どのクラスのどのメソッド”が変更されたのかという情報を自動的に記録し蓄積する仕組みを持ちます。チェンジセットに蓄積された変更箇所については、あとで該当するクラスやメソッドのソースを一括してファイルアウトすることが可能です。なお、チェンジセットは複数持つことができて、それぞれに名前を付けて適宜、切り換えて使うことができます。
▼チェンジファイルへのログ機構との違い
前回、取りあげた「チェンジファイル」へのログ機能と、今回の「チェンジセット」への変更箇所の登録機構は、名前も作業の内容も似ているように感じられますが、両者はまったく別物です。混同しないように注意してください。
すでにご紹介したとおり、チェンジファイルへのログ機能は、改変の“内容”を記録してゆくものです。これに対しチェンジセット機構は、改変された“箇所”だけを情報として記録します。
また、改変内容の記録先であるチェンジファイルは、Smalltalkシステムの“外界”にある単一のテキストファイル(ログ用のワークファイル)なのに対し、チェンジセットはSmalltalkシステムの中に複数存在するオブジェクトで、それぞれが小規模なデータベースのような振る舞いをする…という違いもあります。
▼チェンジソーター
システムに加えられた改変の登録先として指定されているチェンジセットと、その他のチェンジセット群やその内容を閲覧するためのツールが「チェンジソーター」です。デスクトップメニューの「開く…」(英語メニューでは「open...」)→「シンプル・チェンジ・ソーター」(同、simple change sorter)で起動できます。
[fig.A]チェンジソーター

まず、ウインドウタイトルにある「Changes go to "名無し1"」(英語では「Changes go to "New Changes"」)に注目してください。このタイトルには、二つのことが示されています。
ひとつは、このシステムに登録されているチェンジセット群の中で、ブラウズ中(選択されている)のは「名無し1」(あるいは「New Changes」)と名付けられたチェンジセットであること。そして、もうひとつは、このチェンジセットが改変箇所の記録先として指定されていること、です。
後者については「Changes go to」という部分に表わされています。ためしに左上のリストペインで別のチェンジセットをクリックして選択しなおしてみてください。「名無し1」チェンジセット以外では、タイトルは「ChangeSet: <<チェンジセット名>>」のように変化するのを確認できるしょう。
右手最上段のリストペインでは、選択したチェンジセットに登録された改変箇所をクラス名で一覧できます。このペインでクラスを選択すると、さらにそのクラス内で改変されたメソッドが(あれば)中央のリストペインに列挙されます(クラス情報の改変のみなら、中央のリストペインは空欄のまま最下段のペインにそのむねだけが表示されます)。
「名無し1」チェンジセットには、ちょうど第47回に終えたばかりの、日本語ファイルの扱いに関するファイルリスト不都合を修正するために加えた改変が登録されているはずです。
[fig.B]チェンジセットに登録された改変を確認する

チェンジセットが実際に保持している情報はこれ(改変されたクラスとメソッド群の名前)までです。しかし、クラスとメソッド名まで分かっていれば、そのソースコードを見たくなるのは人情ですし、メソッドもオブジェクトであるSmalltalkシステムにおいては、そのソースを“たぐる”ことは実にたやすいことです。したがって、チェンジソーターがシステムブラウザのような機能を持っていたとしても、何ら不思議なことではないでしょう。
実際、そのようになっていて、中段リストペインに列挙されたメソッド名をクリックして選択すれば、そのメソッドのソースを閲覧できます。もちろん、必要ならばこの場で編集(再コンパイル)も可能です。
[fig.C]システムブラウザ同様、ソースの閲覧や編集も可能

このページを編集 (4495 bytes)
 |
以下の 1 ページから参照されています。 |
This page has been visited 777 times.