プログラマの皆さんこんにちわ。Mac / iOS 開発担当の松本です。
プログラミングをしていると毎日解らない事がわんさか出てくるので、実際にコードを書いているよりも調べものをしている時間の方が長いくらいです。
そこで今日は、僕が普段行っている解らない事の調べ方を書いてみようと思います。もっと便利な調べ方があるよ!というのがあれば是非教えて下さいね!
去年の年末に Bluetooth での URL 受け渡し機能を実装した時の事を例に取ります。最初は iOS に限らず Bluetooth を触った経験がなく、何をどうすれば良いのか全く解らない状態でした。
1. なんとなくググる
まず最初はざっくりとググります。「実現出来るのかどうか」「何を使えば良いか」「どう使えば良いか」等が何も解ってなかったので、なんとなく雰囲気を掴んでアタリを付けたいわけですね。「コレをこういう風に使ったら出来るらしい」見たいな事を知りたいのです。ただ、この時はたまたまコチラのページに行き当たりまして、「Bluetooth は Private API 使わないと駄目なの?」
と不安になったので早々に検索に見切りをつけて、次のステップに進みました。
2. 横のひとに聞く
これは賛否両論あるところかもですが、僕は意識的に直ぐ他の人に聞くようにしてます。今回は隣の宮本さんと以下のようなやり取りがありました。
僕「みやもっさん、なんか Bluetooth って Private API 叩かなあかんっぽいんですよ」
宮本「え、Game Kit 使ったらいいらしいすよ」
僕「まじすか」
いやいや、Bluetooth の機能がゲームライブラリに含まれているなんて思いませんやん。という訳で宮本さんに照れながら感謝の意を伝えて、次のステップに進みます。
3. 一次情報(公式のドキュメント)にあたる
やっぱり基本になるのは一次情報です。今回の場合は Apple の各種公式ドキュメントですね。宮本さんから Game Kit というキーワードをゲットしたので早速公式ドキュメントを見ます。プログラマーズガイドを斜め読みして「お、ほんまに Bluetooth 使えるやん」とか思いながら、該当クラスである GKSession の API を眺めます。ココまでで「GKSession を使えばBluetoothで通信ができる」と言う事を確認できました。ところが、API リファレンスをみても全然ピンと来ません。こういう時は実際のコードと見比べながら理解を進めたいところですね。
4. サンプルを探す
何を使えば良いかは解ったので、次はどう使うかです。サンプルコードがあると捗りますね。特に Apple の公式サンプルや Google Code Search が強力です。
Google Code Search は 2012年1月15日で終了とアナウンスされていましたが、現在でも使えるようです。継続に期待しましょう。また類似サービスとしては Koders があります。
今回は GKTank というサンプルが凄く役に立ちました。GKSession をどう使えば良いかが解ったので、ここまででソースコードを書くのに必要な情報は揃った事になります。実際にサンプルとAPIリファレンスを交互に見ながら、ざっくりと動作するところまで仕様を実装する事ができました。
ところがまだいくつかの疑問や細かい問題が残っていましたので、次はそれらを解決しにかかります。
5. フォーラムや質問サイト等を利用する
GKSession のような複雑な状態を持つクラスは API リファレンスを眺めていても、不具合の原因になかなか気付けません。そこで今度はざっくりではなく、ズバリの答えを求めていくつかの情報ソースを検索します。
よく使うものをいくつか挙げます。
- Stack Overflow
解らない事のうち8割 Stack Overflow で解決できています。英語だからと食わず嫌いしていたひとは是非お試しください。今回も例えば 「Game Kit 同士でしか通信できない」、「Bluetooth の ON/OFF には private API を使う必要がある」等の情報がコチラのサイトから収集できました。そもそも最初からココで iPhone, Bluetooth 等で検索しておけばもっと時間を短縮できた気がします。また今回は Stack Overflow で解決できない問題は無かったので、6, 7には進みませんでした。
- Apple Developer Forums
残った2割のうちの半分くらいはこちらで解決できています。ADC へのログインが面倒でしかも検索エンジンには露出しないので、ついつい調べるのを怠けがちですが、公式のフォーラムだけあって量も質も素晴らしいです。本当は一番最初に調べるべきかもしれません。
- Topsy
Stack OverflowとApple Developer Forums でも解決しない場合、僕は半分涙目状態になりますがもう少し粘り強く調査します。もう一度 Google に戻っても良いですが、ここで以外と役に立つのが Topsy です。デフォルトだと日本語が指定されているので、言語指定を外して検索して下さい。公式の Twitter 検索は過去にさかのぼっての検索が全然駄目なのですが、Topsy は過去の Tweet もばっちり検索対象になっています。藁にもすがりたくなった時は、一度 Topsy をお試しください。藁よりは遥かに役に立ちます。
- 書籍
今回の事例では使う事は無かったのですが、書籍もやはり役に立ちます。また書籍に付属しているサンプルも侮れません。ちなみに僕たちは最近「Advanced MAC OS X Programming」という書籍が大変素晴らしいので少しずつ読んでます。
最近使い始めたばかりなので書きませんでしたが、 Quora も面白いです。iPhone 4Sで Bluetooth 4.0 が搭載されたけどどうなの?みたいな少しぼんやりした質問に有効そうな印象です。インターフェースも使いやすいので、皆さんも是非お試しください。
6. 質問する
調べても調べても解決策が解らない。もうディスプレイは涙で滲んでまともに見れませんが、泣いてばかりもいられません。「まだ慌てるような時間じゃない」と自分を鼓舞しながら、フォーラムや質問サイトに助けを求めます。StackOverflow や Apple Developer Forums が有名どころですね。
もちろん質問内容によりますが、経験的に解答がもらえる確率、質、速度を総合して個人的にオススメなのはココでも Stack Overflow です。つたない英語等気にせず思い切って質問してみましょう。ズバリの解答がもらえなくても、他の人の何気ない解答がヒントになることも多いです。
また実際に質問した事はないのですが、Quora も使ってみる価値はありそうです。
7. Apple の Developer Technical Support
いくら検索しても解答がでない、騒ぎ散らしたけど周りも誰も解らない、質問には解答が返ってこない。もう涙も枯れ果てたら最終手段を使いましょう。 Apple の Developer Technical Support の出番です。
僕は過去に一度だけ利用した事があります。結局 iOS のバグだと解答されて問題自体は解決できなかったのですが、
開発者からすると Apple の解答を根拠に堂々と白旗を揚げられますので上手く活用したいですね。ただしインシデント制で無料ではないので、チーム内でよく相談してから利用しましょう。
以上、プログラミング中の調べものについて書きました。書き終えてから思ったのですが、1番目のステップは Quora でやった方が効率が良いかもしれません。
皆さんの意見も是非聞かせて下さいませ。