俺コン 2018 Summer 参加レポート

こんにちは!SWETグループの細沼です。

9/12、9/13と2日間に渡り、DeNAにて「俺コン 2018 Summer」というイベントが開催されました。DeNAのエンジニアも3名登壇していますので、登壇者からのコメントなどを交えつつ参加レポートを書きたいと思います!

俺コンとは

orecon_0.JPG

iOSDC JAPAN 2018 に寄せられた 500本以上のCfP(プロポーザル)のうち、惜しくも採択されなかったトークの中から、運営メンバーが聞きたいと思ったトークを選び、それを発表するといういわばリジェクトカンファレンス的なイベントになります。

去年に続いて2回目の開催となりますが、21本のトークが運営メンバーによって採択されました。iOSDC JAPAN 2018 と同じように、発表会場は各トラックに分かれており、参加者は部屋を移動して興味のある発表を聴くことが出来るというスタイルで開催されました。

主催の @d_date さんがレポートを書かれていますので、詳しくはそちらを御覧ください。
https://note.mu/d_date/n/nbd76e48401d0

公式サイト:
https://ore-con.firebaseapp.com/

登壇したエンジニアより

当日登壇したエンジニアから、発表内容やCfPを出した背景などについてコメントをいただきました。

ソースコードから読み解く - Quick はどのように実装されているのか?

orecon_1_tobi462.JPGのサムネール画像

あらためまして、SWETグループに所属している細沼(@tobi462)です。

今回、Swift製のBDDフレームワーク(テスティングフレームワーク)である Quick について、どのような仕組みで実現されているか発表させていただきました。

CfPを出した背景についてですが、 Quick の使い方については公式ドキュメントで丁寧に書かれているものの、それがどのような仕組みで実行されているか興味を持っている iOSアプリエンジニアも少なくないのではと思ったためです。

以下は公式ドキュメントの冒頭で紹介されている Quick によるテストコードの例ですが「DSL(ドメイン特化言語)」や「XCTestとの統合」がどのように実現されているか、すぐに想像がつく方は少ないのではないかと思います。

import Quick
import Nimble

class TableOfContentsSpec: QuickSpec {
  override func spec() {
    describe("the 'Documentation' directory") {
      it("has everything you need to get started") {
        let sections = Directory("Documentation").sections
        expect(sections).to(contain("Organized Tests with Quick Examples and Example Groups"))
        expect(sections).to(contain("Installing Quick"))
      }

      context("if it doesn't have what you're looking for") {
        it("needs to be updated") {
          let you = You(awesome: true)
          expect{you.submittedAnIssue}.toEventually(beTruthy())
        }
      }
    }
  }
}

私も最初にこのコードを見た時に、この DSL が Swift でどのように実現されているか分かりませんでした。

そこで内部のコードを読んでみたところ、Swift における DSL の実現が Kotlin とは異なるアプローチになっていることを知り、これは発表してみたら面白いのではないかと思い CfP を出してみました。

残念ながらこのトークは採択されませんでしたが、こうして別のイベントで発表する機会を得ることができ良かったと思います。

後日動画が公開される予定ですが、発表スライドだけでも楽しめる内容になっていると思いますので、興味がありましたらぜひご一読ください!

iOSでmp4をデコードして自分だけの動画プレーヤーを作ろう!

orecon_2_noppe.JPG

こんにちは、ソーシャルライブ事業部のnoppe(@noppefoxwolf)です。

iOSDCに引き続き、動画周りの話ということでVideoToolboxやAudioToolboxなどの低レイヤーのフレームワークを使った動画再生について発表しました。 私もこの分野については詳しくなかったのですが、興味を持って頂くことで発表と勉強の機会を得られた事に大変嬉しく思います!

当日はかなり早口になってしまいましたのでご興味のある方はこちらのスライドをじっくりお読みください。

CfPを提出した経緯として、ソーシャルライブアプリを作っていく中で高レイヤーフレームワークで達成出来ない課題が多いと感じた点があります。

iOSはライブラリ管理ツールやSwift・Foundationといった素晴らしいエコシステムの中で開発が出来るため手軽にアプリを世の中に出すことができます。 しかし、ある意味ブラックボックスになったライブラリの中身や枯れた技術に関しては一部のプロフェッショナルに任されるような体制になっているのではないでしょうか。

これから配信のみならず、CoreMLやARKit、Metal、ブロックチェーンといったUIKit以外にチャレンジしなくてはならない領域は増えて行きます。 そういった時に知らない世界に飛び込んでいける勇気を持てるようにという意味も込めて、Metalや動画周りのCfPを出しました。(自分のようなUIKitしか触って来なかった事への叱咤も兼ねて、です。)

これからも興味を持っていただけるような登壇を続けていければと思います。 もしも資料の中で分からない点があれば、気軽に(@noppefoxwolf)までメンション頂ければと思います!

UIWindowが複数存在するとき、ステータスバーのスタイル設定が難しい件

orecon_3_malt03.jpg

こんにちは、ゲーム・エンターテインメント事業本部の村田紘司(@malt03)です。

macOSのことを話したiOSDCとは打って変わって、iOSのUIWindowというニッチな部分の発表をしました。

UIWindowはとても扱いづらく、公式のドキュメントもあまりありません。 私自身、基本的にはUIWindowを使うべきではないと考えています。 ただ使うべきときは極稀にあり、そんなときドキュメントが存在していないために大変困った経験があります。 同じような方の役に立てればと思い、CfPを出しました。

今回の発表では、

  • どういうときにUIWindowを使うべきか、または使うべきでないか
  • UIWindowの暗黙的な仕様について

を説明しています。

どんなときにUIWindowのを使うか知りたい方やUIWindowを使う必要があって苦労している方は、参考にしていただければ幸いです。

おわりに

今回、発表者・参加者・当日スタッフという形でこのイベントに関わらせていただきましたが、とても楽しませていただきました!

運営のみなさま、発表してくださった方々にはこの場を借りてお礼を申し上げたいと思います。

平日にもかかわらず多くの参加者が来場され、もはや iOSDC と同様に毎年恒例のイベントになりつつあるのではないかと感じます。

また来年も開催されることを期待しています! orecon_5_fin.jpg

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

iOSDC2018 で DeNA の iOSアプリ開発者10名が登壇し、1名が司会を行います!

iOSDC_Speakers10.png

こんにちは!技術企画グループで技術広報を担当している玉田です。

明日から9月2日(日)まで4日間開催される iOSDC Japan 2018 にて、 DeNA のiOSアプリ開発エンジニアたち10名が登壇し、1名が「IRT: Interactive Round Table」の司会を行います!こちらでご紹介します。

登壇スケジュールと登壇内容

登壇日時Trackなど登壇タイトル登壇者
2018/08/31 11:20〜Track B レギュラートーク(30分)Swift 4.2 はどのような進化をしているのか@tobi462
2018/08/31 13:30〜Track D iOSエンジニアに聞いて欲しいトーク(30分)macOSでもっとアプリを作ろう@malt03
2018/09/01 14:40〜Track C レギュラートーク(15分)iOS × GraphQLの嬉しみとつらみ@_mogaming
2018/09/01 17:10〜Track B iOSDCルーキーズ LT(5分)虚無から48時間でiOSアプリをリリースする@koooootake
2018/09/01 17:20〜Track B iOSDCルーキーズ LT(5分)Visionフレームワークのリアルタイム顔検出を使えば、ウインクするときゃるん♪と音が鳴る二次元美少女になれる!@minami1389
2018/09/01 17:45〜Track A iOSDCルーキーズ LT(5分)サーバーの状態に応じて画面遷移させるための設計@furuyan325
2018/09/01 18:00〜Track B iOSDCルーキーズ LT(5分)UITableViewに動画広告を表示する@nihonpanda
2018/09/02 11:20〜Track B レギュラートーク(30分)ライブ配信アプリのアイテム再生をMetalで実装する事になった話@noppefoxwolf
2018/09/02 14:20〜Track A レギュラートーク(30分)iOS アプリの開発速度を70%高速化したデバッグノウハウ@orga_chem
2018/09/02 16:30〜Track A LT(5分)不摂生で救急搬送されたiOSアプリ開発者がiPhoneとAppleWatchをフル活用して健康を取り戻した話@dotrikun

IRT: Interactive Round Table

@tarappo が8/31(金)にTrack Fで「テスト相談会」というIRT(Interactive Round Table)の司会進行をやります。

時間帯としては「13:30-13:50」「14:00-14:20」「14:30-14:50」の3回になります。 詳しくは 「iOSDC 2018でテスト相談会をします」をご覧ください。

エンジニアによる Speaker Lounge

さらに、登壇するエンジニアたちが DeNA スポンサーブースでも Speaker Lounge を実施します。公式の Speaker Lounge では時間が合わなかった!もっと詳しい話を聞きたい!といった方、ぜひ DeNA スポンサーブースにお越しください!

エンジニアの登壇内容と、Speaker Lounge でブースにいる時間は↓をご確認ください。 iosdc2018_1.png

iosdc2018_2.png

iosdc2018_3.png

iosdc2018_4.png

iosdc2018_5.png

iosdc2018_6.png

iosdc2018_7.png

iosdc2018_8.png

iosdc2018_9.png

iosdc2018_10.png

それぞれの登壇者の発表前後に @DeNAxTech(DeNA 技術系アカウント)でお知らせしますので、みなさま、ぜひ Follow してください。

それでは当日お会いできることを楽しみにしています!

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

try! Swift Tokyo 2018 参加レポート

はじめに

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

tryswift

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! した成果を発表しました。

登壇する@kenmazさん

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

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

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

リンク

企業ブース

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

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

ボードにシール

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

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

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

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

おわりに

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

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

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る