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

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

接続

接続プロファイルを作成

サーバの情報を保存して、すばやく接続します。

場所: サイドバー › 「+」ボタン(新しい接続)

接続マネージャで、左側のサイドバーにある「+」をタップします。わかりやすい名前、サーバのファミリー(サーバが話すプロトコル)とその中の製品を入力し、続けてホスト、ポート、ユーザ、パスワードを入力します。「デフォルトのデータベース」フィールドは省略可能です。

「環境」の行では、プロファイルに環境タグを1つ設定できます(デフォルトは「なし」)。「環境タグ…」を選ぶと、タグを作成するカタログが開きます。

「サーバオプション」セクションでは、文字セットと照合順序を設定し、SSL/TLSを有効にできます。SSLを有効にすると、クライアント証明書と鍵を選ぶフィールドが表示されます。

ClickHouse

ClickHouseでは、このセクションに文字セットと照合順序、クライアント証明書と鍵はありません。SSL/TLSにチェックを入れると、ポートがデフォルトのままなら8123から8443に変わり、チェックを外すと元に戻ります。

Oracle

Oracle Databaseでは、データベースのフィールドは「サービス」という名前になり、SIDではなくサービス名(SERVICE_NAME。無償版ではFREEPDB1)を入力します。このセクションには文字セットと照合順序、クライアント証明書と鍵はありません。SSL/TLSにチェックを入れると、ポートがデフォルトのままなら1521から2484に変わり、チェックを外すと元に戻ります。

MySQLMariaDBAurora

サインインの方法。Calíopeは、MySQLとMariaDBの5つの方式に対応しています。caching_sha2_password(MySQL 8以降のデフォルト)、mysql_native_password、MariaDBのclient_ed25519とparsec、そしてmysql_clear_passwordです。最後の方式はパスワードを平文で送るため、SSL/TLSがオンのときだけ使われます。オフのときは、Calíopeはパスワードを送らず、その旨を表示します。PAM、LDAP、Aurora IAM認証が求めるのはこの方式です。方式を決めるのはサーバ上のアカウントで、プロファイルではありません。

TiDB

TiDBでは、アカウントはデフォルトのmysql_native_passwordかcaching_sha2_passwordでサインインし、どちらも5つの方式に含まれます。tidb_sm3_passwordやauth_socketのアカウントはCalíopeからサインインできず、エラーにその方式の名前が表示されます。

PostgreSQL

サインインの方法。Calíopeは、パスワードを使うPostgreSQLの3つの方式に対応しています。SCRAM-SHA-256(PostgreSQL 14以降のデフォルト)、md5、そして平文のパスワード(pg_hba.confのpassword)です。平文のパスワードはSSL/TLSがオンのときだけ送られます。オフのときは、Calíopeはパスワードを送らず、その旨を表示します。LDAP、PAM、RADIUS、RDSとAuroraのIAM認証が求めるのはこの方式です。Kerberos(GSSAPI)とSSPIには対応していません。それらの方式しか許可しないサーバでは、Calíopeがその方式を使えないことを示して接続が失敗します。

CassandraScyllaDB

Apache CassandraとScyllaDBでは、ユーザは省略可能で(サーバが認証を求めない場合は空のまま)、ポートは9042、データベースのフィールドは「キースペース」という名前になります。これも省略可能で、指定しない場合はUSEなしでセッションが始まります。

キーワード: プロファイル、新しい接続、サーバを保存、ホスト、設定、認証、caching_sha2_password、mysql_native_password、ed25519、PARSEC、mysql_clear_password、SCRAM-SHA-256、md5、PAM、LDAP、IAM

既存の接続を編集

保存したプロファイルの情報を変更します。

場所: サイドバー › プロファイルリスト

サイドバーのリストでプロファイルを選択します。右側のフォームに現在の情報が読み込まれ、どのフィールドもそのまま編集できます。保存ボタンはありません。変更は入力したそばから保存されます。

プロファイルの削除には専用の項目があります。取り消すことができず、思ったより多くのものが一緒に消えるからです。「接続を削除」を参照してください。

キーワード: プロファイルを編集、接続を変更、プロファイルを削除

接続を削除

プロファイルを削除できる3つの場所、一緒に消えるもの、そして取り消せない理由。

場所: サイドバー › 「−」ボタン(接続を削除)

接続を削除すると、アドレスとユーザ名が消えるだけではありません。Calíopeがそのサーバについて保存していたものすべてが一緒に消えます。だからCalíopeは先に確認し、その確認には接続の名前が表示されます。思っていた接続でなければ、気づくのはそのときです。

削除できる場所
- macOS:プロファイルを選択し、リストの下のバーで「+」の隣にある「−」をクリックします。または、行を右クリックして「削除」を選びます。
- iPad:プロファイルを選択し、下部のバーで「−」をタップします。または、行を長押しして「削除」を選ぶか、行を右から左へスワイプします。スワイプは指を離しても削除しません。ボタンが現れるだけで、確認はやはり表示されます。逆方向(左から右)へのスワイプは「グループに移動」です。

一緒に消えるもの
- プロファイルとそのすべてのデータ。
- キーチェーンに保存されたパスワード、さらにSSHのパスワードと秘密鍵のパスフレーズ。
- クエリー履歴、エラーログとサーバメッセージログにあるその接続の行。
- その接続のエディタに保存されていたSQLと、スキーマキャッシュ。

取り消すことはできません。ゴミ箱も取り消しもありません。確認のときが、やめられる唯一の機会です。

ほかのデバイスでは。iCloud同期がオンなら削除も同期され、そちらでも接続が消えます。逆方向でおかしなことは起きません。ほかのマシンで作成し、このマシンがまだ見ていないプロファイルは削除とは見なされないので、勝手に消えることはありません。

グループごと。グループを削除すると、その中の接続も削除されます。確認も、消える範囲も同じです。詳しくは「プロファイルのグループ分け」で説明しています。

キーワード: 接続を削除、プロファイルを削除、サーバを削除、取り消し、ゴミ箱、パスワード、キーチェーン、スワイプ

2つのアドレスを持つサーバ

接続元のデバイスによってサーバのアドレスが変わる場合に、代替ホストを使う方法。

場所: サイドバー › 接続 ›「代替ホスト」

プロファイルの「代替ホスト」フィールドは、2つの異なるアドレスで到達できるサーバのためのものです。典型的なのは開発用のマシンです。そのコンピュータ自身からは127.0.0.1で応答しますが、iPadからはローカルネットワーク上のアドレスを使う必要があります。プロファイルはデバイス間で同期されるため、ホストのフィールドが1つだけでは、両方の場所で正しくはなれません。

接続するときは、まずメインのホストを試します。応答がなければ、同じポート、同じユーザ、同じパスワード、同じオプションで代替ホストを試します。変わるのはアドレスだけです。ポートも変える必要がある場合は、アドレス:ポートと書きます(例:10.0.0.20:3307)。

セッションが代替アドレスで接続したときは、サーバ名の隣に印が表示され、「接続をテスト」はどのアドレスが応答したかを示します。そのため、どのマシンを相手に作業しているのかが常にわかります。

SSHトンネルを使う場合、このフィールドは無視されます。これは意図的です。その場合、サーバのアドレスを解決するのはデバイスではなくトンネルのマシンなので、接続元によって変わることはありません。

キーワード: 代替ホスト、2つ目のアドレス、ローカルIP、ローカルネットワーク、フェイルオーバー、127.0.0.1、iPad、2つのアドレス

MongoDBの接続文字列

接続文字列を書く必要があるとき、書いたときにCalíopeが使わなくなるフィールド、そしてパスワードがどこに保存されるか。

場所: サイドバー › 接続 ›「接続文字列」

「接続文字列」フィールドは、プロファイルのエンジンがMongoDBのときだけ表示され、省略可能です。空のままにすると、Calíopeは上のフィールド(アドレス、ポート、ユーザ名、パスワード、TLS、データベース)から接続を組み立てます。通常のサーバなら、それで十分です。

接続文字列を書くのは、それらのフィールドでは接続を記述できない場合です。3つのケースがあります。複数のアドレスとセットの名前が必要なレプリカセット、authSourceで指定する、通常とは異なる認証データベース、そしてアドレスがmongodb+srv://で始まり、入力するポートがないAtlasクラスタです。mongodb+srv://の場合、Calíopeはクラスタのサーバをシステムのドメインネームシステムに問い合わせます。デバイスのほかの部分が使うのと同じもので、VPNも含まれます。

接続文字列を書くと、そこに書かれた内容が上のフィールドより優先されます。アドレス、ユーザ名、パスワード、TLSを使うかどうか、そしてオプションです。書かれていないものはプロファイルから取られます。ユーザ名やパスワードがなければフィールドのものが使われ、データベースの名前がなければプロファイルのものが、それもなければadminが使われます。複数のアドレスとreplicaSetがある場合、Calíopeはどのメンバーがプライマリかを見つけ、それを相手に作業します。接続文字列が決して決めないことが2つあります。プロファイルがSSHトンネルを使う場合、アドレスは接続文字列ではなくトンネルから取られます。接続文字列が示すサーバは、デバイスではなくトンネルのマシンから見えるものだからです。そして、証明書は常にプロファイルから取られます。接続文字列でTLSをオンやオフにしたり、証明書を検証しないように求めたりはできますが、「CA証明書(.pem)」と「クライアント証明書(.pem)」は「SSL証明書」で選びます。

接続文字列にauthSourceがなければ、認証はadminに対して行われます。管理用のアカウントがある場所で、ユーザ名とパスワードだけを入力したときにmongoshもMongoDB Compassも想定する場所です。アカウントが別のデータベースにある場合は、authSourceで指定してください。

接続文字列が受け付けても使わないオプションがあります。tlsCAFileとtlsCertificateKeyFileは無視されます。これらはファイルへのパスで、Calíopeは自分で選んだファイルしか開かないため、証明書はプロファイルに入れます。readPreference、w、retryWritesのような読み書きのオプションは、Atlasからコピーした接続文字列がそのまま使えるように受け付けますが、Calíopeの動作は何も変わりません。

パスワードについての注意:上のフィールドのパスワードはキーチェーンに保存されますが、接続文字列の中に書いたパスワードは保存されません。接続文字列はプロファイルのほかの部分と一緒に保存され、iCloud同期がオンなら一緒に同期されます。それが気になる場合は、パスワードは専用のフィールドに入れ、接続文字列はそれ以外のことだけに使ってください。

接続文字列の形式が正しくない場合、接続は失敗してその旨を表示します。フォームの誤りなので、再試行するのではなく、そこで直します。

キーワード: 接続文字列、MongoDB、URI、SRV、Atlas、レプリカセット、authSource

接続をテスト

接続する前にサーバの情報を確認します。

場所: 接続マネージャ › 接続をテスト

プロファイルのフォームで「接続をテスト」をタップします。Calíopeは入力した情報で実際に接続を開こうとし、結果を緑のバナー(成功)か赤のバナー(エラーとその説明)で表示します。

このテストは、プロファイルを保存する前に、SSLの資格情報、ファイアウォール、ホストの設定を確かめるのに特に役立ちます。

キーワード: テスト、確認、接続の確認、接続をテスト

サーバに接続

接続を確立して、ワークスペースを開きます。

場所: 接続マネージャ › 接続

プロファイルの情報がそろったら、「接続」ボタン(稲妻のアイコン)をタップします。Calíopeはエンジンのドライバで接続プールを開き、スキーマツリーを読み込みます。

接続に失敗すると、何が起きたのか、何を確認すればよいのかを示すシートが開きます。「解決方法を表示」が表示されている場合は、それを説明するこのヘルプの項目に移動します。「技術的な詳細」は、サーバまたはネットワークからのテキストをそのまま表示します。フォームでも、「接続をテスト」の結果が表示される欄に「接続エラー:…」として同じ内容が表示されます。ホスト、資格情報、サーバが稼働していてネットワークから到達できることを確認してください。

キーワード: 接続、ワークスペースを開く、プール、接続

使用中のデータベースを変更

スキーマパネルから、セッションのデータベースを切り替えます。

場所: SQLエディタ › スキーマパネル ›「使用中のデータベースに設定」

SQLエディタのスキーマパネルでデータベースを右クリックし(iPadでは長押しし)、「使用中のデータベースに設定」を選びます。セッションは再接続せずにそのデータベースに切り替わり(USE database_nameを実行するのと同じです)、サーバメニューにはサーバ名の隣にその名前が表示されます。変更が影響するのは現在のセッションだけです。

Oracle

Oracleでは、ツリーに並ぶのはデータベースではなくスキーマです。スキーマはユーザのことで、データベースは接続したサービスです。OracleにはUSEがありません。選んだスキーマは、エディタが修飾されていない名前を解決するスキーマになり、実行のたびにALTER SESSION SET CURRENT_SCHEMAのようにセッションに設定されます。プロファイルは変わらず、サービスもそのままです。

キーワード: データベースを使用、データベースを変更、データベースを選択、データベースを切り替え

接続を閉じる

サーバとの接続を解除し、接続マネージャに戻ります。

場所: ワークスペース › 接続解除

ワークスペースのヘッダにある「接続解除」ボタンをタップします。Calíopeは接続プールを閉じ、アニメーションとともに接続マネージャの画面に戻ります。

アプリのメインウインドウを閉じたときも、接続は自動的に解除されます。

キーワード: 接続解除、セッションを閉じる、接続を閉じる、終了

自動再接続

サーバがセッションを閉じたら、自動的に再接続します。

場所: サイドバー › プロファイルのフォーム ›「自動再接続」

接続プロファイルのフォームで「自動再接続」をオンにします。Calíopeがこれを使うのは、使用中のデータベースを変更するとき(スキーマパネルの「使用中のデータベースに設定」)です。そのときに接続が切れていたら(サーバが無操作で接続を閉じた、サーバが再起動した、SSHトンネルが切れたなど)、トンネルも含めてセッション全体を開き直し、変更をやり直します。

エディタやツールのクエリーは再試行しません。切断は接続の切断として表示されます。

SSHトンネルを使っている場合、トンネルの切断と再接続の通知が出るのも同じタイミングです(「SSHトンネルの通知」を参照)。

キーワード: 再接続、自動再接続、タイムアウト、無操作、接続を復元

複数のサーバへの同時接続

作業の流れを失わずに、複数のサーバを同時に扱います。

場所: ワークスペース › サーバメニュー

Calíopeでは、複数のサーバに同時に接続できます。サーバごとに独立したセッションがあり、それぞれにスキーマツリー、開いているSQLタブ、クエリー履歴、AIアシスタントの状態があります。

しくみ:
接続マネージャで「接続」をタップするたびに、それまでのセッションを閉じずに新しいセッションが開きます。すべてのセッションが共存し、何も失わずに切り替えられます。

各セッションの状態:
- サーバを切り替えても、SQLタブとその内容はそのまま残ります。
- スキーマツリーには、使用中のサーバのデータベースが表示されます。
- AIアシスタントは、セッションごとに会話の履歴を保ちます。

セッションは必要なだけ開けます。たとえば、開発、ステージング、本番の各環境のデータを同時に比べることもできます。

キーワード: マルチサーバ、複数の接続、同時、複数接続、セッション、複数サーバ

サーバ選択メニュー

ワークスペースのドロップダウンメニューから、接続中のサーバを切り替えます。

場所: ワークスペース › サーバメニュー

サーバ選択メニューには、使用中のサーバの名前と接続状態のインジケータ(緑の点=接続中、赤=エラー)が表示されます。タップすると、開いているすべてのセッションのメニューが開きます。

macOSでは、選択メニューはウインドウのツールバーの左上にあります。サーバ名、使用中のデータベース、ドロップダウンの矢印が表示されます。

iPadでは、選択メニューはタブバーの左にあり、ワークスペースの上部に常に表示されます。

iPhoneでは、「ツール」リストの一番上にもあるので、ワークスペースのどの画面からでもセッションの切り替え、サーバの追加、接続解除ができます。

メニューの項目:
- サーバ名をタップまたはクリックすると、そのセッションが使用中になります。
- 使用中のセッションには✓が付きます。
- 「サーバを追加」を選ぶと、いまのワークスペースの上に接続マネージャが開き、開いているセッションを失わずに別のサーバに接続できます。
- 「接続解除」は、使用中のサーバのセッションを閉じます。

キーワード: サーバメニュー、選択メニュー、サーバを切り替え、切り替え、使用中のセッション、接続インジケータ

ワークスペースからサーバを追加

いまの作業を離れずに、別のサーバに接続します。

場所: ワークスペース › サーバメニュー ›「サーバを追加」

別のサーバで作業しながら新しい接続を追加するには:

1. サーバ選択メニューを開きます(macOSではウインドウのツールバー、iPadではタブバーにあります)。
2. 「サーバを追加」を選びます。
3. 接続マネージャが開きます。macOSでは専用のウインドウで、iPadではシートで開きます。
4. 既存のプロファイルを選ぶか新しく作成し、「接続」を押します。
5. 接続マネージャは自動的に閉じ、新しいセッションが選択メニューに加わります。

その間も、それまでのセッションは開いたまま変わりません。

キーワード: サーバを追加、新しいセッション、2つ目の接続、別のサーバに接続

サーバを個別に接続解除

ほかの接続に影響を与えずに、1つのサーバのセッションを閉じます。

場所: ワークスペース › 接続解除

複数のセッションを開いているときは、どれでも個別に閉じられます。

使用中のサーバ:
- サーバ選択メニューを開いて「接続解除」をタップするか、ツールバーの赤い接続解除ボタンを使います。

任意のセッション(先にそのセッションに切り替えます):
1. サーバ選択メニューを開きます。
2. 閉じたいサーバを選んで、使用中にします。
3. 「接続解除」をタップします。

セッションを閉じると、Calíopeは残っているうち最後のセッションを自動的に使用中にします。それが唯一のセッションだった場合は、接続マネージャに戻ります。

キーワード: サーバの接続解除、セッションを閉じる、接続を閉じる、接続解除、サーバを削除

SSL/TLSの設定

SSL証明書で、サーバとの接続を暗号化します。

場所: サイドバー › プロファイルのフォーム ›「SSL」

接続プロファイルのフォームで、「サーバオプション」セクションの「SSL」をオンにします。クライアント証明書のための省略可能なフィールドが3つ表示されます:

- 「CA証明書」:認証局の証明書ファイル(.pemまたは.crt)。Calíopeはこのファイルでサーバの身元を確認します。
- 「クライアント証明書」:相互認証に使うクライアントの証明書ファイル。
- 「クライアントキー」:クライアント証明書に対応する秘密鍵。

CA証明書を指定せずにSSLを有効にすると、Calíopeはシステムの信頼されたルート証明書でサーバの証明書を検証します(安全なデフォルト)。サーバが自己署名証明書を使っている場合は、対応するCAを指定しない限り接続は失敗します。

「信頼されていない証明書を受け入れる(安全ではありません)」:自己署名証明書を使う開発用サーバに接続し、CAを用意できない場合にだけ、このチェックボックスをオンにしてください。接続は暗号化されたままですが、中間者攻撃に対して無防備になります。本番のサーバではオンにしないでください。

ファイルの置き場所:CA、証明書、クライアントキーを選ぶと(Mac以外ではペーストすると)、Calíopeはこのデバイスに独自のコピーを保存し(iCloud Driveには保存しません)、プロファイルはそのコピーを指します。あとで元のファイルを移動したり削除したりしてもかまいません。Macでは再起動後もそのまま読み込まれます。証明書を更新するには、同じ名前であってももう一度選んでください。ファイルは選んだデバイスに残り、その場所も同じです。ほかのデバイスで設定したプロファイルは、ファイルなしで届きます。接続する前に、接続リストには「このデバイスでファイルを選択」と表示され、フォームには「このプロファイルは、ほかのデバイスで選択された証明書を使用しています。ここで選択してください。」と表示されます。そこでファイルを選べば、以降はそのデバイスが独自のコピーを保持します。

ファイルを読み込めない場合、Calíopeはそのファイルなしでは接続しません。「TLSファイルを読み込めませんでした」と表示して止まり、ファイルの名前と、3つのうちどれかを示します。

「接続をテスト」をタップすると、SSL接続もテストされます。緑のバナーで、暗号化が有効かどうかを確認できます。

ClickHouse

ClickHouseでは、「CA証明書」と、検証されていない証明書を受け入れるチェックボックスしかありません。ClickHouseはユーザとパスワードでサインインするため、フォームには「クライアント証明書」と「クライアントキー」が表示されず、それらを持つプロファイルは削除するまで接続しません。SSLをオンにすると、ポートがデフォルトのままなら8123から8443に変わります。SSHトンネルを経由する場合、証明書はプロファイルのホストに対して検証されます。

Oracle

Oracleでは、「CA証明書」と、検証されていない証明書を受け入れるチェックボックスしかありません。Oracleは一方向のTLS(TCPS)でユーザとパスワードを使ってサインインするため、フォームには「クライアント証明書」と「クライアントキー」が表示されません。SSLをオンにすると、ポートがデフォルトのままなら1521から2484に変わります。リスナーは別のポートでTCPSを提供するからです。証明書はプロファイルのホストに対して検証されます。SSHトンネルを経由する場合も、独自のCAを使う場合も同じで、サーバの名前が証明書に含まれている必要があります。プロファイルにクライアント証明書や鍵が含まれている場合(読み込んだもの、または別のファミリーから引き継いだもの)、接続は開かず、エラーでその旨が表示されます。プロファイルから削除してください。

キーワード: SSL、TLS、証明書、暗号化、CA、クライアント、セキュリティ、PEM、CRT、ssl_mode、MITM、検証、自己署名

生体認証

サーバに接続する前に、Touch ID、Face ID、Optic IDを要求します。

場所: サイドバー › 「設定」›「一般」›「セキュリティ」

Calíopeは、接続を開く前にデバイスの生体認証を求めることができます。Macと対応するiPadではTouch ID、iPhoneとそのほかのiPadではFace ID、Apple Vision ProではOptic IDです。これはアプリ全体で1つのスイッチで、プロファイルごとの設定ではありません。

オンにする場所
- 「設定」›「一般」›「セキュリティ」›「接続時にTouch IDを要求」(または「接続時にFace IDを要求」「接続時にOptic IDを要求」。スイッチにはデバイスが持つ生体認証の名前が表示されます)。どのプラットフォームでも同じです。デバイスで生体認証が使える場合にだけ表示されます。

オンにすると、「接続」の前に認証が求められ、認証に失敗すると接続は進みません。プロファイルのテストでは求められません。アクセス権は、「システム設定」›「Touch IDとパスワード」(Mac)、「設定」›「Face IDとパスコード」または「設定」›「Touch IDとパスコード」(iPadとiPhone)、「設定」›「Optic IDとパスコード」(Apple Vision Pro)で確認してください。

キーワード: 生体認証、Touch ID、Face ID、Optic ID、認証、セキュリティ、指紋、バイオメトリクス、生体認証を要求

プロファイルのグループ分け

接続をグループ(本番環境、開発、クライアントXなど)にまとめる方法と、macOS、iPad、iPhone、Apple Vision Proでプロファイルをグループ間で移動する方法。

場所: 接続マネージャ › 右クリック › グループに移動

接続のリストが増えてきたら、環境、クライアント、そのほか好きな基準でグループにまとめることができます。グループは折りたたむことができ、順序付きのコレクションとしてconnections.jsonに保存されます。

グループを作成する
- macOS:既存のグループ(またはサイドバーのヘッダ)を右クリックし、「新規グループ」を選びます。デフォルトの名前「新規グループ」で作成され、すぐに名前を変更できる編集状態になります。
- iPad、iPhone、Apple Vision Pro:接続マネージャで「グループを管理」(下部のバーにある、歯車の付いたフォルダ)をタップし、シートで「新規グループ」をタップします。

名前の変更と削除
- macOS:グループ名を右クリック →「グループ名を変更」または「グループを削除」。
- iPad:名前を変更するには、「グループを管理」シートの行にある鉛筆をタップします。削除するには、その行を右から左へスワイプします。リストのグループのヘッダを長押ししても操作できます。
- グループを削除すると、その中の接続も削除されます。保存されたパスワード、クエリー履歴、保存されていたSQLも一緒です。何かを削除する前に、Calíopeは確認を求め、削除される接続の数と名前を示します。これは取り消せません。グループ分けをやめたいだけなら、先に「グループに移動 ▸ グループなし」でプロファイルを外に出してください。

プロファイルを移動する
- macOS:プロファイルを右クリック →「グループに移動 ▸」→ 移動先のグループを選ぶか、どのグループからも外す場合は「グループなし」を選びます。
- iPad:プロファイルを左から右へスワイプすると「移動」アクション(フォルダのアイコン、藍色)が現れ、グループを選ぶシートが開きます。

グループの並べ替え(iPad)
- 「グループを管理」を開き、☰ハンドルでドラッグして並べ替えます。順序は各グループのsortOrderフィールドに保存されます。

展開と折りたたみ
- 各グループには、プロファイルのリストを折りたたんだり展開したりする▸があります。状態はグループごとに保存されます。

保存場所
- グループとその割り当ては、このデバイスのconnections.jsonファイルにあります。iCloud同期がオンなら、デバイス間で共有されます。

絞り込み
- リストの上のフィールドに入力すると、一致する接続だけが残ります。テキストが入っている間は、保存した状態を変えずにすべてのグループが開いて表示されます(「接続リストの絞り込み」を参照)。

キーワード: グループ、グループ分け、整理、フォルダ、カテゴリ、本番環境、開発、プロファイルを移動、ドラッグ、スワイプ、新規グループ、名前を変更、グループを削除、グループなし、connections.json

環境タグ

各接続に、ローカル、ステージング、本番環境など好きな印を、選んだ名前と色で付け、すべてのツールの上に帯として表示します。

場所: 接続マネージャ › 右クリック › 環境タグ…

環境タグは、接続の向かう先(ローカル、ステージング、本番環境、そのほか好きなもの)を、選んだ名前と色で示します。接続すると、タグはその色の帯として、すべてのツールの上とサーバメニューに表示されます。何かを実行する前に、どのサーバにいるのかがわかります。

カタログ
- タグは1つのカタログ「環境タグ」にまとめられています。プロファイルのフォームで「環境」の隣にある「環境タグ…」ボタンから開くか、「グループなし」のヘッダまたは任意のグループのヘッダのコンテキストメニュー(macOSでは右クリック、iPad、iPhone、Apple Vision Proでは長押し)から開きます。
- カタログは最初は空です。「新規タグ」でフォームが開き、「テンプレート」からワンタップで3つのひな形を選べます。「ローカル」(緑、保護なし)、「ステージング」(琥珀色、書き込みを確認)、「本番環境」(赤、書き込みを確認)です。そのあと、「タグ名」「色」「保護」を好きなように変更できます。
- 行をドラッグすると、ピッカーに表示されるタグの順序を変えられます。iPad、iPhone、Apple Vision Proでは、先に「編集」をタップします。
- 「タグを削除」は先に確認を求め、そのタグを使っている接続の数を示します。それらの接続はタグなしになるだけで、削除はされません。

プロファイルにタグを付ける
- プロファイルのフォームの「環境」ピッカーには、「なし」とカタログのタグが表示されます。接続マネージャと「設定」の接続リストには、名前の前に色見本が表示されます。

レベルはプロファイルではなくタグのもの
- 各タグには「保護」レベルがあります。保護なし、書き込みを確認、読み出し専用のいずれかです。「本番環境」タグを付けた20の接続は、名前、色、レベルをそのタグから受け取るので、タグを変えると20すべてが変わります。1つの接続だけ別のレベルにしたい場合は、別のタグを作成してください。各レベルの働きは、「保護レベル」の項目で説明しています。
- グループは何も引き継ぎません。グループとタグは互いに独立しています。「クライアントX」グループの中に、「ローカル」の接続、「ステージング」の接続、「本番環境」の接続を置くこともできます。

保存場所
- カタログは、グループやプロファイルと一緒にconnections.jsonに保存されます。同期がオンならそれらと一緒にiCloud Driveで同期され、「設定」›「接続」の書き出しにも含まれます。

キーワード: タグ、環境タグ、環境、本番環境、ステージング、ローカル、色、帯、保護、読み出し専用、確認、カタログ、テンプレート、connections.json

保護レベル

環境タグの各保護レベルの働き:保護なし、書き込みを確認、読み出し専用。

場所: 接続マネージャ › 右クリック › 環境タグ…

環境タグにはそれぞれ「保護」レベルがあり、「環境タグ」でそのタグのフォームから選びます。レベルはタグのもので、そのタグを付けたすべての接続が同じレベルを共有します。

3つのレベル
- 「保護なし」:SQL文は通常どおり実行されます。タグは帯で接続に印を付けるだけです。
- 「書き込みを確認」:書き込みを行うものを実行する前に、Calíopeは「…に書き込みますか?」と、実行元とSQL文の数を示して確認を求め、タグの名前が入った「…で実行」を押したときだけ先に進みます。確認は1回の実行につき1度です。20のSQL文からなるスクリプトでも質問は1つです。もともと独自の確認があるもの(スクリプト全体の実行、復元、カタログでのオブジェクトの削除、プロセスの強制終了、ユーザの削除)は、タイトルにタグの名前が入り、二重には確認しません。シートが開いている場合は、その上に質問が表示されます。SQLエディタでキャンセルするとクエリーは停止したままになります。それ以外の場所では、キャンセルしたため実行しなかったことが通知され、エラーログには記録されません。
- 「読み出し専用」:書き込みを行うものはサーバに送られず、エラーにタグの名前が表示されます。さらに、書き込みしか行わないツール(テーブルビルダー、ユーザ管理、テーブルメンテナンス、データ移行)は表示されず、ほかのツールでも書き込みを行う操作は表示されません。復元、置換、読み込み、データの投入、オブジェクトの作成と削除、プロセスの強制終了、結果の行の編集と削除です。

書き込みと見なされるもの
- 読み出しとトランザクション制御以外のすべてです。トランザクションの開始、コミット、ロールバック、データベースの切り替え(USE)は書き込みではありません。SETは書き込みで、READ WRITEを求めるトランザクション制御も同じです。セッションがサーバの読み出し専用を解除するときに使うものだからです。BEGIN … ENDブロックは書き込みと見なされます。
- 判定はテキストを読むもので、サーバが実際に何をするかではありません。SELECT nextval('s')のように副作用のある関数を呼ぶSELECTは、読み出しとして通ります。
- セルの編集の取り消しとやり直しは新たな書き込みで、「書き込みを確認」では毎回確認を求めます。

適用される場所
- SQLエディタ(「実行」、ターミナル、SQLプレーヤー)と、AIアシスタントがエディタに残したものは、同じ判定を通ります。アシスタントもタグのレベルを知っていて、提案するときに考慮します。
- SQLエディタの「セーフモード」が先に働き、その動作は変わりません。セーフモードが止めたものは、質問まで届きません。
- Siriとショートカットは質問を表示できません。書き込みを確認するタグでは、Siriからの書き込みは実行されず、読み出し専用のタグでは失敗します。MCPサーバは最初から読み出し専用です。
- エディタでリンクしたデータベースとデータ移行の移行先は、それぞれのプロファイルのタグで保護されます。
- レポートは読み出しだけです。読み出し専用の接続では、レポートは一時テーブルを作成できますが、それ以外は何もできません。
- ルールが書き込みを行うSQLアラートは、保護するタグのもとでは、どちらのレベルでも実行されません。

サーバ側の層
読み出し専用では、エンジンがセッションごとに読み出し専用になれる場合、Calíopeはサーバにもそれを求めます。判定をすり抜けたものは、サーバが拒否します。

MySQLMariaDBAurora

すべての接続がSET SESSION TRANSACTION READ ONLYの状態で動作します。サーバはエラー1792でINSERT、UPDATE、DELETE、CREATE、DROP(一時テーブルも含む)とSELECT … FOR UPDATEを拒否します。SET GLOBAL、KILL、FLUSHは通しますが、これらはCalíopeの判定が先に拒否します。ANALYZE TABLEも通しますが、行を変更しないのでCalíopeも拒否しません。

PostgreSQL

すべての接続がdefault_transaction_read_only = onで始まります。サーバはエラー25006で、書き込みを行うもの(一時テーブルも含む)、SELECT nextval(…)、SELECT … FOR UPDATEを拒否します。判定が通してしまう副作用のある関数も、ここで止まります。ALTER SYSTEMは通しますが、Calíopeが先に拒否します。SELECT pg_terminate_backend(…)はどちらも拒否しません。SET default_transaction_read_only = offを実行するとこの層が無効になるため、CalíopeはSETを拒否します。

ClickHouse

すべてのリクエストにreadonly=2が付きます。サーバはコード164でINSERT、ミューテーション(ALTER TABLE … UPDATE)、CREATE、DROP、TRUNCATE、OPTIMIZE、SYSTEM FLUSH LOGSを拒否します。SET、SETTINGS句、KILL QUERY(「停止」は引き続き使えます)、バッチの一時テーブルは通します。SET readonly = 0では無効にできません。

SQL Server

サーバ側の層はありません。T-SQLにはセッションごとの読み出し専用の状態がなく、ApplicationIntent=ReadOnlyは可用性グループの読み取り可能なレプリカに振り分けるだけで、単独のサーバに対しては何も防ぎません。保護するのはCalíopeの判定です。

Oracle

サーバ側の層はありません。SET TRANSACTION READ ONLYは1つのトランザクションの間だけ有効で、次のCOMMITまたはROLLBACKで終わります。セッション単位の同等の機能はありません。保護するのはCalíopeの判定です。

TiDB

サーバ側の層はありません。TiDBはMySQLの構文を受け付けますが、従いません。SET SESSION TRANSACTION READ ONLYはエラー1235(has only noop implementation)を返し、セッションは書き込みを続けます。保護するのはCalíopeの判定です。

Redis

サーバ側の層はありません。Redisには接続ごとの読み出し専用がありません(READONLYは別物で、クラスタのレプリカから読み出せるようにするものです)。コンソールでは、Calíopeは何が書き込みかをサーバに問い合わせ、サーバが印を付けない管理コマンド(CONFIG SET、CLIENT KILL…)も書き込みと見なします。詳しくは「コマンドコンソール」の項目にあります。

MongoDB

サーバ側の層はありません。MongoDBには接続ごとの読み出し専用がなく、あるのはアカウントのロール(read)です。「MongoDBコマンド」のコマンドは読み出しを行うコマンドのリストに照らして判定され、$outや$mergeを含む集計は書き込みです。詳しくは「サーバにコマンドを送る」の項目にあります。

これは何ではないか
事故を防ぐためのもので、セキュリティではありません。セキュリティとは、サーバ上の読み出し専用ユーザのことです。

キーワード: 保護、レベル、読み出し専用、確認、書き込み、環境、タグ、本番環境

接続リストの絞り込み

リストの上のフィールドに入力すると、名前、ホスト、グループで一致する接続だけが残ります。

プロファイルが30や40にもなると、グループを開くだけでは足りなくなります。サイドバーの上にあるフィールドに入力すると、一致する接続だけが残ります。

検索の対象:プロファイルの名前、ホストと代替ホスト、デフォルトのデータベース、ユーザ名、エンジンの名前、グループの名前です。グループの名前を入力すれば、そのグループ全体が表示されます。*本番環境を見せて*と伝える方法です。アクセント記号や大文字・小文字は区別されません。

絞り込んでいる間、グループは自動的に開きます。折りたたんでいたグループも開くので、一致するものが閉じたグループの中に隠れたままになることはありません。この展開は保存されません。フィールドを空にすると、すべてのグループが元のとおりに戻ります。

選択は動きません。編集していたプロファイルが絞り込みから外れても、右側のフォームはそれを表示し続けます。検索フィールドに入力したせいで編集中の内容を失うのは、このフィールドが解決する問題よりも悪いからです。

フィールドを空にするには、Escキーか「×」を押します。絞り込みは、アプリを閉じると保持されません。

キーワード: 絞り込み、検索、接続、リスト、グループ、ホスト、プロファイルを探す

サーバのファミリーと製品

ファミリーとは何か、製品とは何か、そして接続をテストしたときに、サーバが名乗る製品をCalíopeがどう提案するか。

場所: サイドバー › 接続マネージャ

Calíopeはサーバをファミリーでまとめます。ファミリーとは、サーバが話すプロトコルのことです。MySQL / MariaDB、PostgreSQL、SQL Server、Oracle Database、ClickHouse、MongoDB、Redisがあります。各ファミリーの中では製品、つまり目の前にあるものの具体的な名前を選びます。

ファミリーと製品
- MySQL / MariaDB:MySQL、MariaDB、Amazon Aurora MySQL、TiDB、「その他のMySQL互換」。
- PostgreSQL:PostgreSQL、Amazon Aurora PostgreSQL、「その他のPostgreSQL互換」。
- SQL Server:Microsoft SQL Server。
- Oracle Database:Oracle Database。
- ClickHouse:ClickHouse。
- MongoDB:MongoDB、「その他のMongoDB互換」。
- Redis:RedisとValkey。

それぞれが決めること。ファミリーは、Calíopeがどのエンジンで接続し、どのツールを提供するかを決めます。製品は、名前、ターミナルのプロンプト、最初に用意されるスニペットを決めます。たとえばAurora MySQLには専用のスニペットがあります。ファミリーの基準となる製品でない場合は、注意を促す通知がフォームに表示されます。「今後表示しない」で非表示にできます。

プロファイルを作成する
1. 「サーバ」(iPadとiPhoneでは「種類」)で、ファミリーを選びます。
2. 「製品」(Macではその隣のメニュー)で、製品を選びます。一覧にない場合は「その他の…互換」を選びます。製品が1つしかないファミリー(SQL Server、Oracle Database、ClickHouse)では、「製品」メニューは表示されません。
3. いつもどおりホスト、ポート、ユーザ、パスワードを入力します。Auroraでは、クラスタの*エンドポイント*を貼り付け、「SSL/TLS」を有効にします。

サーバが名乗ります。「接続をテスト」を押すか、データベースのリストを読み込むと、Calíopeはサーバに問い合わせます。サーバが同じファミリーの別の製品だと名乗った場合は、選択欄の下にそれを提案します。「…を使用」を押すとプロファイルが修正されます。無視してもかまいません。Calíopeが勝手に変更することはありません。MongoDBには問い合わせません。

注意
製品固有の機能(Aurora IAM認証、使い分けるエンドポイント、aurora_%のメトリクス)は特別には扱いません。Calíopeはサーバを、そのファミリーの標準的なメンバーとして扱います。そのため、IAMトークンはMySQL 8やPostgreSQLと同じように、平文のパスワードとして送られます。CalíopeはSSL/TLSがオンのときだけそれを送ります。トークンを生成するのは接続する人で、Calíopeではありません。

SQL Serverはバージョン2022以降に、常に暗号化して接続します。Calíope 1.4のままのデバイスに同期されたSQL Serverのプロファイルは、そのバージョンがこのファミリーを知らないため、MariaDBとして表示されます。そのデバイスがアップデートされるまで、そこで開いても動作しません。

ClickHouseはバージョン25.3以降に、HTTPインターフェイス(ポート8123、TLSでは8443)で接続します。SSHトンネル経由でも接続できます。以前のバージョンのCalíopeを使っているデバイスに同期されたClickHouseのプロファイルは、MariaDBとして表示されます。そのデバイスをアップデートしたら、プロファイルでClickHouseを選び直すと元に戻ります。

Redisはデータベースに名前ではなく番号を付けるため、フォームは「データベース番号」(サーバでそれ以上に設定していなければ0から15)を求め、エンコーディングと照合順序はありません。「ユーザ名」は省略可能です。パスワードだけでサインインでき、ユーザが必要なのはACLユーザを使う場合(Redis 6以降)だけです。

Oracle Databaseはデータベースではなくサービスに接続します。フォームは「サービス」(SERVICE_NAME。無償版ではFREEPDB1)を求め、ポートは1521、「SSL/TLS」では2484です。SIDは使えません。サービス名を入力してください。サービス名を調べるには、サーバでlsnrctl statusを実行すると、待ち受けているサービスが一覧表示されます。Calíopeは、Dockerがアカウントなしでダウンロードする無償版のOracle AI Database 26aiで測定しています。19cと23aiも同じプロトコルを話しますが、測定はしていません。サインインはユーザとパスワードで行い、一方向のTLSでも使えます。トークン認証(OCI IAM、OAuth)、Kerberos、オペレーティングシステム認証、クライアント証明書を使う*ウォレット*には対応していません(Autonomous Databaseでは、*ウォレット*なしでTLSを使ってサインインします)。以前のバージョンのCalíopeを使っているデバイスに同期されたOracleのプロファイルは、MariaDBとして表示されます。そのデバイスをアップデートしたら、プロファイルでOracle Databaseを選び直すと元に戻ります。

キーワード: ファミリー、製品、Aurora、Amazon Aurora、AWS、RDS、MySQL、MariaDB、PostgreSQL、MongoDB、TiDB、Valkey、互換、プロトコル、検出、サーバの種類

接続プロファイルを複製

「複製」は、選択したプロファイルをパスワードも含めてすべてコピーし、必要なところを変えられるように複製を選択した状態にします。

「複製」は、選択したプロファイルをすべてコピーします(フィールド、グループ、環境タグ、このデバイスで選んだTLSファイルとSSHキー)。パスワードもコピーします。複製の名前は元の名前に「のコピー」を付けたものになり、使用回数はゼロから始まり、必要なところを変えられるように選択された状態になります。

接続リストのバー、各行のコンテキストメニュー、そしてMac以外では行のスワイプにあります。

キーワード: 複製、コピー、複製を作成、プロファイル、接続

データベース、文字セット、照合順序のリストの読み込み

「サーバのデータを読み込む」でサーバにデータベース、文字セット、照合順序を問い合わせ、入力する代わりにリストから選べるようにします。

データベースと文字セットの隣にある円形の矢印のボタン「サーバのデータを読み込む」で、サーバにデータベース、文字セット、照合順序を問い合わせ、入力する代わりにリストから選べるようにします。ホストかユーザが入力されていない間は無効です。

プロファイルのデフォルトのデータベースがサーバにない場合は、フォームにその旨が表示されます。文字セットと照合順序は、接続時にそれらを使うエンジンでだけ表示されます。ClickHouse、Oracle、Redisでは表示されません。プロファイルがSSHトンネルを経由する場合は、接続するときと同じように踏み台の鍵が求められます。

このボタンがあるのはリレーショナルなエンジンだけです。それ以外のエンジンでは、フィールドに入力するか、「接続をテスト」でリストが届きます。

キーワード: データベース、文字セット、照合順序、サーバ、読み込む、プロファイル

SSHトンネルの通知

Calíopeは、SSHトンネルが切断されたときと、自動で再接続されたときに知らせます。

場所: Calíope › 設定 › 「一般」→「通知」

プロファイルで「SSHトンネル」と「自動再接続」が有効になっていると、Calíopeは2つの時点でローカル通知を送ります:

- トンネルの切断:接続が切れているのを見つけたとき、再接続を試みる前。
- トンネルの再接続:再接続でトンネルが戻ったとき。

どちらも自動再接続から来るもので、Calíopeはアクティブなデータベースを変えるときにそれを試みます:トンネルが落ちているのを見つけたクエリーは、ここでは通知しません。「自動再接続」がなければ、どちらも送られません。

オンまたはオフにする:
「設定」›「一般」›「通知」に移動し、「SSHトンネルの切断/再接続」スイッチを使います。

再接続に失敗した場合、再接続の通知は送られません。切断はすでに通知されています。同じホストについての通知の最小間隔は60秒です。

キーワード: 通知、SSH、トンネル、切断、再接続、アラート、自動