第54回 Cocoa勉強会関西 で、CoreDataについて話をしてきました。
3行要約
- CoreDataのベースはRDBMS。データベース界隈の知識をCoreDataでの開発に活かそう!
- Atomicity(原子性)を気にしよう!
- データのバックアップは超重要
どんな話?
デモで使ったサンプルアプリのソースコードは、こちら(Github)
ViewController.m
の途中にある「#define WITHOUT_ATOMICITY
」の行をコメントアウトしたりしなかったりして、挙動の変化をお楽しみ下さい。
なぜ、この話をしようと思ったのか
2013年の前半頃だったと思いますが、AustraliaのAppStoreでランキング上位に居たアプリの中で、Monopoly(モノポリー)というゲームがありました。ご存知の方も多いかと思いますが、Monopolyは米国生まれの双六ゲームです。これのiOS版が流行っていた訳です。
MONOPOLY on the App Store on iTunes
※なぜか日本のストアでは見当たりません。権利関係でしょうか??
このゲームは、2名から最大8名(iOSアプリでは最大4名)のプレイヤーが順番にサイコロを降り、止まったマスに書かれた指示に従ったり、土地を購入したり、他人が所有している土地に止まれば、その土地にある建物の豪華さに応じてお金を支払うというゲームで、債務超過に陥るとゲームオーバーです。
僕がiOS版で遊んでいると、サイコロを振って、自分の駒が「所得税を支払う」マスに止まるはずだったのですが、所得税を支払う直前でアプリがクラッシュすることがありました。アプリを立ち上げ直すと、自分の駒は「所得税を支払う」マスにあったのですが、所持金は減っていませんでした。
これっておかしいですよね。アプリをkillすることで、嫌なサイコロの目が出てもそれを回避するチート(イカサマ)が可能になってしまいます。
そう、「所得税を支払うマスに止まる」ことと「所得税を実際に支払う」ことの2つの事実には原子性を持たせなければならないのです。「所得税を支払うマスに止まる」事実が発生したのならば、必ず「所得税を実際に支払う」事実も発生させ、その情報(またはその事実の結果)が永続的に保存されなければならないのです。
このようにランキングの上位に君臨するようなアプリでさえこのような実装をしているようであれば、世の中のアプリの多くも似たような問題を抱えているのかもしれません。Cocoa界隈の皆さんに向けてトランザクション処理の原子性についてお話するのは価値があることだと考え、今回の話を持ち出そうと思うに至りました。
次に発表するときには、Isolation(排他制御/独立性)に主眼を置いた話をしたいと思います。
発表時のトラブル
僕の発表の直前は休憩時間だったので、壇上でゆったりと準備をしていました。
ところが、Mac(MacBookPro early 2010)をプロジェクタに接続すると、動作が少しおかしくなりました。
- 画面全体は一瞬青くなった(ここまでは正常動作)
- 画面が復活しても、プロジェクタには信号が行ってないようだった
- システム環境設定を開いて「ディスプレイ」をクリックすると、レインボーカーソルが出現した
- システム環境設定を強制終了して再度システム環境設定を開いても同じ
- Dockが死んだ(マウスポインタを近付けても拡大されなくなった、FinderのアイコンがDockから飛び出したまま動かなくなっている)
- コマンド+Tabのショートカット(WindowsでのAlt-Tabみたいな機能)が利かなくなった
という状態に陥ったので、再起動をかけました。しかし、画面が灰色になったまま進む気配がありません。発表を開始する時刻が1〜2分後に迫っていたので、自分のMacで発表することを諦め、直前に発表していた @yashigani さんのMBAをお借りして発表することにしました。ありがとうございました。
発表資料(Keynoteファイルのzip)は、自分のWebサーバの非公開領域にバックアップを置いていました。ssh経由でこれを公開領域に移動させてブラウザからダウンロードすることですぐに復活することができました。
こういった事態に備えるためのバックアップという意味ではDropboxやEvernoteなどのサービスを利用するのが一般的かと思いますが、こういう焦る状況において、借り物のPCですぐにデータを取り出すのは、やっぱり自分のサーバの方が楽かもな、と思いました。もちろん、DropboxやEvernoteの方が、バックアップを取るという動作の面で圧倒的に優れていますが。
デモで使ったアプリのソースコードは、Github上に置いていたので、こちらもすぐに復活することができました。
バックアップあれば憂いなし!
BDD
Beer Driven Development
BDDの話をお伺いしたからには、実践あるのみ!!
最後に
話を聞いて下さった皆さん、他に発表されていた皆さん、会場をご提供下さった皆さん、そしてBDDを共にした皆さん、どうもありがとうございました!
関連リンク集
他に発表された皆さんのブログ記事や発表資料など(の一部)
参考になる本たち
- 作者: 國居貴浩
- 出版社/メーカー: 秀和システム
- 発売日: 2013/11/01
- メディア: 単行本
- この商品を含むブログ (1件) を見る
Objective-Cを一通り触ってきたけどCoreDataはまだ触ったことない、そしてその必要性を感じてきているという方向けにオススメの本です。
- 作者: ジムグレイ,アンドレアスロイター,Jim Gray,Andreas Reuter,喜連川優
- 出版社/メーカー: 日経BP社
- 発売日: 2001/10/20
- メディア: 単行本
- 購入: 7人 クリック: 145回
- この商品を含むブログ (20件) を見る
- 作者: ジムグレイ,アンドレアスロイター,Jim Gray,Andreas Reuter,喜連川優
- 出版社/メーカー: 日経BP社
- 発売日: 2001/10/20
- メディア: 単行本
- 購入: 7人 クリック: 47回
- この商品を含むブログ (13件) を見る