先日、以前からお世話になっている社長さんから急に電話があった。


お役所のお仕事で、コンペがあるから技術担当者として出席してほしい。


「ええと・・・私、資料とかないですが・・・」

「送っておきます。」


資料が来たのは当日の朝である。とりあえず、ざっと目を通してみて・・・
うん、技術的な疑問が出てくるような話じゃないなと。

形を作るために技術者がコンペの場にいた方がいいということもあるのかもしれない。

コンペの結果はまだわからないけれども、私は単に座っているだけで、
特別質問されることもなく終わったのでした。


一方、今日は久々に大学の研究室に顔を出します。
恩師にお会いするのも久しぶり。

仕事でもないのに、恩師に最近の自分の仕事や、これからの方針を説明するのに、
わざわざプレゼンテーション資料を用意した。

下手なものは作れない。

私にプレゼンの重要性を教えたのは恩師だからだ。
いまだに、どんな社長さんに売り込みトークをするよりも、
恩師にプレゼンをするときの方がプレッシャーを感じるわけで。
とても難しいと思うんですよね。

私の周りでSOHOで活躍されている方には、結婚されている方が結構いらっしゃいます。
ただ、その多くは会社員でいたころに結婚されたか、交際中にSOHOになったかで、
パートナーがいないうちからSOHOという人は・・・


独身のままの確率が高い


まあ、別に定量的な調査をしたわけでもないんですが。

その理由としては、


一つには、まあ、経済的な不安と言うのはないわけでもないでしょう。
給料がもらえるのとは違いますから、急激にお金がなくなることはありえます。


二つには、そもそも出会いがない。
私みたいな引きこもりな状態だとますますです。
以前知り合いのWebデザイナの方とススキノで呑んだら「数ヶ月ぶりに家でたよ」とか。
まあ、極端な例ですが。


三つには、結婚後の生活形態が普通の家庭と違うというのもあげられるんじゃないかと。
単身の在宅SOHOはずっと自宅で一人で仕事をしているわけです。ほとんどの日は。

仮に専業主婦の奥さんが出来たとしましょう。
ずっと一緒に入れます。一見良いことのようですが、
一緒にいても、パソコンに向かって仕事をしているんです。

そして、結構ストレスフルでイライラすることが多い仕事。
喧嘩になりやすいことは容易に想像できます。

また、仮に外で働いている奥さんが出来たとしましょう。
夫は自宅で仕事をしています。奥さんは毎日外に働きに出ます。

奥さんからすれば、当然、いつも家にいるんだから、
家事はある程度やってほしいと思うことでしょう。
夫はもちろん自宅にいるので、一般の男性よりは家事に協力できるでしょうが、
専業主婦のようなレベルを求められると厳しくなります。

家にいるとは言え、ずっと仕事しているのですから。


最後に、上手に自分の職業について、一般の人に説明しづらいというのも障害じゃないかなと思います。

相手のご両親に自分の仕事を説明しようとすると、しどろもどろになってしまう。
同年代ならなんとなく、「フリーランス」とか「在宅」ってキーワードでイメージしてもらえても、
その親の世代となると、なかなか難しくなるわけです。


ああ・・・私はしばらく望み薄ですね・・・・
現在進行中(ちょっと動きが鈍くなってきましたが)のマッシュアップ支援システムを使った、
マッシュアップ作業の流れについてまとめて見ます。

通常のWebAPIを使ったマッシュアップを行う場合、

1.対象のサイトの機能を理解する
2.WebAPIの仕様について理解する
3.WebAPIを利用したプログラムを作成する


ものすごく大雑把に書くとこんな流れになります。

これに対してマッシュアップ支援システムをつかって、
WebAPIを使わずにマッシュアップを行う場合は、

1.対象のサイトの機能を理解する
2.対象のサイトで使いたい機能を操作してログを取る
3.ログからスクリプトを生成して、目的に応じて修正する


問題は2と3です。
WebAPIの仕様を理解するのは結構面倒です。

ある程度慣れが技術者ならすぐですが、
初級レベルのプログラマには結構負担になります。

また、それを使ったプログラムも基本的にはスクラッチで作ることになります。

マッシュアップ支援システムを使った場合は、
そもそもWebAPIを使わないので、リファレンスマニュアルなどを読む必要はありません

コーディングについても、自動生成したスクリプトのおかげで、
基本の流れがすでに出来ていて、それに手を入れるだけで作成できます。


うまくいけば、そもそもWebAPIなんていらなくなると思うわけでして。


いま、「マッシュアップされるサイト」も、「マッシュアップで作るサイト」にしても、
結局、ある程度のレベルの技術者をそろえていることが前提になっています。

もっと気軽に、あらゆる局面でマッシュアップで作ると言う選択肢を用意したい、
それがマッシュアップ支援システムの目的です。
私は在宅のお仕事だけでほぼ食べています。

たまに、社内研修の講師とかに呼ばれて、定期的にお客さんの会社に行くことや、
開発の打ち合わせ、導入作業などのために外で仕事をすることがあっても、
ほとんどの時間は自宅で仕事をしています。


そして私は、独身の一人暮らしです。


つまり・・・基本的に一人で一日中過ごしています。
事実上、引きこもりな若者と生活パターンがほとんどかわりありません。

人間、外部から別の人間の刺激を受けていないと、
精神不安定になりやすいようです。

だから、引きこもってしまっている若者は、実は鬱っぽいから引きこもっているのではなく、


引きこもっているから鬱っぽくなっていくんじゃないかと思います。


それはさておき、私生活も仕事も一人だと、
一番難しくなるのは仕事の合間にリフレッシュすることです。

会社で仕事をしていれば、ふと息抜きがしたい瞬間に、
周囲の同僚とおしゃべりをしたりできます。これがちょうど良い息抜き。

周りに誰もいない状況だとこれが出来ないわけです。


私の場合、


最近は、自宅に買ったダーツボードにめがけてダーツを投げます。
ゲームはしません。やってもカウントアップを1ゲームだけ。

それで少しはすっきりするんですよね。
でも、やっぱり人に会うって言うのは重要だと思います。

例えば、


同じようにSOHOで仕事をしている友人と、
週一回ぐらい、一緒の部屋で仕事をして議論するとか。


機密保持の問題もあるので難しいこともありますが、
そういう形を作っていくのもいいかなと思っています。
現在、進行中の内部制作システムについて。

基本、今のコラボロジックのお仕事は受託開発が中心です。
ポータルサイトの機能部分とか、小さな業務システムとかがほとんどです。

特に業務システムを作っていてぶち当たる問題があります。
私のようなSOHO事業者に発注して頂けるエンドユーザ様に共通しているのは、

・比較的小さな組織か大きな組織なら部署単位の予算で発注して頂く組織
・IT化には比較的熱心
・過去にもオープンソースを利用したものや、小規模ソフトハウスに発注して稼働中のシステムがある

と言う感じになります。
どうして、SOHO事業者にこうした仕事が回ってくるのかと言えば、
予算が小額なので大規模なソフトハウスには発注しづらいと言うことがあると思います。

しかし、こうした小さな単位で業務システムを構築していくと、
個別のシステムがカバーする業務の境界線上で面倒な作業が発生することが多々あります。

例えば、これはシステムを管理する部署の発生する問題ですが、
システムごとに認証情報が管理されていたりすると、
そのための対応がたくさん発生してしまいます。

会社に新人さんが入ってくると、いっぺんに認証情報を登録しないといけないので、
とても面倒です。漏れがあったりして、使えないシステムが出てきて、
なんとなく放置されてしまい、システムが実際には使われなくなると言う状態も考えられます。

例えば、お客様からの受注情報を管理するシステムと、
原材料を発注するためのシステムがあったとすれば、
受注した案件に必要な原材料を受注システムを参照しながら入力すると言う、
これまた面倒な作業が発生することになります。

これを解決しようとすると、過去に構築したシステムを変更するか、
統合された業務システムを新しく用意するかと言う話になってしまいます。
既存のシステムを変更するのは、同じ業者とのつながりが生きていないと難しいですし、
もともと、大きなシステムを作れないから小さな単位で作っていたので、
統合システムを作れるのは、その後、業績が上がった会社だけです。

そんな時、既存のシステムの機能をそのまま使って、
インターフェイスだけを新しくこさえることができれば、
低予算で業務効率化を継続することが出来るのではないかというのが、
作成中のシステムの目的になります。

一般的に使われている言葉で言うと、「マッシュアップ」とは、
インターネット上に公開されているサイトの機能を組み合わせて、
新しいサービスを作り上げることですが、私はこのシステムを使って、
「社内システムのマッシュアップ」をしたいと考えています。

多くの場合、マッシュアップをするときには、公開されているサイトのWebAPIを利用します。
しかし、社内システムにはじめからWebAPIが提供されていると言うことはきわめて稀です。
なので、WebAPIが提供されていないWebシステムの機能を扱えるようにする必要があります。

また、既存のシステムに修正が必要となると、これはとても面倒な作業になってしまいます。
既存システムの開発者が修正を加えるならいいのですが、そうでない場合、
ドキュメントが整備されていなければ最悪の場合はソースコードや動作を解析して、
中身の仕組みを調べると言う困難な作業が必要になるからです。

そこで考えました。

WebAPIはXMLなどでデータを出力するが、HTMLだってマークアップ言語じゃないか」と。

つまり、普通に画面を表示しているHTMLから必要なデータを引っ張り出せる仕組みさえ用意すれば、
WebAPIを提供していないサイトでも、マッシュアップ可能になると考えたのです。

すでに、そうしたことを目的としたものが存在します。
スクレピング」と言われる機能を提供するサービスやプログラムです。
「スクレイピング」は新聞などを切り抜く「スクラップ」をすることです。

例えば「OpenKapow(http://openkapow.com/)」と言うサービスが、
スクレイピングを支援する仕組みを提供しています。

私は実際にある案件でこのOpenKapowを利用しました。
欠点としては、OpenKapowの開発元が提供するサーバで動作することと、
このサーバの動作が結構不安定であること、
そして、複雑なデータを切り出すようなことをしようとすると、
ほとんどプログラムを書くことと変わりない作業を、
フローチャートを描くような操作で行わなければならないこと。

例えばページャ付きの記事一覧のすべてをRSSにはかせようとすると、
ループが二重になったり、条件分岐を使っていらないデータを無視したりするようにしないといけない。
プログラマなら、普通にプログラムを書けばこうしたロジックを書くことは比較的簡単ですが、
個別の処理をステップごとにマウス操作で追加して、処理の流れを書かないといけないので、
とても面倒でした。

一方で、はじめからプログラムを書いてこのスクレイピングをしようとするのもこれまた手間です。
認証などが必要なサイトを参照するなら、その画面までの画面遷移をプログラムの処理として、
再現してやらねばならない場合があります。これは結構面倒です。

OpenKapowでは、ブラウザで閲覧するのと大して変わらない手まで、
この画面遷移をスクレイピングするプログラムに行わせることが可能です。

そこで、OpenKapowとは実現方法がだいぶ異なりますが、
例えばExcelのマクロの自動生成のような感じで、ブラウザ上で行った操作を記録し、
そのデータから画面遷移を行うスクリプトを自動生成する
ことを考えました。

これなら、難しくありません。

出力されたスクリプトに修正を加えて、目的の動作を実装することが出来ますし、
単純に、必要な画面までの遷移をショートカットするだけなら、
コーディングをする必要もありません。

これに加えて、スクレイピングを支援するための仕組み、
HTML上の特定のタグ内の記述を引っ張り出してきたり、
正規表現で必要な箇所だけを抜き出す仕組みと、
そうしたスクリプトを書くための支援ツールがあれば、
少ない手間でマッシュアップをすることが出来そうです。

これにプラスして長年考えていたWebのプログラムだからこその問題点を解決したいと思いました。
それは、「スクリプト上に画面遷移が明確に記述されない」と言う問題です。

Webアプリケーションは、多くの場合、その仕組み上、ブラウザからWebサーバに送られたリクエスト、
すなわちイベントに対応する処理を記述していくと言う形式になります。
はじめからイベント駆動形式のプログラムが強制されているわけです。

イベント駆動形式のプログラムは今では当たり前といって良いほど一般的で、
基本的には問題にならないのですが、ちょっとした、ツール的なものを書きたい場合には、
これが面倒の原因になります。

例えばLinuxなどにアプリケーションをインストールするためのインストールスクリプトなどは、
イベント駆動形式ではなく、処理を順番に書いて、必要に応じてプロンプトから情報を入力する、
対話形式のインターフェイスを簡単に用意しています。

これをWebのインターフェイスを作る際にも出来ないかと考えたわけです。

これをやるためには、「プログラムの動作がリクエスト単位で簡潔する」と言う、
Webの仕組みの持つ制約を超える必要があります。

そこで、この対話形式インターフェイスの動作を記述するスクリプトと、
ブラウザからのリクエストを受け付けるスクリプトを分割することにしました。

ブラウザからのリクエストを受けたスクリプトは、
対話型インターフェイスの動作を記述するスクリプトを起動します。
対話型インターフェイスのスクリプトは、要求を受け取ると、
画面に表示したい情報などをレスポンスとして返すわけですが、
レスポンスを返しても停止せず、次の要求が来るまで待機します。

リクエストを受け付けたスクリプトはブラウザに画面を返すと終了しますが、
次のリクエストを受け付けたスクリプトが、
同じ対話型インターフェイスのスクリプトに入力された情報を飛ばすことになります。

これによって、スクリプトの上から下に順番に画面表示や入力の受付を記述するだけで、
対話型のインターフェイスを作成することが出来るようになります。

しかし、まだ問題があります。

ブラウザからアクセスするWebアプリケーションは、ブラウザバック(戻るボタン)や、
リロード(再読み込み)などに対応する必要があります。

処理を上から順番に書いてしまった対話型インターフェイスのスクリプトは、
期待していたデータと違うデータを受け取ってしまう可能性があるのです。

それに対応するため、リクエスト受け付けたスクリプトは、
対話型インターフェイスのスクリプトに対して、
すでに送信済みのデータではないかどうかをチェックすることにしました。

もし、ブラウザバックやリロードなどで同じ画面を再表示することを要求された場合は、
対話型インターフェイスを新しく起動し、要求されたページにたどり付くのデータを、
自動的に入力することで、この問題を解決しました。


まだまだ、ごく一部の機能しか実装できていませんが、
どうにか形にして、中小零細の企業のIT化を一歩先に進めたいと考えています。