2012年12月アーカイブ

いやー、まいった。今年は全部で26冊しか読んでないらしい(-ω-)

2012年に読み終わった本: 26冊

しかも十二国記の再読がたくさん含まれている。

いやー、ベスト5もネタがないけど無理矢理選んじゃいます。

ベスト5

古書の来歴

数奇な運命を経て現在に残された稀覯本、サラエボハガダーを題材とした歴史ミステリー。

非常に面白かった。しかしかなり暗い内容なのでユダヤ教、イスラム教、キリスト教の関係や歴史について興味がない人にはキツいかもしれない。

解錠師

少年が主人公の小説は成長譚であるので、この小説もそうなのだけれど、マイクルの人格やスキルが成長しつつも犯罪者となっていく悲しみを感じる。アメリアとの関係が思うようにならないやるせなさも切ない。終盤に明かされる過去のトラウマも凄惨でしんどいです。 ただ、そんな話ではあるのに全体を通して明るい雰囲気が続くのはいい。

解錠のテクニックには非常に好奇心をくすぐられた。特殊技能には憧れる。練習したくなる(笑) 続きを読みたいと思わせるけど、この終わり方だと、この先マイクルが金庫破りをすることはなさそうかな。

読んだのはポケミスシリーズの新書版ですが、幾つかの海外ミステリーベストに選ばれたようで、最近は文庫版が本屋に平積みされていました。おめでとうございます。

反逆の星

ちょうど20年前に新刊で買って読んで非常に気に入った。同じ寮に住んでいた会社の先輩に激しくオススメして貸したのだけど、そのまま返ってこず、しかも書名も著者名も忘れてしまい探せずじまい...

それがひょんな事から思い出すきっかけがあり掘り起こすことができた!著者は大御所のSF作家、オースン・スコット・カードだったのですが、ずいぶん前に絶版になっている模様。残念な事です。Amazonマーケットプレイスで1円(+送料)でゲットして22年ぶりの再読!

いやぁ、大好きだったことは覚えていたのだけど内容は全く覚えていなかった。しかし記憶は間違っておらず、今読んでも激しく面白い。20年以上開けると再読でも初めて読んでいる感覚で読めるのですね(笑)

仏陀の鏡への道

相変わらず私が読む本は新刊が少なく人に勧められて古い未読が多いのですが、去年のストリート・キッズの続編を読み、今年もランクイン。

洋物のハードボイルド/ミステリーとしては珍しく舞台のほとんどが香港〜中国、清朝が倒れ共産党が台頭し、峻烈な政治に弥が上にも巻き込まれてしまった家族の話が、去年読んだ「中原の虹」から少し後の時代と思うと記憶に新しい。ニールかわいいよニール。

月の影 影の海

再読はランクインさせないポリシーだったのですが今回、出版社が新潮文庫に変わり、シリーズ新作も出るかも?マジで?という期待も含め【祝】おかえり十二国記という事で、おそらく5回目の再読ですが入れちゃおう!

しかし何度読んでも、展開を知っていても、おもしろさに変わりがない。すごすぎる小説。まだ未読の人は絶対に読んでください。

次点

次点を付けるほど読んでないのですが、昨日書いたぼくをステップアップさせてくれたプログラミング書の最後の2冊とボーンコレクターシリーズなど下記です。ていうか今年読んだほぼ全てになっちゃう(笑)

その他

ちなみに、今年わりと評判の高かった「ビブリア古書堂」シリーズも読みましたが、まぁ可もなく不可もなしと言ったところでしょうか(・ω・)

さて、ここ6年で読んだ本は純減にもほどがある有様です。(2007年の途中からなので半分くらいしかない)

2007年: 66冊 2008年: 133冊 2009年: 127冊 2010年: 64冊 2011年: 42冊 2012年: 26冊

以前はマンガも気に入った作品は入力していたのもあるのですが、おそらく小説を読むペースも1/3になってる感覚。 理由は分かってます。絶対にiPhoneのせいです(笑)

年末なので私も何かまとめのようなものを書こうと思うのですが、今年1年で何かまとまるようなことが特に思いつかない。

そこで学生時代から数えると23年プログラミングをやってきて、その間にステップアップした確かな手応えを今でも覚えているプログラミング書を思い出しつつ紹介することにします。

手元にないものもあって間違ってる記述があるかもしれませんが、あしからず。

紹介する本

紹介するのはこの10冊です。括弧内の数字は私が読んだであろう西暦年で発行日ではありません。

  1. プログラム書法 第二版(1992)
  2. WRITING SOLID CODE(1995)
  3. プログラマのためのSQL(1996)
  4. プログラミングPerl改訂版(1997)
  5. Effective C++(1997)
  6. プログラミング作法(2000)
  7. XPエクストリーム・プログラミング入門(2001)
  8. Railsによるアジャイルwebアプリケーション開発(2006)
  9. メタプログラミングRuby(2012)
  10. The RSpec Book(2012)

プログラム書法 第二版(1992)

就職して2年目の仕事でCのプログラムを書いている時に正規表現を自分のプログラムで使いたいシチュエーションがありました。手元にないので間違っているかもしれないのですが、確かこの本にFORTRANによる実装方法が書いてあって一生懸命Cに移植して使った記憶があります。

今なら正規表現のソースはOSSで山ほど見ることができますが当時はなかなか大変でした。でも調べてみたらPerlは既に存在していたのですね。

正規表現の実装以外でも勉強になった記憶はあります。具体的な内容は全く覚えてませんが。

次に紹介する「WRIGING SOLID CODE」の序章部のコラムに

「プログラム書法」にすでに詳しく言及されているガイダンスを焼き直すつもりはなかった...略...「プログラム書法」で築かれた土台の上に構築され、同様のフォーマットに従っている。

と記されていて、基本は本書で勉強しるとあります。

良書ですが今でも読んだほうが良いかと言われたら、FORTRANだし別の書籍を選択したほうが良いかもしれません(笑)

WRITING SOLID CODE(1995)

仕事では2000年くらいまでC/C++ばかり書いていたのですが、バカで不注意なので本当にミスが多かった。先輩に怒られてばかりいました。

書名からも分かる通り硬いコードを書くための指南書です。副題も「バグのないプログラミングを目指して」、その通りの内容なのです。

この本を読んでから、たまたま動いたというコードは1行でもあってはならないという考えでプログラムを書くようになり、また自分で書いた関数(メソッド)が間違われた使われ方をしたらすぐに気づけるように気をつけて書くようになりました。

ほとんどC言語に関する項目なのですが堅いコードを書く考え方を徹底するために買って損はないと思います。とは言っても既に絶版でAmazonのマーケットプレイスでは定価より高い価格で売られてますね...

今でも持ってます。

プログラマのためのSQL(1996)

先ほど、たまたま動くコードがあってはならないと言いましたが、私は最初SQLが非常に苦手で試行錯誤のうえたまたま動いていたコードの塊でした orz 今となってはお恥ずかしい限りですが、特にJOINが苦手でよく分かっていなかった。

昔のプログラム書には、書いている本人が(翻訳の場合、訳者がという事も多い)理解していない事も多く、それを読んでも分からないので自分は頭が悪いのかもしれないと思うことも多かったです。その点この本は(当たり前ですが)基本的に間違ったことは書いておらず説明も分かりやすい。

またSQLの本となると多くはベンダー(OracleやPostgreSQLやMySQL、懐かしのSybaseなど)依存な内容となってしまうのですが、本書は特定のベンダーに依存しない標準SQLについて書かれているのも魅力です。

難があるとすれば章立てが最初がDDLの解説からとSQLの構文仕様書的な順序で構成されていて頭から読み下すのは退屈なところかもしれません。私としては16章のSELECT文をまず読むことをお勧めします。JOINが何かを分かっていないビギナーの方はこの章を読むだけで元を取れるでしょう。

今でも持ってます。装丁ががらっと変わって第二版になって販売されていますね。

プログラミングPerl改訂版(1997)

今でこそRuby大好きな私ですがC/C++で仕事をしていたときは、バッチプログラムやちょっとしたツールはPerlを使って書いていました。sed/awkとShell Scriptで書くより自然に書けますからね。

昔いた会社の共有フォルダのbinディレクトリに最初にperlをコンパイルして置いたのは私でした。まだPerl 4でした。

しっかりした技術書でありながら随所にユーモアや面白い言い回しがあって読んでいて楽しいです。

言語としてのPerlは特に好きとか嫌いとか特別思い入れはないのですが、Perlを使って学んだことはとても多いです。デーモンプログラムをお気軽に作ったり、仲間うちで使うWEBサービスを作ったり、外部の公開APIをたたいたり、と何かの実験をする用途では2005年くらいまで常にPerlを使っていました。今はその用途でもすっかりRubyに置き換わってしまいましたが。

私はすでに手放してしまっていますが2分冊になった第3版が販売されていますね。

Effective C++(1997)

この本が私に与えた影響は計り知れないです。C++でプログラムを書くための間違いのない指針が50個紹介されています。この50個は守った方が良いというより絶対そうしろと言いたいレベルです。

最初にC++を使うプロジェクトに参加したときの自分は本当に惨憺たる状態でした。オブジェクト指向がどういうものかの知識はあったし、デザインパターンもGoF本が既にあって知識としては理解していたのだけどC++による実践力が最弱レベルだった。C++は言語使用が結構複雑な上に細部を理解せずテキトーに書くと必ずおかしな動きをする(笑)本当にひどいコードを書いた記憶があります。

次のプロジェクトで優れた先輩のコードを読んで、同時に(おそらく同じ先輩に)この本を紹介してもらい読んで、格段にレベルアップした。オブジェクト指向などプログラミングパラダイムの知識はもちろん大事なのだけど、危険を避けて確実に動くコードを書くのはもっと大事。C++は自由度が強烈に高いので特にそう思うのです。

今ならOSSの良質なコードをたくさん読めて開発に参加することもできるので、そういうのを積極的に読んでいるプログラマは最初から空気を吸うようにできているのかもなぁ。

本書は私にとってとても大事なので改訂第2版、続編の「More Effective C++」と一緒に本棚に並んでいます。もうC++を使うことは無いような気もしますが(笑)現在は第3版になっているのですね。

プログラミング作法(2000)

「プログラム書法」にとても似た名前ですからもちろん関係があります。著者の一人がカーニハンだし続編と言える書籍です。時代も変わってきてサンプルコードにJavaも使用されています。

個人的な思い入れは、これまで紹介してきた書籍に比べたら低いのですが、新人教育を自分がやることになったら真っ先にテキストとしてこれを使おうと思うに違いないという事で入れました。

図解○○やサルでも分かる○○系の入門技術書から試行錯誤して、また玉石混淆のネット情報だけからたどり着くのもアリだと思いますが、最初から正しいプログラムの書き方を知っている方が無駄がないですよね。

XPエクストリーム・プログラミング入門(2001)

正直に言いますと私はXPを実践したことは一度もないです(爆)なぜ入れたかというと、この本で紹介されている開発手順が当時、新鮮でうらやましく、みんなが幸せになれるのはコレしかないと思ったことがあったからです。

システム全体に対してあらかじめ要求仕様をしっかり文書にして、詳細設計してさらに多くの文書にしてと、この時点までにもうプロジェクトはだいたい遅れてるし、コーディングに入る頃には当初予定していた納品の時期を過ぎている事もある(笑)ポシャった時に動くものが何もなかったという話も聞いたことがあります。(幸運にもそこまでダメな仕事は私にはなかったですが)

それに対して、動くものを少しずつ作っていくというXPは目から鱗でした。

XP自体はもうメインストリームで流行っているとは言えないですが、うちも採用してます!とどこでも言っているアジャイル開発のほとんどはXPそのものだと言っても過言ではないし、ペアプログラミングはそれ単体で成果を上げられる仕組みだし、テスト駆動・リファクタリングに至ってはやって当然です。

第2版が出ていたのですね。知らなかった。ただ本書は初版から翻訳の質に難があると評判ですし、他にもいろいろ出てきているのでお勧めはしないです...今ならアジャイルサムライでしょうか。まだ読んでないですが。

Railsによるアジャイルwebアプリケーション開発(2006)

ちょっと間が開きますが来ましたよRuby on Rails!もうすぐ4が出そうですが、初版が出たときはまだ0.9〜1.0とかだった記憶がありますので、すごい成長ですね。実際に実践で使われているフレームワークとして他の言語や開発ツールにも大きな影響を与えました。

この頃、自分でも何か個人的にサービスを作って世の中に公開しようと思っていたときに、

  • 慣れているJ2EEを使う
  • プラスSeaserを使う
  • Perlのフレームワークを使う
  • 最近出てきたRailsを使う

この4つの選択で迷ってました。Javaは一番知ってるけど個人で書くのはめんどくさいしつまらない。つまらないので新顔のSeaserのプロダクトを使ってみようと少し触ってみましたが、当時の自分はドキュメントが少ないし完成度がイマイチだなと感じてしまったのです。そこでPerlにするかRubyにするかの一騎打ちになったのですが、本書の前半を本屋で立ち読みすると、簡単なオンラインストアをサクサク作るという実践的な内容で本当に簡単そうに思えた。

そんなわけでRailsを選択して、ひとつサイトを作ったのでした。Twitterが日本ではやり始めたばかりで、そんなノリのサイトを作ろうと思ってできたのが今読ミ。テストデータを除いて最初に登録したのはこの本です(笑)サイト自体はこの後、他の書籍管理系のサイトもたくさん生まれてきて、また伸ばしていくための方向性が分からなくて流行らなかったのですが、まだ数人使ってくれている人がいますので動かし続けてます。自分でも使ってますし。

この本からサイトが生まれて私の中でRubyはそれまでのPerlに変わるポジションを確定して、今ではほとんどのプログラムをRubyで書いています。Railsは本当にRubyのキラーアプリでした。

もっていたのは初版でさすがにもう手放してて第2版が手元にありますが、Rails3からは別物なのでこの年末の大処分物に入りました(笑)今では第4版が販売されていますのでそちらをどうぞ。

メタプログラミングRuby(2012)

先ほどのRails本からずっとRubyは書いていたのですが仕事ではやはりほとんどJava。Rubyを書いているとは言っても、普通のオブジェクト指向プログラミングをしていただけでRuby好きがRubyをなぜ好きかを分かってなかったと言えます。

Railsでは内部でメタプログラミングが使われまくっている事は知ってましたが自分には関係ないと思っていた。ところが仕事でもRailsを使いはじめ、Mongoidの新しいバージョンを古いMongoDBで使えないかコードを追いかけ回したり(結局MongoDBのバージョンを上げましたがw)少しずつ手を染め始めたのです。

そんな状況下、今年の初めに本書の存在を知って買いました。この本を必要とされる人は限られるかもしれませんが確実にステップアップさせてくれることは間違いないです。メタプログラミングなしでも問題なくプログラミングはできます。でもせっかくJava(笑)ではなくRubyを使っているのなら使えるようになりたくないですか?

本書は寸劇を交えながらメタプログラミングが効果的な状況での使い方が5章に渡って紹介され、(古いバージョンのですが)ActiveRecordで実際に使われているテクニックの解説がクライマックスとなっています。

でメタプログラミングの考え方やテクニックを理解したら、復習のために付録があります。

  • 付録A:よく使うイディオム
  • 付録B:ドメイン特化言語
  • 付録C:魔術書

Bはさわりだけなので言及を避けますが、AとCはメタプログラミングのカタログとなっていて血肉に変えるために後で何度でも読み返して思い出し記憶するために使えます。私は自分用のメモとして付録AとCだけ自力で入力したプライベートGistを見てよく確認しています。著作権があるでしょうから公開できないのが残念ですが。

The RSpec Book(2012)

ついに最後になりました。先ほどのメタプログラミングRubyと同じく今年読んだ本です。

TDD(やBDD)は前から知ってましたが、実際に自分でやるようになったのは去年くらいでしょうか。自動テストは書いてましたが、後から書くのがほとんどでした。正直テストファーストなんてできると思ってなかった(笑)XPの本を読んでても実際にはそんなもんです(汗)

本書は少しでも効率的に自己流じゃなく優れた人がやっている方法でTDDしたいと思って買いましたが大正解でした。実際に手を動かしながらやっていくことで誰でもTDDできるようになると思います。

実際にやってみると気持ちいいんですよね。テスト→実装→リファクタリング。今やこの順序じゃないとプログラムしたくないです。しかしRubyにはRSpecがあるからできるのであって、他の言語でも同じように行くかというと同じノリでは難しいようにも思います。

まとめ

思い出しながら10冊紹介しました。私の読んだことのある本のみでもっと良い本もあると思います。是非紹介して欲しいです。

しかし...今はネットで十分かもですが!(爆)

この記事は RubyMotion Advent Calendar 2012 の 23 日目の記事です。

#いつものように自分のブログに書こうとしたのですがコードハイライターをGistに依存してて今回はちまちま貼るのが面倒になったのでGistをオリジナルにしちゃいます(汗)

RubyMotionでTDDしつつどこまでMetaProgrammingできるかな?の実験

さてRubyMotion Advent Calendarも最後の方まで来ましたがテストに関するエントリーが依然としてない。私も実際のところRubyMotionでテスト書いたことない(ていうかまだまともなアプリ書いてないw)ですがチャレンジしてみようと思います。そんな目的なのでUIのテストは扱いません(汗)

またRubyMotionは少し制限はありますがRubyですのでメタプログラミングも魅力の一つのはずです。その辺も絡めながら書けたらいいなと思っておりますが、今日のネタは行き当たりばったりなのでどこに向かうかは分かりません(笑)というかRubyMotion Advent Calendar用のエントリーですがRuby寄りのネタになってしまうと思われます(・ω・)

メタプログラミングと言えばActiveRecordじゃん?という事で、書籍を表現するシンプルなモデルクラスBookを考えてみましょう。ただし私はしばらくActiveRecordなモデルじゃなくてMongoDB用のMongoMapperやMongoidを使っていたためそっちっぽくなります。

TDDでやってみる

TDDのRed-Green-Refactorを実践するためにテストから書きます。

#続きはこちらへ...

この記事は RubyMotion Advent Calendar 2012 の 16 日目の記事です。

いきなりRubyMotionで書き始めるのはなかなか辛いので、最初は語彙を増やすたObjective-CのサンプルプログラムをRubyMotionで実装するというのを結構やりました。

Objective-Cのコードをコピペして文法をRubyに書き換えていくのは慣れればそれほど難しくないのですが、最初は簡単なことで次々と引っかかって手が止まることが多かったので覚えている限りですがリストアップしていこうと思います。

形式プロトコルの指定は悩まないで省略してよし

モジュールのincludeとかそういうのかなー?といろいろやったりしましたが、RubyはObjective-Cよりもっと動的な言語なのでメソッドは実行時に存在すればOKという事(たぶん)で次のような形式プロトコルの採用の指定 は無視しても良さそうです。

また非形式プロトコルは既存クラスを開いてメソッドを追加する(オープンクラス)だけです。

オーバーライドして親の実装を呼ぶのはsuperだけでよい

パラメータが必要な場合でもsuperを呼ぶだけで、パラメータもそのまま親クラスのメソッドに渡されます。

型の宣言はすべてばっさり落とす

先ほどの例のメソッドパラメータのBOOLの宣言を無視したようにRubyは型の宣言は一切ないので落としてしまいます。

ターゲットにメッセージを送るの書き換え

Rubyの文法が拡張されていてパラメータ名の指定に対応されています。 (Ruby1.9の簡易Hash指定とどう区別してるのだろう...)

括弧は省略してもかまいません。

target.message3 arg1, with:arg2

クラスメソッドも同様ですので、よく見るオブジェクトの生成は

@propertyはインスタンス変数

@property指定はそのクラスのメンバーなのでRubyではインスタンス変数として扱うのが適切だと思います。

@synthesizeはattr_accessor

@synthesizeはsetter/getter生成の指定なのでRubyではattr_accessorにするのが適切だと思います。オプションによってはattr_reader/attr_writerで指定する方が適切かもしれません。

ちなみに、RubyMotionでattr_accessorを使用すると通常のrubyのアクセサ(property,property=)の他にsetPropertyというsetterも生成されます。

このsetProperty、property=と同じなのかと思いきや

cオブジェクト自身を返してます。メソッドチェーンできると言うことですね!

定数の最初の文字に気をつけよう

iOS SDKの定数は小文字から始まりますがRubyMotionではRubyの規約にあわせて大文字から始まるように変換されています。Objective-Cのソースコードをコピペして修正すると、定数の先頭を大文字にするのを忘れがちです。

エラーメッセージを見れば分かるのですが、慣れてくると見つけたらすぐに大文字にするのが習慣になります。

if文の条件に気をつけよう

Rubyの偽はnilとfalseですがObjective-CはCなので偽は0のみです。
#nilやNULLやNO(BOOL)も値としては0です。

なので、これをそのまま置き換えたらダメ。0以外が真と明示的に書かないといけない。

また、真偽値(BOOL)はObjective-CではYES(1)/NO(0)ですが、すべてtrue/falseに置き換える必要があります。

ファイルの依存関係

RubyMotionではappフォルダの中に入っているRubyソースコードをディレクトリが階層になっていてもすべてコンパイルしてくれますが、コンパイルの順番が単純な辞書順なためファイルを分けると未定義でコンパイルエラーになることがあります。

RubyMotionがリリースされたばかりでまだ情報がほとんどなかった頃は困って全部1ファイルにしたりしていましたが、依存関係をRakefileに書けば大丈夫なのでした。

ところが最近リリースされた1.28から自動で解決するようになったようです。
#が、まだうまく動かないことが多いらしいです(-ω-)

ブロック呼び出し方

Objective-Cにはクロージャを実現するブロック構文があって、アニメーションのコールバックなどでよく使います。lambdaを使います。

#この例は公式ガイドそのものですが...

lambdaじゃなくてprocでも動きますが、procはパラメータ数に無頓着だったりreturnで外側のメソッドを抜けてしまったりObjective-Cのブロックとは違う動きをするのでlambdaの方が安心です。

ポインタ

描画系のAPIを使う場合にCのポインタをライブラリに渡さなければいけないシチュエーションが多々あります。

RubyMotionのPointerを使えばC言語のポインタ操作ができますが、Objective-Cから移植していると、表記方法を混乱しがちなので落ち着いて対応していきましょう。

こういうのでもGLubyte(OpenGLESの型)をXcodeで調べればサイズはunsigned charと分かるので、

とかけます。アクセス方法は配列と同じですが相手はCの配列=メモリエリアなので何を格納するのがプログラムの意図として正しいのかよく考えて移植しましょう。

写経に使えるサンプルコードの紹介

元になるコードはGithubなどでObjective-CやiOSで検索してもたくさん出てくるでしょうが、まずは小さなプログラムから始めたいところです。

私が参考にしたサンプルコードを紹介します。

iOS Developer Library Sample Code

Appleのサンプルコード集です。

cocoa controls for iOS

iOS用のUIパターン実装例が大量にあります。移植したものが動くとかなり嬉しいです。

iOS 6 新機能のサンプルコード/ライブラリのまとめ22個 - Over&Out その後

iOS 6の新機能を紹介したブログエントリーですが、新機能をRubyMotionで実装してみる実験に良さそうです。

まとめ

Objective-Cで実装できていることは、なんでもできる...と言い切れるかはまだ分かりませんが、私がいろいろやってみたサンプルコードではひとつ(OpenELGSを使っているもの)を除いてすべて動きました。

もっといろいろ突っかかった事があった気がするのですが、思い出せたのはこのくらいでした。簡単なことでも気づいたことをブログに書くなどして残しておいた方がいいですね。

この記事は RubyMotion Advent Calendar 2012の13日目の記事です。

BubbleWrapRubyMotion Tutorialでお馴染みのClay Allsoppさんによって書かれたRubyMotion本がリリースされました。

章立て

  • Foreword
  • Ruby on iOS
  • Creating a New App
  • Filling the Screen with Views
  • Organizing Apps with Controllers
  • Representing Data with Models
  • Showing Data with Table Views
  • Testing Your Apps
  • Example: Writing an API-Driven App
  • Uploading to the App Store

序文とRubyMotionの概要

序文はRubyMotionの開発者Laurent Sansonettiさんによって書かれています。

続いてRubyMotionの成り立ちや、この本についての説明など概要部分が「Ruby on iOS」の章となっています。

3章の「Creating a New App」からは実践的になります。

ここは公式のスタートアップガイド(日本語)を詳しくしたような内容です。

RubyMotionを初めてさわる方でも迷うことなくビルドしてシミュレータが動作するところまで行けそうです。Rakefileの内容にも少し触れられていて公式のガイドより理解を深めながら実験できる作りになっています。

ViewとController

4章の「Filling the Screen with Views」はWindowとViewの階層構造やハンドリング方法の基本です。 最初は戸惑う、Viewをアニメーションさせる方法についてもわかりやすく解説されています。

5章の「Organizing Apps with Controllers」はiOS SDKプログラミングのキモであるUIViewControllerについての解説です。

rootViewControllerとして単純なUIViewControllerインスタンスを使う方法から始まって、UINavigationControllerを使ってのスタック型の画面遷移、UITabBarControllerの使い方、モーダルビューの使い方が説明されています。

このViewとControllerの解説パートはiOSの知識があるならば飛ばしても大丈夫かもしれません。

データの扱い方

6章の「Representing Data with Models」ではRubyMotionでMVCプログラムを書くための基本が説明されています。 モデルクラスを自分で定義してUIViewとUIViewControllerをどう連携させるか、データの初期化をどこでやるかなど初心者にとって迷うポイントだと思われるのでいいですね。

パラメトリックなモデルの初期化など簡単な動的モデルの構築についても書かれていて、Rubyもこれからという人にとって良いサンプルです。(ほんの触りだけではありますが)

データの保存はNSUserDefaultsを使ってでした。CoreDataを使ってRubyっぽくやる方法のアイディアがあったら良かったな〜。そこはiOSプログラミングやサードパーティライブラリのスコープで専門的すぎるのかしら。

7章の「Showing Data with Table Views」ではUITableViewにデータを表示する方法の解説です。

この章もiOSのUITableViewの知識があるならば飛ばしても大丈夫かもしれません。

テスト

8章の「Testing Your Apps」ではRubyMotionもくもく会でも毎回話題になる、みんなどういうのがベストプラクティスなのか分からなくて困っているテストについて。

しかし結論から言うと内容としては公式ドキュメントのWriting Tests for RubyMotion Apps(日本語)の方がずっと詳しい(爆)

この章の内容は、TDDでspecを書くための最初のとっかかりとして使い、UIのテストについては必要なオブジェクトをテスト時にどう引っ張ってくるかを理解するために4章の内容をじっくりやって、公式のドキュメントを参照しながら、必要なテストの語彙を自分で増やしていくのが良さそうです。

最近RailsプロジェクトでやっとTDD厨になったので、RubyMotionを使ったアプリを作るときはTDDで開発して、またの機会にそれを報告できたらいいなと思います。

実践的な開発例

9章の「Example: Writing an API-Driven App」ではこれまでの内容をもとにAPIをたたいて(Mashup!)表示をする簡単なアプリを作成する例となっています。

App Storeへの申請

10章の「Uploading to the App Store」はApp Storeへ申請するためのプロジェクトの設定方法と作業内容についての解説となっています。

iOSアプリの設定はハマりどころ満載で最初は本当に大変なので、本書の最も使える内容なのではないかと思われます。

まとめ

RubyMotionをこれからはじめる人にはとても良い内容になっていると思います。

今まではネットにある優れたチュートリアルをやるのが最初のステップとなっていましたが、さすがに書籍としてまとまっているだけあって、本書を写経して実際に動かしながら確認すればひと通りのことはできるようになるでしょう。

駆け足で紹介してきましたが、私もまだRubyMotionでアプリを作り上げたことがないレベルなので、時間を作ってひと通りやってみようと思っています。

iTunes 11をやっとまじめに触っているのだけどとても良くなってる!

iTunes 10まではiTunes DJで、気分によって次に聴きたい曲を入れたりしてたのがiTunes全体がDJっぽい思想でできていて再生中に常に次にかける曲を今かかってる曲を止めることなしに挿入できる。

Ratingが1以上の曲をランダムに再生中

2012-12-09-00.png

アルバムを追加

2012-12-09-01.png

曲単体を追加

2012-12-09-02.png

検索結果から追加

2012-12-09-03.png

ミニ・プレイヤー状態にしておけば、完全に以前のDJの時の感覚と同じ。

この先かかる曲が表示されていて、

2012-12-09-11.png

小さな画面ながら検索キーワードを入力すると結果がリアルタイムに反映されてそこからまた次の曲を選ぶことも簡単にできる。

2012-12-09-12.png

iTunes 10でも十分満足していたのだけど、より使いやすいUIを出してくるとはさすがAppleだなぁと思います。

画面の変化があると、使いづらくなったというユーザーが相当数いるのは確かで、そのために旧UIも残しておく選択をすることも多いのですが、そうすることによって新UIに慣れるのが遅れ、あまつさえ全く使おうとしないユーザもいる。

がらっと変えてでもユーザに新しい利便性を提案する。かっこいい。

iPod/iPhoneでユーザを囲い込んで簡単にやめられない状況を作っているからできるという事かもしれませんが(笑)

この記事は RubyMotion Advent Calendar 2012の二日目の記事です。

第2回RubyMotionもくもく会でYahoo! iOSマップSDKのサンプルをRubyMotionに翻訳していて
http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/iphonesdk/tutorial2.html

YMKCoordinateRegionMakeのところで

Undefined symbols for architecture i386:
  "___concrete__YMKCoordinateRegionMake", referenced from:
      _MREP_F77F7B4AA08045E9933EBA24E7FDF1CA in app_delegate.rb.o
  "___concrete__YMKCoordinateSpanMake", referenced from:
      _MREP_F77F7B4AA08045E9933EBA24E7FDF1CA in app_delegate.rb.o
ld: symbol(s) not found for architecture i386

こんなエラーで落ちます。何を言ってるのか分からなかったのですがWatsonさんのおかげでサードパーティーのライブラリのマクロは自動で定義されないので存在しないことが分かりました。

大文字で始まっているのですぐ気づいても良さそうなものですが、このときは全然気づかなかった(汗)

本題はそこではなくて、frameworkのヘッダファイルからYMKCoordinateRegionMakeを探して同じ事をするメソッドを定義する際にC構造体の扱いがすぐに分からなかったこと。

該当ヘッダファイルの内容はこうでした。

マクロじゃなくてstatic inlineな関数でしたが同じ事なのでしょう。

このYMKCoordinateSpan構造体のオート変数としてspanを定義するところです。

構造体変数はframework内で使われているので勝手に他のもの代替するわけにはいきません。YMKCoordinateSpan構造体としてのアクセス領域が必要です。

これはPointerを使えば回避できます。
http://www.rubymotion.com/developer-center/guides/runtime/#_pointers

元のプログラムはオート変数を生成して値を設定しそのまま返して、値をコピーして利用している。同じ事をするためにYMKCoordinateSpan型のポインタを作ったら#valueで値を取得して使用します。([0]で値にアクセスしてもいいですが)

これでバッチリ動作するようになりました。

余談ですが、再定義しても上記のようにメソッド名をYMK...からymk...と小文字に変えないと動きませんでした。static inlineの方の定義が使えないのに名前としては参照できるからという事でしょうか...(・ω・)

このアーカイブについて

このページには、2012年12月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2012年11月です。

次のアーカイブは2013年1月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。