Bonjourを使う

イベント用のアプリを制作するにあたって第一に考えたのは、なるべくUIを作らずに済まそう!ということだった。どんな環境においても、とにかくUIの実装は面倒だ。今回は自分さえ使えればいいというプライベートアプリだから、手を抜こうと思えば限界まで手を抜くことができる。願わくば単一のステートしか持たないような仕様にしたい。

ひとつだけ懸念としてあったのは、ネットワーク上での接続先を指定するにあたって、どうしてもユーザーからの入力が必要とされるかもしれない、ということだった。接続先をソースコード内に決め打ちしてしまってもいいけれど……いや、さすがにそこまでは……

しばらく考えたのちに妥協案として思いついたのは、Bonjourを使う方法だった。Bonjourを使ってネットワーク上にあるOSCサービスを検索し、最初に見つかったホストに即接続する。僕の使い方では複数のOSCサーバーを立ち上げる事は無いから、これで自動的に接続先を決定することができるだろう。文字通りのゼロ・コンフィギュレーションだ。

Bonjourの使い方については、Appleの文書Bonjour Overviewに詳しく載っている。

検索結果を受け取るためのデリゲートを用意し、サービス"_osc._udp"の検索を要求し、コールバックが呼ばれるまで待つ。サービスが見つかったら、そのアドレスの解決を要求し、これもコールバックが呼ばれるまで待つ。基本的にはこれだけだ。

n-forcerではOscServiceFinder.mの中にこれを実装した。60行ほどの短いコードだ。売り物のアプリで使うならもう少し丁寧に実装する必要があるだろうけれど、限定された環境下で使うものなら、こんなもんだろうと思う。

意外とBonjourは手軽に使える仕組みだ。Mac環境のみに限定されてしまうかもしれないけれど、プライベートアプリで使えるお手軽ソリューションとして覚えておいて損は無いと思う。