請負開発プログラマとして常日頃から依頼を受けたアプリのコードを書き続けている。アプリストアにもいくつか並んでいる。でも請負という仕事の宿命で、自分がコード書いたアプリと言っても決して俺のアプリではなく、リリースされてもその事をお話しできることはほぼ皆無。
しかし、今回は特別なのだ。ありがたいことにご依頼元のお客様から「自慢してもいいですよ」というお許しをいただけたので、大いに自慢するのだ。
じゃじゃーん!
SUNSTAR STROBO「SSScontrol for MONOSTAR C4」
ご縁ありまして開発(プログラミング)を担当した、株式会社サンスターストロボ様の最新ストロボをBluetooth(BLE)で操作するiPhoneアプリ「SSScontrol for MONOSTAR C4」。このアプリを、本日(2016/2/25)から始まっているカメラ&関連機器展示会CP+2016で、「まだ発売日前の」ストロボ実機とともに展示していただいております!
(MONOSTAR C4については専用サイトをご覧ください。アプリも紹介されてます。)
いろんな幸運含めて、凄いでしょ?
嬉しいから会場来ちゃいました!そして記念写真!勇姿を見よ!
展示ホールA-01(行けばわかりますが最高の位置)です。お願い!目立って!みんな見に来て!
ところで、もうお気づきかと思いますが、
ストロボを操作するアプリなので、ストロボがないと残念ながらお役に立てる機会がございません…
いやこれ無料アプリです(サイズもちっちゃいよ)。デモモードで動きは分かるので、俺が仕事でどんなアプリ作ってるんだろう、って興味を持った貴方はぜひダウンロードして、ちらっとでも試してみてください。嬉しいです。
自慢したかっただけなのでもうこの記事を終えても良いのであるが、プログラマのブログであるからプログラミング的な裏話もしてみる。
6台一括BLE制御アプリなのだ
SSScontrolは、6台までのストロボをBluetooth(BLE)で一括管理、操作出来るようになっている。
BLEなんだし、iPhone:ペリフェラルが1:Nなんて別に当然じゃね?いやそうなのであるが、同種で複数のペリフェラル機器を、簡単に(ここ重要)一括で接続して操作出来るアプリってあんまりないんじゃないだろうか。
まともに調査したわけでもないのに勝手にそう思ってるのは一応根拠がある。
確かにペリフェラルのN台接続ってのはBLEとして当たり前の仕様である。Bluetooth設定で全台ペアリングしておけば何の問題もない。しかしまず忘れずに設定アプリに行くのは面倒で失敗しやすいので、そのためにアプリ実行中にいきなりペアリングして自動で接続してしまうようになっている。
いやそれだってiOS任せでしょ、知ってるよ、簡単じゃん。うんうん俺もそう思ってた。でも試すと実は問題がある(あった)。接続しようとした時にペアリング要求が発生するとiOSが勝手にアラートを表示するのだが、OS任せでアラートを複数同時に出しちゃうと挙動不審になってしまうようだ。ユーザさんが「あ、そっか、まず設定アプリでペアリングしておけば」とか、「1台ずつ順番に電源入れれば問題ないよね」とか、なんて考えちゃいけない。それでは使い勝手が数段落ちる。つまり俺の負けなのだ。だからここが請負屋の気合の入れどころ。
SSScontrolはこの問題に対して、BLE関連処理要求キューを作り、別スレッドで消費することで解決した。iOSに接続を頼むと勝手にアラートが出てしまうので、接続処理時は他のストロボとの接続は待っているようにしたのだ。
使い勝手のために内部で気合入れたのである。この気合は決してユーザさんに伝わることではないけど、簡単に繋がってすぐ使えるという、アプリの生命線を守るための気合であり、プログラマがこっそり楽しむ戦場である。接続時だけではなく、あらゆる操作で「簡単に」を実現している。良き戦いであった。
Cocos2d-x/C++11を使っているのだ
SSScontrolは基本エンジンとしてCocos2d-xを採用している。かなり有名なゲームエンジンである。ゲームでもないユーティリティアプリで、ゲームエンジンであるCocos2d-xを使う意味はあるのか?
ある。たくさんあるよ。
得手不得手はあってなんでもCocos使えば良いってものではないが、ゲームエンジンに限らず得手不得手はあるだろう。
予算と将来性がバッチリ噛み合っているのであれば、どんなエンジンだろうと、どんなプログラミング言語だろうと使えば良いのだ。
俺の中では考えればいくつもあるCocos2d-xのメリット。その中であえて描画云々外してひとつだけ挙げるとすれば、ネイティブアプリのほぼ全範囲をC++11で書きやすい、というのがある。(ライブラリなしでもC++で書けるけど、そこまでしてるのはめっちゃ大手限定のはず)SSScontrolもBLEを直接制御する部分除けばC++製。
Windowsに.NETとC#が出現した時、あぁこれでやっと黒魔術のC++を捨てられる、って思ったものだが、巡り巡ってまたC++でコードを書くようになった。
C++11、黒魔術使わなくても楽にいろいろ書けていいよ。前述の作業スレッドと処理キューもC++11だけで書いている。C++11というよりClangにお礼を言うべきかもしれない。VMやAOTに頼らなくても、あらゆる場所でネイティブで動くコードを書けるプログラミング言語として、C++11は俺の中で見事に蘇っている。もちろん適材適所。VMが良い場合だってある。一つにこだわるのではなく、使えるものならなんでも使え。便利ならすべて武器にせよ。ユーザが興味あるのはアプリそのものであって開発環境ではないよ。
最後に。
いろいろ感謝!このお仕事は楽しかったです!
おまけ
この本には本当にお世話になりました。iOSでBLEやるなら必ず読もう。感謝。