PythonでTUIアプリを作ろう 第二部入魂編 ( その1 個人データの管理を考える )

再開にあたって


先に9回に渡って、Python Urwidを使用したTUI(Terminal base User Interface)アプリケーション開発について解説してきました。
Urwidの基本概念と、主な部品の仕様について説明し終えたつもりですが、あくまでもUI部品の動作レベルを示したにとどまり、具体性に乏しかったことは否めません。やはり、実データをベースに説明していかないと「仏作って魂入れず」ですね。実際に動くTUIベースのアプリケーションを構築する必要があるようです。

そこで、今回から数回に渡って、わたし自身が日常的に使用しているデータ管理アプリケーションを事例に説明を加えていきたいと思います。ただ、個人データを公開してもなんの意味もありませんから、その部分は少し頑張って、興味をもってもらえるようなデータを調達したいと考えています。


その昔、PalmというPDAがあった..。

さて、ここで少し昔話にお付き合いください。
もう20年以上前の話になりますので、知っている方のほうが少ないかもしれませんが、PalmというPDAがありました。

Palmの特徴は「Zen(禅) of Palm」といわれるフィロソフィー(哲学)で強調され、限られたリソースを効率的に使って、実践的なユーザインタフェースを提供している。

とありますが、その当時としては本当の意味で、実用的なPDAだったような気がします。
特筆すべきなのは、Graffitiという手書き入力で、少し特殊なアルファベット文字をスタイラスで入力するという手法は、非常に斬新なものでした。時々、「これはすごい」と思わせるソフトウエアがありますが、これはまさしくそれに値するものでした。

かく言うわたしもそれなりに使い込んだので、令和の今でも、

フリック入力はできないけど、Graffitiなら使えるぞ(笑)。

誰も褒めてくれないけど。

さて、Palmのオペレーティングシステム、Palm OSは他社にもライセンス供与され、IBM、ソニーなどから互換機が発売されていました。IBMのWorkPad、SonyのCLIEが有名でしたが、特にSonyは積極的にマシンを投入、ここをみると、なんとトータルで18機種も出していました。

ちなみに下記の写真は、TRGProという互換機。2000年発売ということですが、だいぶ後で安く購入した覚えがあります。

TRGPro

単4電池2本の駆動なので、電池を入れ替えたらちゃんと動きました。CLIEもあるのですが、クレイドルとACアダプタが見つかりません。捨てたのかもしれないなあ。


’list’というデータ管理ツール

さて、1990年代後半から2000年前半にPDA市場を席巻したPalmには、当然その上で動くソフトウエアも多数開発されました。その中で、わたしが一番気に入っていたツールが、listというデータ管理ツールでした。
データベースと名乗ってはいますが、Palmの画面は限られていますから、使えるフィールドはわずか4つにすぎません。また、検索も極めて限定的なものであり、当初はとても使えるレベルではなかろうと思ったものですが、いろいろ工夫してやると、それなりに使えることに気がついたのです。


個人データ管理を考えてみる。

上記の”list”がどこまで考えていたかは不明ですが、このアプリケーションを使いながら、個人データの管理手法について、当時いろいろ考えてみました。

(1) フィールド構造を決めてしまうこと

個人レベルのデータですから件数はしれていますが、管理対象は一つではありません。管理したいデータの属性、数などはバラバラですから、それに引きづられてしまうと、個別にデータ管理をしないといけなくなってしまい、あまりに非効率です。
そこで、最初にフィールドに関する制約、原則を決めてしまうのです。

1) フィールド数を限定する。
下記の4フィールドに集約してしまいます。

Category  分類項目  
Field01   データフィールド1  
Field02   データフィールド2  
Note      複数行の文字列  

複数情報をこれらのフィールドに押し込んでしまえたら、1つのフォーマットで、すべてのデータを集中管理できることになります。

2)属性はすべて文字列とする。
厳格なデータ管理なんてやろうとしてはいけません。数字や日付も文字列でしょ。深く考えないこと、これが重要です。

(2) データの入れ方を工夫する

フィールド数が限定されていますので、1つのフィールドに連結された複数情報を入れることで対応します。

例えば、「本の管理」を考えてみましょう。
管理対象に項目といえば、「タイトル」、「著者名」、「出版社」、「定価」、「感想」などなどありますが、これをそれぞれ別フィールドにするのではなく、

Category  : 購入年や本のジャンルなどの分類項目。  
Field01  : タイトル(著者名)  
Field02  : 出版社(定価)  
Note    : 購入場所、感想などを複数行で入れる。  

のようにまとめてしまうのです。

(3) 検索機能と目検

このようなデータ管理で、最も重要となる検索機能ですが、基本はCategoryによる分類しかありません。
これだけでは不十分なので、全件対象とした文字列検索機能を組み入れます。指定された文字列で、Field01、Field02、Noteの各フィールドに部分一致をかけるだけですが。
これで絞り込んだ結果に対し、あとは目検で対応します。ようするに、データの曖昧さを是認して、人間の能力に頼るわけです。個人データベースなのですから、「見ればわかる。それで十分」と割り切ること。これもポイントの一つではないかと考えたわけです。


その後の展開

さて、気に入っていた”list”ですが、その後のPalmOSの衰退と共に使えなくなってしまいました。
こうなったらしかたがないので、自分で作ることにしました。コンセプトを参考にして、いくつかの言語やデータベースをベースに実装、実際に使用してきたわけです。

今回は、Pythonで実装したものをベースとして採用し、TUIアプリケーションとして仕上げていきたいと考えています。