blog

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

2018.09.21 イベントレポート

俺コン 2018 Summer 参加レポート

by Yusuke Hosonuma

#ios

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

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

俺コンとは

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 はどのように実装されているのか?

あらためまして、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をデコードして自分だけの動画プレーヤーを作ろう!

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

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

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

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

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

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

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

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

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

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

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

今回の発表では、

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

を説明しています。

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

おわりに

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

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

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

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

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

recruit

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