アプリの設計ドキュメントに関する考察

 iPhoneアプリ開発において、コードを書く前に頭の中だけで構想くらいはしますが、今までドキュメントは書かずに「なんとなく」でコードを書いていました。画面数もそう多くなく、自分しか作らないし、頭の中で整理できると思っていたからです。
 それに仕事では、誰も見ない読まないであろう無駄な納品ドキュメントを散々書いてきた経験もあり、無駄なドキュメントは極力書きたくないと言う思いもあったのです。

 しかし、(一定のルールは設けつつも)場当たり的にクラス名やメソッド名を決めたり、コードを書いていると(特に日数が経過すると)、結局ソースコードを見ないと何もわからない状態になりつつあります。

 それだと生産性が低い上にそのうち整理しきれなくなると思い、やはり今更ながら改めてドキュメントの重要性を認識しました。そして、

「自分以外の他のディベロッパはどうやってiPhoneアプリの設計・開発しているのか?」

 と思い至り、設計しやすいドキュメントのサンプルでもないものかと探してみたものの見つけられませんでした。といっても全くなかったわけではなく、画面イメージのイラストを描いて、

iPhoneの画面上でこうやったらこうなる」

程度のものでした。よほど複雑なUIを実現するのでもなければ、そのレベルならさほどドキュメント化は必要ないと思います。(もちろん書いて損になることはないと思いますが)

 私が欲しかったのは、たとえばUIView系クラスなら、どのデリゲートメソッドに何を処理させて、ユーザメソッドを定義するならその定義と処理の概要、あとはタップ等に反応するアクションとメソッドのひもづけ等です。

 もしInterface Builder(以下IB)を使っていれば、アクションとメソッドの紐づけはxibファイルを見ればわかるかもしれませんが、それにしても画面ごとになってしまい、ソースコードを見るのとあまり変わらない気がします。
 
 AppleSDKフレームワークを提供している以上、ある程度参考になる開発プロセスとドキュメントをAppleから提供してもらえたら一番いいのではないかと思い、英語でも検索しましたが、局所的な技術情報しか見当たらず、開発プロセス全体を見渡した手法みたいなものはありませんでした。

 つまり、ウォーターフォールモデルでいえば、提案書や要件定義レベルでのドキュメントの書き方は見つかったものの、それ以降の詳細設計やプログラム設計はなかったことになります。

 私みたいな初心者はともかく、アプリをいくつもリリースしているベンダやディベロッパの方はおそらく独自の開発プロセスを確立しているんだろうと思います。だから本来であれば開発プロセスやドキュメントを自分で確立しなければいけないと思いますが、技術情報と同じで、モデルとなるものがあるとみんな幸せになれるのになあと思いました。

 というわけで、とりあえず自分用にエクセルでフォーマットを作り始めてみました。以下が概要です。

1)プロジェクト全体の情報

・シート間共通情報

    1. プロジェクト名
    2. 概要

・概要シート

    1. 画面リスト(各画面のクラス名と概要)
    2. プロパティファイル(プロパティファイルを使用する場合のファイル名と概要、目的。ハンドラクラスを作るならそのクラス名)
    3. ローカライズ(多言語対応する場合の言語名)
    4. フレームワーク(使用するフレームワーク
2)UIView系クラスの詳細

・シート間共通情報

    1. プロジェクト名
    2. クラス名
    3. 基底クラス
    4. 概要

・概要シート

    1. インポート(クラス・またはヘッダ名、その役割)
    2. デリゲートクラス(クラス名、役割)
    3. 簡単な画面イメージ(イメージがわかる程度であんまり細かく作りこむ必要なし)

フィールドシート

    1. フィールド(型、フィールド名、あれば初期化値)
    2. プロパティ(型、プロパティ名、内容)

・メソッドシート

    1. デリゲートメソッド(メソッド名、デリゲートクラス名、処理概要)
    2. オーバーライドメソッド(メソッド名、基底クラス名、処理概要)
    3. ユーザメソッド(メソッド名、戻り値、概要、引数リスト(名前、型、役割))

・アクションシート

    1. アクション(アクション名、アクション発生オブジェクト、対応メソッド、概要)
3)プロパティファイルの詳細

・シート間共通情報

    1. プロジェクト名
    2. 概要
    3. プロパティファイル名
    4. ハンドラクラス名
    5. ファイル種別

・ファイル概要シート

    1. 第1階層の項目名、属性、役割
    2. 第2階層の項目名、属性、役割
    3. 第3階層の項目名、属性、役割

・ハンドラクラス概要シート

    1. インポート(クラス・またはヘッダ名、その役割)
    2. デリゲートクラス(クラス名、役割)

・ハンドラクラスフィールドシート

    1. フィールド(型、フィールド名、あれば初期化値)
    2. プロパティ(型、プロパティ名、内容)

・ハンドラクラスメソッドシート

    1. デリゲートメソッド(メソッド名、デリゲートクラス名、処理概要)
    2. オーバーライドメソッド(メソッド名、基底クラス名、処理概要)
    3. ユーザメソッド(メソッド名、戻り値、概要、引数リスト(名前、型、役割))

・静的・初期ファイル内容シート

    1. 第1階層の項目名、内容
    2. 第2階層の項目名、内容
    3. 第3階層の項目名、内容


 とりあえず目下必要そうな箇所だけを抜き出してみたものの、結構な項目数になりました。やはりドキュメントは書くべきなんだと思いました。 
 少しだけ解説しておきます。「3)プロパティファイルの詳細」にて、ハンドラクラスの記述があります。プロパティファイルへのアクセスを取りまとめるクラスを作成する場合に、その定義を書く場所です。ハンドラクラスを作らない場合もあるかも知れませんので、その場合はこれらのシートは使わないことになります。

 そして「静的・初期ファイル内容シート」ですが、これはアプリ固有の情報を定義する場合に、その設定情報は不変となる場合が多いと思います。可変であったとしても初期値がある場合、その場合のファイルの内容を定義します。実際のファイルを見れば内容はわかるので、このシートの重要性はそこまで高くはないと思っています。

 私の場合、まだまだiPhoneSDKをわかっていないため、やろうと思っている事が出来るか出来ないかをコードを書きながら把握していきます。しかも画面単位にスパイラル、インクリメンタルに開発することが多いので、最初からバーっとこれらドキュメント全部を書くことはないと思います。

 このドキュメント群は、あくまで目的が「自分のiPhoneアプリ開発用」なのでチーム開発には向かない、自己満足に陥っている可能性もあります。

 それと書いていくうちに足りない項目や変えたい項目は出てくると思いますので、とりあえずこれで運用を開始して随時変えていって、ある程度のレベルになったら公開したいと思います。

「iPhoneプログラミングUIKit詳解リファレンス」のレビュー

 今回レビューしたいのはこちらの本です。

iPhoneプログラミングUIKit詳解リファレンス

iPhoneプログラミングUIKit詳解リファレンス

 今年最初の3連休、1/9にこの本を家の近くの書店にて見かけました。発売日が1/12になっているので、どうやら早売りでたまたま店頭に並んでいた様ですね。「だんだん日本語の書籍も増えてきたかな」と思いながらiPhone開発系の書籍コーナーを眺めていて、タイトルが目についてパラパラと本書をめくってみました。すぐに「これはよい!」と思い、iPhone系の書籍は既に3冊あったにも関わらずすぐに購入してしまいました(笑

 発売して間もないのですぐにレビューを書けばよかったんですが、なかなかゆっくり読む時間を取れずに時間が経ってしまいました。申し訳ない。

 以前から「UIKit系クラスの使い方、Tipsが分かりやすく網羅されている書籍が欲しい」と思っていたのですが、本書はそれを満たしていると思います。本書を開いたら左側のカバー裏にまずこう書いてあります。「本書はiPhone SDKについて一通りわかった読者が・・・」。

 iPhoneアプリ開発初心者の自分はまさしくその状態。本書のタイトルにもあるUIKit系クラスを広く、かつよく使う部分を網羅しつつ、分かりにくいところはクラスの使い方だけでなく仕組みも解説されていてとてもよかったです。

 全体的にただ単にリファレンスだけ終始せずに、サンプルコードとそれの実行結果の画面、それが交互に載っていて、わざわざサンプルコードを自分で書いて実行しなくても早く理解出来ます(もちろん書いてある事を自分のものにするにはコード書かないとダメなんですが)。

 まず、本書の使い方の解説から始まり、この手のリファレンス系書籍でありがちな「Hello World!」プログラム、そして最初の章からInterface Builder(以下IB)を使わないサンプル。これ以降の章では全てIBを使わない前提になっています。

 最初からIBを使わない方向に持って行く辺り、本書この辺で著者が書きたい内容と自分が欲しいと思った情報が合致していると感じました。もしIBを使ってアプリ開発し特にIBを使う事に抵抗を感じていない方は、クラス内部の詳細の使い方は参考になるものの、随時読み替える事が必要になるかも知れません。

 それ以降の章でUIKit系クラスの根幹を成すUIViewの詳細解説、UIViewControllerやタブバー、ナビゲーションバーでの画面遷移アーキテクチャの解説とサンプルコードが紹介されています。私はiPhoneアプリ構築でここが特に分かりにくく、かつ一番重要だと思っていたので、それが詳細に解説されていてとても参考になりました。

 更にそれ以降は目的別に章立てされていて、フルスクリーンやランドスケープ、グラフィックやアニメーションの扱い、マルチタッチのハンドリング、アラート等のユーザ通知、テーブルの扱い等々、その他のUIKit系クラスも網羅されていると思います。

 本書は私の様な、
「一通りiPhoneSDKについてなんとなく分かったけど、でも基礎が固まっていなくてイマイチちゃんと分からない・・・。」
という方にピッタリですし、

Apple公式APIドキュメントを読んでもよく分からない。分かりやすいリファレンスが欲しい。」
とお考えの方にも合っていると思います。

 ただ、Objective-CやUIKit系以外Cocoa Touch Frameworkに対する解説はなく、それの理解が前提条件として必要です。つまりこれ1冊だけでiPhoneアプリ開発を行うのは難しく、初心者向けの入門本としてはおすすめ出来ませんのでご注意ください。

 私個人的には、本書の内容を理解した後、かつそれなりに使える様になった上で、去年購入してこのブログでも紹介した「iPhone SDK アプリケーション開発ガイド」を読むとかなり理解が深くなると感じました。

 ですので、まずは本書をリファレンス代わりに使ってみて、もっと深いところ(特にUITableView周り)を調べるときに「iPhone SDK アプリケーション開発ガイド」を使うやり方をしてみたいと思います。

 冒頭でも書きましたが、昨今はiPhone系の書籍が大分増えてきて嬉しい限りです。実はもう1冊気になっている参考書があるのですが、それはまたの機会に。

「iPhone Tech Talk World Tour 2009」@六本木ヒルズについて

 気づいたら年が明けていましたね。間を空けてしまいすいません。

 年末にかけて仕事で「Oracle Master Silver 11g」取得をしたりいろいろあったせいで、生活からiPhoneが遠ざかっていました。でもそんな中、昨年12/15に六本木ヒルズで行われた掲題のイベントに行ってきました。

 イベントの詳細をブログで書いちゃ行けないらしいので(技術情報としてAPIドキュメント等を公開しているのに何故セミナー情報を非公開にするの?って思いますが・・・)詳細は書きませんが、今更ながら全体の所感等をば。

 会場は六本木ヒルズ内の森ビル49F。タイムテーブルは以下の通り。
   9:00 iPhone Tech Talk Kickoff
   10:00 休憩
   10:15 Effective iPhone App Development - Part 1
   11:15 休憩
   11:30 Effective iPhone App Development - Part 2
   12:30 昼食
   13:30 Adding In App Purchase to your App
   14:30 休憩
   14:45 Implementing Push Notification
   15:45 休憩
   16:00 Mastering OpenGL ES for iPhone - Part 1(中、上級者向き)
   17:00 休憩
   17:15 Mastering OpenGL ES for iPhone - Part 2(中、上級者向き)
   18:15 懇親会(お飲物と軽食)

 まず会場につくと、数百人入る会場で何故か8割以上の人がMacを開いていました。PCを持ってくるのは別に構わないと思いますが、丸1日のセミナーでバッテリーが保つ訳もなく、「そんなにMacが好きなの?」と感じました。Appleファンが多かったのでしょうか。謎です。MacにしろiPhoneにしろ所詮ツールでしかないと私は思っています。

 それはともかくセミナーが始まりました。最初のキックオフ、ただのAppleiPhone自慢でした。どうやらAppleの偉い人が喋っていたようですが、別に技術的にどうとかではなく、「iPhoneがいかに素晴らしいか?」を滔々と語っておりました。

 その次に「Effective iPhone App Development」が2部構成で始まりました。これがこのセミナーで一番為になったと思っています。iPhoneアプリの設計・構築の基本ポリシーをいくつかの観点で解説されていました。ただ、私の様な初心者iPhoneアプリ開発者にはペースが速すぎでメモ仕切れなかった事も多かったです。せめてスライドを公開してくれたらいいと思うのですが・・・

 午後からはアプリ内課金のやり方、プッシュ式アプリの開発技法、「OpenGL ES」についてでした。アプリ内課金やプッシュ式アプリはドキュメント等を見れば分かる情報で、あまり新鮮味はありませんでした。OpenGLは、3Dプログラミングを多少は学んで、かつOpenGLについての知識がないとそもそもついて行ける内容ではありませんでした。

 予定もあったので最後の懇親会には参加しませんでしたが、帰り際にTシャツが配られました。生地は良くないものの、意外とシンプルなデザインなので部屋着に活用出来そうです。

 有料会員向けセミナー、しかも仕事をわざわざ休んでの参加だったので最後まで聞きましたが、午後は私のレベルに合ってなかった事もあり、結果的にはあまり身になりませんでした。ただ、Appleは同様のセミナーを毎年開催しているらしく、その1年前はCocoaについてやった様ですね。Appleファン向け色が強かったセミナーで、その雰囲気が分かったのは収穫と言えば収穫でしょうか。

 冒頭で述べた通り、iPhoneはあくまでソリューション提供の一手段のツールでしかないと思います。今がマーケット的に有効で面白いからやっているのであって、iPhoneだけに拘るつもりは毛頭ありません。しかし、Apple本社から来ているエンジニア達は非常にレベルが高く、「iPhoneをやってるけど、なんでも出来ますよ」という事が実際に分かる話しぶりでした。ですので、講師として来ていたエンジニアの方々の様に高いレベルの技術を身につけつつ、広い視野を持って(今を含めて)今後熱そうなモバイルアプリ市場に今年も関わって行けたらいいと思いました。

「iPhone Tech Talk World Tour」の開催

 最近ニュースしか書いていない気がします。技術系Tipsも書きたい事があるのですがなかなかまとまった時間が取れず・・・ もっと頑張らないと行けませんね。

 掲題のiPhoneアプリディベロッパ向けイベントが開催されるようです。


Apple technology evangelists are coming to a city near you with expert advice on how you can maximize the innovative technologies of iPhone OS within your apps. Don't miss this unique opportunity only available to developers in the iPhone Developer Program. The event is free, but space is limited. Register for an iPhone Tech Talk today.

 どうせカルフォルニア辺りだけだろうと勝手に思っていたら「World Tour」とあって、東京でもやってくれるようです。

以下引用ですが、だいたいは↑の訳になっているみたいです。


米国アップル本社からテクノロジーエバンジェリムチームを迎えiPhone開発の技術セッションを開催します。iPhoneデベロッパプログラムにご登録されている方々がご参加頂けます。本セミナーではiPhoneアプリを既にApp Storeで配布中か、現在開発中であるデベロッパ向けに高度なコーディングや設計テクニックについて解説を行います。ラボでは1対1でエキスパートから iPhoneアプリのコードの最適化やユーザインタフェースデザインについてアドバイスを得たり、セッションで学んだ機能の実装について相談することができます。

 「2009年12月15日(火)9:00〜18:15」というスケジュールなので思いっきり平日の昼間ですが、多分1日くらいなら休めるだろうと思いとりあえず申し込みました。抽選ではなく先着みたいなので、よく分からないフィルタリング?を行われない限りは行けると思っています。

 最新の技術的な情報を得られるだけでなく、刺激を受けて何かしらアイディアが出そうな気がします。ちょっと楽しみですね。

無料アプリでもアプリ内課金(In App Purchase)が可能に

 今朝、「In App Purchase now available for free apps」というタイトルのメールが来ていました。「おや?」と思い開いて見ると、どうやら無料アプリでアプリ内課金に対応したとのことでした。

 そもそもアプリ内課金が有料アプリのみという事を知らなかった私。だから「いままで出来なかったのか!?」と思ったくらいでした。無料でダウンロードしてもらってその後追加機能等で課金等、シェアウェアでも携帯サイトでも携帯アプリでも当たり前な事なのに、今まで出来てなかったんですね。

 Appleもこんな大きな手数料を得られるチャンスをみすみす逃していたなんてもったいないですね(In App PurchaseはAppStore有料アプリと同様に30%の手数料をAppleに取られる)。何か法的な問題やシステム的な都合があったのかも知れませんね。今回の変更でiPhoneアプリパブリッシャーとしては、よりビジネスチャンスを拡げる事が可能になりますね。

 ユーザにとっても、「最初は無料でお試し(コア機能のみ)、気に入ったら全機能が使える有料版へ移行」の様なアプリが出てくれば大きなメリットがあるでしょう。用途としてはコンテンツビューワでコンテンツのみ課金する等が考えられますが、新しい使い方をするアプリが出て来そうで楽しみです(私も何か考えてみたいです)。

参考URL
・ADC内ニュースリリース(要ADCへのログイン)
https://developer.apple.com/iphone/appstore/inapppurchase.html

・In App Purchaseの紹介(当時は有料アプリのみ)
http://developer.apple.com/jp/iphone/program/sdk/inapppurchase.html

・appbankさん:無料iPhoneアプリのアプリ内課金が可能に(in App Purchase on free apps!
http://www.appbank.net/2009/10/16/iphone-news/56949.php

iPhone OS、3.1.2にアップデート

 今朝、ADCに登録しているアドレスに「iPhone SDK 3.1.2 is now available」というタイトルのメールが来ていました。

URLは以下になります。

アップル、「iPhone OS 3.1.2」アップデートをリリース
http://japan.cnet.com/news/tech/story/0,2000056025,20401393,00.htm

アップデートに関する説明によれば、Appleは、それほど多くはないものの重要な3つのバグを修正した。修正点の中には、Appleが「散発的に発生している問題」と説明するスリープ状態から復帰しないバグが含まれている。

 また、今回のアップデートで、携帯電話ネットワークから切断され、iPhoneを再起動せざるを得ない問題も修正されている。さらに、iPhone OS 3.1.2では、動画ストリーミング中にクラッシュが生じるバグも修正された。

 Appleは、iPhone OS 3.1.2が「iPhone」「iPhone 3G」「iPhone 3GS」に対応していることを発表した。

 だそうです。touchは今回対象じゃない様ですね。バグフィックスが携帯電話系の機能なのでそれも当然なのでしょうか。

 違いを比べてみたくて、Appleのプレスリリース原文を探したんですが見あたらず・・・ 私の探し方がよくないんでしょうか?

とりあえずCNETの原文だけ貼っておきますね。
http://news.cnet.com/8301-13579_3-10371278-37.html


 今回のアップデートは私が作るアプリとは直接関係ないものの、バグフィックス等によるiPhoneユーザビリティ向上はユーザにとっても開発者にとってもメリットがあるので、今後もよろしくお願いします、Appleさん。(私なんかに言われるまでもなくやっていると思いますが・・・)


追伸
 ちなみにADCから来たメールですが、タイトルはあくまで「SDKのアップデート」。でも世間のニュースでは「OSのアップデート」。ADCはその名の通りDeveloper向けなんですね。ちょっと面白いと思ってしまいました。

またもや参考書

iPhone SDK アプリケーション開発ガイド

iPhone SDK アプリケーション開発ガイド

 先日、別件で書店に行く用事があった際に衝動買いしてしまいました。

 ちらほら増えてきたiPhoneSDK関連書籍ですが、天下のオライリー本だったので手に取ったところ、内容もよさそうで、かつまだ出版されたばかり(2009年9月刊行)で内容も新しいと思い購入しました。

 まだ完全に読み込んではいませんが、ざっと見たところ、私の様にIBを使わないユーザに優しい作りです(IBを使う事をベースにしている本を読むと、脳内でコードで書くとどうなるか?をシミュレートするので若干のストレスがあるのです)。

 そして「分かっている人が分かっている人向けに書いている」というオーラがひしひしと伝わってきて、余計な説明がほとんどない構成です。効率よく「iPhoneアプリ開発のための情報」を得ることが出来ます。

 かといって翻訳モノの技術系参考書ではありがちな、「難しい学術的な書き方」をされている事もなく、各章末にはしっかりとサンプルコードの添付と解説があるので安心です。

 それでもまだまだiPhoneアプリ開発駆け出しの私には「すらすら読める」という訳にはいかないんですが、純粋にiPhoneSDKの使い方を学ぶためには、とてもよい参考書だと思います。

 詳細のレビューは下記URLの方が詳しいので、参考になさってください。

WebOS Goodiesさん:http://webos-goodies.jp/archives/book_iphone_sdk_application_development.html

 やっぱりオライリーはいい物出しますよね。またもお世話になってしまいました。