メインコンテンツまでスキップ

検索と置換

ダイアグラム全体からテキストを検索し、ERD キャンバス上の各一致箇所へ移動して、一致箇所を 1 つだけ、またはすべてまとめて置換します。
検索するのは、テーブル名、テーブルのコメント、カラム名、カラムのコメント、メモ、インデックス名、テーブルグループの名前の 7 種類のテキストです。検索対象を参照してください。

検索と置換は、ERD キャンバスの左側にドッキングされたパネルであるエクスプローラーの上部にあり、エクスプローラーのタイトルバーとツリーの間に配置されます。検索と置換自体にはタイトルはありません。上から順に、次のものが並びます。

  • 検索フィールド。フィールドの中の末尾に 3 つのオプションがあり、フィールドの前に Toggle Replace の矢印があります。
  • Replace の行。最初は折りたたまれています。置換を参照してください。
  • 件数の表示、続いて一致箇所を順にたどる上向きと下向きの矢印、そして 3 つの点の Search In ボタン。
  • Search In で展開するテキストの種類。

検索フィールドにテキストがある間は、エクスプローラーのツリーに一致箇所が表示されます。検索結果を参照してください。
キャンバスの高さが足りない場合も検索と置換は高さを保ち、その下のツリーが残りの高さに収まってスクロールします。

⌘ + F でエクスプローラーの検索と置換を開き、member の 6 つの一致箇所を順にたどってから、Preserve Case をオンにして 6 つすべてを user に置換する(⌘ + Enter)様子

開き方と閉じ方​

Ctrl + F (Windows/Linux) または ⌘ + F (Mac)、およびクイック検索またはキャンバスのコンテキストメニューの Toggle Explorer は、エクスプローラーを検索の状態で開きます。検索フィールドにキャレットが移ってそのテキストが選択され、検索語であらためて検索されて、現在の一致箇所はない状態になります。
ツールバーの Explorer ボタンは、パネルを開閉するだけです。検索フィールドにキャレットを置くことはなく、検索語と現在の一致箇所もそのまま残ります。
クイック検索や、エクスプローラーの横のダイアログにある 5 つのダイアログのいずれかが開いている間のように、このキーがすでに表示されているエクスプローラーにキャレットを戻すだけの場合は、現在の一致箇所もそのまま保たれます。

エクスプローラーを閉じる方法、エクスプローラーが開いている間にこのキーと 2 つの Toggle Explorer の項目が何をするか、それらが閉じるダイアログについては、エクスプローラーのページの開き方と閉じ方を参照してください。
ほかのタブと Zen モードがエクスプローラーを隠すしくみと、Diff Viewer、Time Travel、自動レイアウトのプレビューがエクスプローラーを隠して開けなくするしくみについては、エクスプローラーが隠れるときを参照してください。エクスプローラーを表示するには幅が足りないエディタについては、キャンバスの横を参照してください。

開き直しても最後の検索語は残り、置換テキスト、オプション、オンにしていたテキストの種類、Replace の行とテキストの種類が展開されていたかどうかも保たれます。
これらはエディタが開いている間だけ保持され、ドキュメントには保存されません。新しく開いたエディタは、すべてのオプションがオフで、Replace の行とテキストの種類が折りたたまれ、4 種類の名前だけがオンの状態で始まります。検索対象を参照してください。

ブラウザの検索バー​

エディタがキーボードフォーカスを持っている間は、Ctrl + F (Windows/Linux) または ⌘ + F (Mac) はどのタブでも、エディタ自身のテキストフィールドの中でもエディタが受け取るため、ブラウザの検索バーは開きません。
Diff Viewer、Time Travel、自動レイアウトのプレビューのいずれかが開いている間と、フォーカスがエディタの外にある間は、このキーはブラウザまたはホストに渡されます。

  • Web アプリと Google Drive: ブラウザの検索バーが開くのは、この 2 つの場合だけです。
  • VS Code: 拡張機能は ERD Editor で VS Code 自身の検索ウィジェットをオフにしているため、そこでこのキーで検索ウィジェットが開くことはありません。
  • Obsidian: ダイアグラムのタブがアクティブな間は、Obsidian の Search current file の代わりに、このキーは常にエディタに届きます。
  • JetBrains IDE: IDE のキーマップが Ctrl + F (Windows/Linux) または ⌘ + F (Mac) を IDE 自身のために使う場合は、クイック検索またはキャンバスのコンテキストメニューの Toggle Explorer から検索を開くか、ツールバーの Explorer ボタンでエクスプローラーを開いて検索フィールドをクリックします。

エディタを組み込むページは、このキーを別のキーに移したり、取り除いたりできます。ショートカットの変更を参照してください。

検索対象​

7 つのボタンで、検索するテキストの種類を選びます。並び順は Table names、Table comments、Column names、Column comments、Memos、Index names、Table group names です。
これらのボタンは最初は折りたたまれています。件数の行の末尾にある Search In ボタンを押すと、その行の下にボタンが展開され、もう一度押すと折りたたまれます。ボタンが表示されている間、Search In はハイライトされます。
ハイライトされている種類のボタンがオンです。クリックするとオンとオフが切り替わり、検索し直します。7 つともオフにすると、何も見つかりません。

最初に開いたときは Table names、Column names、Index names、Table group names の 4 種類の名前がオンのため、コメントとメモをオンにしない限り、名前の変更がコメントやメモに及ぶことはありません。
インデックス名は、テーブルのプロパティの Indexes タブにあるインデックスの名前で、その上に一覧表示される PK_ と UQ_ のキーは含みません。

それ以外は検索しません。データ型、既定値、インデックスのカラム、データベース名、Before tables と After tables のスクリプトを含む Schema SQL、生成されたコードも対象外です。
テーブルの表示オプションで非表示になっているコメントも検索します。View Option → Memos で非表示にしたメモと、View Option → Table Groups で非表示にしたテーブルグループは、それぞれのボタンがオンでも検索しないため、Replace All が見えていないメモを書き換えたり、見えていないグループの名前を変更したりすることはありません。

オプション​

検索フィールドの中の末尾にある 3 つのトグルは、検索語の照合方法を変えます。名前はそれぞれのツールチップに表示され、オンの間はハイライトされます。3 つとも最初はオフで、切り替えると検索し直します。

  • Match Case: オフの場合、大文字と小文字を区別せずに照合します。
  • Match Whole Word: 前後のどちらにも単語が続いていない箇所だけを一致として数えます。あらゆる文字体系の文字、数字、結合文字は単語の文字として扱われ、アンダースコアも同様です。そのため user は user id と user.id では一致しますが、users、user_id、superuser の中では一致しません。.id の先頭のドットのように、それ自体が単語の文字ではない検索語の端には、境界は必要ありません。
  • Use Regular Expression: 検索語を JavaScript の正規表現として扱います。常に Unicode モードのため、\p{L} も使えます。複数行のコメントやメモでは、^ と $ は各行の先頭と末尾に一致し、. は改行をまたぎません。\_ や \- のように名前でよく入力されるエスケープも受け付けます。

user( のように解析できない正規表現では何も見つからず、件数の表示が赤字で Invalid regular expression となり、検索フィールドが赤い枠で囲まれます。
Match Case と Match Whole Word は正規表現にも適用されます。単独の ^ のような長さ 0 の一致は、一覧に表示されません。

通常のテキストは入力するたびに検索されます。正規表現は入力が止まったときに検索され、Enter、移動のボタン、Replace、Replace All を押したときや、一致箇所を含む行を選んだときにはすぐに検索されます。
検索には時間制限がないため、バックトラックの多い正規表現では、検索が終わるまでエディタが応答しなくなることがあります。

4 つ目のトグルである Preserve Case は Replace フィールドの中の末尾にあるため、Replace の行が展開されている間だけ表示されます。最初はオフです。見つかる内容は何も変えず、Replace と Replace All が置換後のテキストを書き込む方法だけを変えます。置換を参照してください。オンとオフを切り替えても検索はされず、現在の一致箇所もそのまま保たれます。

検索結果​

フィールドの下の行の先頭にある件数の表示は、現在の位置を示します。検索フィールドが空の間は何も表示されません。

件数表示される場合
No results何も一致しません。
12 matchesいずれかの一致箇所へ移動する前です。一致箇所が 1 つの場合は 1 match です。
3 of 123 番目の一致箇所が現在の一致箇所です。
Invalid regular expression正規表現を解析できません。
Replaced 12 matchesReplace All がその数の一致箇所を変更しました。1 つの場合は Replaced 1 match です。
No changesReplace All が何も変更しませんでした。
No more matches続けて押した Replace が、開始した位置に戻りました。置換を参照してください。

Replaced …、No changes、No more matches は、次の検索や移動で件数の表示に戻ります。編集や Undo によって始まる検索でも同じです。

検索フィールドにテキストがある間、エクスプローラーのツリーにはダイアグラム全体ではなく検索結果が表示されます。表示されるのは、一致箇所を含む行と、その上位の行だけです。何も一致しない場合や、正規表現を解析できない場合は空になります。検索語を削除すると、以前と同じ折りたたみの状態でツリー全体が戻ります。

  • Tables、Table Groups、Memos は一致箇所を含む場合にだけ表示され、各フォルダの件数は、検索結果の中でそのすぐ下にある行の数です。
  • Tables の下には、一致箇所を含むテーブルが名前順に並びます。各テーブルの下には、まずそのコメント内の一致箇所ごとに 1 行、次に一致箇所を含むカラムをカラム順に並べた Columns フォルダ、最後に名前が一致するインデックスを並べた Indexes フォルダが並び、各カラムの下には、そのコメント内の一致箇所ごとに 1 行が並びます。Foreign Keys フォルダはありません。
  • Table Groups の下には、名前が一致するグループが名前順に並び、そのテーブルは並びません。見つかったテーブルは Tables の下に表示されます。
  • Memos の下には、一致箇所を含むメモがドキュメントの順序で並びます。各メモは最初の行で表示され、その下にメモ内の一致箇所ごとに 1 行が並びます。

名前の中の一致箇所は、その名前自体の行でハイライトされるため、検索語を 2 回含む名前は、ハイライトが 2 つある 1 行になります。
コメントやメモの中の一致箇所には、それぞれ専用の行があります。テーブルやカラムのコメントには吹き出し、メモには付箋のアイコンが付き、その後に一致箇所をハイライトしたテキストの抜粋が続きます。長いテキストは … で省略され、改行は空白として表示されます。行にマウスを重ねると、テキスト全体が表示されます。
それ以外の行は、検索していないときと同じように表示されます。カラムにはデータ型、インデックスにはそのカラムが表示され、空の名前は unnamed と表示されます。

検索が始まると、下に行を持つすべての行が展開された状態で表示されます。自分で折りたたんだ行や Collapse All で折りたたまれた行は、その下の一致箇所が現在の一致箇所になるまで、または検索語、Match Case、Match Whole Word、Use Regular Expression、テキストの種類のいずれかが変わるか、このキーや Toggle Explorer の項目で検索をあらためて開くまで、折りたたまれたままです。
現在の一致箇所の行はハイライトされ、見える位置までスクロールされます。ツリーには、数にかかわらずすべての一致箇所が一覧表示されます。
一致箇所はツリーの順序でたどります。テーブルごとに、テーブル名、テーブルのコメント、各カラムの名前とコメントをカラム順に、続いてインデックス名をたどり、次にテーブルグループの名前、最後にメモをたどります。

エクスプローラーが表示されている間、検索結果はドキュメントに追従します。編集が止まると、検索対象のテキストが変わるたびに検索し直し、現在の一致箇所がまだあれば、それが引き続き現在の一致箇所になります。対象になるのは、名前、コメント、メモの本文の編集、テーブル、カラム、インデックス、メモ、テーブルグループの追加や削除、カラムの移動、そして View Option でメモやテーブルグループを非表示にしたり表示したりする操作で、この操作ではそれらの一致箇所がツリーから外れたり、ツリーに戻ったりします。キャンバスでの編集、Undo や Redo、ファイルの読み込み、共同編集者やコーディングエージェントによる編集のどれも対象になります。選択、キャンバス上でのテーブル、メモ、グループの移動、スクロール、拡大・縮小、マウスを重ねる操作では検索し直しません。
エクスプローラーが閉じている間や見えていない間に行われた編集は、エクスプローラーが再び表示されるとすぐに検索されます。

一致箇所への移動​

検索フィールドで Enter を押すと次の一致箇所へ、Shift + Enter を押すと前の一致箇所へ移動します。件数の後にある上向きと下向きの矢印ボタンも同じ動作で、ツールチップにはそれぞれ Previous Match (Shift+Enter) と Next Match (Enter) と表示され、一致箇所がない間は無効です。
移動は両端で折り返します。最初に移動するまで現在の一致箇所はないため、最初の Enter では最初の一致箇所へ、最初の Shift + Enter では最後の一致箇所へ移動します。

検索結果の行をクリックするか、キーボードでその行にいるときに Enter か Space を押すと、次のいずれかの動作をします。

  • 名前自体に一致箇所を含む行では、その名前の最初の一致箇所へ移動します。
  • コメントやメモの抜粋を表示する行では、その一致箇所へ移動します。
  • 名前が一致しないテーブルやメモ自体の行など、それ以外の行では、その行が表すものへ移動し、現在の一致箇所はそのまま残ります。行への移動を参照してください。
  • フォルダは折りたたまれるか、展開されます。

一致箇所が現在の一致箇所になるたびに、ツリーはその上位にある折りたたまれた行を展開してキーボードの行をそこへ移すため、ツリーでの矢印キーの操作はその行から続きます。

一致箇所へ移動すると、テーブルのプロパティが開いている場合はそれを閉じてから、次のように動作します。

  • テーブル名やテーブルのコメント、カラム名やカラムのコメントの場合は、そのテーブルだけを選択して最前面に移し、一致箇所を含むセルにフォーカスします。テーブルの表示オプションで非表示になっているコメントの一致箇所の場合は、代わりにその横の名前にフォーカスします。
  • インデックス名の場合は、そのインデックスのテーブルだけを選択して最前面に移し、フォーカスがすでにそのテーブルの中にある場合を除き、テーブル名にフォーカスします。インデックス名はキャンバスには描画されません。
  • テーブルグループの名前の場合は、そのグループだけを選択し、そのテーブルとともに最前面に移します。
  • メモの場合は、そのメモだけを選択して最前面に移します。

キャンバスがスクロールするのは、移動先がまだ十分に見えていない場合だけで、拡大・縮小のレベルは変わりません。移動先の表示位置を参照してください。

検索フィールドで Enter を押した後はキャレットがそこに残り、行を選んだ後はキーボード操作がツリーに残るため、続けて入力した内容が選択したテーブルに届くことはありません。
一致箇所へ移動しても、作成中のリレーションシップが始まったり確定したりすることはありません。

置換​

Replace の行は最初は折りたたまれています。検索フィールドの前にある、ツールチップに Toggle Replace と表示される矢印で、展開と折りたたみを切り替えます。折りたたんでも置換テキストは保たれます。
この行には、中の末尾に Preserve Case のトグルがある Replace フィールドと 2 つのボタンがあり、ボタンのツールチップにはそれぞれ Replace (Enter) と Replace All と表示されます。一致箇所がない間は、どちらのボタンも無効です。

Replace は、置換フィールドで Shift の有無にかかわらず Enter を押すか、そのボタンを押すと実行されます。

  • 現在の一致箇所がない場合、最初の 1 回は次の一致箇所へ移動するだけなので、何かが変わる前に、何が変わるかを確認できます。
  • 現在の一致箇所がある場合は、その 1 か所だけを置換して同じテキスト内のほかの出現箇所は残し、書き込んだテキストの後にある次の一致箇所へ進みます。書き込んだテキストは、検索語を含んでいても飛ばされます。user を super_user に置換しても、その後 super_user の中で止まることはありません。
  • 置換しても元とまったく同じテキストになる一致箇所はそのまま残され、その押下では次の一致箇所へ進むだけです。
  • 置換と次の一致箇所までのスクロールは、Undo の 1 ステップです。

Replace を続けて押すと、一巡して開始した位置に戻ったところで止まります。件数の表示は No more matches になり、現在の一致箇所はなくなって、さらに押しても何も置換されません。
そのため Customer を Big Customer に置換すると、置換は 1 回だけ行われ、Big Big Customer に膨らむことはありません。
一致箇所への移動、検索語、Match Case、Match Whole Word、Use Regular Expression、テキストの種類の変更、このキーや Toggle Explorer の項目で検索を開く操作、Replace All のいずれかを行うと、新しい一巡が始まります。Undo やその他の編集で、一巡を開始したテキストが変わった場合も同じです。置換テキストや Preserve Case を変えても新しい一巡は始まらず、このキーがすでに表示されているエクスプローラーにキャレットを戻すだけの場合も始まりません。
一巡が続いている間は、その一巡で名前を変更したテーブルやテーブルグループが、ツリーの中と一致箇所の順序の中で元の位置を保つため、名前の変更によって後ろに並ぶことになっても、その行にもう一度行き当たることはありません。次の一巡でツリーは名前順に戻り、名前を変更した行は新しい位置へ移ります。

Replace All は、置換フィールドで Ctrl + Enter (Windows/Linux) または ⌘ + Enter (Mac) を押すか、そのボタンを押すと実行されます。

  • オンになっている種類のテキストのすべての一致箇所を置換し、ほかの種類には手を付けません。既定の種類のままなら、テーブル、カラム、インデックス、テーブルグループの名前を変更し、コメントとメモは変更されません。
  • 変更したものはすべて Undo の 1 ステップになります。1 回の操作は 1 ステップを参照してください。
  • 件数の表示は Replaced N matches となり、実際にテキストが変わった出現箇所だけを数えます。正規表現 (user) を $1 に置換した場合のように、1 つも変わらなかった場合は No changes と表示され、履歴には何も記録されません。
  • その後、現在の一致箇所がない状態で検索し直されるため、新しいテキストに含まれる一致箇所が検索結果に表示されることがあります。

どちらも、最後の検索で見つかった時点のテキストではなく、押した時点のテキストを読み取ります。

置換テキストは次のように使われます。

  • Use Regular Expression がオフの場合、$ に特別な意味はなく、置換テキストは Preserve Case による大文字と小文字の調整を除いて、入力したとおりに使われます。
  • Use Regular Expression がオンの場合は、$1 から $99、$<name>、$&、$`、$'、$$ が JavaScript の String.prototype.replace と同じように展開されます。
  • Preserve Case がオフの場合、一致したテキストの大文字と小文字は引き継がれません。Match Case がオフのときに user を member に置換すると、Users は members になります。
  • Preserve Case がオンの場合は、$1 などを展開した後、各置換後のテキストの大文字と小文字を、置換されるテキストに合わせます。そのため同じ置換で、Users は Members になります。
    • すべて大文字の一致箇所では置換後のテキストがすべて大文字に、すべて小文字の一致箇所ではすべて小文字になります。USER を account に置換すると ACCOUNT に、user を Account に置換すると account になります。
    • それ以外の一致箇所では、置換後のテキストの最初の文字を一致箇所の最初の文字と同じく大文字または小文字にし、残りは入力したとおりにします。UserId を accountKey に置換すると AccountKey に、uSER を AccountKey に置換すると accountKey になります。一致箇所の最初の文字に大文字と小文字の区別がない場合、置換後のテキストは入力したとおりになります。_Ab を xyz に置換すると xyz になります。
    • 一致箇所と置換後のテキストが両方とも - を含むか、両方とも _ を含み、その区切り文字で同じ数の部分に分かれる場合は、各部分を対応する部分に合わせて大文字または小文字にします。USER_id を account_key に置換すると ACCOUNT_key に、User-Name を account-key に置換すると Account-Key になります。- と _ のどちらでもそのように分かれる場合は、全体を 1 つの部分として大文字または小文字を合わせます。
    • 123 のように、大文字と小文字の区別がある文字を含まない一致箇所では、置換後のテキストは入力したとおりになります。
    • 元のとおりに書き戻される一致箇所は、数に入りません。Match Case がオフのときに customer を Customer に置換すると、customer、Customer、CUSTOMER はどれも元のとおりに書き戻され、どれも数えられません。
  • 置換フィールドが空の場合は、一致箇所が削除されます。

置換は、新しいテーブル名、コメント、カラム名、メモの本文を自分で入力したり、テーブルのプロパティでインデックスの名前を変更したり、テーブルグループの名前を変更したりするのと同じ、通常の編集です。
ほかの編集と同じように履歴に記録され、共同編集者やコーディングエージェントにも届きます。

検索と置換のフィールド内のキー​

  • 検索フィールドでは、Enter で次の一致箇所へ、Shift + Enter で前の一致箇所へ移動します。
  • 置換フィールドでは、Shift の有無にかかわらず Enter で置換し、Ctrl + Enter (Windows/Linux) または ⌘ + Enter (Mac) ですべて置換します。
  • どちらのフィールドでも、IME の変換中は Enter を IME が受け取るため、移動も置換も行われません。

これらのフィールドで Escape、引き続き動作するエディタのショートカット、それ以外のキーが何をするかについては、エクスプローラー内のキーを参照してください。

読み取り専用のエディタ​

readonly のエディタでは、検索と置換は検索だけを行います。Toggle Replace の矢印も Replace の行もないため、置換フィールド、Preserve Case、Replace、Replace All もありません。
検索フィールド、その 3 つのオプション、テキストの種類、件数の表示、検索結果、一致箇所への移動はすべて動作します。周りのエクスプローラーは、ほかのエディタと同じように動作します。読み取り専用のエディタを参照してください。

VS Code では、Git のリビジョンや Local History のエントリーのようなダイアグラムのリビジョンは、JSON テキストとして開きます。Reopen Editor With... でダイアグラムとして開き直すと読み取り専用になり、検索はこの検索専用のものになります。

ショートカットの変更​

エディタを組み込むページは、setKeyBindingMap で findReplace という名前を使って、Ctrl + F (Windows/Linux) または ⌘ + F (Mac) を別のキーに割り当て直したり、取り除いたりできます。
取り除いた場合、このキーはどのタブでもページに任されます。ツールバーの Explorer ボタンは引き続きエクスプローラーを開閉し、クイック検索とキャンバスのコンテキストメニューの Toggle Explorer も引き続き検索を開くかエクスプローラーを閉じますが、どれもショートカットを表示しないため、ボタンのツールチップは Explorer とだけ表示されます。設定のショートカットタブにある Toggle Explorer の行にも、キーは表示されません。別のキーに割り当て直した場合は、どれも新しいキーを表示します。