2013/03/04

am-motion-parts : RubyMotion製 アプリから 汎用的な部分を取り出して別リポジトリにしたら頭もコードもスッキリした件

え? それって昔からあるやり方じゃ・・・とか言うな。傷つきやすいんです。ワタクシ。

 

RubyMotion 、少しずつ認知が広まってますね。

月1定期開催で自分も何度もお世話になっている RubyMotion もくもく会も初めて ////// のキャンセル待ちがでるとか

第7回 RubyMotion もくもく会

 

 RubyMotionJP の方々が翻訳してくれたチュートリアルにはてブがいぱーいつくとか ( 2013/03/04 時点で 200超 )

はてなブックマーク - RubyMotion Tutorial: Ruby で iOS アプリを作ろう

 

いあ、自分は単なる RubyMotion のしがない1ユーザでしかないんですけど、嬉しいではないですか、自分の好きなプロダクトが認知されて一般的になっていくのを見てるのは。iOS App の開発 make it easy になってまじ RubyMotion イノベーティブ。やばいわーこのプロダクトやばいわー。

 

自分が良かれと思うものを作って、売って。で、生活していったらなんだか幸せになる人がいぱーいでてきましたとかね、1つの理想的な働き方なわけで溢れるリスペクトがとまらない訳です。

おれもう中年なのにこの文章、思春期の人が書いてるみたいですね!!

 

さて、本題の RubyMotion製 アプリから 汎用的な部分を取り出して別リポジトリにしたら頭もコードもスッキリした件 ですが、リポジトリはこちら。

amazedkoumei/am-motion-parts

 

構成はいまのところ ( 2013/03/04 時点 ) 下記の通り

  • AMP::InformView
    • 非同期処理中にユーザに処理中である旨を通知する View
  • AMP::ActivityViewController
    • iOS6 で追加された UIActivityViewController の拡張版
  • AMP::SmoothTableViewCell
    • TableViewCell を addSubView(label) で作るとカクカクしてしまうので drawRect で描画するCell
  • AMP::GithubAPI
    • GithubAPI の Wrapper クラス
    • API の網羅性低いです。。

 

 

AMP::InformView

 

Untitled note

 

これを show メソッドと hde メソッド で制御します。

続きはWebで!(意訳 :  Usage は README を参照してください )

 

 

AMP::ActivityViewController

 

Untitled note2

 

iOS6 で追加された UIActivityViewController は

  1. ViewController を生成して
  2. 自分で作った Activity ( Custom Activity ) を追加して
  3. 使用しない Built-In Activity ( Twitter とか Facebook とか Mail とか ) を指定して
  4. 表示!

と若干使い勝手が悪いので、Built-In Activity も Custom Activity と一緒に追加できるようにしました。

 

あと、Open in Safari とか Hatena bookmark とか若干の Custom Activity をバンドルしてます。

 

なお、 Custom Activity はこちらのライブラリが非常に充実しております。

shu223/UIActivityCollection

 

 

 

AMP::SmoothTableViewCell

TableViewCell は スクロールのたびに View の再描画が実行される仕様になっておりまして、その処理が重いとスクロールがカクカクしてしまう問題がありまして。有名どころだと一昔前の Facebook アプリ。

 

それを 解消するために View に Label を addSubView するのではなく drawRect で全部描画してしまいましょうという Hack があるわけです。

詳しくはこちらの本の 『1-6. UITableView Hacks』

iOS SDK Hacks ―プロが教えるiPhoneアプリ開発テクニック
吉田 悠一 高山 征大 UICoderz
オライリージャパン
売り上げランキング: 31,890

 

この実装を TableView 作成のたびに書くのはあまりに非効率なので AMP::SmoothTableViewCell を継承して drawRect の内容だけ書けばOK なようにしました。

 

 

AMP::GithubAPI

GithubAPI の Wrapper クラス

絶賛開発中です。

I/F 変わるかも(ゴニョゴニョ

 

 

最後に

ここまで書いておいてアレな感想ですけど、アプリ作ってそこから汎用化可能な部分をライブラリとしてスピンアウト!というアプローチもいいですが、使えるものは世の中から探し出してどうしても自分で書かねばならぬ部分だけゴリゴリっと、というアプローチが正道であるなと感じました。

ライブラリの作り方アプローチではなく、アプリケーションの作り方の話になってしまいますけども。

 

スキル的にもモチベーション的にも自分はライブラリよりもアプリケーションの側なのですが、それならば世の中にコミットするために相応しいアプローチというのは前者ではなく後者なのだろうな、と。

 

昨日だったか一昨日だったかこれ読んだのですよ。

クリアなコードに囲まれて - クリアコードでの二年間 - ククログ(2013-02-27)

 

共感しつつも「2年前の私」といまの自分が重なる部分が多くてですね。ちょっとヘコみました。

 

Github的な開発スタイルが浸透してきて、Twitterでも 『インストールでつまづいたから Pull Req. 送っといたわー』といった発言もちょいちょい目にするようになりました。 

 

つまづいたら内容と解決策まとめて bad know-how としてブログで公開といったスタイルも、もはや悪行と呼ばれても仕方ない世の中になりつつあるのかもしれません。 

「なんでこれ、開発者の人に問題を報告しないの?」

ですよ。ええ。

 

くるくると世の中変わっていっておもしろいですね!

まとめと本文の乖離っぷりはんぱないけど気にしない!

 

 

Comments