前回
しかし、prompt.
検証環境
今回は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>
prompt.jsonに設定できる項目
prompt.
desc
descは、テーマの説明を書くための項目です。プロンプトの表示内容に影響を及ぼすことは今のところはありません。作成したprompt.
{
"desc": "このjsonの設定の説明を書いておきましょう"
}
symbols
symbolsは、プロンプト内で使われる区切り文字や省略記号をまとめて定義する項目です。たとえば、セグメント同士の区切りを空白にしたい、省略された文字列の末尾を...にしたい、といった場合に使います。各セグメントに個別に書くのではなく、テーマ全体で共通の記号を定義できる点が便利です。
設定できる項目は3個で、separator、separator2、ellipsisがあります。separatorとseparator2はどちらもセグメント間の区切り文字ですが、separatorは通常の区切りに使われます。separator2は同じ背景色のセグメントが続く場合の区切りとして使われます。同じ区切りですが、通常の区切りか背景色かで違いが出ます。
{
"symbols": {
"separator": "/",
"separator2": ":"
}
}
このようにホストと接続方式が同じ背景色になっているので
一方、ellipsisはセグメント間の区切りではなく、長い文字列が省略表示されたときに末尾へ付ける文字です。以下のように設定して確認してみましょう。
{
"symbols": {
"ellipsis": "..."
},
"segments": [
{
"text": "very.very.very.very.very.very.very.very.long.text.for.checking.ellipsis.in.mysql.shell.prompt.theme",
"fg": "white",
"bg": "blue",
"min_width": 8,
"shrink": "ellipsize"
},
{
"text": "%Mode%",
"fg": "white",
"bg": "red"
}
]
}
上記のように、ものすごく長い文字などを設定してターミナルの横幅を縮めた状態で、MySQL Shellを起動してみましょう。
このように省略されているのがわかります。この文字がellipsisで設定した値になります。
classes
classesは、ひとことで言うと
{
"classes": {
"host": {
"fg": "white",
"bg": "blue",
"padding": 1
},
"mode": {
"fg": "white",
"bg": "green",
"padding": 1
}
},
"segments": [
{
"classes": ["host"],
"text": "%host%"
},
{
"classes": ["mode"],
"text": "%Mode%"
}
]
}
その他、使用できる値には以下のようなものがあります。
| 属性 | 意味 | 例 |
|---|---|---|
text |
表示する文字列。%host% などの変数も使える |
"text": "%schema%" |
fg |
文字色、前景色 | "fg": "white" |
bg |
背景色 | "bg": "blue" |
bold |
太字にする | "bold": true |
underline |
下線を付ける | "underline": true |
padding |
セグメント文字列の左右に入れる空白数 | "padding": 1 |
separator |
そのセグメントの前に表示する区切り文字を上書きする | "separator": "/" |
min_ |
縮小表示するときに最低限残す幅 | "min_ |
shrink |
幅が足りないときの縮小方法 | "shrink": "ellipsize" |
variables
variablesは、独自の変数を定義するための項目です。MySQL Shellのプロンプトでは%host%や%schema%のような組み込み変数を使えますが、variablesを使うとそれらをもとにした独自の変数を定義できます。
たとえば、接続先ホストが環境変数PRODUCTION_
{
"variables": {
"is_production": {
"match": {
"pattern": "*;%host%;*",
"value": ";%env:PRODUCTION_SERVERS%;"
},
"if_true": "production",
"if_false": ""
}
}
}
このようにすると、host部を環境変数のPRODUCTION_
これ単体だと使い方がわからないと思いますが、先述したclassesと合わせて使ってみましょう。classesは配列なので複数指定できます。また先頭から合致したものが選択されるという話をしていました。
以下のように指定してみましょう。
{
"classes": {
"production": {
"text": " PRODUCTION ",
"fg": "white",
"bg": "red",
"bold": true
},
"normal": {
"text": " normal ",
"fg": "white",
"bg": "blue"
}
},
"variables": {
"is_production": {
"match": {
"pattern": "*;%host%;*",
"value": ";%env:PRODUCTION_SERVERS%;"
},
"if_true": "production",
"if_false": ""
}
},
"segments": [
{
"classes": [
"%is_production%",
"normal"
]
}
],
"prompt": {
"text": "> ",
"cont_text": "-> "
}
}
上記の設定では、何もせずにログインした場合はnormalと表示されています。
環境変数の設定後に、envと一致している場合はPRODUCTIONと表示されるようになりました。
まとめ
前回は、MySQL Shellのプロンプトを静的に変更する方法を紹介しました。今回は、まだ紹介していなかったsymbols、classes、variablesを使って、プロンプトの表示をもう少し柔軟に変更してみました。classesを使うと、セグメントに指定する色や文字列を名前付きでまとめられます。また、variablesと組み合わせることで、接続先ホストや環境変数の値に応じて、適用するclassを切り替えることもできます。これにより、たとえば本番環境に接続している場合だけPRODUCTIONと表示するといったカスタマイズが可能になります。
プロンプトは毎回の操作で目に入るため、接続先や状態をわかりやすく表示しておくと、作業時の確認にも役立ちます。MySQL Shellをよく使う場合は、自分の環境に合わせてprompt.