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アプリを作ろうを参照ください。