はじめに
2014年2月25日(火) 、『 ヤフーvsクラスメソッド「iOS 炎の7番勝負」 』が開催されました。このイベント最大の注目点はなんといっても、対戦形式の勉強会だということ。事前告知の際にも「勝負」のキーワードに対する注目度が非常に高く、新たな試みに期待が高まっていました。14名の登壇者と約500人(会場とUSTREAM)の参加者が繰り広げる熱いイベントの様子をレポートします。
イベント概要
iOS開発にまつわる7つのテーマに沿ってヤフー、クラスメソッドそれぞれの登壇者が5分間の発表を行い、本イベントのために制作されたWebアプリケーションを使って参加者は登壇者に投票し、その得票数を競います。最終的な勝敗は総得票数ではなく、それぞれのセクションで勝敗を決し、勝利の多いチームが勝者となります。
会場の模様
いよいよ開演!
クラスメソッド大橋さんの乾杯の音頭と共にいよいよ開演です。ビアバッシュ形式ということでアルコールやソフトドリンク、軽食などが用意されていました。
まずはじめに、クラスメソッド株式会社の紹介、当イベントを開催するまでの経緯、投票方法の説明がありました。なぜ、ヤフーとクラスメソッドが対決しているのか?というところでは、iOS 7の登場が大きな要因であったようです。
クラスメソッド大橋さんによる「まずは乾杯」
クラスメソッドがiOS 7リリース直後に「iOS 7特集」と題して自社ブログに70本同時に記事を公開し、大きな反響を得て、次は勉強会だと意気込んでいたところに、ヤフーが「iOS 7 エンジニア勉強会@ヤフー」を開催を告知。クラスメソッドはまさに「ぐぬぬ」 。ライバル心に火がついたクラスメソッドはしっかり勉強会に参加し、「 サービス(ヤフー) 」と「受託(クラスメソッド) 」という両者の違いはあるものの根本は変わらないのではないのかというところで、情報交換、情報共有の場を設けようとアプローチしたのがきっかけになったとのことです。
【発表資料】ヤフーvsクラスメソッドについて(クラスメソッド:大橋)
全員参加型の投票
当日はUSTREAMのライブ配信もされていたので、会場の参加者とUSTREAMの視聴者から投票を受け付けていました。
投票はWebアプリケーションのボタンを押して行い、発表開始から5分間受け付けられます。そして、リアルタイムの投票数に応じて投票演出用のスクリーンにパーティクルが舞う仕組みです。これで、会場の方々も会場に来ることのできなかった方も、一人一人が目に見える形でイベントに参加できるというわけです。実際に声を発しなくても、会場にいなくても手軽に意思表示ができるというのは非常に嬉しい演出だったのではないでしょうか。
Webアプリによる投票画面
投票時の演出
第1回戦 テーマ:開発スピード向上
先攻: ヤフー 平松さん
題名: x10 with Xcode
最初の登壇者はこのイベントの主催者でもある平松さんです。
平松さんは世界800万ダウンロードの女子向け写真加工アプリ「petapic」の開発担当者ということです。また、社内LTの運営等を担当しておられます。
ヤフー 平松さん
スタートと同時にとりあえず投票ボタンを押してみたかった人が一斉にボタンを押したために、「 すごいいいねが飛んでますけど(笑) 」と、ちょっと気になるご様子でした。
今年のヤフーのテーマは「x10(かけるじゅう) 」ということで、それぞれ何か10倍にしようというのがテーマだそうです。開発スピードを向上するために、コーディングの時短を図ろうというお話でした。
主な内容としては、コードスニペットやテンプレートを有効活用して、よく使うコードやあまり使わないけどいざ使おうと思ったときにググらないと(平松さんはヤフってるそうです)書けないようなコードを効率よくコーディングする方法を実際にXcodeを操作しながら紹介されました。
コード検索に役立つXcodeのショートカット等の紹介の後、コードスニペットの活用法が紹介されました。Xcodeには元々スニペットライブラリがあり、ここにいくつものスニペットがすでに登録されています。このスニペットライブラリには自分でも簡単にスニペットを登録ができて、スニペットライブラリにコードをドラッグするというお手軽さ。また、追加したスニペットは保存されるディレクトリが決まっているので、それをgit管理するなどしてチームで共有すると開発スピード向上につながるのではないかとういうことでした。
おまけということで「Dash」というツールの紹介がありました。ドキュメントのほか、googleやStack Overfrowインクリメンタル検索できるというものです。コード検索と同時にStack Overflowの検索もできてしまうなんて便利そうですね。
最後に「Xcode Template」の紹介があり、こちらも開発スピード向上に有効であると紹介されました。
【発表資料】Xcodeを便利に使って爆速開発(ヤフー:平松)
後攻: クラスメソッド 平井さん
題名: Xcodeプラグインで快適な開発ライフを
平井さんは2年前からiOSエンジニアとして受託開発メインでiOSアプリケーションの開発。iOSエンジニアになった動機は「モテたいから」ということで、「 2年もやられていたら、結構モテモテなのでは?」といった質問がありましたが、本人曰く「まだ目に見える形では結果は出ていない」とのこと。
クラスメソッド 平井さん
まずはじめにXcodeの「Storyboard Identifierにコード補完がない」ことを取り上げました。
プログラムからStoryboardのIdentifierを指定する場合Identifierは文字列で指定する必要がありますが、ここの部分はコード補完がされないので特に手入力などでは間違いが起こりやすくなります。しかし、Identifierを間違えていてもビルドができてしまいます。当然落ちますが…とのことでした。一度のタイプミスならまだしも、これが何度も、またいろんなところで起こるとしたら大きなタイムロスは避けられないでしょう。
既存プラグインの「Lin-Xcode5」を参考にStoryboard関連(細かい機能は添付資料を参照)のコード補完プラグイン「StoryboardIdentifierHelper」というプラグインを作成。このプラグインを「いいね」をたくさん押してくれたら公開しますと、会場の笑いを誘っていました。
ここからは、「 Xcodeプラグインは誰でも作れる!」と題してプラグイン開発の流れを解説されました。現在、Xcodeプラグイン開発の公式サポートはなく、そのため開発に関する情報がほとんどないのが実状。そのため、既存プラグインのソースコードを読むというのが現段階での開発の近道といえるのではないかということでした。
この後、プロジェクトの作り方などの開発の流れと機能の呼び出し方を紹介されました。詳しいことはクラスメソッドブログに書いてあるそうなので、興味のある方はチェックしてみると良いかもしれません。
【発表資料】ヤフーvsクラスメソッドについて(クラスメソッド:平井)
第1回戦 結果発表
投票結果の集計が出るまでの間は質疑応答の時間となっています。
得票数は次の通りとなりました。
チーム ヤフー クラスメソッド
登壇者 平松 平井
得票数 13596 12865
開発スピード向上をテーマに戦った1回戦は、ヤフーの平松さんに軍配が上がりました。クラスメソッドの平井さんは少し残念そうでしたが、この僅差の勝負に満足そうな表情を浮かべていたのが印象的でした。
第2回戦 テーマ:小ネタ集
先攻: ヤフー 佐野さん
題名: Objective-C が好きになる Tips&Hack
佐野さんは学生時代に起業し、2013年にヤフーに入社されて、現在はヤフーの新しい検索アプリの開発に携わっている。
ヤフー 佐野さん
佐野さんのお話は大きく分けて次の2つです。
まずは、中級編として「UIView を使いやすく」のお話です。UIViewをアニメートさせようとして初心者が書いてしまいがちなコードを提示し、解決法を解説していきます。
たしかに、初心者あるあるなコードはアサインできないコードですが、非常にシンプルで直感的なコードです。それに対して参考書などにあるコードは正しいコードですが、いまいち美しくないし直感的ではないと佐野さん。美しく直感的にコードを書きたい、というところにフォーカスをあてて解説されました。
次に上級編として「NSNull を黙らせる」のお話です。
サーバからデータを取得してJSONでパースする時に、レスポンスのJSONのなかにnullが入っていて、これをNSJSONSerializationでディクショナリーにするとNSNull型になってしまい、これに対してlengthが呼ばれると落ちるというのをどうにかしようということでした。
先に、「 レスポンスを片っ端からNSNullチェックをするのが正しいやりかた」としてから後に続きます。NSNullのカテゴリを作って何もしない setter,getter をつくって NSNullを「黙らせる」方法を紹介されました。
最後に、こんなことしてもいいのかというところで、大事なのは保守性と安全性であってプロジェクトごとに適切な判断が必要であると付け加えました。
【発表資料】Objective-Cが好きになるTips&Hack(ヤフー:佐野)
後攻: クラスメソッド 諏訪さん
題名: Xcode 5のAsset Catalogにまつわる今すぐ使えるTips集
諏訪さんはクラスメソッドの子会社アンダースコア株式会社で、iOSだけではなくAndroid、企画、デザインに携わっています。
クラスメソッド 諏訪さん
1つめのTipsは Launch Image。起動画面(スプラッシュ)に使う画像をAsset Catalogで指定する方法の紹介です。Launch Imageを使って指定した画像にUIImage等でアクセスしようとしてもできないのでどうしたらよいのかというお話をされました。
imageNamed: でアクセスするには
3.5 inch Retina @“LaunchImage-700”
4 inch Retina @“LaunchImage-700-568h”
といった感じに個別に指定する必要があるということでした。
2つ目のTipsは Slicing Image。Xcode 5 から Asset Catalog で画像のスライス指定が可能となりました。実際に画像がどのようにスライスされるのか、また、伸縮のモードの違いについての解説です。
3つ目のTipsは Non-Glossy Icon。iOS 6までのアプリアイコンは非光沢アイコンにすることができますが、Xcode 4まで使っていたInfo.plistの“ Icon already includes gloss effects” は、Asset Catalogを使っていると効かなくなります。これはAsset Catalogにアイコンの光沢/非光沢を指定するプロパティがあるため、ということで、詳しいプロパティの設定方法を紹介されました。
【発表資料】Xcode 5のAsset Catalogにまつわる今すぐ使えるTips集(クラスメソッド:諏訪)
第2回戦 結果発表
得票数は次の通りとなりました。
チーム ヤフー クラスメソッド
登壇者 佐野 諏訪
得票数 5687 13106
小ネタ集をテーマに戦った2回戦は、クラスメソッドの諏訪さんに軍配が上がりました。佐野さんの得票数が低めなのは、オーディエンスを引きつけ過ぎた結果でしょう。会場の参加者が聞き入って投票するのを忘れるくらいの素晴らしい発表でした。
第3回戦 テーマ:デザインパターン
5分でデザインパターンを語る。このテーマはまさに鬼門といえるでしょう。参加者の注目も自ずと集まります。
先攻: ヤフー 西さん
題名: あのパターンと仲良く付き合う
西さんはヤフオク!アプリの担当で、ヤフー社内の黒帯認定制度(特定の分野に突出したスキルを持つ人を認定する制度)で認定された「iOS黒帯」の保持者です。
ヤフー 西さん
デザインパターンと聞いてGang of Fourのデザインパターンを思い浮かべる方が多いと思いますが、その中でも最もなじみの深いものとして「Singleton」を題材にして発表されました。
依存性が高くなることがSingletonパターンのデメリットとして挙げられますが、Singletonパターンが悪いのではなく” 静的に呼び出している” ことが問題。とのことで、「 依存性の注入」というアプローチで静的な呼び出しを解消する方法を紹介されました。Xcodeにも依存性の注入という概念がりますが、Singletonに対して注入するインターフェイスは見受けられないので、Objective-C向けの依存性注入フレームワーク「TYPHOON」を利用してSingletonのデメリットを解消する方法を解説されました。
【発表資料】あのパターンと仲良く付き合う(ヤフー:西)
後攻: クラスメソッド 掛川さん
題名: iOSアプリのメンテナンス性を高めるための基本的な考え方
iOSエンジニアとしてさまざまな受託開発に携わっている方です。「 ViewControllerから本来記述すべきではない処理を切り出す」ということについてお話されました。
クラスメソッド 掛川さん
なぜ、ViewControllerから本来記述すべきではない処理を切り出すのか? 大量の処理を抱え込んでFatになってしまったViewControllerのメンテナンスは大変な作業であるため。具体的な問題点としては責務が多すぎる、大量のイベントハンドリング、ロジックの再利用が難しいといったことが挙げられました。
ViewControllerから切り出すべきであるのは、情報の表示に関連しない機能です。では、ViewControllerにはどのような処理を書くべきなのでしょうか?
ViewControllerの役割について Gang of Fourのデザインパターンの一つである Mediator パターンの視点から解説されました。ViewControllerは自身が参照するオブジェクトの間の仲介役を主な役割とし、ViewController が仲介するオブジェクトは ViewController 経由で連携し、互いの存在について直接意識しないといった内容でした。
【発表資料】iOS アプリのメンテナンス性を高めるための基本的な考え方(クラスメソッド:掛川)
第3回戦 結果発表
得票数は次の通りとなりました。
チーム ヤフー クラスメソッド
登壇者 西 掛川
得票数 7646 15568
黒帯対決!? なお二人
デザインパターンをテーマに戦った3回戦はクラスメソッドの掛川さんに軍配が上がりました。難しいテーマであったとは思いますが両者共に非常にわかりやすい発表でした。クラスメソッドは2連勝です。
第4回戦 テーマ:デザイン
先攻: ヤフー 佐藤さん
題名: アプリエンジニアのデザインに対するこころがまえの話
佐藤さんはYahoo!メッセンジャーやYahoo!ショッピングといったヤフーが初期段階でリリースしたアプリ開発に携わっておられます。現在は子育て家族アプリKazoc(カゾック)を担当。
ヤフー 佐藤さん
ヤフーの事例を元にエンジニアの役割がWebとアプリで変わってきているというお話からスタートしました。Web時代にはUIの実装を担当するロールが存在しましたが、アプリの時代には通常UIの実装のみを行うというロールはありません。これはWebでいうところの「UIがHTMLでロジックがPHP」といったような技術的な境界がアプリには存在しないからではないでしょうか? こういった点からアプリエンジニアはUIの実装にも責任をもつことになります。
その上で、アプリエンジニアがデザイナーと仕事をしていくにあたって、どういったこころがまえが必要かというお話です。
1pxにこだわりを持とう
「動けばいいじゃん」と考えるエンジニアも少なからずいます。そうなると、デザイナーは大量の修正依頼を投げるか、諦めてしまうことに。デザイナーの要求に対して細部にまで応える姿勢が重要です。
積極的に提案していこう
アプリ開発の経験が浅いデザイナーが多いのが実状です。デザイナーはアプリで何ができるかを知らないかもしれません。
コミュニケーションが大事
当然のことですが、デザイナーとの密なコミュニケーションが大事です。
【発表資料】アプリエンジニアのデザインに対するこころがまえの話(ヤフー:佐藤)
後攻: クラスメソッド 平屋さん
題名: アプリデザインはじめの一歩
クラスメソッド入社1年目のiOSエンジニア。学生時代からアプリ開発を行う。エンジニアとデザイナーがより良く開発できるように日々努めているそうです。
「ユーザに満足してもらえるアプリをつくりたい」という静かな情熱を感じさせるスタートとなりました。
クラスメソッド 平屋さん
iPhoneが使われる状況はさまざまです。
気が散りやすい環境
1回の使用に割く時間が短い
操作が中断されることがある
ユーザの満足度を向上させるためには、アプリが使用される「状況」を見越したデザインが必要です。アプリのデザインは効率の良いものであるべき、では効率の良いデザインをどのようにつくるのか? といった内容のお話です。
対象となる作業を絞りこむ、特定の場面に焦点をあわせるといった方法をピックアップし、シナリオを作ることで効率の良いアプリデザインを行う方法を紹介されました。
【発表資料】アプリデザインはじめの一歩(クラスメソッド:平屋)
第4回戦 結果発表
得票数は次の通りとなりました。
チーム ヤフー クラスメソッド
登壇者 佐藤 平屋
得票数 15903 10398
デザインをテーマに戦った4回戦はヤフーの佐藤さんに軍配が上がりました。デザインとひと口にいってもUIデザインのお話とアプリデザインのお話が聞けて、少しお得なセッションでした。
休憩タイム
4戦が終わったところで前半戦終了ということで休憩タイムに入りました。この時点での勝敗は2対2の同点。後半戦の勝敗がますます楽しみになります。
休憩時間の様子
なお、今回のイベントに登壇したクラスメソッドの平井さん、諏訪さん、平屋さんも執筆に参加している『iOSアプリエンジニア養成読本』 が3月20日に発売されます。よろしければぜひ手にとってご覧になってみてください。
Software Design plus シリーズ
iOSアプリエンジニア養成読本[クリエイティブな開発のための技術力/デザイン力/マインドを養う!]
髙橋 俊光、諏訪 悠紀、湯村 翼、平屋 真吾、平井 祐樹
1,980円/B5判/144 ページ
3月20日発売予定