Skypeは、P2Pのインターネット電話ソフトウェアだ。その音質の高さから話題になっている。しかし、こいつをただの電話やメッセンジャーと同じにしてはいけない。プラットホーム化するSkype:アリエル・ネットワーク徳力基彦氏、Skype社Vincent Shortino氏インタビューでも指摘しているが、
Skypeは音声データのプラットホーム、標準規格を提供しかかっている段階にあると見てよい。
ということなのだ。そこで、SkypeをJava経由で使ってみた(※なぜJavaからなのかといわれれば、僕がそれしか分からないから)。
JavaからSkype Access APIをいじる
Skypeは、Windows上でのAPIが公開されており、WindowsのSendMessageを使うことで利用できる。また、API自体もHTTPのように文字列のメッセージでやり取りをする単純なものなので、ベースの部分さえ実装できれば簡単に応用がきく。Javaから利用するためには、JNI(Java Native Interface)経由になるが、既にxic氏が、JSkypeというのを公開している。ダウンロードは、こちらから。
なお、準備が3つ必要だ。
1つ目はCのライブラリ。JSkypeのDLLはVisual C++で作成されているので、MicrosoftのCライブラリが必要になる。"msvcrtd.dll"をwww.dll-files.comの該当ページからダウンロードし、アーカイブファイルを解凍すると取得できる。とりあえず、Windowフォルダ(C:\windows)に入れておくのが楽チン。
2つ目は、Elcipse。クライアントアプリケーションがSWTを利用しているので、Eclipse3.0をインストールしておく。
そして、3つ目は当たり前だが、Skypeを本家か、ライブドアからインストールし、起動しておこう(※細かいけど、セカンドモニターを有効にしていると、インストール後の起動に失敗する。一度、セカンドモニタを切ってから起動させれば、その後は問題なくなる)。
では、取得したJSkype.zipを解凍する。利用するのは、
{JSKYPE_INSTALL}\JSkype\source\java\run.bat。これを開き、ECLIPSE_HOMEを自分の環境に合わせる(必要なら、JAVA_HOMEやパスも追加)。で、クリックするだけ。Eclipseのライブラリを使ってアプリケーションがコンパイルされ、アプリケーションが起動する。
すると、こんなメッセージウィンドウが表示されるはずなので、1つ目か、2つ目で答えればSkypeへ接続が行われる。

で、表示されているこのウィンドウにコマンドを入力すればよい。

コマンドは、Skypeの開発者コミュニティサイトで公開されているSkypeのAPIマニュアル(PDF)を見れば分かる。このPDFの"7.9From Device to Skype"以下が、アプリケーションからSkypeに送信できるメッセージだ。
たとえば、ユーザーを探したい場合は、"SEARCH USERS {TARGET}"を入力する。yusukeを含む人を探したい場合は、「SEARCH USERS yusuke」と入力しsendを押す。と、こんな感じで表示される。

そして、メッセージの送信も可能だ。他の人に向けて文字列を送るには、「MESSAGE {相手のID} {メッセージ}」で可能だ。相手側ではチャットウィンドウが起動し、文字列が表示される。なお、Windows同士の実験では日本語も問題ないようだ。こう入力すると、

相手のSkypeでは、こうなる。

あと、JSkypeでは実装が中途半端だが、Skypeからのイベントハンドリングも可能だ。そのため、メッセージを受信も可能だ。
なお、今後は、このJSkypeを元に、Sourceforge.netで、jsaとして、開発を行うことを予定しているみたい。2004年内にコードをあげると言っていたけど、まだなので、しばらくは動かないかもしれない。
まとめ
文字列メッセージのやり取りができる以上、Skype上で独自のプロトコルを実装すれば、P2Pアプリケーションが作れるはずだ。実際、Skypeも、この点を想定していて、Skypeのプラットフォーム上に商用アプリケーションを構築する場合には、ライセンスが必要になるビジネスモデルも持っている。
Skypeは、数億ノードのネットワークも構築できるらしく、Skype自身をプラットフォームとして、面白いアイデアが生まれる可能性もある。今後、注目だ。

コメント (5)
SIPヲタな人です。
たしかに、Skypeはすごいっす。
つぎのP2Pに必要と思われる機能(NAT越え,プログラマブルなメッセージプロトコル)を
備えていて、特に、すでに巨大なネットワークを構築している点は驚異的とさえ言えます。
ときどき、SIP vs Skypeなんて言われてますよね。
ただこれも、電話機能だけを取り上げている所もありますが、実際には、yusukeさんの
言うように、その次にあるアプリ部分でどんな面白いものを作れるかが鍵かと思って
おります。
私もこの辺、いろいろとネタがないか調査している所ですが。
>なにか、面白いネタがあったら、こっそり教えてください。(^-^;A
投稿者: norn@ | 2005年01月06日 11:41
日時: 2005年01月06日 11:41
eclipseのSWTライブラリを用いてSkype APIを使えるようにするJavaクラスライブラリを作ってみました。
http://skype.sourceforge.jp/
今後ビデオチャット、音声チャット部分のみが単独でインストール、操作できるように公開されて、Skypeがインフラソフトウェアになると非常におもしろいですね。
Breezeのようなアプリケーションが誰でも簡単に作成できるようになると世界が変わるような気がします。
投稿者: 久納孝治 | 2006年01月17日 22:33
日時: 2006年01月17日 22:33
おぉ!すばらしいです。さっそく使ってみます。
投稿者: yusuke | 2006年01月18日 21:09
日時: 2006年01月18日 21:09
Skype APIを使えるようにするJavaクラスライブラリですが、めでたくSkype社公認のオフィシャルAPIになりました。
https://developer.skype.com/wiki/Java_API
ここ数ヶ月で様々な改良を加えていますので遊んでいただけるとありがたいです。
投稿者: 久納孝治 | 2006年06月07日 13:47
日時: 2006年06月07日 13:47
久納さん、すばらしいです。おめでとうございます!
うん、なにか面白いことができそうな気がしますよ。
投稿者: yusuke | 2006年06月11日 00:23
日時: 2006年06月11日 00:23