このページはCalíope 1.7を紹介しています。私がいま作っているバージョンです。1.6は、Mac、iPad、iPhone、Apple Watch、Apple TV、Apple Vision Pro向けにApp Storeで公開中です。それぞれの機能がどのバージョンで入ったかは変更履歴に書いてあります。

すべてのトピックに「Calíopeで開く」ボタンを追加します。アプリがインストールされている場合にのみ機能します。

バックアップと復元

CSV、JSON、Excelからデータを読み込む

CSV、JSON、Excelファイルの表形式データをテーブルに直接読み込みます。

場所: スキーマツリー › 右クリック › データを読み込む…

Calíopeには、外部ファイルからデータを読み込むための3ステップのウィザードがあります。

開き方:
スキーマツリーのテーブル名を右クリック(macOS)または長押し(iPad)して、「データを読み込む…」を選びます。選んだデータベースとテーブルがあらかじめ設定された状態でウィザードが開きます。

ステップ1:ファイル
「ファイルを選択…」をクリックして、読み込むファイルを選びます。ウィザードが形式を自動的に判別します。64MBを超えるファイル(CSV、JSON、Excel)は、読み込む前に拒否されます。その場でウィザードがファイルのサイズと上限を表示します。それより多く読み込むには、ファイルを複数に分けてください。

対応する形式:
- CSV:カンマ区切り。引用符で囲んだフィールドは複数行にまたがることができ、引用符の中の改行は値の中に残ります。
- JSON:オブジェクトの配列[{…}, {…}]。
- Excel(.xlsx):Microsoft ExcelまたはNumbersのブックの最初のシート。

ステップ2:列
ウィザードにファイルの列が表示され、それぞれを読み込み先のテーブルの対応する列に割り当てるセレクタが付きます。割り当てていない列には「無視」と表示され、読み込まれません。ファイルに見出しの行がある場合は、「1行目を見出しとして扱う」をオンにします。

ステップ3:読み込み
読み込みのオプションを設定します。
- 「モード」:エンジンに複数のモードがあるときだけ表示されます。
- 挿入:行をそのまま挿入します。主キーがすでに存在する行は、サーバのメッセージとともに失敗します。
- 重複をスキップ:新しい行を挿入し、主キーがすでに存在する行は除外します。
- 重複を置き換える:主キーがすでに存在する場合、ファイルの行でテーブルの行を置き換えます。
- 「バッチあたりの行数」:1つのINSERT文で挿入する行の数です。100、500、1000から選べます。バッチが大きいほど速くなりますが、サーバのメモリーを多く使います。

MySQLMariaDBAurora

MySQLとMariaDBでは、3つのモードすべてを選べます。

TiDB

TiDBでも、3つのモードすべてを選べます。

PostgreSQL

PostgreSQLで選べるのは「挿入」と「重複をスキップ」だけです。重複した行に対してCalíopeがそこで書けるのは、行をスキップすることで、置き換えることではありません。そのため「重複を置き換える」は、起こらないことを約束してしまいます。

SQL ServerOracleClickHouse

SQL Server、Oracle、ClickHouseでは「挿入」しかできないため、セレクタは表示されません。重複した行は、サーバのメッセージとともに失敗します。

ログパネルに、進行状況と結果が1行ずつ表示されます。

macOS、iPad、iPhone、Apple Vision Proで使えます。

Apple Vision Pro:テーブルを見てピンチしたままにすると、メニューが開きます。

キーワード: 読み込む、CSV、JSON、XLSX、Excel、データの読み込み、ウィザード、列の割り当て、スプレッドシート、INSERT IGNORE、REPLACE、バッチ

バックアップを作成する

選んだデータベースとオブジェクトを、画面を止めずに.sqlまたは.sql.gzファイルに書き出します。

場所: ワークスペース › ツール › バックアップ

ワークスペースのナビゲーションバーからバックアップを開きます。バックアップタブで、左側のツリーを使って含めるデータベースとオブジェクトを選びます。オプションを設定し、保存先のファイルを選びます。「バックアップを作成」をクリックします。

バックグラウンドでの処理:
バックアップはすべてメインスレッドの外で実行されます。エンジンがデータをダンプしている間も、画面は普段どおり反応します。下のログパネルに、オブジェクトごとの進行状況がリアルタイムで表示されます。

推定残り時間(ETA):
最初のオブジェクトの処理が終わると、プログレスバーの横に推定時間のカウンタが表示されます。現在のダンプの速度から計算されます。

バックアップのキャンセル:
いつでも「キャンセル」をクリックできます。エンジンは実行中の操作が終わったところで停止し、途中まで書いたファイルをディスクから削除します。

macOS:「保存先…」で、保存パネルからファイルを選びます。完了したら、「Finderに表示」でファイルの場所を開けます。
iPad:完了すると「ファイルを共有」ボタンが表示され、ファイルをデバイスのストレージやiCloud Driveに書き出せます。

完了時の通知:
長いバックアップの最中にアプリを最小化したり切り替えたりした場合、完了したときや失敗したときに、Calíopeがローカル通知を送ります。通知のアクセス権が必要です(macOS:通知センター、iPad:「設定」›「通知」)。オンとオフは「設定」›「一般」›「通知」›「バックグラウンドでの手動バックアップ」で切り替えます。

ClickHouse

ClickHouseでは、ダンプには各オブジェクトのDDLがSHOW CREATEの書くとおりに入り、行は届いた順に読み込んだINSERT文として入ります。サーバが途中で失敗した場合は、途中で切れたテーブルを残すのではなく、バックアップが失敗します。TOのないマテリアライズドビューは、ダンプに含まれない内部テーブルに行を保持します。そのため、復元すると空の状態から始まり、そのCREATEの横のコメントに履歴を取り戻す方法が書かれています。ディクショナリは行を持たず、そのソースにパスワードがある場合、サーバはそれを伏せて返します。そのことはコメントで警告されます。UTF-8でないバイトは\xHHとして書かれます。

Oracle

Oracleでは、ダンプには各オブジェクトのDDLがDBMS_METADATAの書くとおりに、ストレージとスキーマ名を除いて入り、行はINSERT文として入ります。PL/SQLのブロックはどれも、単独の行の/で終わるので、SQL*PlusとSQLclでもファイルを実行できます。ダンプはスキーマを作成しません。先に必要なもの(クォータと権限を持つアカウント)はヘッダに書かれており、復元は実行するセッションのスキーマに対して行われます。16MiBを超えるLOBはダンプに収まらず、別のオブジェクト、コレクション、LOBを属性に持つオブジェクト型はテキストにできません。どちらの場合もNULLが書かれ、コメントでそのことが示されます。

Apple Vision Pro:iPadと同じく、「ファイルを共有」ボタンを使います。

キーワード: バックアップ、書き出す、mysqldump、SQL、ダンプ、バックグラウンド、ETA、キャンセル、進行状況、通知

バックアップするオブジェクトを選ぶ

含めるテーブル、ビュー、ルーチン、ユーザを選びます。

場所: バックアップ › 選択ツリー

左側のツリーには、各データベースとそのオブジェクトの種類(テーブル、ビュー、ルーチン、トリガー、そしてサーバにあればイベント)が表示されます。ツールを開いたときは、すべてが選択されています。「すべてを選択」と「すべての選択を解除」ですべてにチェックを付けたり外したりでき、クイックリンクの「すべて」、「テーブルのみ」、「スキーマのみ」でまとめて選べます(「スキーマのみ」は「データを含める」もオフにします)。項目ごとにチェックを付けたり外したりすることもできます。「サーバのユーザ」セクションでは、サーバのユーザアカウントとその権限をバックアップに含められます。

ツリーのヘッダには名前で絞り込むフィルタもあり、各テーブルの横に推定サイズが表示されます。データベースのチェックボックスで、その下のすべてを選択したり解除したりでき、右側には全体のうち選択しているオブジェクトの数が表示されます。「サーバのユーザ」セクションはツリーの中ではなく、その下にあります。ユーザはサーバに属し、どのデータベースにもぶら下がらないからです。ツールを開いた後に作成したデータベースは、ツリーのコンテキストメニューの「データベースリストを更新」で表示されます。

SQL Server

ツリーの各項目は、データベースとそのスキーマの1つの組み合わせです(demo.dbo、demo.rrhh)。バックアップには、データベース、スキーマ、そのオブジェクトが書かれます。

PostgreSQL

ツリーの各項目は、接続しているデータベースのスキーマです。バックアップには、スキーマ、それが使う拡張機能、そのオブジェクトが書かれます。拡張機能が持ち込むオブジェクト(たとえばPostGISの関数)は一覧に表示されません。復元するときに、ファイルが拡張機能をもう一度作成します。

Oracle

ツリーの各項目はスキーマです。パッケージはルーチンと一緒に扱われます。スキーマの型とシーケンスは選べません。常に含まれ、テーブルより先に書かれます。

TiDB

ツリーにはルーチン、トリガー、イベントがありません。TiDBにはないからです。シーケンスは選べません。常に含まれ、テーブルより先に書かれます。復元したシーケンスはSTARTからやり直します。TiDBは、どの番号まで進んだかを、1つ使わずには教えてくれないからです。AUTO_RANDOMのあるテーブルはIDを保持します。ファイルはそれを書くためにallow_auto_random_explicit_insertをオンにします。

キーワード: 選択、テーブル、ユーザ、ルーチン、トリガー、バックアップ、ビュー、イベント

SQLファイルから復元する

.sqlまたは.sql.gzファイルをサーバに対して実行し、データを復元します。

場所: バックアップ › 「復元」タブ

復元タブで、「ファイルを選択…」でファイルを選びます。「.sql」ファイルと「.sql.gz」ファイル(gzipで圧縮)のどちらも使えます。Calíopeは拡張子ではなくファイルのマジックナンバーで形式を判別するので、ファイル名を変えても結果は変わりません。

プレビュー:実行する前に「プレビュー」を押すと、最初の約200行を確認できます。ダンプを適用する前に、どのデータベースとSQL文が含まれているかを確かめるのに便利です。

事前の確認:「復元」を押すと、検出したSQL文の数と影響を受けるデータベース(それらを選択、作成、削除するSQL文から読み取ったもの)の概要が表示されます。スクリプトにDROP文が含まれている場合は、既存のオブジェクトが削除されることを概要が警告します。

SQL Server

ファイルはGOの行で区切られたバッチで送られ、復元はその行でだけ区切ります。本体の中に;があるプロシージャも、まとめて届きます。

PostgreSQL

ファイルは接続しているデータベースに復元され、そのスキーマがそこに作成されます。

Oracle

Oracleのダンプにはスキーマの名前が入っていません。タブで「復元先のスキーマ」を指定し、ファイルが作成するものはすべて選んだスキーマ(デフォルトはセッションのスキーマ)に入ります。ダンプはアカウントを作成しないので、スキーマは表領域のクォータ付きですでに存在している必要があります。各SQL文は実行したそばからコミットされます。途中で止まった場合、適用した分は残ります。複数のスキーマのダンプは、すべて選んだスキーマに入ります。

MySQLMariaDBAuroraTiDB

mysqldumpやmariadb-dumpのダンプは、コマンドラインのクライアントと同じように復元されます。実行可能コメント(/*!40101 … */)はサーバに届き、--hex-blobなしで生のままダンプされたバイナリの列も、バイト単位でそのまま届きます。

キャンセル:復元中に「キャンセル」を押すと、実行中のSQL文が終わったところで停止します。

エラー:復元は1つのセッションで実行され、最初のエラーで停止します。ログには、失敗したSQL文(オブジェクトとそのデータベース)がサーバのメッセージとともに示され、どのSQL文で止まったかが書かれます。

終わったとき:システムメッセージが残ります。完了した場合は実行したSQL文の数、停止した場合は止まったSQL文が書かれます。Calíopeが前面にないときは通知も届きます。オンとオフは「設定」›「一般」›「通知」›「バックグラウンドでの復元」で切り替えます。Calíopeが前面にあるときは、すでに画面で見えているので、通知は出ません。

macOS:ピッカーでは、Finderの標準のダイアログが開きます。
iPad:ピッカーでは、iCloud Driveと対応するアプリにアクセスできる、システムの書類ブラウザを使います。ピッカーを閉じた後でもファイルを読み直せるように、セキュリティスコープ付きのブックマークが作成されます。

接続が必要です:サーバに接続していない場合、ボタンは無効になります。オレンジ色の警告でその状態が示されます。

ClickHouse

ClickHouseでは、1回のリクエストで1つのSQL文を、トランザクションなしで送ります。途中で止まった場合、適用した分は残ります。ダンプが削除して作り直すデータベースの中にセッションがある状態でも復元できます。削除された後の処理はデータベースなしで実行され、ダンプは各オブジェクトをそのデータベース名付きで指定しているからです。

Apple Vision Pro:iPadと同じ、システムの書類ブラウザが開きます(「最近使った項目」、「共有」、iCloud Drive、「このApple Vision Pro内」)。

読み出し専用の環境タグが付いている場合、復元のフォームの代わりに、タグの名前を示す通知が表示されます。書き込みを確認するタグの場合は、復元の確認のタイトルにタグの名前が入り、質問はそれだけになります。

キーワード: 復元、読み込む、SQLファイル、sql.gz、gzip、圧縮、スクリプト、iCloud、ファイルピッカー、プレビュー、確認、キャンセル

バックアップのオプション

生成するバックアップファイルの内容、形式、圧縮を設定します。

場所: バックアップ › オプションのセクション

バックアップタブのオプションのセクションで、生成するファイルに含めるものを調整できます。

- 「CREATEの前にDROP」:各CREATE文の前にDROP TABLE IF EXISTS(またはDROP VIEW、DROP PROCEDUREなど)を追加します。既存のオブジェクトを上書きするきれいな復元に向いています。
- 「データを含める」:選んだ各テーブルのデータを持つINSERT文を追加します。オフにすると、スキーマだけ(データなしの構造)を生成します。
- 「ユーザのパスワードを含める」:サーバのユーザを含めるときに表示されます。明示的に選ぶもので、デフォルトはオフです。オフのときは、パスワード(またはそのハッシュ)が'***REDACTED***'として書かれます。オンにするのは、同じサーバにファイルを復元する予定があり、保存先のフォルダがiCloud Drive、Dropbox、その他のサービスで同期されていない場合だけにしてください。
- 「ファイル名に日付を含める」:ファイル名に日付と時刻を追加します。macOSでは、「保存先…」が提案する名前に追加されます(例:backup_2026-06-05_14-30.sql)。
- 「サーバのユーザを含める」:ツリーの下にある「サーバのユーザ」セクションのチェックボックスです。そこでチェックを付けたアカウントとその権限を、それらを作成するSQL文として書き出します。
- 「出力を圧縮(.sql.gz)」:生成しながらファイルにgzip圧縮をかけ、SQL全体をメモリーに保持しません。できあがるファイルは、同じ内容の.sqlファイルより通常70〜85%小さくなります。圧縮には、AppleのCompressionフレームワークをリアルタイムで使います。

サーバがセッションにアカウントの読み取りを許可しない(権限がない)場合、そのアカウントが中途半端に書かれることはありません。除外され、ファイルの末尾で書き込みのエラーとして名前が示されます。

MySQLMariaDBAurora

サーバのユーザはCREATE USERとGRANTとして書かれます。

SQL Server

サーバのユーザはログインです。それぞれCREATE LOGIN … WITH PASSWORD = … HASHEDとして書かれ、各データベースでのユーザ、ロール、権限も添えられます。「CREATEの前にDROP」は、ファイルが持ち込む各スキーマのすべてのオブジェクトも先に削除します。SQLログインのハッシュはCONTROL SERVERがないと見えません。ない場合、そのログインは除外され、末尾に名前が示されます。

PostgreSQL

サーバのユーザはロールです。それぞれCREATE ROLEとして書かれ、定義済みのpg_ロールは権限の付与だけが書かれます。どのサーバにもすでにあるからです。「CREATEの前にDROP」は、各スキーマを作り直す前にまるごと削除します(DROP SCHEMA … CASCADE)。パスワードのハッシュはpg_authidにあり、スーパーユーザしか読めません。読めない場合、各ロールはPASSWORDなしで書かれます。

macOS:「保存先…」で、標準の保存パネルからファイルを選びます。
iPad:完了すると「ファイルを共有」ボタンで、.sqlまたは.sql.gzを、システムのファイルピッカーが対応する任意の保存先に書き出せます。

Oracle

サーバのユーザはCREATE USERとGRANTとして書かれます。Oracleはアカウントのパスワードを、ハッシュでさえ返しません。そのため、復元したアカウントはパスワードなしで作成され、ファイルにそのことが書かれます。「CREATEの前にDROP」は各オブジェクトを作成する前に削除しますが、スキーマは削除しません。ダンプはスキーマを作成も削除もしないからです。

Apple Vision Pro:iPadと同じく、「ファイルを共有」ボタンを使います。

キーワード: バックアップのオプション、DROP IF EXISTS、データを含める、ユーザを含める、スキーマ、構造、データ、ファイル名の日付、CREATEの前にDROP、圧縮、gzip、sql.gz、圧縮形式

スケジュールされた自動バックアップ

定期的なバックアップ(毎日、毎週、平日、毎月、N時間ごと)を設定し、完了時にシステムの通知を受け取ります。

場所: ワークスペース › ツール › バックアップ

Calíopeは、手を動かさなくても自動的にバックアップを実行できます。設定するには、ワークスペースのサイドバーからバックアップパネルを開きます。

スケジュールされたバックアップの設定方法:
1. バックアップパネルのスケジュールタブで、「新規」をクリックします。
2. 名前を付け、接続プロファイル(または使用中の任意の接続)、頻度(毎日、毎週、月曜から金曜、毎月、N時間ごと、または必要なときだけ)、時刻、保存先のフォルダ、保持するコピーの数を選びます。
3. 行にあるスイッチでオンとオフを切り替えます。

スケジュールされたバックアップは、接続のすべてのデータベースを、「CREATEの前にDROP」とデータ付きで、圧縮せずにコピーします。一部のデータベースだけをバックアップするには、バックアップタブでプリセットを保存し、その鉛筆ボタンで頻度を設定します。

動作:
- 設定した時刻にアプリが開いていれば、バックアップは画面を止めずにバックグラウンドで実行されます。
- 実行中はアクティビティパネルに、処理中のテーブルとともに表示されます。「移動」でその接続のバックアップタブが開き、「停止」で停止して途中まで書いたファイルを削除します。
- 完了すると、ファイル名とそのサイズを示すシステムの通知が届きます。
- 予定の時刻にアプリが開いていなかった場合、バックアップは保留中になります。バナーで実行されなかった件数が示され、その行の「今すぐ実行」で実行できます。
- 設定したコピーの最大数を超えると、古いバックアップは自動的に削除されます。

保存先のフォルダの選択:
Calíopeは厳格なサンドボックスの中で動作します(App Storeの要件です)。「フォルダを選択…」でフォルダを選ぶと、そのパスに対する永続的なアクセス権が作成されます。後でフォルダを移動したり名前を変えたりすると、もう一度選ぶ必要があることをアプリが知らせます。プロファイルでパスを手で書き換えるだけでは足りません。必ず「フォルダを選択…」を使ってください。

パフォーマンス:
スケジュールされたバックアップは、手動のバックアップと同じストリーミングのエンジンを使います。データはオブジェクトごとにディスクに直接書かれ、SQL全体をメモリーにためることはありません。そのため、どんなサイズのデータベースでも、メモリーを使い果たしたりアプリが固まったりする心配なくバックアップできます。

スケジュールされたバックアップの削除:行のコンテキストメニューを開いて「削除」を選びます。iPadとiPhoneでは、行を左にスワイプすることもできます。すでに書かれたファイルはフォルダに残ります。

macOS、iPad、iPhone、Apple Vision Proで使えます。システムの通知のアクセス権が必要です。

キーワード: バックアップ、スケジュール、自動、毎日、毎週、通知、スケジューラ、予定、バックグラウンド、ストリーミング

設定をテンプレートとして保存する(手動のプリセット)

スケジュールを組まずに、バックアップのパラメータを再利用します。プリセットは必要なときにワンクリックで実行できます。

場所: バックアップ › 「スケジュール」タブ

自動バックアップ(毎日、毎週、平日、毎月、N時間ごと)に加えて、スケジュールタブには手動のテンプレートを置けます。名前を付けた設定で、行の「実行」ボタンを押したときだけ実行されます。

手動のテンプレートの作成方法:

1. バックアップタブで、バックアップするものを選び、「バックアップを作成」の横にある「プリセットとして保存…」を押します。プリセットには接続と、選んだオブジェクトを含むデータベース(データベース単位)が保存され、頻度「手動 — 必要なときに実行」としてスケジュールタブに登録されます。フォルダは引き継がれません。「保存先…」で選んだファイルには、後からそのフォルダに書き込むアクセス権がないからです。最初に実行する前に、鉛筆ボタン(「フォルダを選択…」)でフォルダを選んでください。オプションは、スケジュールされたほかのバックアップと同じで、「CREATEの前にDROP」とデータ付き、圧縮なしです。
2. または、「スケジュール」›「新規」で、頻度のピッカーから「スケジュールなし(必要なときに実行)」を選びます。

手動のプリセットの見た目の違い:

- 藍色のbolt.circle.fillアイコン(有効なスケジュール済みのものは緑のcalendar.badge.checkmark)。
- 行に「実行」ボタンが常に表示されます。
- 有効/無効の切り替えと「次回」はありません(該当しないため)。
- missedRunsはたまりません(自動のサイクルに参加しないため)。

自動バックアップで選べる頻度:

- 毎日:決まった時刻に。
- 毎週:決まった曜日に。
- 月〜金(平日):月曜から金曜まで。
- 毎月:月の決まった日(1〜28日)に。
- N時間ごと:前回の実行から数えて。
- 手動(必要なときに実行):自動のスケジュールなし。

実行履歴:各行のclock.arrow.circlepathボタン(「履歴を表示」)で、そのバックアップの実行(成功、失敗、キャンセル、スキップ)が表示されます。まだ実行がない場合は、そのことが表示されます。

キーワード: プリセット、テンプレート、手動、必要なときに実行、スケジュール、頻度、毎月、平日、N時間ごと、履歴、実行履歴