【Kyobashi.swift x AKIBA.swift】クラスメソッドさんと合同でSwift勉強会を開催しました!

このブログでははじめまして!2016年度新卒エンジニアの保坂です。2017年2月8日(水)にクラスメソッド株式会社さんと合同でSwift勉強会を開催しましたので、その様子を早速レポートします!

Kyobashi.swift x AKIBA.swift とは?

弊社リクルートマーケティングパートナーズが東京・京橋近辺で開催している Kyobashi.swift とクラスメソッドさんが秋葉原近辺で開催している AKIBA.swift を、せっかくだから同時に開催してしまおう!という欲張りな勉強会です。今回は弊社リクルートマーケティングパートナーズとQuipper社のスペースにて開催しました。

Kyobashi.swiftもAKIBA.swiftもSwiftやその周辺技術が対象ということで、今回の合同勉強会にもたくさんのSwift/iOSエンジニアの方にご参加いただきました!当日のツイートも #kyoakiswift よりご覧いただけます。

発表資料まとめ

今回は9名の方に発表いただきました。この場で簡単にそれぞれの発表の内容をご紹介させていただきます。

1. Migrating to Swift 3

by kongmingtrap

AKIBA.swiftの主催でもあるクラスメソッド田中孝明さんによる発表です!

250個ほどのSwiftソースファイルを含むプロジェクトで、Swift 3への移行をした際の体験談を発表いただきました。

XcodeのConvert機能は万能ではありません。スコープの長いクロージャに対する @escaping の付加だったり String as NSString as String のように冗長になってしまったコードの修正だったりと、やはり手動での修正は必須となるようです。

ただ、そんなConvert機能もないよりはマシで、実際の案件でも1週間ほどでマイグレーションを完了できたとのことです。また、ビルドが通るようになってからの不具合もほぼなかったとのことでした。

Swift 2.x時代から続いているプロジェクトなら誰もが直面する問題だと思いますが、歯を食いしばって早め早めにマイグレーションしたいものですね。がんばりましょう💪

2. Shari ~minneに導入して1年~

by nakajijapan

Shibuya.swift 主催のnakajijapanさんによる自作UIコンポーネントに関する発表でした。

カートの在庫数を変更するUIとして Shari という UIPickerView を置き換えるライブラリを開発し、minneのアプリに導入されたそうです。この発表では、自作UIコンポーネントを開発した理由とShariにおけるトランジションの実装について紹介されていました。

ユーザーにカート操作のコンテキストを提供する」という目的のためにカスタムコンポーネントを自作されたとのことで、UXを追求する美学を強く感じました。弊社の内製アプリもぜひ見習いたいと思います。

3. 今更聞けない?Struct と Class の使い分け方

by lovee

Swiftにおける structclass という2つの概念を比較し、キャッチーな具体例を交えながらそれぞれに適したユースケースを紹介するという内容の発表でした。

Apple公式のドキュメントにも structとclassの使い分けを解説するもの は存在します。しかしながら、この発表では実践的なコードを見ながらstructのclassの違いを確認できたので、教科書的なドキュメントよりもわかりやすく感じました。また、structを代入した変数に対し didSet を使うことで、structのプロパティが変化したタイミングで任意の処理ができることを新たに知りました。

他の言語ならclassを使うようなケースでもstructを活用することでより綺麗にコードを書ける場面が色々ありそうですね。

4. 既存プロジェクトにキャッチアップするためTips

by yoichitgy

大規模プロジェクトに新しくjoinして機能追加やバグ修正を行うにあたって、手を入れるべきclassやメソッドをどうやって探したらよいのか?というTipsの発表でした。

わたし個人もXcodeのDebug View Hierarchy機能は以前から使っていました。しかしながら、Xcode上でgit blameを見たりLLDB pluginの導入で URLRequest の中身を覗いたりできるということは知りませんでした。どちらも実際の開発時にとても役立ちそうなTipsだと思います。

LLDB pluginの導入については @oobaさんの資料 で詳しく解説されているようなので、気になった方はそちらもご参照ください。

5. Swift ABI Manifestoを読む

by yad

Swift 4以降で安定化される予定のABI (Application Binary Interface) に関する発表でした。

Swift 4以降でABIが安定すると古いVer.のSwiftコードを新しいコンパイラでもビルドできるようになるそうです。また、別のVer.でコンパイルしたライブラリ同士をリンクできるようにもなるとのことです。

そんなSwiftのABIを詳しく知ることで目まぐるしく変わる言語仕様よりもスコープの長い知識を得ることができるうえに、他の人とはちょっと違ったネタを発表できるようになるとのことでした。

Swift 3へのマイグレーションで苦労が多いのもSwift 2.xと3.xの互換性がないことが大きな要因です。それを考えるとバージョン間で互換性が高まるのは素直に嬉しいですね。また、LLVM IRなどの下位レイヤーの知識を増えればアプリのデバッグの際などに役立てることができるのではないか、という印象も持ちました。

6. RxSwiftへの依存を考えてみる

by nonchalant0303

RxSwift はとても便利なライブラリです。しかし、依存しすぎることによるリスクも存在するため、今回はその対策として普通にもReactiveにも使えるViewコンポーネントを作ってみた、という発表でした。

今回のケースでは、RxCocoaのExtension実装を真似ることで、普通にもReactiveにも使えるViewコンポーネントを実現できたとのことです。有名ライブラリの実装を読むことでより良い設計を実現できた例とも言えますね。

わたしも最近は「RxSwift最高!」という気持ちでReactiveなコードをガンガン書いています。しかし、この発表を聞いて依存しすぎることのリスクについてもよく考えなければならないと思いました。

7. FBSnapshotTestCaseに助けられた話

by yutu

アプリの開発当初に FBSnapshotTestCase を使ったテストコードを用意したことで、アプリ内部のアーキテクチャや実装ががっつり変わっても同じテストコードのままUIが変化していないことを確認できたという発表でした。

半年前の自分は他人」という言葉があるように、数ヶ月も経てば使いたい技術やライブラリも変化していたりするものです。そんなときは、新しいライブラリや設計をなるべく少ないリスクで試すためにスクリーンショットベースのUIテストコードを用意しておくことは大変有用だと感じました。

8. バ、バカな...!ハッカソンの中で成長しているだと...!?

by ktanaka117

AKIBA.swiftの主催でもあるクラスメソッド田中賢治さんによる発表です!

ハッカソンに出ると同業種の友達が増えるし無料で圧倒的成長できるからぜひやりましょう、というエモめの発表でした。

個人的には、ハッカソンに参加する際はデザイナーや別ジャンルのエンジニアなど自分とは多少異なるバックグラウンドを持つ方と一緒に出るのが正攻法だと思っていました。しかし、特定ジャンルのエンジニアだけでチームを組むことで専門分野のより深い知識を学べたり、自分の専門外の技術・分野に触れることにもなります。それを考えるとiOSエンジニア同士でチームを組むことはたくさんの学びを得るいい方法なのかもしれませんね。

「深夜に疲弊してくるとクソコードを書いてしまう」というスライドがとてもリアルに感じました(笑)。

9. UI/NSScrollView Tips & Tricks

by codelynx1

雑誌や新聞のような巨大なコンテンツやOpenGL/Metalで描画したコンテンツをズーム可能なUI/NSScrollViewと組み合わせる際のTipsに関する発表でした。

いずれの場合も透明なScroll Viewの中にダミーのViewを配置し、Scroll Viewと同じレベルに配置した PDFPageView / MTKView にダミーViewの表示範囲に応じたコンテンツを描画するといいそうです。このトリックにより、描画のパフォーマンスとズーム可能なUIを両立できるとのことでした。

新聞や雑誌などのビューアアプリがどのように実装されているのか以前から不思議に思っていましたが、その実装を内側を少し覗くことができ興味深く思いました。Panorama あるいは Silver Shadow としてライブラリが公開されているとのことなので、同様のユースケースで実装に悩んでいる方はぜひ参照してみてください。

懇親会

全発表の終了が22時と若干時間的には押してしまったものの、その後もたくさんの方が会場に残り、楽しく歓談されていました。🍕🍺🕺💃

会社の枠を越えての意見交換は勉強会の醍醐味ですね〜

まとめ

Swift言語本体に関する発表もあれば、iOSアプリのアーキテクチャ設計やUIコンポーネントに関する発表もあり、バラエティに富んだ勉強会となりました!

今後も各勉強会の枠を超えて、ときどきこのようなイベントを開催していければと思います。

try! Swift Tokyo 2017 RejectCon開催のお知らせ

2/28(火)に、今回と同じ会場でtry! Swift Tokyo 2017 RejectConを開催いたします。

既にたくさんの方から参加登録をいただいておりますが、状況を見ながら参加枠を拡充予定ですので、ぜひチェックしていただければと思います。当日は、昨年12月より弊社の技術顧問としてjoinした 岸川克己氏も登壇いたします。お楽しみに!