Medley Developer Blog

株式会社メドレーのエンジニア・デザイナーによるブログです

iOSDC Japan 2020にメドレーが協賛しました

皆様こんにちは。インキュベーション本部エンジニアの濱中です。
9/19〜21にiOSDC Japan 2020(以下iOSDC)が開催されました。先日の記事の通り、メドレーは2017年よりiOSDCに協賛しております。
メドレーでは、Swiftを利用してオンライン診療/服薬指導アプリ「CLINICS」iOS版の開発をしています。

 

CLINICS (クリニクス)

CLINICS (クリニクス)

  • Medley, Inc.
  • メディカル
  • 無料

apps.apple.com


5回目となる今回は、初のオンライン開催となり、主にニコニコ生放送、Discord上で発表・コミュニケーションが行われました。私がiOS版CLINICSの開発に携わっている縁で、今回スポンサー枠としてiOSDCに参加させていただきましたので紹介させていただきます。

 

イベント全体について

オンライン開催となったため、会場の様子や企業ブースなど、雰囲気の伝わる写真をお届けできないのが残念ですが、発表の主会場となったニコニコ生放送では、終始穏やかな雰囲気でありつつも活発にコメントがなされ、大いに盛り上がっていました。

前回同様、初日はday 0として夕方から、2日目以降は朝〜夕方まで、最大5つのチャンネルで並行して発表が行われました。セッションについては事前に録画したものを放送し、LTのみリモートにてリアルタイム発表という形式となっていました。

質疑応答については、各発表の終了直後にDiscordチャンネルに発表者が待機して対応していました。初のオンライン開催ということで、イントロダクション動画をはじめとし、各所で積極的なフィードバック・コミュニケーションが奨励されていたように思います(なお、イントロダクション・スポンサー紹介の各動画はナレーションが声優の緒方恵美さん・三石琴乃さんと、とても豪華でした。生放送中のコメントや、18年の弊社ブログを見る限りは毎年恒例のようですね。すごいです!)。

 

 

セッションについて

昨年iOS13とともに発表されたSwiftUIへの移行や、コード移行・モジュール分割等、プロジェクトの最適化についてのトピックが多かったように思います。

SwiftUIは、従来Storyboardで設計していたUIをコードベースで記述できる画期的なフレームワークですが、SwiftUIを使ったアプリはiOS13未満の端末では利用できなくなってしまうこともあり、アプリの公開対象を広めにもっておきたい場合はなかなか乗り換えづらい印象でした。2020年6月現在でiOS13のシェアが9割以上となったことで、ちょうどiOSDCでの発表トピックを決めるころに導入作業を行った(かつ苦労した)というケースが多かったのかな、と思います。

以下、視聴したセッションのうち気になったものをいくつかご紹介いたします。

 

オープンソースのAltSwiftUIの発表

fortee.jp

楽天のエンジニアの方による、SwiftUIの提供するネイティブコンポーネントに対応しつつ、iOS11以上で利用可能なオープンソースフレームワークAltSwiftUI公式Doc)の開発についてのセッションでした。

iOS12以下の対応を切らずにSwiftUIへの乗り換えを進められる(かつ本家と違ってオープンソースである)便利さもそうですが、別途フレームワークが出来上がってしまうあたりに、SwiftUIへの移行対応への苦労がしのばれる内容でもありました(ストアにある楽天提供のiOSアプリの数を考えると乗り換えコストが大変そう…)。

 

「それ、自動化できますよ」: note を支えるワークフロー大全 speakerdeck.com

改修要望が上がってから、実際に改修を行ってアプリをリリースするまでの作業をできる限り自動化した、というセッションです。CLINICSでも、「証明書の有効期限確認、プッシュからのテスト、マージからのリリース準備」はBitriseのトリガを利用して自動化しています。

上記のような、GitHub上でのアクション(プッシュ、マージなど)をトリガとする自動化はよく聞く話ではあるのですが、Slackのポストに特定のスタンプつけるとIssue化、はちょっと目新しくて面白いなと思いました(気をつけないと表記揺れで同じようなIssueが乱立しそうですが)。

Issueもきちんと管理しておかないとトラブルの起きやすい部分ですよね。起票者と実装者の間でボールが浮いてしまったり、プロジェクトに紐づいていなかったために対応から洩れてしまったり…。

また、このスライドですが終始手書きの挿絵がかわいくて、そういった意味でもコメント欄が盛り上がっていたのが印象的でした。

 

100人でアプリをリファクタリングして見えてきた、最強のiOSアプリ設計に求められることfortee.jp

アプリを長期に運用していくとほぼ必須となる課題でありながら、人ごとに基準が曖昧だったり、機能開発におされて対応が後手後手になったり…と、何かとつらい話をよく聞くソースコードリファクタリングに関するセッションでした。

同じ状態のソースコードを多数のエンジニアがリファクタした結果を比較することで、「良いリファクタリングのための考え方」とは何か?を模索した内容です。

ビューとロジックの分割をしっかり行う、というのはPRレビューでエンジニアが口を酸っぱくしてよく言われることではありますが、「ロジックの中でも、アプリの仕様に依存するものとそうでない普遍的なものは分離すべき」というアイデアは個人的には眼から鱗が落ちるものでした。

また、これを説明するリバーシの具体例(「対戦相手が人間かAIか」はアプリ仕様に依存するロジック、「そこに石を置けるか」は普遍的なロジック=リバーシのルールそのもの)も非常にわかりやすかったです。

 そのほか、React / Reduxでフロントエンド開発を行っている人にはお馴染みのAction / Reducerを使った単一方向のデータフローの導入なども紹介されています。

 

新規機能開発からモジュール分割を始めてみる

speakerdeck.com

 一つのアプリが長期間運用されていくなかで、複数の機能が統合されたスーパーアプリになることがあります。そうなった場合、ソースコードが肥大化→ビルド・テストも長大化、となってメンテナンス性が低下するため、対策としてコードを分割してテストやビルドの単位を小さくする必要があります。

いきなりアプリ全体をモジュールに分割するのは時間がかかるため、本セッションではまず第一段階として新規に開発する機能を別モジュールとして実装し、その時得た知見について触れられていました。

「分割したモジュール側でのサードパーティフレームワークのリンク方法(※リンクを正しく行わないと、ビルドして動作はするのにアーカイブに失敗してリリースできなくなる)」などは、今後の開発にモジュール分割を取り入れていく際に参考になりそうです。

 

Swiftで始める静的解析

speakerdeck.com

 Swiftソースコードからの構文木の生成、解析を行うライブラリSwiftSyntaxの紹介と、それを用いたソースコード重複検出機能の実装についてのセッションでした。

普段Xcodeを始めとしたIDEで開発していると、コード重複、不要なローカル変数、型やNullableの不一致に変数リファクタリング…等々の便利な機能を気軽に使えてしまいますが、その裏の動作を改めて一つずつ具体的に追っていくと、そのありがたみが身に染みます…。

静的解析そのものはSwiftに限らず様々な言語のソースコードに対して適用できるトピックではあるのですが、普段何気なく使ってしまうIDEの機能について考えるよい機会になったため、紹介させていただきました。

 

まとめ

ちょうど業務でもiOSアプリ開発を担当していることもあり、興味深い知見が得られ、よい経験となりました。また、事前録画形式になったことで発表の構成がよく練られ、結果として聞きやすく(皆様かなり気をつけてゆっくり発声されていました)、個性のある発表が多かったように思います。

今回、初のオンラインでの開催ということで、運営委員会の皆様もいろいろと苦労されていらっしゃるようでした。ただ、その甲斐あってか当日の進行はスムーズで、会場はとても盛り上がっていました。関係者の皆様、本当にお疲れ様でした。

情勢を踏まえ、来年度の開催可否・形式は未定とのことでしたが、オンライン・対面のそれぞれの良さを取り入れつつ、より多くの人が参加できる形態になっているとよいなと思います。

公式YouTubeチャンネルで過去の発表を視聴できますので、ご興味のある方はぜひどうぞ(今年の発表分も一ヶ月ほどしたら公開されるとのことでした)。

またメドレーではiOS / Androidネイティブアプリ開発エンジニアを募集しています。興味がある方、ぜひお気軽にお話しましょう!

 

www.medley.jp