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_managerManagerオブジェクトを取得し、「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のオブジェクト生成とクロスコンパイルについて説明します。


ソースコードについて


GitHubに登録しました。今回のコードは、ListDBGとなります。