vieweditattachhistorytopchangessearchhelp

第49回


■SqueakではじめるSmalltalk入門   第49回


 本連載では、名前は知っていてもなかなか触れる機会のないSmalltalkについて、最近話題のSqueakシステムを使って紹介しています。今回は、手を加えたメソッドのバージョン履歴などを蓄積するのに使われる「チェンジファイル」を取りあげます。

▼バージョン管理の復習
 Smalltalkシステムでは、すでに定義済みのメソッドにブラウザ上で修正を加えてコンパイル(accept。cmd-S)すると、バージョン情報が更新され、あとからその履歴を「バージョンブラウザ」で一覧したり、任意のバージョンの内容を、ひとつ前のバージョンとの差分情報(追加は赤文字、削除は青字の取消線)と併せて閲覧できます。

[fig.A]バージョンブラウザの起動
Uploaded Image: 49a.png

[fig.B]バージョンブラウザ
Uploaded Image: 49b.png

 バージョン情報には、メソッドのソースコードの他に、改変を行なったユーザーのイニシャル(…に限らず、短めのニックネームなど。Utilities setAuthorInitialsで確認および変更可)と、いつ改変が行なわれたのかといった情報も含まれます。また、「revert」ボタンで、指定したバージョンに巻き戻すことも可能です。

 さて、このバージョン情報。いったい、どこにどのようにして管理されているのでしょうか。

▼システム改変のログ「チェンジファイル」
 Smalltalkシステムには、クラスやメソッドの新規、あるいは、再定義の際に、そのとき使われたソースコードおよび付随情報を自動的に記録していく機構があります。このチェンジ管理機構がシステム改変情報を書き出すのに使われるのが「チェンジファイル」(.changes)と呼ばれるテキストファイルです。すでにご存じのように、このチェンジファイルは、同名の仮想イメージファイル(.image)と常にペアで用いるよう定められているものです。

 オブジェクトメモリ(Smalltalkシステムでオブジェクトを管理したり機能させるための仮想デバイス)の内容をダンプした仮想イメージファイルと異なり、チェンジファイルは、少し大きめ(十数メガバイト程度)のファイルを開く能力を持つテキストエディタを使えば、その中身を容易に確認できます。チェンジファイルの最後のほうを見ると、見覚えのある作業が記録されているはずです。(なお、実際にテキストエディタで開いて見るときは、内容を書き換えて保存してしまわないように注意してください。)

 冒頭のメソッドのバージョン管理には、じつは、このシステム改変履歴から注目するメソッドに関連する情報を抜き出して再構成したものが使われています。

▼チェンジファイルのブラウザ(Recent changes)
 わざわざ“外の世界”のテキストエディタのようなソフトに頼らなくてもよいように、Smalltalkシステムの中からこのチェンジファイルの中身を閲覧する手段も、当然ですが、もちろん用意されています。

 デスクトップメニューの「変更…」(英語メニューではchanges...)を選んだときに現われるサブメニューから「最近記録された変更...」(英語メニューでは「recently logged changes...」)を選びます。項目の選択と同時にポップアップが現われますが、これには、システムの保存もしくは終了(Squeak VMの強制終了ではなくて、デスクトップメニューなどから終了操作による終了)操作の履歴が列挙されます。

[fig.C]システムの保存および終了の履歴のポップアップ
Uploaded Image: 49c.png

 ポップアップから適当な項目を選ぶと、対応するピリオド間(Squeakシステムが動作している間)に記録されたログが解析され、それらをリストにして上のリストペインに表示します。リストには、クラス、メソッドへのすべての改変と履歴に加えて、do it(あるいはprint it)されたコードなども含まれます。リストの項目をクリックすると、下のペインに詳細が表示されます。

[fig.D]Recent changesブラウザ
Uploaded Image: 49d.png

 なお、ごくまれにログ解析を失敗することもあるので、そうした事態に備え、「最近のログファイル...」(英語メニューでは「recent log file...」)というメニュー項目も用意されています。これは、ピリオドを選択するためのポップアップが現われるところまでは「最近記録された変更...」と同じですが、チェンジファイルの内容は解析されずに、生データ(ファイルアウトの形式)のままファイルリストに表示します。

▼Recent chagnesの活用 -- 強制終了時のリカバリ
 新しいクラスやメソッドをシステムに追加しながら開発を行なっているとき、それらの動作テスト中にシステムが異常終了してしまうことは、Smalltalkシステムでのプログラミングに限らずとも、よくあることです。言うまでもなく動作テストを行なう前には、仮想イメージを保存するか、すでに定義済みのクラスやメソッドをファイルアウトして不測の事態に備えておくべきです。が、必要なときに限って、うっかりして大切なバックアップを怠ってしまっていることも、これまた、よくあることです。

 そんなとき、逐次、チェンジファイルに自動的に蓄積されているクラスやメソッドの改変履歴は大いに役立ちます。万一、トラブルが発生してシステムの強制終了を余儀なくされても、それまでの作業のほとんどすべてを、Recent changesを使うことで取り戻すことができるからです(取り戻したい定義を選択して上のリストペインの黄ボタンメニューから「fileIn selections」)。なお、こうしたリカバリ作業をするときに目障りなdo itコードや古いバージョンの履歴は、あらかじめ作業履歴リストから排除可能です。

[fig.E]do itコードや古いバージョンのリストからの排除
Uploaded Image: 49e.png

このページを編集 (4650 bytes)


Congratulations! 以下の 1 ページから参照されています。

This page has been visited 767 times.