Hatena::Groupiphone-dev

iOS プログラミングメモ

2009-01-24 (Sat)

宣伝 01:04  宣伝 - iOS プログラミングメモ を含むブックマーク

入門Trac with Subversion―Linux/Windows対応

入門Trac with Subversion―Linux/Windows対応

iPhone アプリケーション開発の進め方 - 私の場合 - 01:12  iPhone アプリケーション開発の進め方 - 私の場合 - - iOS プログラミングメモ を含むブックマーク

唐突にわけわからん宣伝を始めてなんじゃいって感じですが、なんとなく自分の開発環境とか進め方とか晒してみようと思ったので、その関係です。

さて、バリバリ開発してる人も、これから開発する人も、他人がどんな環境で開発しているのかは非常に気になると思います。自分の環境はかなり特殊な部類に入るでしょうが、Trac や SCM の事なんかは万人に共通するネタなので、参考になる部分もあるかと。

開発マシン

なんか PC がまじってますが、こいつは重要なマシンです。

まず Flexscan がなかなか便利でして、デジタルとアナログの両方の端子を持っています。Macmini にデジタル端子をさして、Thinkpad にはアナログの端子をつないでます。こうすると、ディスプレイの下部にあるボタン一発で切り替えが出来ます。

ThinkpadMacminisynergy を使ってキーボードとマウスを共有させてます。これでディスプレイ、キーボード、マウスが共有できて、狭い自分の部屋ですがスペースがかなり節約出来てます。

Thinkpad 関係なくね?って思うでしょうがここ大事なんです。後述します。

開発に使ってるソフトウェア

XCode とか当たり前のものは除いて、俺的三種の神器。

はい、見て分かる通り、vim でコード書いてます。ていうかマジで、vim 以外のテキストエディタを使う気はまるで起きないです。では XCode で何をやるかというと、もっぱら「ビルドと実行」ですね。ファイルの追加や削除の時も XCode を使います。コンソールから出来たら非常に楽なんですが、どうもそういう事は難しいみたいですね。

外部エディタを使えば GVim もいけますが、常時コマンドライン+vim 状態なので、GUI が絡む環境に移行出来ません。後述する特殊なエディタ環境なのも影響してるので、GVim は無しの方向で。

お次は Subversion です。最近は git とか流行りですが、Trac との関係もあってまだ Subversion がメインですね。SVK も使いながらって感じです。構成管理ツールはプログラミングには絶対必須なんで、使ってなかったらヤバいっす。

最後は Trac です。Wiki での周辺情報の管理や、チケットによる TODO、マイルストーンの管理に使ってます。無かったら多分ものすごく効率が低下する。

vim についてもっと詳しく

単なるテキストエディタなんで、好きなの使えばいいと思います。XCode のエディタは補完が便利そうなので、あえて vim を使う必要もないかと。

Subversion についてもっと詳しく

いわゆるバージョン管理をするためのツールです。コードの変更履歴がコメントと共に全て残るので、いつでも過去の状態に戻れますし、どんな変更をしてきたのかがすぐにわかります。

XCode は標準で Subversion と連携出来るので、使わないのはもったいないでしょう。僕はコマンドラインで生活してるので、XCode の連携機能は使って無いですが。

Trac についてもっと詳しく

Wiki, Subversion のデータビューワ, チケットタイプのやる事管理システム。この三つが合体したプロジェクト管理ツールです。プロジェクトの効果的な運用には欠かせません。バージョン番号や TODO をきっちり管理したい人におすすめです。

TODO 管理をちゃんとやらないで、その場しのぎで適当なバグ修正とかしてると死ねます。

MacminiThinkpad でなんちゃってデュアルディスプレイ

vim を使ってるって書いたからピンときた人もいると思いますが、コマンドライン操作をするのはもっぱら Thinkpad の画面上です。Thinkpad から SSH 経由で Macmini に接続し、その上でコードを書いてます。つまり Thinkpad の画面はエディタで、Macmini の画面は XCode や Interface Builder 、シミュレータなんかを表示させるために使うわけですね。

こんな感じ。恥ずかしいので、カットしまくりですが。

f:id:ktakayama:20090124225828j:image

左下に Macmini が置いてあります。その上にちっこいモニタがありますけど、これテレビです。7インチのテレビ。あんま使ってないけど。

MacBook 買えばいいじゃん

MacBook 買ってデュアルディスプレイでも、同じ事がより簡潔に出来ます。

今回は Macmini の方が安かったっていうのもあるんですが…。メインは Linux を搭載した Thinkpad なんで、常用してるソフトウェアの使い勝手的になかなか移行出来ないです。Mac に移行出来たら楽だとは思ってるんですがね。トラックポイントもキーボードも、なかなか捨てられませんし。

開発の進め方

進め方っていうか、ソースコードの管理手法に関する話がメインなんですけどね。

Subversion を使っているので、伝統的な trunk, branches, tags で管理しています。ざっと説明すると、通常の開発はブランチで進めます。アップルに送信する準備が出来たら trunk へマージ、ビルドして提出します。申請が通ったら、タグを切る。単純なもんです。

ブランチのルール

ブランチのルールよりも前に、バージョン番号の付け方のルールですが、「0.0.0」みたいな三桁?にしていて、便宜上「A.B.C」って呼びますが、「C」がバグ修正とかのちっこい修正、「B」が機能追加とかのちょっと大きめの変更って感じで分けてます。まだ「A」が変わるようなバージョンアップはしてませんけど、多分「B」が 9 までいったら次が 2.0.0 なのかなっと。

で、ブランチはどう運用してるのかっていうと、「B」に相当するバージョン番号毎に分けてます。基本的には、一本道で開発していくわけで、過去に戻ったり過去から分岐したるする事はないので、分ける必要もないですが、なんとなくこうしてます。

実際の名前はこんな感じです。

  • branches/1.0.x
  • branches/1.2.x
詳細な進行

開発開始から、何度か申請を行なう手順。

  • 初期プロジェクトファイルを trunk にインポート
  • trunk を branches/1.0.x にコピー
  • branches/1.0.x で開発を進める
  • 完成したら trunk へマージ
  • trunk の中身をビルドして提出
  • branches/1.0.x で次のバージョンの開発を進める
  • 申請が通った!
  • trunk を tags/1.0.0 にコピー
  • branches/1.0.x が完成したので trunk へマージ
  • trunk の中身をビルドして提出
  • trunk を branches/1.1.x にコピー
  • branches/1.1.x で次のバージョンの開発を進める
  • リジェクト (´Д`)
  • branches/1.0.x でリジェクトの対応、trunk へマージ
  • 再申請
  • 申請が通った!
  • trunk を tags/1.0.1 にコピー
  • trunk を branches/1.1.x へマージ
  • branches/1.1.x で次のバージョンの開発を進める

大体こんな感じでしょうかね。リジェクトがあった時に、1.1.x の開発が進んでればそっちで対応しちゃう事もあります。

Trac の活用

全てのアプリケーションは同一のリポジトリで管理されているので、必然的に Trac でも同一の環境で管理する事になります。

カスタムチケットに「アプリケーション」って項目を追加して、そこでチケットの分類をしています。例えばこんな感じ。

[ticket-custom]
application = select
application.label = アプリケーション
application.options = -|SkyBook|HogeFuga|NewApp

ロードマップはバージョン番号毎に作成します。他のアプリも混在している状態なので、例えば「SkyBook1.3.0」みたいにアプリケーションの名前も入れています。

ある程度先の予定が決まっている場合は、「SkyBook1.6.0」「SkyBook1.7.0」みたいなマイルストーンをいっぱい作っておいて、そこに作業内容のチケットを登録しておきます。こうしておけばやり忘れも防げるし、モチベーションアップにもつながります。

Trac はほぼチケットのために使用しています。たまに変更履歴を順番に眺めたい時に、リポジトリブラウザを使います。

総評

まとめてみて思ったけど、思ったほど特殊な事はやってないっすね。でも、iPhone の開発関係のブログなんかをチラホラみてると、それほど管理しないでやってる人が多そうな気がしたんで書いてみました。構成管理ツールくらいは使おうぜ。

鋭い人は気付いちゃったけど、「テスト」が含まれてません。誰かテストのベストソリューションについて語ってくれないかな〜。

というわけで

入門Trac with Subversion―Linux/Windows対応

入門Trac with Subversion―Linux/Windows対応

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20090124