PythonでTUIアプリを作ろう ( その1 TUIアプリとは )

TUIアプリの活用範囲に注目しよう。



一般に、コンピュータシステムにおける「ユーザーインタフェース(UI)」といえば、WindowsやOS Xで慣れ親しんでいるような「画面上にウィンドウを表示してマウスで操作する」というスタイルになるでしょう。
しかし、その一方で「ターミナル」のように、マウスは全く使用せず、キーボード入力だけで実行する環境もあります。何のガイダンスもない無愛想な環境なので、入力コマンドを知らない人間には、何もできないと言っても過言ではありませんから、Windowsのユーザーの中には、全く使わないという方もおられるでしょう。逆に、ターミナル環境にすっかり慣れ親しんでしまって、「マウスを触ることなどまったくない」というツワモノも少なからず存在するようです。

前者のように、マウス操作を中心とした環境のインタフェースを「GUI(Graphical User Interface)」と呼び、後者のキーボードによる入力環境を「CUI(Character User Interface)」と呼ぶようです。

「CUI」というと「1行のコマンドを入力する」といった操作を連想しますが、ターミナル上でも画面を制御して、ユーザー入力フィールドを設定したり、ボタン操作、一覧リスト表示などの機能を実現することができます。
下記に、そのようなアプリケーションの一つである、懐かしのファイラー”MC”こと”ミッドナイトコマンダー”の表示例を示します。

地味と思われるターミナルですが、結構派手な画面が実現できるわけです。


”TUI”アプリケーションとは

このようなアプリケーションのインターフェースは、一般に”TUI”と呼ばれます。
TUI”は、テキストユーザインタフェース(Text User Interface)、またはターミナルベースユーザインタフェース(Terminal base User Interface)のとも言われるようですが、意味するところは同じで、ターミナル上で動作完結するアプリケーションを指します。

TUIアプリは、多くの場合、”curses”あるいは、その後継の”ncurses”というCライブラリをベースとすることで、汎用性を担保しています。このライブラリは、ターミナルの基本動作をESCシーケンスで定義しています。そこで定義されたコマンドを、それぞれのターミナルタイプ毎にマッピングすることで、共通インターフェースを実現しているわけです。一昔前ならVT100、いまならxtermなどが代表的なターミナルタイプです。


TUIアプリの特徴と問題

このようなTUIアプリの特徴として、大きく2つが挙げられるでしょう。

  • 動作が極めて軽いこと。
    基本的に、ターミナル制御はマシンリソースを消費しませんので、きわめて軽快に動きます。
    curses”だから、「のろい」ということは全くありません(笑)。
  • 応用範囲が広いこと。
    UNIX環境であれば、たいていの環境で利用可能です。また、SSHでログインしたリモートマシン上でも動作しますから、ネットワーク経由で使用することもできます。

一方で、GUIと言われるWindowsやMacOSの標準アプリケーションと比べてみると、

  • 画面表示はあまり美しくありませんし、操作性に統一性がありません。ユーザーフレンドリとは言えない環境なので、違和感を感じる人は少なくないでしょう。
  • コマンドを直接入力する必要があるので、それなりの前提知識、スキルが必要となります。

という問題があります。


TUIアプリの活用範囲は広い

先にも述べましたが、TUIアプリケーションは、多くの環境で汎用的に利用することが可能です。

  • UNIXをベースにしている環境であれば、まず動きますので、UbuntuをはじめとするLinux環境はもちろん、MacOSもDarwinというUNIXベースなので、動作に問題はないでしょう。
  • Windows環境では、標準の環境では難しいかもしれませんが、CygwinのようなUNIX疑似環境で動作します。最近のWindows10 64ビット環境ならば、WSLがありますね。

さらに注目すべきは、Android環境です。

Termuxというツールをインストールすると、Androidのスマートフォン上でTUIアプリが動作するのです。

ご存知の方も多いでしょうが、Androidで動くアプリケーション開発では、Javaがベースになります。最近では簡易言語Kotlinなども使えるようですが、いずれにしても膨大なAndroidのAPIを理解しないといけません。
日常的にAndroidアプリ開発に従事するのであれば、その労力の対価は期待できますが、「ちょっと作ってみたい」といった軽い発想には、いささか敷居が高いと言わざるえません。
また、苦労して作ったアプリは、基本的にAndroid上でしか動かないので、日頃使っているデスクトップ上で使用することは難しいでしょう。

アプリケーションを作るのであれば、使用している様々な環境で動かしたい。

そういう思いは当然でしょう。
TUIベースでアプリケーションを作成すれば、そのようなニーズに答えることができそうです。「自作アプリを、スマートフォンとPCで同時に動かしてみる」というのも一興ではないでしょうか


そこで、今回のテーマです。

「汎用的な言語を使ってTUIアプリを作成、様々な環境で動作させること」

を目標とします。

まず、開発言語はPythonを選択します。現在、非常に人気のある言語ですし、どの環境でも動作しますから、異議はないでしょう。

それでは、次回からPython上でのTUI作成環境を整え、実際にコードを書いていきましょう。


(2022/05 追記)
Go言語(golang)でも、ほぼ同様の内容でコードを書いています。PythonではなくGoに興味のある方は、Go言語(golang)でTUIアプリを作ろうを参照ください。