Go言語(golang)でTUIアプリを作ろう 第二部入魂編 ( その5 TUIアプリケーションへの作成 )
TUI部品とBoltManagerを連動させ、TUIアプリケーションを完成させよう。
Go言語(golang)でTUIアプリを作ろう(その1〜その10)で説明したgolang tviewによるTUI部品に、前回作成したBoltManagerとの連携機能を追加し、アプリケーションを完成していきます。
[1] ListDBアクセスの組み込み
ダミーデータで動かしていた部分を、ListDBにアクセスするよう変更していきます。
例えば、「Go言語(golang)でTUIアプリを作ろう ( その10 TextAreaの追加 )」では、テーブル一覧を下記のようなコードで実行していました。
func (self *MainList) getTable(pages *tview.Pages, common *Common) {
s := strings.Split("テーブルA テーブルB テーブルC テーブルE テーブルF テーブルG テーブルH テーブルI テーブルJ テーブルK テーブルL テーブルM", " ")
tables := MySelectBox(s, 30, 20, 2, 3, 0, true).
//tables := MySelectBox(s, 30, 20, 2, 3, 0, false).
SetDoneFunc(func(buttonLabel string, inputString string) {
if buttonLabel == "OK" {
common.reset()
common.tableName = inputString
pages.RemovePage("table")
self.display(common)
}
})
:
:
このような部分を、BoltManagerによるListDBアクセスに変更します。
基本的に、get_managerでManagerオブジェクトを取得し、「Go言語(golang)でTUIアプリを作ろう 第二部入魂編(その4 BoltManagerの拡充)」内で説明した関数を呼び出すことになります。以下、例を示しておきます。
(1) データテーブル一覧の表示と選択(tui/list.go)
先にダミーデータで実行していた「アプリケーション起動後に行うデータテーブル取得」の部分は、下記のようなコードになります。
func (self *MainList) getTable(pages *tview.Pages, common *Common) {
manager := listdb.GetManager(common.databaseName)
err := manager.Connect(common.databaseName, common.connectString)
if err != nil {
panic(err)
}
dbNames, _ := manager.GetDbNames()
sort.Strings(dbNames)
manager.Close()
current := 0
for i, c := range dbNames {
if c == common.tableName {
current = i
break
}
}
tables := MySelectBox(dbNames, 30, 20, 2, 3, current, true).
SetDoneFunc(func(buttonLabel string, inputString string) {
if buttonLabel == "OK" {
common.reset()
common.tableName = inputString
pages.RemovePage("table")
self.display(common)
}
})
:
:
}
(2) List一覧画面(tui/list.go)
(1)で選択されたデータテーブルを、List一覧として表示する部分も示しておきます。こちらは、SerachDB関数を使用しています。
manager := listdb.GetManager(common.databaseName)
err := manager.Connect(common.databaseName, common.connectString)
if err != nil {
panic(err)
}
listdb := manager.SearchDB(common.tableName, common.category, common.search, common.from, common.rows-1)
recordCount := manager.GetRecordCount(common.tableName, common.category, common.search)
manager.Close()
listdata := listdb.GetListData()
:
:
このように、ダミーデータの部分を、ListDBアクセスに変更していくことで、アプリケーションを完成させていくわけです。
(3) Detail画面(tui/detail.go)
Detail画面も同様ですが、こちらには下記の機能を追加しています。
- ページング機能
- データの追加、更新、削除機能
- Google Mapsとの連携機能
詳細はソースコードを見てください。
[2] アプリケーションの動作
完成したアプリケーションの動作を確認をしていきましょう。ここからソースコードをダウンロードし、実際に動かしてみてください。
プログラムの動作は、「PythonでTUIアプリを作ろう 第二部入魂編(その5 TUIアプリケーションの作成)」のものとほぼ同一になっています。
(1) プログラムの起動
ダウンロードしたディレクトリ(ListDBG)に移動して、下記のコマンドを入力します。
go run cmd/main.go
(2) データテーブル一覧の表示と選択
起動後、画面上の<T>ボタンをクリック、あるいはキーボードから’T‘を押すと、下図のようにデータテーブルの一覧が表示されるので、表示したいデータを選択します。ここでは、「ブックオフ店舗情報(東京)」を選んだとします。
(3) List一覧画面
「ブックオフ店舗情報(東京)」のList一覧が表示されます。
(4) Categoryの選択
この画面から、<C>ボタンをクリック、あるいはキーボードから’C‘を押すと、Categoryによる絞り込みができます。このデータテーブルでは、Categoryは東京二十三区になっているので、その区分の一覧が表示されます。
(5) 文字列検索
この画面から、<S>ボタンをクリック、あるいはキーボードから’S‘を押すと、文字列による絞り込みができます。
(6) Detail表示
List一覧画面からデータをEnterキー、あるいはマウスで選択すると、Detail表示画面に移行します。一応、下部のボタンによる更新処理も可能です。
(7) Google Mapsとの連携
TUI部品とは全く関係ありませんが、ちょっとした機能を付加してみました。
Field01、あるいはField02のフィールド名が’Address’あるいは’Map’の場合、上記(6)のDetail表示にリンク機能が働きます。
ここでEnterキーを叩くか、マウスでクリックするとブラウザが起動、Google Mapsに該当アドレスが表示されます。
以上が、Go言語(golang)によるTUIアプリケーションの概要です。簡単なアプリケーションですが、ニーズによっては役立つ分野があるかもしれません。何かの参考になれば幸いです。
次回は、このListDBGのオブジェクト生成とクロスコンパイルについて説明します。