DEIM Forum 2014 E3-5

SuperSQL クエリ作成支援システムの開発
木谷 将人†

五嶋 研人†

遠山元道 ††† 慶應義塾大学理工学部情報工学科 〒 223-8522 神奈川県横浜市港北区日吉 3-14-1
E-mail: †{masato,goto}@db.ics.keio.ac.jp, ††toyama@ics.keio.ac.jp
あらましSuperSQL は関係データベースの出力結果を構造化し, 多様なレイアウト表現を可能とする SQL の拡張言語である. 本論文では, SuperSQL の使用経験のないユーザでも容易に使用することができる専用のクエリエディタ（ssqltool）を提案し, 実装した. ssqltool は, SuperSQL クエリの強力な作成支援機能（装飾子・関数補完機能, リアルタイム Viewer 機能など）をユーザへ提供する. リアルタイム Viewer 機能は, SuperSQL のレイアウト演算子の効果が即時にフィードバックされるため, 初心者の習得に特に効果的である. さらに, データベースのテーブル・スキーマ閲覧, クエリの作成から実行, 生成された HTML ページの確認, その他設定などを行うことができる.
キーワード

SQL, SuperSQL, Swing, GUI, IDE, Java, JavaFX

1. は じ め にSuperSQL は関係データベースの出力結果を構造化し, 多様表し, 結合子, 反復子などのレイアウト指定演算子を持つ一種の式である.

2. 1 結 合 子

なレイアウト表現を可能とする SQL の拡張言語である. 通結合子はデータベースから得られたデータをどの方向 (次元)常の SQL では, シンプルでフラットな表しか再現できないが,に結合するかを指定する演算子であり, 以下の 3 種類がある. 括SuperSQL を用いることで様々な表を作成することができる. ま

弧内はクエリ中の演算子を示している.

た, 通常の HTML と PHP を用いた Web ページを SuperSQLを用いるとはるかに少ない行数で生成することができる.
本論文では, 現在のの SuperSQL による開発の問題点を解•

水平結合子 (,)

データを横に結合して出力.
例 : Name, Tel

name tel決し, SuperSQL の使用経験のないユーザでも容易に使用することができ, さらに, すでに使用経験のあるユーザにとっても SuperSQL による開発がスムーズに行える専用のエディタ（ssqltool）を提案する. ssqltool は, 【クエリを実行】, 【フォルダを指定して実行】, 【設定】の 3 つのタブから構成されたシンプルな構造であり, 誰でも使用しやすいデザインになっている. そして, ssqltool は SuperSQL による開発に必要な設定ファイルの作成, SuperSQL クエリの作成・編集から実行, 生成された HTML ファイルの閲覧を一括して行うことができ, さらに SuperSQL による開発を支援する強力な機能を提供する.
以下, 本稿の構成を示す. 2 章で SuperSQL の概要を述べ, 3章で SuperSQL による開発の現状について述べる. 4 章ではssqltool の概要について述べ, 5 章で ssqltool の提供するクエリ作成支援機能について述べる. そして, 6 章では評価について述
べ, 7 章で結論を述べる.

2. SuperSQL
この章では SuperSQL について簡単に述べる. SuperSQL は関係データベースの出力結果を構造化し, 多様なレイアウト表現を可能とする SQL の拡張言語であり, 慶應義塾大学遠山研究室で開発されている [1] [2]. そのクエリは SQL の SELECT 句を GENERATE< media >< TFE > の 構文を持つ GENER-ATE 句で置き換えたものである. ここで < media > は出力媒体を示し, HTML, PDF などの指定がで きる. また < TFE >はターゲットリストの拡張である Target Form Expression を•垂直結合子 (!)

データを縦に結合して出力.
例 : Name! Telnametel•

深度結合子 (%)

データを 3 次元方法へ結合. 出力が HTML ならばリンクとなる.
例 : Name % Telname→tel

2. 2 反 復 子
反復子は指定する方向に, データベースの値があるだけ繰り返して表示する. また反復子はただ構造を指定するだけでなく,そのネストの関係によって属性間の関連を指定できる. 例えば[科目名]! ,[学籍番号]! ,[評点]!とした場合には各属性間に関連はなく, 単に各々の一覧が表示されるだけである. 一方, ネストを利用して[科目名! [学籍番号, 評点]! ]!とした場合には, その科目毎に学籍番号と評点の一覧が表示されるといったように, 属性間の関連が指定される. 以下, その（ 4 ） ブラウザを通して生成されたファイルの確認を行う.

種類について述べる.

•水平反復子 ([ ],)データインスタンスがある限り, その属性のデータを横に繰りこの方法の問題点として, 2 点挙げられる. まずは SuperSQLによる開発を行う際, 複数のソフトウェアを使用しなければな返し表示する.

らないという点である. もう一つはクエリの実行時に即座に生例 : [Name],•

name1 name2 ・・・ name10

垂直反復子 ([ ]!)データインスタンスがある限り, その属性のデータを縦に繰り成されたファイルを確認することができないという点である.

3. 2 方法 2：Eclipse のプラグインを使用した実行
Eclipse のプラグインを使用して SuperSQL の実行を行う手順は以下の通りである.

返し表示する.

例 : [Name]!

name1（ 1 ） 設定ファイルをエディタを使用して作成する.

name2（ 2 ） SuperSQL での開発を行うための Eclipse の初期設定・・・name10
2. 3 装 飾 子
SuperSQL では関係データベースより抽出された情報に, 文を行う.
（ 3 ） Eclipse 内のエディタで SuperSQL クエリを作成し, 実行する.
（ 4 ） Eclipse の内部ブラウザで生成されたファイルの確認を行う.

字サイズ, 文字スタイル, 横幅, 文字色, 背景, 高さ, 位置などの情報を付加できる. これらは装飾演算子 (@) によって指定する.

< 属性名 >@{ < 装飾指定 > }装飾指定は”装飾子の名称 = その内容” として指定する. 複数指定するときは各々を”, ”で区切る.

[employee.name@{width=200, color=red}]!
2. 4 関数

2. 4. 1 image 関数
image 関数を用いると画像を表示することが可能となる. 引
数には属性名, 画像ファイルの存在するディレクトリにパスを指定する.

image(id, path= ./pic )2. 4. 2 link 関数 (出力メディアが HTML の場合のみ)link 関数は, FOREACH 句と同時に用いる. これらを用いる
ことで深度結合子と同様にリンクを生成することができる.

link(cou.name, file= ./menu.sql , att=co.country)

3. SuperSQL による開発の現状
現在, SuperSQL による開発行うためには 2 つの方法がある.
コマンドラインから SuperSQL を実行する方法と, Eclipse のプラグインを使用して SuperSQL を実行する方法である [3]. この章ではそれぞれの方法とその問題点について述べる.

3. 1 方法 1：コマンドラインからの実行
コマンドラインから SuperSQL の実行を行う手順は以下の通りである.
（ 1 ） 設定ファイルをエディタを使用して作成する.
（ 2 ） SuperSQL クエリを同じく emacs や vi 等のエディタを使用して作成する.
（ 3 ） コマンドラインから ssql コマンドを入力して SuperSQL を実行する.

この方法は設定ファイルの作成以外全て Eclipse のみで行うことができるという非常に便利な方法であるが, 問題点が 2 点挙げられる. 1 つ目は Eclipse の初期設定が SuperSQL 初心者にとって扱いづらいという点である. もう 1 つはプラグインがSuperSQL 本体のソースコード結合されているいう点である.
すなわち, SuperSQL 本体のソースコードが変更されるたびにプラグインを作成しなおさなければならないということである.
この点は SuperSQL の開発者からすると扱いにくいものである.
そこで本論文では, SuperSQL クエリ作成支援システム（ssql-tool）を提案する.

4. SuperSQL クエリ作成支援システム: ssqltool
4. 1 概要ssqltool の開発は主に Java の Swing を用いて行った. ssqltool を使用することで, 今まで煩雑だった SuperSQL における開発の手順が単純化され, 初心者でも直感的に使用できるようになった. ユーザは ssqltool をダウンロードし, 起動するだけで SuperSQL による開発に必要な初期設定からクエリの作成,生成ファイルの確認まで容易に行うことができる.
以下に ssqltool の簡単な概要と基本機能を示す.

4. 2 システムの構成
本論文で提案する ssqltool は, 【クエリを実行】, 【フォルダを指定して実行】, 【設定】の 3 つのタブから成り立っている.
それぞれの画面を図 1, 図 2, 図 3 に示す.

4. 2. 1 クエリを実行【クエリを実行】タブではクエリの新規作成, クエリの編集,クエリの実行を主に行う. 新規作成を行いたい場合は画面上部のコンボボックス「新規作成」から作成したいメディアを選択することで, 選択したメディアに対応した以下のテンプレートがエディタに新たに挿入される.

図1

クエリを実行図 2 フォルダを指定して実行

図3 設

定

実行時に出力先のフォルダを自動的に開く仕様に成っているた

GENERATE < media >め生成されたファイルをすぐに確認できるように成っている.
このタブで指定されているフォルダは【クエリを実行】タブのFROM ;作業フォルダと同期しているため, 選択する必要がない.
この機能は複数ファイルをまとめて編集し, 全て実行したい

この機能によりユーザは新規作成を行う際に SuperSQL ク際に便利である. 実行結果のログは画面下部に表示され, どのエリのテンプレート部分を打ち込む手間を省くことができ, ス

ファイルが成功し, 失敗したのかを即座に確認することが可能

ムーズなクエリの作成を行うことが可能となる.

である.

画面左上のペインは指定した作業フォルダ内の.ssql ファイ
ル, すなわちクエリファイルのみをツリー形式で表示し, ファイ

4. 2. 3 設定/preference

ルのノードをシングルクリックすることで画面下部に選択した【設定】タブでは, 使用するデータベースの指定や実行時にクエリを閲覧, ダブルクリックで選択したクエリの編集を行う

生成されるファイルの出力先の指定, エディタ内インデント幅ことが可能である. このとき最初のクリック後, 0.2 秒以内にクの変更など基本的な設定を行うことができる.

リックがあった場合のみダブルクリックとして判定させた. さ

また, 【クエリを実行】タブと【フォルダを指定して実行】タらに, ファイルノードを右クリックすることでファイル操作ポッブで実行を行った場合, 【クエリを実行】タブであれば成功時プアップメニューを表示し, ファイルの削除, ファイルの複製,のブラウザ表示, 【フォルダを指定して実行】タブであれば出ファイル名の変更をツール内で行うことができる.

力先フォルダを開く機能のオン, オフの設定を行える.

画面左下では設定で指定したデータベースのテーブル, スキーマの一覧を閲覧することができる.
クエリを実行した際, 実行が成功すれば自動的にブラウザを変更された設定内容は【設定】タブから他のタブに切り替えたときもしくは, 画面を閉じた際に自動的に保存される.

4. 3 ショートカットキー起動し, 生成された HTML ファイルを確認することができる.

表 1 に ssqltool で使用可能なショートカットキーの一覧を示

また, 画面下部のタブが自動的に【実行結果】タブに切り替わす. なお, コマンドの（）内は MacOS におけるショートカットり, 実行結果のログを閲覧することができる.

コマンドである.

編集中のクエリが前回の保存状態と異なっていた場合, すな
わち変更が加えられていた場合はエディタ上部のファイル名ラ

5. クエリ作成支援機能

ベル左側に*を表示し, クエリが変更され, 未保存であることをssqltool は強力なクエリ作成支援機能を提供する. これらのユーザに知らせる. この未保存の状態で左側のペインのファイ機能は, 装飾子・関数の補完機能, テーブル名・属性の補完機能,ルノードをダブルクリックした場合, 保存確認ダイヤログを表

リアルタイム Viewer 機能である. また, 様々なエディタ内で使示する.

用できる機能を提供する.

ssqltool を終了した場合, 自動的に作業フォルダと現在編集

この章ではそれぞれの代表的な機能について述べる.

しているクエリ情報をユーザのホームディレクトリに.ssqltool

5. 1 装飾子・関数の補完機能というファイル名で保存し, 次回開いた際に前回の情報を読み

5. 1. 1 装飾子の補完込んで反映させる. このときクエリが未保存であった場合, 保

表 1 で示したように【クエリを実行】タブのエディタ上で,存確認ダイヤログを表示する.

SuperSQL の装飾演算子である”@”を入力することで装飾子の一覧をポップアップで表示する. 表示されたポップアップのリ

4. 2. 2 フォルダを指定して実行

ストから項目を選択することでエディタに選択した装飾子が挿【フォルダを指定して実行】タブでは, 指定したフォルダ内入される. 1 つのターゲットに対し, 複数の装飾子を使用したいの全ての.ssql ファイルを一括して実行することができる. また,場合は装飾演算子”@”の {} 内で”,”を入力することで連続して

5. 2 テーブル名・属性の補完機能

表 1 ショートカットキー一覧

表 1 で示したように【クエリを実行】タブのエディタ上で,コマンド

動作”Ctrl(Command)+Space”を入力することでテーブル名・属性

Ctrl(Command)+Enter

エディタ上のクエリの実行

Esc or Ctrl(Command)+W

ssqltool の終了

Ctrl(Command)+S

エディタ上のクエリ、設定の保存

その複数の候補をポップアップで一覧表示する. 候補が 1 つしCtrl(Command)+Z

直前の動作の取り消し（UNDO）

かなかった場合は自動的にテーブル名・属性を補完する. テー

Ctrl(Command)+Y

直前の動作のやり直し（REDO）

ブル名・属性の入力途中で”Ctrl(Command)+Space”を入力した際にも同様の処理が行われる.

Ctrl(Command)

選択なし-現在の行をすぐ下に複写+Alt(option)+↓

選択あり-選択した行をすぐ下に複写

Ctrl(Command)+D

選択なし-現在の行を削除
選択あり-選択した行を削除

Ctrl(Command)+/

選択なし-現在の行をコメントアウト
選択あり-選択した文字をコメントアウト

SuperSQL 裝飾子の補完@Ctrl(Command)+F

SuperSQL 関数の補完

Ctrl(Command)+Space

テーブル名・属性の補完を補完することができる. 補完可能な候補が複数あった場合はまた, エディタ上のどこで”Ctrl+Space”の入力を行ったかによって補完対象は自動的に選択される. つまり, テーブル名入
力できる場所ではテーブル名を, 属性が入力できる場所では属性を補完する.
図 6 と図 7 にテーブル名と属性の補完の例を示す.

属性の補完を行うことができる.
図 4 に装飾子の補完の例を示す.
図6

テーブル名補完の例

図 7 属性補完の例
図4

装飾子補完の例

5. 3 リアルタイム Viewer 機能
5. 1. 2 関数の補完

5. 3. 1 JavaFX

同 様 に,【 ク エ リ を 実 行 】タ ブ の エ ディタ 上 で,この機能は JavaFX を用いて実装した. JavaFX とは, Java

”Ctrl(Command)+F”を入力することで関数の一覧をポップ仮想マシン上で動作するリッチインターネットアプリケーショアップで表示する. 表示されたポップアップのリストから項目ン (RIA) の GUI ライブラリであり, Java SE 7 Update 2 以降を選択することでエディタに選択した関数が挿入される.に標準搭載されている, Swing とは異なり, FXML と呼ばれる

図 5 に関数の補完の例を示す.

XML と CSS を併用してデザインを記述する.

なお, ポップアップで表示する装飾子・関数のリストはそれ

JavaFX は従来の AWT や Swing による Java の GUI 開発

ぞれ XML ファイルで管理している. 装飾子や関数を追加・削をより簡単に, その表現力をより豊かにした新しいプラットホー

除・修正したい場合でも ssqltool 本体のソースコードを変更すムである. JavaFX 自体はブラウザを要さず, 単体の Java アプる必要がなく, XML ファイルを編集するだけで簡単に行うことリケーションとして実行することが可能である.

ができる.

5. 3. 2 システムの実装
JavaFX を利用し, 別ウィンドウでリアルタイムに HTMLファイルを閲覧・確認することができるリアルタイム Viewer機能を実装した. この機能によってユーザはユーザ自身によって逐一クエリの実行を行う必要がなく, SuperSQL のレイアウ
ト演算子の効果や現在の HTML ファイルの状態を即座に確認することができる.
処理の流れは, まず一定時間ごとにエディタ上のクエリを読み込み, 前回実行したクエリ（一時クエリデータ）との比較を
図 5 関数補完の例行う. 変更があった場合のみ SuperSQL を実行し, 実行結果が成功であった場合は別ウィンドウの Viewer を更新し, 失敗した

場合は前回の情報を引き続き表示する. 最後に一時クエリデー
タを更新する. リアルタイム Viewer におけるフローチャート
を図 8 に示す.
図 10

6. 評

カッコの対応付けの例

価

本研究では, 2 つの方法で評価を行った. 1 つ目はユーザによるアンケート調査である. 慶應義塾大学理工学部管理工学科及び, 電子工学科の学部 3 年生を対象とした秋学期のデータベー
ス概論履修者 35 名に実際に授業の最終課題で ssqltool を使用してもらってアンケート調査実施し, 21 名からの回答を得ることができた. もう 1 つの方法は, ssqltool のクエリエディタとしての機能を評価するため, 類似ツールとの機能比較表を作成
図8

リアルタイム Viewer のフローチャート

5. 4 エディタ内キャレット機能
5. 4. 1 コメントアウト
SuperSQL ではクエリ内で”–”（ハイフン 2 つ）を用いることで, その行の”–”（ハイフン 2 つ）以降をコメントアウトされたものとして判定している. また, ”/*”と”*/”で囲まれた文字列も同様にである. 表 1 で示したように ssqltool では, コメントアウトを”Ctrl(Command)+/”で行うことができる. このとき, クエリ上のどこがコメントアウトされているのかすぐに把握できるように, コメントアウトされた文字列の色を灰色で表示する.
図 9 にコメントアウトの例を示す.

した.

6. 1 アンケート調査
アンケートの質問内容を以下に示す.
質問 1. 最終課題の SuperSQL を用いての開発で, ssqltool とコマンドラインからの実行のどちらを主に使用したか質問 2. ssqltool は使いやすかったか
質問 3. クエリの作成が直感的かつスムーズに行うことができたかそれぞれの回答結果をまとめたものを図 11, 図 12, 図 13 に示す. 図 11 を見ると 90%の学生が ssqltool を使用したという回答を得ることができた. また, 質問 2 においても使いやすかったもしくは, どちらかと言えば使いやすかったという回答が 95%であり, 否定的な意見は一件も見られなかった. 質問 3においても同じような結果を得ることができた.
また, この他にも各種補完機能を使用したかといった質問も行ったが, 全ての被験者から「使用した」という回答が得られた. 以上の結果より ssqltool の有用性を確認することができた.

図9

コメントアウトの例

5. 4. 2 カッコの対応付け
ssqltool では, カッコの対応付け（どの開きカッコがどの閉じカッコと対応しているか）を即座に確認することができる. 確
認したい開きカッコの先頭にキャレットを合わせることによって, その開きカッコに対応した閉じカッコがバックグラウンド
カラーが黄色, 文字は太字になってエディタ上で表示される.
もちろん, コメントアウトされているカッコは無視される仕様になっている. この機能は入れ子構造等の複雑なクエリを書いた際にすぐにカッコの対応付けを把握することができるため,図 11 ssqltool とコマンドラインからの実行のどちらを主に使用したか便利である.
図 10 にカッコの対応付けの例を示す.

6. 2 類似ツールとの機能比較
今回使用した類似ツールは, PostgreSQL のデータベース管理ツールである pgAdmin [4] と SQLite のデータベース管理ツールである SQLiteStudio [5] である. この 2 つのツールとssqltool の 3 つのクエリエディタとしての機能の比較を行った.

Linux）で動作する. 今回比較した ssqltool と pgAdmin とSQLiteStudio は全て 3 つの OS で動作するもしくはそれぞれの OS 向けのソフトが公開されているため, 比較はできないが一般で公開されている DB 管理ソフトウェアやクエリエディ
タは Windows のみなど特定の OS でしか使用できないソフトが多かった. クロスプラットフォームという観点から見れば,ssqltool は非常に評価できると言える.

7. お わ り に
7. 1 結論

本研究では, SuperSQL に使用経験のないユーザやすでに使

図 12 ssqltool は使いやすかったか用経験のあるユーザでも SuperSQL による開発がスムーズに行える専用のエディタ（ssqltool）を提案し, 実装した. ssqltool
は装飾子・関数の補完機能やテーブル名・属性の補完機能, リア
ルタイム Viewer 機能やエディタ上で使用できる便利なショー
トカットキーなど SuperSQL クエリの作成を補助する強力な機能を提供する. これらの機能によってクエリ作成にかかる時間と手間を大幅に短縮することができ, より直感的な操作で誰でも容易に SuperSQL による開発を行うことができる.
今後は, さらにクエリ支援機能の追加・強化を行い, 初心者にとってもすでに SuperSQL の使用経験のある人にとっても使用
図 13

クエリの作成が直感的かつスムーズに行うことができたかしやすいように ssqltool の改善を行っていきたい.

表 2 に機能比較表を示す.
表 2 各ツールのクエリエディタ機能比較表
機能SQLiteStudio pgAdmin ssqltool

データベース表示○○○

UNDO（取り消し）

○

○

○

REDO（やり直し）

○

○

○

カッコの対応付け○○○

テーブル名の補完

○

○

○

行の削除

○

○

○

行の複製

×

○

○

文字列のコメントアウト

×

○

○

検索・置換

○

○

×

クエリ内エラー表示○○

×

クエリの整形

○

×

×

属性の補完

○

×

○

関数等テンプレートの補完

×

×

○

新規クエリテンプレート挿入

××○

リアルタイム Viewer

××○

表 2 より, 本論文で提案した ssqltool は Web で公開されている他のクエリエディタに匹敵するもしくはそれ以上の機能を備えていることがわかる. 特に関数等のテンプレートの補完, 新規クエリテンプレートの挿入, リアルタイム Viewer の機能はpgAdmin と SQLiteStudio のどちらにもない, 優れた機能であると言える.
なお, ssqltool は 1 ソースで 3 つの OS（Windows, Mac,参考文献[1] SuperSQL: http://SuperSQL.db.ics.keio.ac.jp/[2] M. Toyama: SuperSQL: An Extended SQL for Database
Publishing and Presentation , Proceedings of ACM SIGMOD 98 International Conference on Management of Data,
pp. 584-586, 1998
[3] Ria Mae BORROMEO: Integrating SuperSQL in Software
Development Environment Systems , Proceedings of the3rd Forum on Data Engineering and Information Management, 2011[4] pgAdmin: http://www.pgadmin.org/[5] SQLiteStudio: http://sqlitestudio.pl/