blog

DeNAのエンジニアが考えていることや、担当しているサービスについて情報発信しています

2018.03.07 イベントレポート

try! Swift Tokyo 2018 参加レポート

by rina.kotake

#ios

はじめに

17新卒iOSエンジニアの神武( @koooootaken )です。 2018/03/01-02に、ベルサール新宿グランドで、Swiftに関するコミュニティ主催のカンファレンス、 try! Swift Tokyo 2018 に参加してきました。その様子をお伝えします。

try! Swift Tokyo 2018の雰囲気

try! Swift Tokyo 2018では1つの会場で参加者全員が同じセッションを聞く形式で行われました。カンファレンスにしては珍しい。

セッションは大半が英語で、トランシーバーによる同時通訳が行われていました。同時通訳は感動もので、喋りながら聴き、専門用語盛りだくさんの発表をよく精度高く通訳できるなと。発表者から聞いた話しによると、事前に日本語と英語の原稿を渡し通訳者さんと打合せしているそうです。日本語で発表されている方も、スライドに日本語はほとんどありませんでした。

参加者も海外の方が多く、隣の席の方が英語で声を掛けてくださった時には慌ててしまいましたが、そのまた隣の席の日本の方のお力も借り、どんな開発をしているかなどのコミュニケーションを取り盛り上がることができました。

また、Q&AブースにはAppleの社員の方が7名も待機しており、とても重要なカンファレンスである様子が伺えました。

ここで、参加した社員の知見や感想を記したレポートを5つ、発表セッションごとに掲載します。

Introducing Charles for iOS

@avon

コマース&インキュベーション事業部という新規事業をガンガン開発するチームに所属している @kozyty がレポートします。

みなさん!Charles使ってますか?便利ですよね。 発表は、 @avon が日本語で挨拶して「5年間日本語を勉強したけど全く覚えてないから、ここからはGoogle先生にお願いするね(意訳)」と、場を笑わせつつはじまりました。

そんな雰囲気のままCharlesをFLASHの開発のデバックのために作った話をしたあと、Charles for iOSを開発する理由について教えてくれました。

「プロキシ設定が面倒だったり、設定をしていたのを忘れて通信できなくなったりする」など辛かった点を教えてくれました。だからこそ、iOS上で Charlesを実行したかった!だからコードネーム CHARLIE が始まったとのこと。Charles for iOSの発表と同時に会場は盛り上がりました。

まとめると Charles for iOS の便利な点は以下とのことでした。

  • No more proxy settings (プロキシ設定が不要)
  • No longer need a computer (コンピュータが不要)
  • Wi-Fi and Mobile data(モバイルネットワークも使える)
  • 格好いい(格好いい)

個人的には、「モバイルネットワークは熱いな!」と思いつつも。 それ以上に強力だと感じた点は、「iOSでできることは端末側で行い細かいデバックはPCで行う」という本来あるべき姿になることでオーバーヘッドが削減されることなのではないか…?と感じました。移動中にロギングしたり簡単なデバックもできるのは良さそうですよね。

執筆時点(3/4)ではまだAppStoreにありませんが、審査が無事通過して利用できることを祈っています!!とても楽しみですね!

リンク

game

@giginet

コマース&インキュベーション事業部でライブ配信の新規事業を開発している @noppefoxwolf です。

try! Swift Tokyo 2018は多種多様なSwiftに関するセッションを聴くことが出来ました。 その中でも異色のセッションといえばfastlaneのメインコントリビュータでもある、@giginet氏のgameではないでしょうか?

このセッションでは「Xcodeは実はゲーム開発環境だったのです」という力強い言葉から、Xcodeのゲーム開発ツール群を紹介して始まりました。 特にXcodeに2D Map Editorがあったことを知らなかった自分はこの瞬間からセッションに釘付けになりました。

giginet氏のインディーゲーム開発の経験からSpriteKitを紹介する場面では、 Riko(try! Swiftのメインキャラクター)を爆破するデモゲームの実装を紹介し、SpriteKitの実装の簡単さをユニークに表現されました。 ここでSKSceneのライフサイクルやタッチイベントハンドラーがUIKitでの開発に非常に似ている事に気がついた方も多かったと思います。

中盤はGameplayKitのコンポーネントを紹介。 ゲーム開発に必要なアルゴリズムやデザインパターンを簡単に扱えるフレームワークは工夫次第では通常のネイティブアプリ開発でも使えるのでは無いかと思いました。

またSpriteKitに関するOSSでの取り組みではUnityでのUniRxに相当するRxSpriteKitを実装していることや、 Apple以外のプラットフォームでSpriteKitを動作させるプロジェクトが存在している事にも言及。

Appleのこれからのゲーム開発環境に対して冷静に分析しつつも、ゲーム開発者ならではのユニークな切り口で会場を沸かせました。

ARKitの登場でSprite/SceneKitの開発需要は一層増してきました。 これまでのネイティブ開発者が同じSwiftを使って開発できる環境として、これらの技術をキャッチアップしていく必要性は感じつつもなかなか触れられずにいる方も多いのでは無いかと思います。 そんな中で@giginet氏のセッションは開発者にSpriteKitの可能性や取り組みやすさを再認識させるものだったのではないでしょうか。

リンク

Swift エンジニアのための Kotlin 入門  

@designatednerd

SWETグループでテストエンジニアをしている @tobi462 がレポートします。 DeNA Testing Blog でテストに関する記事も公開しています。

この発表ではSwiftと比較しながらKotlinを紹介するという内容でした。私自身もKotlinを学習中だったので注目していた発表の1つでした。

まずはKotlinが登場した背景について語られました。

  • IntelliJ IDEAを開発しているJetBrainsが、既存のJVM言語に満足できなかったので開発した
  • Clojure、Groovyは機能として不足していた
  • Scalaは望む機能を備えていたがコンパイル速度が遅い

次にSwiftとKotlinが似ている点について語られました。

  • リテラル
  • ジェネリクス
  • ファーストクラスとしての関数
  • map / filter / reduce などのリスト操作関数(ただし微妙な差異はある)

続いてSwiftとKotlinがお互いに盗むべきだと考える機能について紹介がありました。

  • Kotlin
    • guard-let によるアンラップ・早期リターン
  • Swift
    • apply による連続したプロパティ設定(レシーバ付きラムダ)

apply については、私も以前似たような Qiita記事 を書いたことがあったので、やはりSwiftにも欲しい機能だと改めて思いました。

残りはKotlin/NativeやKotlinの学び方などについて説明があり、最後には「try! Kotlin」とのことで上手な締め方だと思いました。

この発表でも触れられていましたが、Androidエンジニアとのコミュニケーションにもつながると思うので、この機会にKotlinを勉強してみるのも面白いのではないでしょうか。

レスポンダチェーンを知ろう

@samuelgoodwin

社内で(多分)一番最初にSwift4移行しました。Swift大好きエンジニアの @malt03 です。 この発表では、@samuelgoodwinさんがレスポンダチェーンについて詳しく解説されていました。

私は入社以来iOSアプリを触っているにも関わらず、イベントがレスポンダチェーンによって受け渡されていることを理解していなかったので、とても興味深いセッションでした。

発表の最後にもありましたが、 Appleのドキュメント を参照すると、正確な情報を得られます。

レスポンダチェーンとは、UIResponder.nextでつながっている片方向リスト[注釈]です。 iOSにおいてイベントは、イベント毎に定義されたファーストレスポンダからこのレスポンダチェーンに従って受け渡され、チェーンの中で、初めにそのイベントを処理できたレスポンダがイベントの処理を行います。 通常、チェーンの最後はAppDelegateになっています。

発表では、nextにカスタムオブジェクトを代入しておくことが出来るとありましたが、私の見る限りnextはreadonlyであり、代入は出来ませんでした。 nextのgetterをoverrideすることは出来ますが、全てのイベント処理に影響するバグの温床になるので、個人的にはオススメしません。

レスポンダチェーンを使う場面として便利そうだと思ったのは、レスポンダチェーンに自分でアクションを流す、という使い方です。 独自アクションも、Responderで定義済みのアクションも流せます。


// Cocoa
NSApplication.shared.sendAction(#selector(NSResponder.pageUp(_:)), to: nil, from: nil)
// UIKit
UIApplication.shared.sendAction(#selector(MyViewController.showNext), to: nil, from: nil, for: nil)

UIKitではResponderのアクションは使うことはほぼ無さそうですが、Cocoaでは便利な場面もありそうです。

ちなみに、調査した感じCocoaのレスポンダチェーンはきちんとAppDelegateまでnextResponderでつながっていませんでした。sendActionするときちんと動いているので、どうやって動いているのか謎めいています。その辺りは近いうちにQiitaにまとめようと思っています。

[注釈] 正確に言えば、同じnextを持つレスポンダは複数存在するので木構造ですが、木構造として扱ってはいないのでリストと書いています。

超解像+CoreML+Swiftを使ってアプリの画像データ転送量削減に挑戦する

@kenmaz

社内からの登壇者について神武がレポートします。

マンガボックスiOSエンジニアの@kenmazが、学習済みのモデルをiOSで利用するための最新フレームワークCoreMLを用いて、荒い画像を綺麗な画像に変換する、超解像技術(SRCNN)にtry! した成果を発表しました。

序盤のデモでは マンガボックスiOSアプリ を起動し、アプリ内の漫画ビューワーでギザギザした低解像度画像を、目に見えて分かる高解像度画像に、僅か1秒足らずで変換する様子を披露し、会場を沸かせました。

続けて、実現にあたりどのような壁にぶつかり改善してきたかについて、画像や表で比較しつつ語られ、最後には、超解像技術は漫画だけではなく様々な種類の画像に適応できる可能性を示し、UIImageViewのextensionとして超解像技術を利用できるライブラリを本日、オープンソースとして公開しました!と発表。

公開されたSRCNNKitは翌日のgithubのトレンド入りするなど、5分という限られた時間の中で注目を集めていました。

リンク

企業ブース

DeNAはゴールドスポンサーをさせていただき、企業ブースを展示しました。

ブースではSwiftエンジニアなら気になる!あんな質問、こんな質問をボードに並べ、該当する項目にシールを貼っていただくアンケートを行いました。用意したボードが1日目でみっちり埋まってしまい、2日目には即興で質問を追加し別のボードを用意するなど、多くの方にお答えいただくことができました。ありがとうございました!

このボードを眺めながら他の会社の方と会話を弾ませたり、結果を見にきました!とブースに何度も足を運んでいただいたりと、コミュニケーションのきっかけとなる様子が伺えました。

アンケートの最終結果はこちら!

アンケートにお答えいただいた方には、懇親会で横浜DeNAベイスターズが手掛けた オリジナル醸造ビール に引き換えられるシールクーポンか、飲めない方や懇親会に参加できない方向けにDeNAオリジナルスクリーンクリーナーをお渡しました。海外の方々にも日本語で「ビール、美味しかったです!」と声を掛けていただけました。

ブース担当者の集合写真をパシャリ(全員写ってないですね笑)

おわりに

大規模なカンファレンスということで、OSSとして公開しました!近日公開予定です!など、try! した成果を誰でも活用できるようにしたよ、という発表が多い印象でした。自分もtry! して、みんなもtry! してみてね!と言えるようになりたい、と強く思いました。

閲覧いただき、ありがとうございました!

最後まで読んでいただき、ありがとうございます!
この記事をシェアしていただける方はこちらからお願いします。

recruit

DeNAでは、失敗を恐れず常に挑戦し続けるエンジニアを募集しています。