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

検索と置換

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

検索と置換は ERD キャンバスの左上隅、ツールバーの下に重なるパネルで、Zen モードではキャンバスの上端に表示されます。ヘッダーには Find and Replace と表示され、readonly のエディタでは Find と表示されます。読み取り専用のエディタを参照してください。
キャンバスの高さが足りない場合は、まず結果の一覧が高さを譲るため、フィールド、オプション、件数の表示が欠けることはありません。

⌘ + F で検索と置換を開き、Enter と Next ボタンで member の 4 つの一致箇所を順にたどり、Replace All (⌘ + Enter) で 4 つすべての member を user に置換する様子

開き方と閉じ方​

Ctrl + F (Windows/Linux) または ⌘ + F (Mac) で開くか、次のいずれかで開きます。

  • ツールバーで Search のすぐ隣にある、テキスト検索のアイコンのボタン。ツールチップには Find and Replace (Ctrl + F) (Windows/Linux) または Find and Replace (⌘ + F) (Mac) と表示されます。
  • クイック検索の Find and Replace。どのタブでも一覧に表示され、find、replace、rename と入力すると見つかります。
  • キャンバスのコンテキストメニューの Find and Replace。ERD キャンバスの空いている場所を右クリックすると表示されます。New Table と New Memo の後、Relationship の前にあります。

クイック検索とコンテキストメニューの項目は、右側にショートカットを表示します。

ショートカットとツールバーのボタンは、どのタブからでも使えます。一致箇所は ERD タブで表示、編集されるため、Visualization、Schema SQL、Code Generator、設定の各タブから開くと、まず ERD タブに切り替わります。
クイック検索が開いている間にショートカットを押すと、パレットが閉じてパネルが開きます。テーブルのセルやメモを編集している間は、ショートカットは何もしません。
パネルを開くと、テーブルのプロパティとテーマビルダーが閉じます。

パネルが表示されている間は、ショートカット、ツールバーのボタン、2 つの項目でパネルが閉じることはありません。これらは検索フィールドにキャレットを戻してそのテキストを選択し、現在の一致箇所もそのまま保たれます。

テーブルのプロパティやテーマビルダーを開くと、開いているパネルは閉じずに隠れます。ほかのタブに切り替えた場合も同じです。ダイアログが閉じるか ERD タブに戻ると、パネルは離れたときの状態で再び表示されます。
ショートカット、ツールバーのボタン、2 つの項目でも隠れたパネルは再び表示されますが、この場合は検索語であらためて検索され、現在の一致箇所はない状態になります。
Diff Viewer、Time Travel、自動レイアウトのプレビューのいずれかが開いている間は、パネルを開けません。ツールバーのボタンは淡色表示になって何もせず、クイック検索には Find and Replace が表示されず、ショートカットはブラウザまたはホストに渡されます。ブラウザの検索バーを参照してください。すでに開いていたパネルは、それらが閉じるまで隠れます。

Escape、またはヘッダーの x ボタンで閉じます。このボタンのツールチップには Close (ESC) と表示されます。閉じると、キーボード操作はエディタに戻ります。

  • パネル内で Escape を押すと、パネルが閉じて選択はそのまま残るため、最後に移動した一致箇所のテーブルやメモは選択されたままです。
  • キャンバスで Escape を押してもパネルは閉じ、同じ 1 回の押下で、パネルが開いていないときと同じように選択とフォーカスしているセルも解除されます。ショートカットを参照してください。
  • 開いているセルやメモの編集、作成中のリレーションシップ、開いているクイック検索がある場合は、そちらが先にキーを受け取り、パネルは開いたままです。

開き直すと、最後の検索語が選択された状態で残ってあらためて検索され、置換テキスト、オプション、オンにしていたテキストの種類も保たれます。
これらはエディタが開いている間だけ保持され、ドキュメントには保存されません。新しく読み込まれたエディタは、すべてのオプションがオフで、Table names と Column names だけがオンの状態で始まります。

ブラウザの検索バー​

エディタがキーボードフォーカスを持っている間は、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 自身のために使う場合は、ツールバーのボタン、クイック検索、キャンバスのコンテキストメニューからパネルを開きます。

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

検索対象​

フィールドの下にある 5 つのボタンで、検索するテキストの種類を選びます。並び順は Table names、Table comments、Column names、Column comments、Memos です。
ハイライトされているボタンがオンです。クリックするとオンとオフが切り替わり、パネルが検索し直します。5 つともオフにすると、何も見つかりません。

パネルを最初に開いたときは Table names と Column names だけがオンのため、コメントとメモをオンにしない限り、名前の変更がコメントやメモに及ぶことはありません。

それ以外は検索しません。データ型、既定値、インデックス名、データベース名、Schema SQL や生成されたコードも対象外です。
テーブルの表示オプションで非表示になっているコメントも検索します。

オプション​

検索フィールドの右にある 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 を押したときや、行をクリックしたときにはすぐに検索されます。
検索には時間制限がないため、バックトラックの多い正規表現では、検索が終わるまでエディタが応答しなくなることがあります。

検索結果​

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

件数表示される場合
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 が、開始した位置に戻りました。置換を参照してください。

その下の一覧には出現箇所ごとに 1 行が表示されるため、検索語を 2 回含むテキストは 2 行になります。
行はキャンバスではなくドキュメントの順序に従います。テーブルごとに、テーブル名、テーブルのコメント、続いて各カラムの名前とコメントがカラム順に並び、メモは最後になります。

各行には次の内容が表示されます。

  • テキストの種類を示すアイコン。テーブル名はテーブル、カラム名はカラム、テーブルやカラムのコメントは吹き出し、メモは付箋のアイコンです。
  • 一致箇所をハイライトしたテキストの抜粋。長いテキストは … で省略され、改行は空白として表示されます。行にマウスを重ねると、テキスト全体が表示されます。
  • orders.user_id · Column、users · Table comment、または単に Memo のような、一致箇所の場所とその種類。名前が空のテーブルやカラムは unnamed と表示されます。

現在の一致箇所の行はハイライトされ、見える位置までスクロールされます。
一致箇所が 200 を超える場合、一覧は現在の一致箇所の前後 200 行を描画し、Showing 1–200 of 523 のように表示している範囲を示します。一致箇所を移動すると、この範囲も移動します。

パネルが開いている間、一覧はドキュメントに追従します。キャンバスでの編集、Undo や Redo、ファイルの読み込み、共同編集の参加者やコーディングエージェントによる編集など、検索対象のテキストが変わると検索し直し、現在の一致箇所がまだあれば、それが引き続き現在の一致箇所になります。選択、スクロール、マウスを重ねる操作では検索し直しません。
パネルが隠れている間に行われた編集は、パネルが再び表示されるとすぐに検索されます。

一致箇所への移動​

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

一致箇所へ移動すると、必要に応じて ERD タブに切り替わり、次のように動作します。

  • テーブル名やテーブルのコメント、カラム名やカラムのコメントの場合は、そのテーブルだけを選択して最前面に移し、一致箇所を含むセルにフォーカスします。テーブルの表示オプションで非表示になっているコメントの一致箇所の場合は、代わりにその横の名前にフォーカスします。
  • メモの場合は、そのメモだけを選択して最前面に移します。

キャンバスがスクロールするのは、テーブル、カラムの行、メモがパネルの横にまだ完全には表示されていない場合だけで、そのときはパネルが覆っていないキャンバスの部分の中央に表示します。パネルの横に余地が残らないほどキャンバスの幅が狭い場合は、代わりにキャンバス全体の中央に表示します。
画面より高いテーブルはヘッダーまで、長いコメントのように画面より幅の広いセルは一致したテキストまでスクロールします。テーブルが名前だけの表示に折りたたまれる 70% 以下の拡大・縮小のレベルでは、カラムの一致箇所はそのテーブルを表示します。
このスクロールは、ほかの表示位置の変更と同じように Undo の履歴に記録されます。

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

置換​

検索フィールドの下の行には Replace フィールドと 2 つのボタンがあり、ボタンのツールチップにはそれぞれ Replace (Enter) と Replace All と表示されます。一致箇所がない間は、どちらのボタンも無効です。

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

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

Replace を続けて押すと、一巡して開始した位置に戻ったところで止まります。件数の表示は No more matches になり、現在の一致箇所はなくなって、さらに押しても何も置換されません。
そのため Customer を Big Customer に置換すると、置換は 1 回だけ行われ、Big Big Customer に膨らむことはありません。
一致箇所への移動、検索語、オプション、テキストの種類の変更、パネルの開き直し、Replace All のいずれかを行うと、新しい一巡が始まります。Undo やその他の編集で、一巡を開始したテキストが変わった場合も同じです。置換テキストを変えても、新しい一巡は始まりません。

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

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

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

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

  • Use Regular Expression がオフの場合は、入力したとおりに挿入されます。$ に特別な意味はなく、一致したテキストの大文字と小文字も引き継がれません。Match Case がオフのときに user を member に置換すると、Users は members になります。
  • Use Regular Expression がオンの場合は、$1 から $99、$<name>、$&、$`、$'、$$ が JavaScript の String.prototype.replace と同じように展開されます。
  • 置換フィールドが空の場合は、一致箇所が削除されます。

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

パネル内のキー​

キャレットがパネル内にある間は、次のようになります。

  • 検索フィールドでは Enter と Shift + Enter で一致箇所を移動し、置換フィールドでは Enter と Ctrl + Enter (Windows/Linux) または ⌘ + Enter (Mac) で置換し、Escape でパネルを閉じます。
  • いくつかのエディタのショートカットは引き続き動作します。Ctrl + F (Windows/Linux) または ⌘ + F (Mac) は検索フィールドにキャレットを戻してそのテキストを選択し、Ctrl + K (Windows/Linux) または ⌘ + K (Mac) はクイック検索を開閉し、Undo と Redo はフィールドのテキストではなくダイアグラムを Undo、Redo し、Zoom In、Zoom Out、Zoom Reset はキャンバスを拡大・縮小します。ショートカットを参照してください。
  • それ以外のエディタのショートカット、矢印キー、Tab はパネルの中にとどまり、通常のテキストフィールドのキーとして動作します。Ctrl + A (Windows/Linux) または ⌘ + A (Mac) はフィールドのテキストを選択し、Space は空白を入力し、Tab はパネル内のコントロールの間でフォーカスを移動します。
  • ホスト自身の保存のように、エディタが割り当てていないキーは、通常どおりホストに届きます。

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

readonly のエディタでは、パネルは検索だけを行います。ヘッダーには Find と表示され、置換フィールドとそのボタンはありません。
検索、オプション、テキストの種類、一覧、一致箇所への移動はすべて動作します。
ツールバーのボタンのツールチップは Find (Ctrl + F) (Windows/Linux) または Find (⌘ + F) (Mac) と表示されますが、クイック検索とコンテキストメニューの項目は Find and Replace という名前のままです。

git のリビジョンやマージのプレビューのように、VS Code が読み取り専用で開くダイアグラムでは、この検索専用のパネルになります。

#、@、: のプレフィックスでは、クイック検索は最大 100 行を一覧表示します。
この上限によって、キーワードそのものを含むテキストが除外された場合は、その 100 行の後にもう 1 行、Show all N matches in Find and Replace または Show 1 match in Find and Replace が続きます。この行は、同じ検索でこのパネルを開きます。

  • キーワードが検索語になり、Match Case、Match Whole Word、Use Regular Expression はオフになります。
  • そのプレフィックスが対象とする種類のテキストだけがオンになります。# では Table names、@ では Column names、: では Table comments、Column comments、Memos です。
  • @table.column はカラムの部分だけを渡すため、パネルにはすべてのテーブルの一致するカラムが一覧表示されます。
  • N は、パネルを開いたときの一致箇所の数です。

Diff Viewer、Time Travel、自動レイアウトのプレビューのいずれかが開いている間は、この行は表示されません。
この行が設定したオプションとテキストの種類は、その後に開いたときもそのまま残るため、# の後は、ほかの種類をオンに戻すまで Table names だけがオンです。

ショートカットの変更​

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