3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MySQLAdvent Calendar 2024

Day 8

MySQLShellのページャーにovを!

Last updated at Posted at 2024-12-07

この記事は、2024年Advent Calendarの12月8日の記事です。
実は、PostgreSQL Advent Calendar 2024 12月6日ののMySQLShell版です。

MySQLShellのページャー

MySQLShellではページャーの設定ができます。ページャーを設定していない場合は出力が流れてしまい、端末等のスクロールをさかのぼって確認する必要があります。

lessページャー

そこでページャーを使用しますが、そのとき、一番使われているページャーはlessではないでしょうか。

lessは昔からあり、安定していて、完成して機能追加もされていない...と思っていませんか?
実は、lessは今も開発が進んでいて、新しい機能が追加されています。lessのバージョンを確認して、603以上であれば、大きな機能追加がされています。

less --version
less 671x (GNU regular expressions)

※ ここでは開発版の671xを使用しています。603以上であれば使えるはずですが、多少動作は違うかもしれません。

通常のless

画面に収まらないので、カラム名と枠線により最初の方のデータしか表示されていません。ここで表示をとどめておいて、スクロールして表示できるようにしているのがページャーです。
そして、通常はスクロールしていくと、カラム名や枠線もスクロールで消えていきデータだけが表示されます。
ページャーとは表示する中身に関係なく、1画面分を表示するためのもの...だったのは昔の話です。

その画面のまま--headerと打ってみましょう。これはlessのオプションを起動後に指定して切り替えています。

Header lines:とプロンプトが出るので、2と入力してEnterを押してください。

折返し表示がなくなり横スクロールするマークが表示されるようになっています。
これで上の2行(枠の上部とカラム名)はヘッダーとして常に表示されるようになります。

ヘッダー付きless

今までたくさんのカラムを表示していたときには\Gを使用するといった方法がありましたが、ページャーの機能により見やすくなることがわかりました。

もっと便利にしたいですか?それならばovをおすすめします。

その前にpspg

MySQLShellの結果表示を改善するために、pspgを使うこともできます。
pspg

pspgはカラム名の固定やカラムを固定して表示することができます。もともとPostgreSQL用として作られたようですが、MySQLShellのデータを表示するために便利に使えます。

ovページャー

ovは、私がGo言語で作成しているページャーです。

pspgと同じようにpsqlのページャーとして使えるように開発を開始しましたが、当初から汎用のページャーとしても使えるように設計しています。

そのため、MySQLShellに対応した機能を備えつつも、デフォルトでは単純なページャーとして機能し、オプションによってより最適な表示を実現しています。

インストール

Go言語がサポートしている環境であれば動作します。

まず、ovをインストールします。以下のコマンドを実行してください。リリースページから各種パッケージやバイナリがダウンロードできます。Go言語で作られているのでバイナリもダウンロードしてパスのあるところに置くだけで使えます。

また、Go言語がインストールされている環境であれば、以下のコマンドでインストールできます。

go install github.com/noborus/ov@latest

pspgと同じようにpsqlのページャーとして使えるように開発を開始しましたが、当初から汎用のページャーとしても使えるように設計しています。

そのため、表形式に対応した機能を備えつつも、オプションによる切り替えによって実現しています。

設定

ovは汎用のページャーとして使えるようになっていので、環境変数PAGERに設定することで様々な場面で使えます。

MySQLShell用にオプションを設定する場合は、MySQLShell上でオプションを永続化するように設定します。

オプションは好みによりますが、この後解説していきます。

推奨例は以下のようになります。

shell.options.setPersist("pager","ov -F -H1 --skip-lines 1 -C -d'|' --column-mode --column-rainbow --align")

SQLモードとPythonモードでは、以下のように設定します。

\option --persist pager "ov -F -H1 --skip-lines 1 -C -d '|' --column-mode --column-rainbow --align"

この実行により、~/.mysqlsh/optios.jsonに追加されていると思います。

オプション

-Fまたは--quit-if-one-screenは、lessと同じで1画面に収まる場合はページャー画面を表示せずに(実際には受け取った分を出力だけして)すぐに終了します。

ヘッダー機能(とスキップ機能)

まずはヘッダー機能です。less--headerと同じようにヘッダーを固定表示できます。オプションは--header 数値または-H 数値です。
ovでは、ヘッダーを指定しても折り返して表示できます。
MySQLShellではカラム名の上下に区切り線で囲まれていますが、ovではヘッダーのスタイルを変更できるので、背景色を変えると-H1でも十分にわかりやすくなります。
ヘッダーのスタイルで見やすくしているので、上下の区切り線は無くても良いので、上の区切り線を表示しないようにする、--skip-lines 1を指定しています。

ovヘッダー

交互に色を変える

たくさんの行と列がある場合は、パット見でどの行かがわかりにくくなるため、交互に背景色を変えて表示している表はよくあります。それを実現するオプションが--alternate-rowsまたは-Cです。

ov交互に色を変える

カラムモード

「行」がわかったとしても、カラムが多い場合は折返し表示になり、カラム名が表示されていたとしても、どのカラムかわかりにくくなるため、カラムを選択するモードがあります。これはカラムの区切り文字を指定して、カラムを特定し、そのカラムだけをハイライト表示するモードです。
まず、カラムの区切り文字を指定するオプションが--column-delimiter "|"または-d "|"です。
そして、カラムモードを指定するオプションが--column-modeまたは-cです。

これによりカーソルを動かすことで、どの行のどのカラムかがわかりやすくなります。

ovカラムモード

カラムレインボー

カラムモードはカーソルを動かしてハイライト表示する必要がありますが、カラムレインボーはあらかじめカラム毎に色を割り当てて表示します。これにより、さらにカラムを特定しやすくなります。
オプションは--column-rainbowです。

ovカラムレインボー

カラムの縮小表示

MySQLShellの結果は、カラムの幅を揃えているため、ページャー側で揃える必要はありませんが、幅を揃えるモードにしておくと、カラムを選択して縮小表示ができるようになります。
選択したカラム上でsキーを押すと縮小表示と通常表示を切り替えることができます。
これにより長いカラムが長いカラムが邪魔になったときにもクエリを再実行することなく、一覧表示できます。

ovカラムの縮小表示

まとめ

ovはもともとpsqlの結果表示を改善するために開発を開始しました。
そのため、テーブルの表示に最適な機能を備えてMySQLShellでも便利に使えると思います。
また、汎用ページャーとしての機能も豊富に備えているため、様々な場面で使えるページャーとして使えるようになっています。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?