Diverse developer blog

株式会社Diverse(ダイバース) 開発者ブログです。

Swift/Kotlin合同勉強会 #2 に参加してきました

こんにちは、Androidやってます。 id:kikuchy です。

先日開催されたOisixさん主催の Swift/Kotlin合同勉強会 #2 で、モバイルアプリ開発で使えるKotlinの便利なところを紹介させていただきました。

oi-study.connpass.com





Kotlinをあまりご存じない方向けに、便利でよく使うKotlinの言語機能と応用例を紹介しております。
これらの機能を使うことで、「考えていることをそのままコードに落とす」という気持ちのよいコーディングが可能になります。
Androidアプリ開発をされている方は、ぜひ一度Kotlinを使ってみてください! 導入も簡単です!



Swift/Kotlin合同勉強会は、Swiftだけ使ったことがある、もしくはKotlinだけ使ったことがある、という方々が互いの言語を学び合うという趣旨でスタートされた勉強会だそうです。
会の趣旨通り、iOS/Androidの話題だけでなく、JavaとKotlinの相互運用、サーバーサイド、コンパイラの話など、言語について幅広い話題が飛び交っており、とてもおもしろかったです。
発表中も和やかな雰囲気で、安心して登壇する事ができました。

また、会場には終始美味しそうな香りが漂っておりまして…!


おいし…すごく楽しく勉強になる会でした!
技術だけでなく会場運営も勉強になりました。

Diverseは今後もSwift/Kotlinコミュニティに知見を発表するなど貢献をしてゆきます\\ ٩( 'ω' )و //
Swiftを使えるiOSエンジニア、Kotlinを使えるAndroid/サーバサイドエンジニアさん募集中です!
興味がある方は @kikuchy または他の弊社エンジニアへ、お気軽にDMやリプライをください!
まずは色々お話しましょう°˖✧◝(⁰▿⁰)◜✧˖°

「 iOS アプリエラー監視の設計とその効果」について Bonfire で発表してきました

Diverse で iOS のテックリードをしている Kuniwak です。

 

先日開催された Bonfire iOS #3 で「iOS アプリエラー監視の設計とその効果」について発表してきました。

私の所属していたプロジェクトの iOS アプリのエラー監視は、かなりしっかりしていて、ユーザーの手元で起こっている様々な異変を観測してくれています。今回はその観測のための設計とその効果についてお話ししてきました。スライドは以下になります。

 

speakerdeck.com

また、スライド末にある通り、Diverse では新規事業の iOS 開発チームのリーダーを募集しています。成長中のサービスを自分の力で導いてみたいと思う方に、ぜひきてほしいと思っています。ご興味がありましたら、Kuniwak まで DM やリプライをいただけるとランチ等をセッティングします。よろしくお願いいたします。

Swift の Mirror という API からみた、Swift の奇妙な挙動

Diverse で iOS アプリの開発をしている Kuniwak です。前に書いた記事では、単体テストで開発を2.5倍高速化した話を書きました。

さて、先日開催された iOSDC のリジェクトコンで、単体テストのテスト結果をわかりやすくするライブラリ「MirrorDiffKit」の開発秘話をお話ししてきました。この発表では、Swift を Mirror という API を通して見たときの奇妙な挙動を紹介しています。

発表の概要

5分ほどで読み終わるスライドになっています。Swift の奇妙な挙動をお楽しみください。

speakerdeck.com

宣伝

Diverse では Mirror というマイナー API とかも触ってみたい iOS エンジニアを募集しています!

あと、MirrorDiffKit をよろしくお願いします

github.com

DevFest Tokyo 2017でミクシィグループとKotlinについてお話してきました

id:kikuchy です。

先日開催された GDG DevFest Tokyo 2017 のセッション『Kotlin導入どうですか?』内で、ミクシィグループ内のKotlin導入状況についてお話させていただきました。


tokyo.gdgjapan.org


(2017/10/10時点ではスライドは未公開です)



セッションはサイバーエージェント 藤原さんがメインスピーカーとしてお話され、その中で各社の導入事例としてYahoo! Japan 森さん、DeNA 中川さん、ミクシィ 菊池からもお話をさせて頂きました。

会場はほとんど席が埋まるほどで、Androidエンジニアの方々のKotlin熱の高さをうかがい知る事ができました。

内容も各社の個性が表れており、面白かったです。
Yahoo! JapanさんのProGuardではなくDexGuardを使わなければいけない特殊な事情がKotlin導入を後押ししたエピソードとか、
DeNAさんの「若いエンジニアさんにとってはJavaは古代語である」という見解であるとか、
サイバーエージェントさんのプロジェクトによって導入の仕方が工夫されている事例であるとか、
社内を見回すだけではわからないような情報やノウハウを得ることができました。



また、界隈では「赤べこ本」と呼ばれる『Kotlinスタートブック』の著者の長澤太郎さんからも質問も鋭いものでした。


Kotlinは便利で強力な機能を持った言語ですが、それ故に気にしないといけないことがあるということですね。



(去年も参加させていただいていて、)今年のDevFestもたくさんのセッションが開かれていました。
GCPのお話や、VRのお話、IoTのお話やPWAのお話と、内容も多岐にわたっており、個人的にはやくスライドを読み直したいセッションもたくさんありました。

普段はクライアントのネイティブアプリを開発しておりますので、同じ界隈でも話したことのない方とお話したり、あまり関わらないコミュニティの方々とお話する機会を得たりと、とても楽しいイベントでした。


DevFestは世界各国で開催されていますし、日本でも来年も開催されるでしょう(そう期待しています!)。
せひ足を運んでみてはいかがでしょうか。
きっと何か得るものがあるのではないかと思います。


Diverseはこれからも、開発者コミュニティに貢献していきます\\ ٩( 'ω' )و //

俺コンで「iOS でテスト容易な設計を実現するためのデザインパターン」を発表してきました

はじめまして。Diverse で iOS アプリの開発をしている Kuniwak です。

先日開催された iOSDC の第三者によるリジェクトコンで、設計のデザインパターンについて発表してきました。
発表内容は、単体テストを簡単にするための設計のデザインパターンの紹介です。

発表の概要

speakerdeck.comこの発表では、単体テストでは必須となる、代替オブジェクト(Stub や Spyと呼ばれます)の作成方法から、UIKit への応用などの広範なベストプラクティスを紹介しています。また、特にアーキテクチャを限定していないため、MVVM や MVC、MVP などの設計にも応用できます。

このパターンを実践し続けた未来

なお、このパターンを使って単体テストを活用していくと、どのようになるかについてもお話ししましょう。

私の所属する iOS チームでは、この設計パターンを使って10万行ほどのSwiftのコードを開発しており、このうち14,000行ほどが単体テストのコードになっています。そして、単体テストをうまく活用できているプロジェクトでは、コンポーネントの多くが単責務で疎結合になることを強制されます。そのため、私たちのプロジェクトでは複数の責務が混在する FatViewController は1つもありませんし、Model にログ機能が混在することもありません。

もしかすると、FatViewController を防ぐための一番の方法は、単体テストを書き、その単体テストの声を聞くことなのかもしれませんね。

さて、この話を聞くと「そんなにテスト書いてたら開発速度落ちるでしょ」という声をいただくことを容易に想像できるのですが、実際は逆です。私たちのプロジェクトでは、単体テストを書きはじめてから行数ベースでおよそ3倍ほどの開発速度になりました*1。先ほど述べた通り、1/7は単体テストのコードですから、残りの本体コードを書く速度はおよそ2.5倍になったということです。

この理由は、おそらく単体テストによりデバッグにかかる時間が大幅に短縮されたことでしょう。最終的に、私たちのプロジェクトで手戻りの原因のほとんどが仕様の誤解や見た目の修正のみになりました。つまり、単体テストで防ぐべき手戻りをほとんど防げているということです。さらに、これは嬉しい副作用なのですが、今のところクラッシュフリーを達成できています。

皆さんも、単体テストで開発を爆速化していきましょう。

宣伝

Diverse では開発を爆速化させたい iOS エンジニアを募集しています!

あと、MirrorDiffKit をよろしくお願いします!!!!  

github.com

 

*1:この時期に開発人数が2人から3人になっているので、単体テストだけが要因というわけではありません

Android Test Night #1 でお話させていただきました

id:kikuchy です。

先日開催されたイベント Android Test Night #1 - connpass にて、JUnit5とAndroidのテストについてお話させていただきました。


testnight.connpass.com



つい10日ほど前にリリースされたばかりのJUnit5はAndroidで使えるのか、
どんな機能が便利に使えるのか、というお話です。


はじめは
「Junit5のユーザーガイド通りにセットアップしても動かない」
という旨をお話させていただいたのですが、発表後にAndroid対応版があるということを教えていただきました。

Javaだけでなく、工夫すればKotlinのテストも実行できるようです。
(Javaのテストを実行できることは手元で確認しました)

JUnit5では、以前からある便利な機能が使いやすく改良されている印象です。
使える機会があれば、ぜひお手元のプロジェクトでお使いになってください。

会の様子

OpenSTFや各種クラウドサービスを駆使した メルカリさんの事例 をはじめ、 DangerTDD など話題は多岐にわたり、非常に勉強になる会でした。


当日の発表をまとめてくださっている記事がありますので、こちらも御覧ください。

qiita.com



懇親会では、QAチームの有無や普段のデバッグのフローなど、主に品質保証の話が飛び交っていたようでした。
良いテストエンジニアの在不在が、実装エンジニアの負担とアプリケーションの品質を左右するのだなぁ、と感じます。



DeNAさんで開催されているTest Nightシリーズ。iOS Test Night には弊社から3人ものエンジニアが登壇させていただいております。

iOSの場合と同様、日本ではAndroidアプリケーションに特化した継続的な勉強会があまり見当たりません。
こうした情報共有の場と機会を提供してくださることは非常にありがたいと考えております。
この場を借りてお礼申し上げます。

これからもDiverseはテストに関する知見も発表していきます。\\ ٩( 'ω' )و //

2ヶ月間のインターンで学んだこと。

今週のお題「わたしとバレンタインデー」

はじめに

初めまして。インターン生として2ヶ月サーバーサイドの開発に携わらせて頂きました id:t-kusakabe です。 このインターンで学んだことを文字に残しておこうと思います。

今週のお題「わたしとバレンタインデー」

Poiboy

このインターンではDiverseのPoiboyというサービスの開発に携わらせていただきました。 Poiboyとは、女の子が気軽に男の子を"選ぶ"女性主導のマッチングアプリで、 表示される2人の男子から気になる方をポイしてマッチングするアプリです。 f:id:t-kusakabe:20171012163120p:plain

poiboy.jp

求めていたこと

普段僕は、アルバイト・インターンを通して新規サービスを1から作ったりPMを経験したりなど、 ある程度の実務経験を持っていました。 しかし、自分自身のスキル不足も実感しておりこのインターンでは自分自身の成長を期待していました。 とくに、テストやアーキテクチャ、ミクシィという会社から派生しているサービスは、 どのようにして作られているのかを学びたいと考えていました。

期間中にさせていただいたこと

主に以下のことを担当させていただきました。

  • 画像の差し替え
  • イベントフラグの追加
  • impression調整を管理画面から行えるように
  • SNS関連
  • 禁止ワードの正規表現対応
  • プロフィール画像検閲の機能追加

一番大きく任せて頂いたのはimpression調整に関することでした。 Poiboyではユーザー毎にどういうユーザーを表示するかのことをimpression調整と呼んでいて、今までこの調整を行うにはソースコードを直接書き換える必要がありました。 f:id:t-kusakabe:20171013134831p:plain これを管理画面から出来るようにするにあたり、設計からさせて頂くことが出来ました。 それまではシチュエーションごとに使うメソッドが限られていて汎用性が低かったのですが、調整値をDBに持たせ、メソッド自体を汎用的にすることでどこからでも使えるようにもしました。 f:id:t-kusakabe:20171012163316p:plain

実際に得たもの

この2ヶ月でコードを書く姿勢というものが大きく変わりました。 普段は、この言語のここがつらい・この言語にはこういう機能がないからという理由から言語選定をすることが多かったのですが、 今回のインターンを通してつらいところはどうすればつらくなくなるのか、どうすれば幸せになれるのかといった考え方できるようになりました。 設計思想やアーキテクチャを取り入れることで、非常に開発しやすい環境が出来ることがわかりました。
特に、関心の分離についてその大きさが感じられました。
Poiboyでは、グローバルに扱うmoduleではcontextを持たせないようにしていたり、MVCの各層で責任を明確にするすることで、結果読みやすいコード、拡張性の高いコードが生まれるようになっていました。

また、実際の開発現場に身を置くことでのメリットもありました。 周りの人たちが話している内容が耳に残りマッチングアプリ対しての知見が気づかないうちに溜まっていました。 僕はこのインターン中にも土日を利用して他企業様のインターンにも参加していたのですが、 Poiboyで培った経験から、マッチングに関して鋭い指摘をされた際、適切に応え評価されたこともありました。 こういう面でも、インターンに参加することには大きな意味があると実感しました。

最後に

大量のInputがあった2ヶ月になりました。 そして、まだまだ足りていない点、課題もたくさん見つかった2ヶ月でした。 今回得たものを自分なりの解釈に落とし込み活用していきたいです。

2ヶ月間、直接指導していただきましたメンターさん、Poiboyのみなさん、ランチの設定や各種イベントを企画していただきました人事のみなさん、 本当にお世話になりました!!!