見落とされがちなXcode FileMergeアプリを使えば、2つのファイル間の変更点を簡単に見つけることができます。このツールを使って違いを見つける方法をご紹介します。
Apple ソフトウェアの開発者のほとんどは、Apple の統合開発環境 (IDE) Xcodeに精通しています。
しかし、Xcodeには見落とされがち なユーティリティ アプリケーションがいくつかバンドルされています。
これらは:
- アクセシビリティインスペクター
- MLを作成する
- ファイルマージ
- 楽器
- リアリティコンポーザープロ
Reality Composer Pro や Create ML など、これらのアプリのいくつかは新しいものですが、FileMergeというユーティリティは何十年も前から存在し、1990 年代初頭に Steve Jobs の別の会社 NeXT によって作成されたオリジナルの開発ツールである OpenStep の一部でした。
Apple は 1997 年に NeXT を買収し、そのソフトウェアとオペレーティング システム (NeXTStep) が現在の macOS、iOS、Xcode になりました。
Xcode のアプリケーション フォルダー内のアプリ。
実際、Xcode の FileMerge は、実質的に変更されていないオリジナルの NeXTStep から現在まで生き残っている数少ないアプリの 1 つです。
FileMerge はもともと、開発者がソース ファイルを比較およびマージするためのツールとして作成されましたが、ほとんどのプレーン テキスト (.txt) ファイルでも問題なく動作します。
NeXTStep のオリジナルの FileMerge アプリ。
FileMergeへのアクセス
FileMergeは、Xcodeアプリケーションバンドル内の「Contents」フォルダ内の「Applications」サブフォルダにあります。つまり、Xcodeバンドル内のFileMergeへのパスは以下のとおりです。
Xcode.app/Contents/Applications/FileMerge.app
FileMerge にアクセスするには 2 つの方法があります。Xcodeの[Xcode] -> [開発者ツールを開く] -> [FileMerge]メニューから選択して Xcode 内から実行するか、Finder で Xcode アプリ バンドル自体を開き、/Contents/Applications サブフォルダを開いて、FileMerge を Dock にドラッグしてショートカットを作成します。
Xcode のバンドルを開くには、Mac のキーボードでCommandキーを押しながら Finder の Xcode アイコンをCommandキーを押しながらクリックし、表示されるポップアップ メニューから [ パッケージの内容を表示]を選択します。
Finder で Xcode アプリ バンドルを開きます。
macOSでは、「パッケージ」と「バンドル」という用語はほぼ同義です。バンドルとは、Finderに実行コードが含まれていることを通知するための特別なビットが設定されたフォルダのことです。
MacのキーボードでCommand+Optionキーを押しながらXcodeのアプリケーションフォルダにあるFileMergeアプリのアイコンをクリックし、デスクトップにドラッグすることで、XcodeのアプリケーションフォルダからFinderのデスクトップにFileMergeアプリをドラッグすることもできます。これにより、デスクトップにFileMergeへのエイリアスショートカットが作成されます。
Xcode の「Open Developer Tool」メニューから FileMerge を開きます。
FinderのDockにあるXcodeアイコン自体をCommandキーを押しながらクリックし、ポップアップメニューから「開発ツールを開く」->「FileMerge」メニュー項目を選択すると、FileMergeが開きます。これは、Xcode内から直接開くのと同じ効果があります。
これらの方法はどれでも FileMerge を開くことができます。ただし、Xcode バンドル内からアプリ自体を削除しないでください。削除すると、Xcode アプリの整合性が損なわれる可能性があります。
Dock から FileMerge を開きます。
FileMergeの使用
FileMerge を開くと、インターフェースは驚くほどシンプルです。小さなウィンドウが 1 つ表示され、2 つの階層に分かれています。1 つは比較したい元のファイル(「左」)用、もう 1 つは新しいファイル(「右」)用です。新しいファイルは元のファイルと内容は同じですが、一部変更されています。差分を比較するには、どちらのファイルもプレーンテキストファイルである必要がありますが、FileMerge は他の種類のテキストファイルでも使用できる場合があります。
FileMerge はほとんどのエンコードされたテキストファイルを処理できないため、プレーンテキストファイルで使用することをお勧めします。エンコードされたファイルを FileMerge で比較しようとすると、「ファイルは ASCII ではありません」という警告が表示され、処理を続行するかどうかを尋ねられる可能性があります。
続行を選択すると、ファイルの比較が行われますが、通常は意味のないエンコードされた比較のみが表示されます。FileMerge はほとんどのファイルのデコード方法を知りません。
ASCIIは、 American Standard Code for Information Interchange(情報交換用米国標準コード)の略称で、ローマ字ベースの言語テキスト用の古代8ビットエンコード方式です。ASCIIはその後、アジア言語やアラビア語など、より大規模な文字セットや特殊文字を持つ言語のマルチバイト文字をサポートするため、16ビットテキストエンコード方式であるUnicodeに置き換えられました。
現在、Unicode はコンピューター上のテキスト エンコードの世界標準となっていますが、日常の使用では古い 8 ビットの ACSII ファイルに遭遇することがあります。
FileMerge UI は次のとおりです。
FileMerge のメイン ウィンドウ。
macOS標準の「開く」シートで「左」と「右」ボタンをクリックするか、Finderから2つのファイルをFileMergeウィンドウの右側にある左右の画像ウェルにドラッグすることもできます。どちらの方法でも同じ効果が得られます。
両方のファイルが FileMerge で設定されると、左ボタンと右ボタンの横にある 2 つの編集フィールドにディスク上のファイル パスが表示されます。
これでファイルを比較する準備が整いました。簡単な例を使って説明しましょう。
ファイルの比較
FileMergeインターフェースにファイルを設定したら、メインウィンドウの右下にある「 比較」ボタンをクリックします。FileMergeの比較が実行され、両方のファイルを含む新しい差分ウィンドウが開き、それぞれの変更点がハイライト表示されます。
差分ウィンドウには、元のファイルが左側に、変更された(新しい)ファイルが右側に表示されます。変更箇所は、変更されたファイル内のテキストの変更箇所に応じて色分けされた帯で示されます。
FileMerge の diff ウィンドウ。
ファイルのテキストをスクロールすると、FileMerge はテキストのどの部分が変更されたかをアニメーションで表示する、非常に巧妙な帯を表示します。大きな部分はゆっくりとスクロールするため、反対側のファイルが追いつくことができます。
新しいファイルにテキストブロックが挿入されている場合、ブロック全体がハイライト表示されますが、挿入ポイントはもう一方のファイルでも同じ色で表示され、挿入されたテキストを含む側から細い帯が伸びます。差分ウィンドウをスクロールすると、帯がスムーズに移動するので、変更内容を確認できます。
1 行の変更または数行のみの変更の場合、差分ウィンドウには、数行のみの高さの変更された行が同様のバンドで強調表示されます。
差分ウィンドウの中央には、2つのファイルのうちどちらに変更が加えられているかを示す矢印が並んだ列があります。矢印は左右両方向に伸びています。中央列の変更箇所を示す矢印がある変更帯をクリックすることで、テキストの変更箇所を個別に選択できます。
変更を選択するには、中央の列をクリックする必要があります。差分ウィンドウの左または右のペインにある変更帯をクリックしても何も起こりません。各変更矢印の上には、ファイルの先頭からの変更番号を示す番号が表示されます。
比較対象のファイルが標準的なプログラミング言語のソースコードファイルである場合、差分ウィンドウの左右のペインの上部にポップアップメニューが表示されます。各メニューにはファイル内のすべての関数名またはメソッド名が表示され、いずれかのメニューからメソッド名を選択すると、ファイル内のそのメソッドにジャンプします。
祖先とマージの使用
FileMerge ウィンドウの下部に、「祖先パスやマージ パスを指定するにはウィンドウを拡大してください」という小さな注意書きがあります。
FileMerge ウィンドウの下部をクリックして下にドラッグすると、追加のインターフェイスが表示されます。
祖先/マージ ペインの使用。
このUIでは、3者間マージのために3つ目のファイルを追加できます。祖先/マージUIを非表示にするには、FileMergeウィンドウの下部をクリックしてドラッグ&ドロップで上に戻します。
変更のマージ
差分ウィンドウが開き、FileMerge が変更バンドを使用して 2 つのファイルの違いを表示したら、各変更をどのように処理するかを選択できます。各変更を無視するか、新しいテキストを反対のファイルにコピーするか (マージ)、特定の変更を削除するかを選択できます。
これらのアクションは、差分ウィンドウの右下隅にある [ アクション]ポップアップ メニューを使用して実行します。
メニューで選択できるオプションは次のとおりです。
- 左を選択
- 正しい選択を
- 両方選択(左から)
- 両方選択してください(右から)
- どちらも選択しない
最初の2つのオプションのいずれかを選択した場合、変更は左側または右側のファイルに適用されます。これらのオプションのいずれかを選択すると、変更が適用されるファイルが決まります。
どちらかの「両方を選択」オプションを選択した場合、左側のファイルまたは右側のファイルのいずれかの変更内容に基づいて、両方のファイルに変更が追加されます。
[どちらも選択しない]を選択した場合、その変更の矢印が中央の列から削除され、変更が無視されることが示されます。
ポップアップ メニューからどのアクションを選択しても、変更は行われ、差分ウィンドウの中央の列にある矢印が更新されて新しい状況が反映されます。
また、 UI には 「変更」ボタンがないことに注意してください。ポップアップ メニューからアクションを選択すると、それ以上の警告やユーザー操作なしに即座に変更が行われます。
変更をディスクに保存
「アクション」メニューを使用して差分ウィンドウですべての変更を行った後も、変更を保存するにはディスクに保存する必要があります。
通常のテキストエディタとは異なり、FileMerge では「ファイル」メニューから「ファイル」→「マージを保存」を選択しても、元のファイルへの変更内容は自動的に保存されません。これは、後で元のファイルをそのまま使用したい場合に備えて、元のファイルをそのまま保存するためです。
代わりに、 「ファイル」→「マージを保存」を選択すると、常に標準の保存パネルが表示され、そこで何をするか選択できます。元のファイルと同じ場所で「保存」ボタンをクリックすると、元のファイルを置き換えるかどうかを確認するメッセージが表示されます。 「置き換え」をクリックすると、元のファイルが上書きされます。
または、元のファイルを同じ名前で別の場所に保存する場合は、その場所に移動して [保存]ボタンをクリックするか、ファイルの名前を別の名前に変更して元のファイルと同じ場所に保存します (選択した名前で新しいファイルが作成されます)。
「ファイル」->「名前を付けて保存」は実質的に「保存」と同じですが、新しいファイルが作成されるようにファイルに新しい名前を付ける必要があります。
差分ウィンドウの「アクション」メニューを使って変更を加えた後、ウィンドウを閉じたりFileMergeを終了しようとすると、マージを保存するように求められます。保存せずに差分ウィンドウを閉じようとすると、保存するかどうかを尋ねる警告が表示されます。
アラートからキャンセルするか、変更を破棄する「 保存しない」をクリックすることができます。
アラート内の[保存]ボタンをクリックすると、 [ファイル]メニューから[ファイル] -> [マージを保存] を選択した場合と同じです。
いずれにせよ、マージを保存すると、結果のファイルには差分ウィンドウで行ったすべての変更が含まれます。元のファイルを明示的に上書きしなかった場合は、変更されません。
ディレクトリ比較
FileMerge を使えば、ファイルを含む2つのフォルダ(ディレクトリ)を比較することもできます。これを行うには、上記のテクニックを使用しますが、左/右インターフェースで2つのファイルではなく2つのフォルダを選択します。
FileMerge における基本的なフォルダー比較機能は、ファイル セットをチェックして、それらが同一であるかどうか、いずれかのフォルダー内のファイルが変更されているかどうか、またはいずれかのフォルダーにファイルが追加されたか、またはいずれかのフォルダーからファイルが削除されたかどうかを確認することです。
2 つのファイル フォルダーで [比較]ボタンをクリックすると、FileMerge は両方のセットを調べ、両方のフォルダーに含まれるすべてのファイルを比較します。
表示されるフォルダー比較ウィンドウには、各フォルダー内のファイル セット間の違いが表示されます。
ディレクトリ比較結果ウィンドウ。
両方のフォルダに同じ名前のファイルが2つ含まれている場合、それらのファイル名は左側にグレー表示されます。一方のフォルダにのみ存在するファイルがある場合、そのファイル名は斜体で表示されます。
左側のペインで任意のファイル名を 1 回クリックすると、ペインの左下隅にそのファイルのステータスが表示されます。
「除外」という名前の右側のペインで、除外するフォルダー変更オプションを設定できます。
その下には2つのポップアップメニューがあります。最初のメニューには、ファイルの表示と比較に関する項目が含まれています。このメニューから項目を選択すると、差分ウィンドウの「アクション」メニューと同様のアクションが実行されます。
もう1つのポップアップメニュー「結合」には、比較対象の2つのフォルダ間でファイルを移動または結合するためのオプションがあります。ファイルの結合、左側または右側のファイルのみの使用、ファイル全体の削除、比較できなかったファイルのリストからの削除が可能です。
表示項目と結合項目は混乱を招く可能性があり、クリックされていないときにはメニュー ラベルが表示されるため、Apple のヒューマン インターフェイス ガイドラインに違反しています。どちらかをクリックすると、どちらのメニューからも「表示」または「結合」というタイトルが消え、マウスを放すと再び表示されます。
マージ メニューは慎重に使用してください。
「結合」メニューを使用すると、ウィンドウの左下隅にある小さなステータスメッセージが更新され、変更内容が反映されます。このウィンドウは主に、比較対象の2つのフォルダ間でファイルを結合または移動するためのものであることをご留意ください。
FileMergeでの検索、再比較、リセット
FileMerge でファイル比較を実行すると、前述のようにスクロールして差分ウィンドウで差分を表示したり、画面上部の FileMerge メニュー バーの [ 検索]メニューを使用したりすることができます。
FileMerge で検索できる項目は次のとおりです:
- 次へ進む
- 前へ
- 行/差異へ移動
- 探す
- 次を検索
- 前を検索
- 検索に選択範囲を使用する
- 選択範囲へジャンプ
「次/前」オプションを使用すると、次または前の差異、差分ウィンドウの左側または右側の変更、あるいは次の競合に移動できます。競合とは、ほぼ同一のテキストブロックが2つあり、両方に変更が含まれているため、正確な比較が不可能な状態を指します。
競合は手動で解決する必要があります。
差分ウィンドウでテキストを選択し、「検索」->「選択範囲を検索に使用」を選択すると、FileMerge は検索ウィンドウを開きますが、選択したテキストが「検索」検索フィールドに自動的に挿入されます。
比較が終了したら、差分ウィンドウを閉じて「ファイル」->「ファイルの比較」を選択すると、FileMerge を元の状態にリセットできます。これにより、メインの FileMerge ウィンドウが再度開きますが、最後に選択したファイル パスはそのまま残ります。
「ファイル」->「ファイルの再比較」を選択すると、前回の比較を再度実行できます。これは、ファイルに外部編集を加えて保存し、変更後に再比較したい場合に便利です。
ファイルマージ設定
Mac 画面上部の FileMerge メニュー バーから FileMerge -> Settingsを選択すると、FileMerge の環境設定ウィンドウが表示され、FileMerge の動作に関するさまざまな設定を行うことができます。
- テキストを折り返す
- 変更番号を表示
- 合流方向を表示
- スクロールバーに変更を表示
- 相違点を強調する
- フォント
- ディレクトリ比較オプション
- 比較のためのフィルター
- 無視するファイル
FileMerge の設定で変更を保存するには、変更を加えてウィンドウを閉じるだけです。
FileMerge 設定ウィンドウ。
FileMerge は数十年にわたり macOS 開発ツールの主力として活躍してきましたが、その使い勝手の良さから、一度使い方を理解すれば毎日使うようになるでしょう。そのインターフェースは、ソフトウェアが小さく、シンプルで、高速で、使いやすかった時代を彷彿とさせます。
これは長い間 macOS に潜んでいた隠れた逸品です。ファイルを比較するそのシンプルなパワーを一度知ってしまえば、今までどうやってこれなしでやってきたのか不思議に思うでしょう。