【特別レポート】続「PilePaperFile」
~「欲しい」が止まず年間50本のソフトを開発


 未踏ソフトウェア後、ライフログ機能をもつソフト群約50本をC#で開発し運用してテスト中である。その全体像を大まかに整理してご報告したい。

●未踏の後C#で開発スタート

 IPA未踏ソフトウェアに採択された「SmartWrite/SmartCalendar」(2004年)、および「PilePaperFile」(2007年)プロジェクトでは、筆者はプロジェクトの総責任者として仕様を作成する作業を行なった。その後、プロジェクトチームは解散した。仕様だけではソフトウェアとしては動かないため、一念発起してC#で開発を始めることにした。それから約1年で約50本のソフトを開発した。

 筆者は、gawk、sedを少しだけ使える程度で、本格的なプログラム言語を修得するのはC#がはじめてである。素人同然というか素人である。マイクロソフトの提供するフリーの開発環境VisualStudioを使って開発をした。その素人がなぜこんなにも、と不思議に思う。

●C#の高い開発効率

 1つの理由はC#にある。C#の開発効率が非常によい。開発効率がよいとは、開発した比較的初期から感じていた。本稿を書きたいと感じた理由の1つは、そこにある。1年で50本が多いかどうかはわからないが、少なくはないだろう。その開発効率のよさは、C#ゆえである可能性はある。

 たとえば、C#でメール送信プログラムを書く場合、

-----
SmtpClient client = new SmtpClient(smtpserver, int.Parse(port));
client.Credentials = new NetworkCredential(mailaddress, mailpassword);
client.From = mailaddress;
client.EnableSsl = false;
client.Timeout = 10000;
client.Send(message);
-----

 と、6行書くだけでよい。参照を示すusingをいれても7行。ぜんぶで10行以下なのは確実である。

 項目はほとんど明らかで、テキストファイルにメールの設定を書くのと大差ない。これでメール送信できちゃうのである。びっくりするほど効率的だといって過言ではないだろう。

 最近だと、Twitterへの発信機能があるが、それもC#ならわずか4行か5行で書ける。

 50本のソフトウェアのうち、大半にメール送信機能やTwitter送信機能がついているのだが、その理由は明らかだ。メール送信が簡単だからである。

 こうなると、さまざまなソフト(スケジューラとかブラウザとか)プラスメール機能とか、プラスTwitter機能と水平展開することがきわめて容易である。ふと思ったら、追加して試すことがたいへんたやすい。

 あわせてC#は、C/C++やJava、あるいはVisualBasicとくらべてもなんとなく取っつきやすい気がする。というのは、これまでにC/C++、Java、VisualBasicはソースを目にすることはあっても、微妙になじめなかったのだ。RubyとPerlはインストールがむずかしくて断念した。別に言語について他意はない。PerlやRubyでもメールやTwitterなどは同程度の手間でできるだろう。WindowsでなくMacをメインにしていれば別の環境を使ったろう。いずれ機会があればC/C++を学びたいとは思っている。修得しやすく感じたのは、まあ感覚的なものだ。

 それでも、最初にメール送信機能をかき、それがわずかに6行ですむことを知ったことは、言語を修得するための「成功体験」としては、とてもよいスタートダッシュだった。

●開発環境の完成度

 2つ目の理由は、開発環境の効率のよさだろう。開発を進めるにあたって、統合環境のVisualStudioのほかに、全ソースを一括で検索できるシステムが用意されている。これにより、一度でもうまくいったソースは、くり返し使用できるようになったのである。

 プログラムは、表面は異なっていても、内部ではおなじようなロジックを何度もくり返して使うものである。それを検索しながら行なうことで、効率よく開発しているのである。動くソースは黄金のようなものだ。どんな仕様も理論も、動くソースの前では価値を持たない。

 3つ目の理由は、情報の多さだ。C#で開発をしている人は多く、インターネット上にはソースコードを手始めとして、比較的豊富な情報がある。これには助けられることが少なくなかった。

●欲しいからつくる

 そして最後の理由。それは筆者のモチベーションだろう。「SmartWrite/SmartCalendar」も、「PilePaperFile」も、コンセプトを提示することはできたが、本格的に広く運用できるところには微妙にたどりつかなかった。

 筆者自身はすべてのソフトを使っているのだが、設定機能が特別だったりするために、なかなか簡単に使えるものではないし、微妙な機能の追加や変更の必要性を感じても、プロジェクト自体が止まっていて改良は容易ではない。それらを改良したり発展するためには、もっと機能を向上させたり、補助となるアプリケーションが必要である。ライフワークとなりつつあるインターフェイスとライフログの研究の観点からも、補助となるアプリケーションがほとんど無数に必要であり、開発へのモチベーションはきわめて高いのである。

 求めるニーズの仕様を満たすソフトウェアが、なかなか見つからない、ということもある。特別な用途なのかもしれない。欲しいものの仕様はほぼはっきりしているので、あとは実際に作って運用してフィードバックしたいわけである。そういうものがつぎつぎと出てきて、50本にも達したわけだ。なければ作るしかないのだ。

●欲しい機能の全実装まではまだほどとおい

 50本作ればそれで終了かというと、もちろんそんなことはない。数の問題ではない。欲しい機能を実装し終えたわけではないのだ。ソフトウェアの数を増やすと保守の手間が馬鹿にならないことがわかったため、本数を増やすのではなく、それぞれの機能を増やすように方針を転回した。クロス開発をしているため、それぞれのフォルダを共有するなどの設定が必要になるのである。ざっと50の共有フォルダを設定するなどの作業はあまりにも不毛だ。現在は本数ベースでは増えてはいないが、それでも2009年10月の時点で必要な機能向上の項目のリストは200項目を超えていて、いっこうに減る気配がない。

 1日に1つか2つの機能を向上し、3つか4つのデバッグをしながら、ソフトウェアを運用してテストし研究を続けているのである。さすがに1年を超えてデバッグ作業も手慣れてきて、バグの箇所やバグを回避したソースをそらんじていえる程度にはC#に慣れてきた。

 それでもソフトへの要求項目はいっこうに減る気配がない。作れば作るほどもっと新しい要求が出てくるし、研究も進むので必要な項目が増えるのである。50本のソフトでできることは日々格段に増えていて効率的かつ省力的になっているので、もっと欲しいものがあることがさらにわかってくるためである。

●ライフログでライフハック

 筆者はライフログやライフハックをインターフェイスの観点から研究している。ライフログとは、生活のさまざまな情報を記録して活用することを目的とする。ライフログで取得したミクロなログを活用する手法はプライバシーやミクロすぎる記録ゆえに、なかなか難しいものがある、と考えられているようだ。ライフハックでは、ツールを使って効率のよさをアピールするが、多くのツールを使うことでかえって面倒を抱える気もする。これは自分でも50本も作ってみて直面している問題である。そのあたりをどうするか、というのがテーマである。

 既存のソフトにはログ機能がほとんどない。これをなんとかしないことには先に進めない。おおまかなロードマップを、次のように考えた。

・ログ&タグつきソフトがある(ないから作る)
・ログを蓄積し好みを教える
・好みに合わせて自動化する
・単独で運用する-意識の萌芽?

 必要なソフトはほぼログつきになったので、いまは第2~3段階あたりにいるところである。

 前置きが長くなった。50本のソフトのうち中核となる5本を紹介したい。

●PictureView(写真&付箋式テキストビューア)

 PictureViewは、写真と付箋式テキストビューアの両方の機能を持つ、マルチビューアである。

 PileDesktop同様、画像を表示する場合には、自然な角度で回転して適当なサイズで表示する。画像を自然に見せたいという意図を持つため、FancyNote同様ウィンドウやメニューなどはもたない。複数の写真を容易に比較できるように、1つのウィンドウで画面を占有することもない。

 写真を表示する場合には、縁をつけた状態になる。写真がExif情報を持つ場合には、そのExif情報を付箋イメージの上に表示する。ちょうど、通常の写真ビューアで3ペインになっているもの(ファイルリスト、写真本体、付加情報)を写真そのものと付箋で表示している位置づけである。ファイルリストはエクスプローラを使える。エクスプローラでjpgのデフォルトアプリケーションとして登録しているので、jpgファイルをダブルクリックすれば起動する。回転や付箋の表示のためにC#のWPFを使用している。

 画像をひらいた状態でキーボードの「削除」(DEL)キーを押すと、その画像をゴミ箱に入れ削除する(logTrash機能)。一般に画像ビューアは、ファイルを開いて観察する作業とファイルが不要の場合に削除する作業を別々に行なうように設計しているか、あるいは削除機能をもたないこともある。PictureViewはファイルを開いた状態で削除できるため、ファイルを開く-確認-シェルでファイル名を頼りに削除という分断された作業を行なう必要がない。

 付箋には単にテキスト(.txt)を表示することもできる。テキストファイルを表示した場合には、付箋紙ソフトとしても使える。FancyNoteで表示するほどの長さを持たない予定やメモの場合には、PictureViewを使って表示することが多い。機能向上によって、もともとのプログラム名と機能との間に齟齬が出ている点が悩みの種である。PictureViewでテキストを表示できるとは思わないだろう。

 コンテキストメニューまたは付箋からFlickrに写真をアップロードできる。Exifコメントを自動的にFlickrのコメントとして流用できる。

●ログつき検索「searchGoogleGUI」

 秘書システムと連動したライフログ機能つき検索システムである「searchGoogleGUI」は、おおまかに次の機能を統合したコマンドライン+ランチャーソフトである。

・コマンドプロンプト
・ファイル名を指定して実行
・URLアドレス入力
・Google検索
・Googleマップ検索
・Amazon検索
・歌詞検索
・宅配便検索
・Flickr検索
・YouTube検索
・和英辞書
・Gmail検索
・Yahoo!オークション検索
・楽天検索
・青空文庫検索
・ダウンローダー
・画面キャプチャー&アップロード

 枠は1つだけで、そこに入れた文字列の内容を判定し、「http」ならURLを開く、「http~jpg」なら画像をダウンロードする、コマンドならそのコマンドを実行する、文字列ならGoogleで検索できる。1つの枠で必要なすべてのインターフェイスに対応できているところが特徴である。「Google キーワード」でGoogle検索を筆頭に、キーワードが地名ならGoogleマップ検索(自動更新する日本国内の地名辞書をもつ)、URLエンコード/デコード、バッチファイルの起動など、ありとあらゆるめんどうくさい作業をキーワード1つで処理する。特許出願中だ。

 「書籍」の場合はAmazonを検索するだけでなく、過去の購入履歴も同時に検索し、購入履歴に履歴が存在しない場合には、あらためてAmazonを検索するなど、よりライフログ機能を活かした構成になっている。検索対象は全蔵書であり、Amazonで購入した書籍だけに限られない。これで2重買いを防止できる。

 ローカル処理では、taskまたはpsでタスクマネージャーを起動し、プロセスをプロセスの引数のファイル名で指定してkillできる。たとえば、ノートブックでtext.txtファイルを起動しているときに、「kill text.txt」と指定して、そのウィンドウを終了できる。

 テキストボックスではなく、コンボボックスなので、実行したコマンドはすべて履歴を取っていて再実行は容易である。

 1行枠からのコマンドラインインターフェイスでありさまざまな動作をする観点からMozillaのラボサイト“Mozilla Labs”で公開中の「Ubiquity」に酷似する。こちらのほうが先行しており特許も出願中。Firefoxを必要としない点でもより汎用的である。

 ランチャー機能では、検索枠の隣りによく使う終了などいくつかの機能を用意し、タスクバーやスタートメニューを使わないように工夫している。

 PictureViewと連動したスライドショウ機能も持つ。インターフェイスを持たないPictureViewerを用いてスライドショウ可能にするため、テキスト入力部分を表示コンソールとして使用する。フォルダをドラッグ&ドロップすると、そのフォルダをスライドショーし、スライドショーの残り時間を分単位で表示する。スライド中も、画面を占有せず、あたかも本物の机の上に写真をつぎつぎとほうり投げるようなかたちで見ることができる。

 ライフログの観点から、単に記録するだけでなくその記録を活用することも行なえる。具体的には、好きな作家やアーティストの新刊を予約する機能がある。登録数は無制限である。

 ログを見ながらのURLの自動起動にも対応している。これはたとえば1日に1回だけ実行する設定にしておくと、たとえばPCをスリープしているときには実行していなくても、スリープから復帰したら実行したり、1日に2度3度とは実行しないように制限したりできる。

 自動起動の機能は、これもFirefoxの「My Weekly Browsing Schedule」に似ているが、くり返しや重複禁止の起動などの機能は、本ソフト独自である。

 自動機能の設定は、cron互換である。

 画面キャプチャー機能はFTP、クリップボードと連動する「CapturePile」機能を統合している。増井俊之氏の「Gyazo」(2007~)と同等の機能をもつ。なお、この機能のテスト版である「ghost」のリリースは2006年5月で、「Gyazo」に先行している。「ghost」の画面キャプチャー部分を高度化したものが「CapturePile」である。

●FancyNote(ノートタイプテキストビューア&エディタ)

 FancyNoteは、イラスト入りのノートをモチーフとしたテキストビューアである。ノートをモチーフとしているので、罫線の間に文字を表示している。ノートなので、手書きメモをすることもできる。ノートなので、ウィンドウ枠は存在しない。ノートなので保存は自動で行なっている。ノートなのでメニューはもたない。これも、イメージの上にテキストを重ね書きするために、C#のWPFを使用している。筆者がメインで使用しているテキストビューアなので、表示部分は他のシステムにも流用している。

●PileMail(メール送信システム)

 1行目に宛名を平文で書き、2行目以降に文章を書いて保存したメールファイルをデータベースで検索して、宛名のメールアドレスに自動送信するメールソフト。メールファイルの作成はテキストエディタで行ない、送信はバックグラウンドで自動で行なうので、明示的なインターフェイスはもたない。宛名はデータベースに登録しておけば、あだ名やキーワードでもよい。

 メールアドレスを気にする必要もなく、テキストエディタで文章を書いて保存すればメールを送信してくれるという、きわめて安易なメーラーである。

 添付メール機能は、後述の画像にコメントを埋め込む機能がある。特許出願中。

 宛名が存在しない場合には、Twitterに発言する。

●マネジメント・スケジューラー

 次の機能を統合した予定表。外出の予定を立てるときに、自動的に天気や祝日を参照して予定を設定するマネジメント機能や、対人で予定を設定開始するマネジメント機能をもつ。

 朝起きると、自動的に天気やテレビ番組を取得して好みに合わせてカスタマイズして表示する。

・予定のメールでの通知(リマインド)機能
・祝日システム
・天気取得&表示
・TV番組取得機能
・バックアップ機能
・掃除予約&指示システム
・今日の言葉ダウンローダー
・チェックリスト
・年間予定表~誕生日表示
・買い物支援機能

 ライフログとしてカレンダーベースのシステムを構築した場合、重要なのは祝日の取り扱いである。祝日は通常週末(休日)に準じた生活パターンをとるので、休日に準じて動作を変更する必要がある。祝日は計算では決定できず、政府の発表を待つ必要がある。祝日システムは、祝日を自動的に取得し、システムに登録し、設定を変更する機能をもつ。十干十二支にも対応しており、11月の酉の日に行なわれる酉の市を自動的にスケジュールに表示できる。

 祝日同様、天気も計算では取得できない。そこで、定期的に天気を取得し、表示、活用している。祝日システム同様、天気取得システムも、予定調整システムと連動して動作する。自動的に起動し終了する。

 TV番組表を取得し、好きな番組と嫌いな番組リストにしたがってお気に入り番組表を作成する。好きな番組リストは、番組表は毎時定時にその時間から2時間分だけを自動表示する。好きな番組は約170の一般キーワードと160の人名リスト、嫌いな番組リストは約500のキーワードからなる1行1項目のテキストファイルであり、どちらも任意のエディタを使って自由に編集できる。

 平均すると2カ月に1回、掃除屋さんに水回りの掃除を頼んでいる。その予約と指示も自動化している。予約は自動で行ない、調整後に予定表を自動生成する。たとえば、掃除の直前には風呂釜を洗っておくとか、事前にネットスーパーで風呂釜を洗うための洗剤を購入するとか、家事はさまざまな細かな要素でできていて、それらの仕事を連動してスケジューリングする。

 深夜には入浴や就寝を促したり、開発環境を起動しようとすると警告を発したりする。夜にプログラムをすると、細かいところが気になって寝つけなくなるためである。

 念のためにつけ加えれば、すべての自動化による警告は無視できる。それでも、実際には、大小あわせて50~70程度の小項目を毎日実行しており、これらの支援なしに日常生活を行なうことは、確認作業が増えて円滑にできるとは言い難い。言うことももっともなので、素直に聞くようにしている。

●わかったこと~ソフトウェアを作ることは簡単だ

 貧弱かつ素人ながらも、50本も風の吹くまま気の向くままにソフトを作ってみると、1つわかってきたことと、どうしてもわからない疑問が頭をもたげてきた。

 わかったことは、ソフトウェアについてである。ソフトを作ることは、とくに環境が充実している昨今では、とても簡単なのだ。誤解を怖れずにいえば、(ExcelやWindows、Mac OSやATOK、一太郎のような大規模なソフトは別として)、たいていのソフトのコアの部分は、1日くらいで作れるのではないか。特に、世にあるフリーウェア/シェアウェア程度であれば、デバッグやさまざまな付属機能は別とすれば、まず自分でも作れそうな気がするのだ。銀行のシステムとかは別ですよ! 念のために。くどいけど。

 ごく特別な達人的な機能を除けば、ほとんどのソフトのほとんどの機能は、いくつかのベーシックな技術を組み合わせて作られている。ソフトの書き方によって、効率はすぐに1,000倍くらいは違ってくるものだから、まったく同じ性能のソフトを即座に作ることはむずかしいだろうが、おなじように動くものなら別にソースを見なくても簡単にできる気がする。

 実際に、本文中でも触れたように、筆者の作ったソフトと、いくつかのソフトは別々に出てきたものでありながらもたいへんよく似ている。「Ubiquity」に関していうと、特許はこっちのものだが、筆者のソフトはスクリプトを外部化していないので、「Ubiquity」互換でスクリプトを外部化するのもありかもな、などと考えたりもしている。Firefoxなしで動く「Ubiquity」互換ソフト(特許はこっち)ってのはどうだろうか?

 それはそれとして、要するにソフトウェアだけで「特別なもの」になるのは、とてもむずかしいことではないかと感じるのだ。

 念のためにつけ加えると、実際に運用に耐えるソフトを作るのには、かなりのテストやらデバッグやらが必要であることは当然だが、それにしても筆者自身は、ほぼ自作のソフト以外は使っていない。筆者程度のレベルでそうなのだから、より本職のプログラマーであれば、必要なソフトを一式そろえることも、たいした手間ではないのではないか。

●わからないこと

 わからないことは、ではその本職のプログラマーは、一体どんなソフトを使っていて、どんなソフトに満足しているのか、である。公開されているソフトの大半はジャンルでいうと既存のジャンルに収まるような、ありきたりなものだが、実際にプログラムをできる人が使っているのは、そういうものではないのではないか、と感じるのだ。筆者自身が作るソフトが、ジャンル横断的というか、1ジャンルに縛られるようなソフトを作っていないということもある。

 例えば、「ghost」(あるいは「CapturePile」)は簡単にいうと、画面をキャプチャーして、ファイル化して、コメントを書き加えて、FTPでアップロードして、アップロードしたURLをクリップボードに入れるソフトなのだが、果たしてこれは画面キャプチャーソフトなのだろうか。それともFTPソフトなのだろうか、ということである。簡単といいながら、5つも要素をもつソフトは、やっぱり簡単ではないんではなかろうか、と思うのだ。

 「ghost」が有効なことは、作成した2006年以降、画面キャプチャーをほぼすべて「ghost」だけで作成していることから明らかなのだが、それではそれが有効だとして、このようなツールをプログラマーの方々はもっているんだろうか、もっているんだろうなあ、という気がしてならないのだ。

 世に出てくるソフトは、Excelのようにきれいにお化粧してコンセプトを説明しやすくマネジメント化されジャンル化されたソフトばかりだけれど、実はもっと知られていない泥臭いところに、なんというか金の鉱脈が埋まっているような気がしてならないのだ。

 そんな「職人のツール」。

 もしおもちの方はというか、筆者が1人で50本ももっているんだから、世の中にはほとんど無数のソフトがあるのにちがいないと踏んでいる。

 それを隠し持っている気分は、どんなもんなんだろうか。別にわざわざ隠しているというわけでもないから、特別なことではないのかもしれない。

 最初、ソフトウェアのユーザーであった筆者が、いつのまにか自作のソフトだけ使うようになってみると、自作でないものにはほとんど関心がないことがわかってきた。

 自作でないものは、細部まで完全に自分がそうあって欲しいと思うようには動かないし、所詮は既製品の吊るしにすぎないためだ。手作りの一品ものほうがリッチだと思うのだ。もっとも、完全に満足できることはなかなかない。筆者自身、「もっとこうしたいリスト」が、500行を超えている。すべてを実装し終えるのにどれだけ時間がかかるか、想像もつかないのだ。実装すればするほど、リストが長くなっていくばかりだからだ。

 所詮、素人だよなと思うのはそういうときで、もっと高度な処理を簡単に実現できるプログラム力があればなと思うことがしばしばある。1つの機能の実装に2カ月かかるとかざらだからだ……。

 本職のプログラマーなら、もっと効率いいのにとあがきながらも、そんなリッチなものに囲まれている方々と話をして、情報交換してみたいなと思う今日この頃である。

(2010年 2月 4日)

[Reported by 美崎 薫]