MySQL道普請便り

第270回MySQL Shellのプロンプトを改造してみる

MySQLのコマンドラインといえば、長らくmysqlクライアントが中心でした。シンプルで軽量なツールである一方、その分だけユーザー側で工夫する余地も多く、特にプロンプトのカスタマイズはこの連載でもたびたび取り上げられてきました。実際にプロンプトに関する話題は、複数の回にまたがって登場しています。

たとえば、第33回 MySQLのオプションファイル my.cnfの豆知識[その2]ではオプションファイルの解説の中で、promptを[client]に書いてしまうとmysqldumpがエラーになるといった実運用上の落とし穴に触れられていたり、第77回 mysqlコマンドラインクライアントではmysqlコマンドラインクライアントの解説として、\Rやpromptコマンドを用いたカスタマイズが改めて取り上げられています。

このようにmysqlクライアントでは、プロンプトに接続先やデータベース名を埋め込むことで、ヒューマンエラーを防ぐことができました。

MySQL Shellに関しても同様のことが行いたい場合もあると思いますので、今回はprompt.jsonに関して紹介していきます。

検証環境

今回はDocker上で起動したMySQLを使って確認します。以下のコマンドでMySQLを起動します。

docker run --name mysql84 --rm -d \
  -e MYSQL_ROOT_PASSWORD=password \
  mysql:8.4

以上で起動したMySQLコンテナに接続します。

$ docker exec -it mysql84 bash
bash-5.1# mysql -uroot -ppassword

いつものMySQLクライアントの画面が表示されれば準備完了です。

mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.4.9 MySQL Community Server - GPL

Copyright (c) 2000, 2026, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

プロンプト表示を確認してみる

まずはログイン時のプロンプトを確認してみましょう。

デフォルトのプロンプト
デフォルトのプロンプト

ここでは、以下のような内容が表示されています。

要素 内容
MySQL 接続しているDB
127.0.0.1:3306 ホストとポート
ssl SSL接続の有無
testdb 現在のデータベース
SQL モード

検証環境の確認で使ったmysqlクライアントと比べると、MySQL Shellでは最初から多くの情報が表示されていることがわかります。では次に、この表示をカスタマイズしてみましょう。

プロンプトをカスタマイズしてみる

カスタマイズするには、設定ファイルをユーザーの~/.mysqlsh/prompt.jsonに置きます。設定後はmysqlshを起動し直すと反映されます。

最小構成でカスタマイズしてみる

prompt.jsonを下のように空のjsonで設定してみましょう。

{
}

この設定では、以下のような非常にシンプルな表示になります。

>

狭いディスプレイで扱っている場合に、大きく幅が取られる時などには便利かもしれません。

prompt.jsonで使用できるキー一蘭

prompt.jsonは以下のキーで構築されます。

キー 内容
desc テーマの説明
classes 表示スタイルやテンプレート定義
variables 条件分岐・変数定義
symbols 区切り・省略記号など
prompt プロンプト記号(入力部分)
segments 表示するUI部品(本体)

今回はsegmentsとpromptを使ってカスタマイズしていきましょう。

segmentsとpromptでカスタマイズしてみる

MySQL Shellのプロンプトは、segmentsに並べた要素と、最後にpromptで指定した文字列の順で表示されます。つまり、segmentsに入れたオブジェクトの順序がそのまま表示順になります。下記のような設定を入れてみましょう。

{
  "prompt": {
    "text": "# "
  },
  "segments": [
    {
      "text": "%host%:%port%",
      "bg": 237,
      "fg": 15,
      "padding": 1
    },
    {
      "text": "%ssl%",
      "bg": 237,
      "fg": 15,
      "padding": 1
    },
    {
      "text": "%schema%",
      "bg": 242,
      "fg": 15,
      "padding": 1
    },
    {
      "text": "%Mode%",
      "bg": 166,
      "fg": 15,
      "padding": 1
    }
  ]
}

この設定では、text に表示したい内容を指定し、bg で背景色、fg で文字色を指定しています。この設定では、以下のような非常にシンプルな表示になります。たとえば、接続先やモードごとに色を変えることで、視認性を高めたり、重要な情報を目立たせたりできます。

また、paddingは表示文字列の左右に入れる余白の大きさを表します。padding: 1 であれば、文字の左右に1文字分の空きが入るため、各セグメントが詰まりすぎず、見やすい表示になります。逆にpaddingを小さくすればよりコンパクトになり、大きくすればゆったりした見た目になります。

この設定を反映すると、以下のように表示されます。デフォルトプロンプトに含まれていたMySQLの部分を省きつつ、接続先やスキーマ名、モードなど必要な情報は残せています。また、入力待ち部分の文字列も>から#に変更できていることがわかります。

カスタマイズ後のプロンプト
カスタマイズ後のプロンプト

ドキュメントについて

詳しいドキュメントを参照したい場合、現時点ではWeb上に十分まとまった情報が見当たらないことがあります。そのため、手元の環境にインストールされている/usr/share/mysqlsh/prompt/配下のREADME.promptファイルを参照するのが有効です。

また、README.prompt以外にもプリセットのファイルがいくつか用意されているので、それらを参照しながら設定してみるのもよいでしょう。

実際にこのファイルを見ながら設定を試していくと、利用できる変数や書式の理解が進みやすいでしょう。

まとめ

MySQL Shellはデフォルトの状態でも多くの情報を表示してくれますが、prompt.json を使うことで、自分にとって見やすく、誤操作を防ぎやすいプロンプトに調整できます。

特に、接続先ホスト名やポート番号、現在のスキーマ、実行モードなどをコンパクトに整理して表示できるのは便利です。複数環境を行き来することが多い人ほど、こうしたカスタマイズの効果を実感しやすいでしょう。

また、今回は主に segments や prompt を使った基本的なカスタマイズを紹介しましたが、prompt.json では表示内容を状況に応じて変えるような、もう少し動的な表現も可能です。こうした機能を活用すると、より実用的で凝ったプロンプトを作ることができます。このあたりは少し踏み込んだ内容になるため、また別の機会があれば紹介したいと思います。

まずは最小構成から試し、必要に応じて項目や色、余白を調整しながら、自分にとって使いやすいMySQL Shellのプロンプトを作ってみてください。

おすすめ記事

記事・ニュース一覧