iOSDC 2020 に参加してきたので、見たセッションとメモや感想を書きます。

  • オープニング

かっこいい動画でした。先輩が映っていてテンション上がりました

  • 4年間運用されて表示速度が低下した詳細画面を改善する過程で得た知見

パフォーマンス計測に ox_singspot` を使うこと、View の生成を分割して必要遅延させることで初期表示までの速度を上げることが勉強になりました。また、スライド中に ViewModel のコードが出てくるのですが、他の人が書いた ViewModel を見る機会は少ないのでなくこちらも参考になりました。

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

アプリの設計については関心が高いので楽しみにしていました。Clean Architecture の部分は最近勉強していたのですが、発表を聞いてより理解が深まりました。この再設計チャレンジは自分もやってみたい。値型についても触れられていましたが、メリット・デメリットを理解できていないので Heart of Swift を見ます。

  • iOSリジェクト戦記 ~リジェクトされないための課金ページ~

紙芝居風の発表が面白かったです。スライドにはいろんなアプリの事例を過去と現在で比較されていて読む資料としてもとても良かったです。

  • エラーアーキテクチャ設計について考える

エラーハンドリングについて実際の改修事例を紹介し、その事例からどういった設計をすると良いかが語られています。通信エラーなど共通的に処理したいエラーがある一方で、特定の画面しか発生しないエラー、共通のものでも特定の画面で特定の処理をしたい場合がありますが、これに対して実際の改修事例が知れて参考になりました。発表の中で「ユースケース駆動開発実践ガイド」という資料が紹介されていましたが良さそうなので読んでみたいです。

  • 一石二鳥: マルチモジュール化, ビルド速度快適化

マルチモジュール化を行う上でのコツ、ビルド速度向上のために使う `google/bazel` の紹介、テストに間して発表されていました。 Host application 設定を off にすることでテストが早くなること、いろんな module が合わさって複雑な依存関係がある状態を `kitchen sink` ということなど勉強になりました。

  • 効率よくUIKitからSwiftUIへ移行する

SwiftUI を全くキャッチアップしていないので最初から最後までとてもおもしろかったです。事前準備の Tips や下調べの重要さがわかりました。また TCA (The Composable Architecture) は初めて聞いた設計パターンでした。

(ここから LT)

  • Catalystに対応したアプリをリリースするまでのリジェクト集

Mac アプリのリジェクト事例は全然知らず面白かったです。

  • In App Purchaseのこれからの在り方を考える

理想のプラットフォーム実現のために、開発者としてよりよいフィードバックをしたいです。

  • iOS Custom Keyboards でできること/できないこと/やってはいけないこと

かっこいいキーボードが出てきてテンションあがりました。

  • DroidKaigiの公式アプリで始めるiOSアプリのOSSコミッターへの道

DroidKaigi アプリへの PR がマージされるまでの過程を発表されていました。Github 上での事前のコミュニケーションが大事だよねという話がとても参考になりました。

  • Apple Pencilと左利き対応

利き手対応は経験がなく、またガイドラインの存在も知らなかったので参考になりました。

  • macOS仮想カメラ「テロップカム」実装方法とその先

仮想カメラって Swift で実現できるんですね。バーチャル背景とかも紹介されている方法でできるんでしょうか。

  • 文字列をコピーできるスクリーンショットを作る

フルサイズのスクリーンショットが取れること、PDF に文字列情報を載せるための書き出し方法が紹介されていました。

  • あなたのアプリ、✨リブランディング✨できますか?

命名規則を整えようねとかめっちゃ耳が痛い話でした。紹介されていた一時的な画像を用いた実装に対する例のコードが良かったです。

  • iOSアプリを譲渡!?失敗は許されない一発勝負!予想外に立ち塞がる様々な罠に挑んだストーリー🙌

アプリ譲渡の過程で得られた知見を発表されていました。実際に自分がこういう自体に遭遇したら胃に穴が空きそうです。

  • その他感想

Twitter でメモや感想をつぶやいていたんですが、ちょくちょくいいねやリツートされて嬉しかったです。発表者の方から直接いいねがくるの嬉しいですね

オフラインで気軽に見れるのはいいものの、オンラインの良さもあるよなと実感しました。特に運動量、家にいると全然歩数が上がらず。オンライン開催は健康にもいいんですね。


例外処理。Java と違って検査例外 (checked exceptions) は存在しない。なぜ検査例外を仕様に入れなかったかは上記ページに引用やリンクがあるが、どれも Java に関するもの。ちゃんと理解するには Java の知識が必要そう。

Kotlin 1.3 から導入された。関数の戻り値に設定できないという仕様があるがなぜそうなっているかは理解していない。実装背景 (https://github.com/Kotlin/KEEP/blob/master/proposals/stdlib/result.md) を知る必要がある。


Nagoya.Swift+ 1月度勉強会に参加してきました。

自分は BlockchainSwift を写経していました。こちらは 200 行程度の実装なので、iOS エンジニアが Blockchain の基礎を理解するにはとてもいい教材だと思います。

午後からはこちらを Android + Kotolin で実装していました。 Kotlin はほとんど書いたことがないので実装に誤りがあるかもしれません。。。

会の最後に成果発表をするのですが、他の参加者の方からは以下のようなトピックが挙がっていました。

成果発表ですが、

  • あんまり成果なかったですとはなりたくないので一生懸命課題に取り組める
  • 人に説明する練習になる
  • 人に説明するので理解が深まる
  • 間違っていたり不足していたりしている部分の補足をもらえる
  • 他の人の話が勉強になる

といいことだらけです。あまり人前は得意ではないのですが、初参加でも気兼ねなく話せる雰囲気の勉強会でした。

次回は 2/17 (土) とのことです。


こんばんは。名古屋でプログラマーをしております谷口というものです。

この記事は筋肉アドベントカレンダーの8日目の記事です (遅くなって申し訳ありません)。

私からは、朝筋トレいいよというお話をします。

私が筋トレを始めたのはちょうど一年ほど前です。

普段運動は全くしていなかったので、最初は非常に疲れるし、なかなか成果も出ず悶々としておりました。

しかし徐々に肉体が変化し、筋トレ後のプロテインのうまさに気づき、今では週3回トレーニングをするようになりました。また、世の中の大抵の問題は筋肉が解決してくれるという人類の真理にも気づくことができました。時代は AI でも仮想通貨でもありません。そう、筋肉ですね。

前置きが長くなってしまいました。筋トレは非常に気持ちのいいものですが、夜やるとそのあと疲れてしまって何もできなくなってしまうことに気づきました。仕事終わりだとすでに疲れている状態ですし、トレーニング後に立ったまま電車で帰宅するのはとてもしんどいです。そこで私は、朝やってみるのはどうだろうと考えました。

朝筋トレをやるというと、

  • 朝早起きがしんどい
  • 朝は身体の動きが鈍いから満足にトレーニングできないのではないか
  • 朝から筋トレなんかやったら仕事にならないのではないか

という声が聞こえてきそうですね。私もそうでした。でも思いついた以上は検証しなければいけません。結論から言うと、朝筋トレは最高です。

朝早起きがしんどいという話ですが、実は思ったほどしんどくありません。なぜなら私はもっとしんどいトレーニングをしてきているのですから。朝がなんですか。そんなものは筋肉でふっとばしましょう。真面目な話をすると、夜は早く寝ることです。

朝は身体の動きがうんぬんの話ですが、これはウォーミングアップを丁寧にやるとよく身体が動くことがわかりました。私は軽いジョギング程度の運動を 5 ~ 10 分くらいやることで、よく身体が動くようになりました。

最後に、朝から筋トレをすることで疲れてしまい、そのあと仕事にならないのではないかという疑問について。もちろんトレーニングの内容や仕事の内容にもよるかと思いますが、私の場合は疲れるどころか気分も身体もすっきりして仕事にとりかかれます。一日の終りに感じる疲労度でいうと、仕事 -> 筋トレよりも、筋トレ -> 仕事の方が疲れを感じません。朝運動することのメリットは昨今さまざまなところで挙げられていますが、私にはこれが当てはまっているように思います。

と、ここまで朝筋トレのメリットを話しましたが、気をつけなければならない点もあります。朝の急激な心拍数の上昇は身体によくありません。すこしでも体調がおかしいと思ったらトレーニングを一旦やめたほうが良さそうです。急に朝から激しいトレーニングを始めるよりは、すこしずつ徐々に朝にシフトしていくのがいいと思います。

いかがでしたでしょうか。朝筋トレ、したくなったのではないですか?そうですよね。私も明日の朝が楽しみになってきました。それではまたジムでお会いしましょう。


Mobile Act NAGOYA #7 (https://mobileactnagoya.connpass.com/event/64724/) で発表してきました

発表資料です。

ざっくり内容を説明すると、CoreML のモデルファイル (.mlmodel) を更新する方法について、

  • アプリを更新するしかない
  • と前回言ったが、外部サーバから DL させて端末上でコンパイルして使うこともできる
  • コンパイル済みのモデルを外部サーバから DL させて使うこともできそう

ということを話しました。

前回間違ったことを言ってしまったので、訂正とその後わかったことを発表しました。

当日発表を聞いてくださった皆様、ありがとうございました。


この3連休で iOSDC に行ってきました。人生初のカンファレンスということでかなり期待して行ったのですが、それ以上の経験ができました。聞いたセッションの内容などを備忘録的にまとめます。

1 日目

会場は早稲田大学だったのですが、間違えて違うキャンパスに。。。

幸いそれほど遠くなかったのですが、遅刻してしまったのでほとんど聞けませんでした。あとで読む。

タイトルのとおり、実際にプロダクトで経験したインタラクティブな画面遷移の実装方法についてコードを交えながら解説されていました。サンプルコードもミニマムなので、覚えてるうちに写経しよう。

タイトルに UI とありますが、解説されていた手法は UI 以外にも使えるものです。状態を分離する、というお話を中心にご自身がメンテナンスされているライブラリのコードを例に発表されていました。

Observable のミニマムな実装を元に解説されていました。個人的に Ask the speaker で質問させて頂き、大変お世話になりました。Observable, Observer, Disposable について少し理解が深まりました。

(僕個人的には) nextstepfm でおなじみの sonson さんの発表です。iOS 11 Programing の著者の一人で、 CoreML の章を担当されています。個人的に CoreML について質問させて頂き、おかげでここ 2 ヶ月くらいわからなかった問題を解決できました。ありがとうございます。

投げ銭いっすね。

ET 問題。

2日目

HEIF ってヒーフって読むんですね。HEIF を利用するに当たっての注意点などを解説されていました。

こちらも iOS 11 Programing の著者の一人の堤さんの発表です。 Metal は CoreML 関係で少し触ったことがある程度だったので、とても勉強になりました。Metal を使って UIImageView.image に画像を入れて表示させるコード、自分の手元でも試してみたいです。

それぞれの設計を実際のコードを交えて解説されていました。同じアプリで実装の違いを比較されているので、それぞれのメリット・デメリットがわかりやすかったです。

  • iOSDC Japan 2016 の賞金を放置しておくと1年でどうなったか?!

一刻も早く Bitcoin を買おうと思いました。

最後に

上記以外にもいくつか発表を見たのですが、文章を書き慣れていないせいか疲れてしまったのでこの辺で。

次にカンファレンスに行くときは、会場の場所を正確に把握することとビール飲みすぎないことを肝に命じておきます。


build.gradle(Module:app) に以下のようにライブラリを参照するように書いていたらエラーが出た。

build.gradle

dependencies {...    compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.5.0'
androidTestCompile 'com.squareup.retrofit2:retrofit-mock:2.1.0'...
}

error

Information:Gradle tasks [:app:generateDebugSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:generateDebugAndroidTestSources]
Warning:Conflict with dependency 'com.squareup.okhttp3:okhttp'. Resolved versions for app (3.5.0) and test app (3.3.0) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
Warning:Conflict with dependency 'com.squareup.okio:okio'. Resolved versions for app (1.11.0) and test app (1.8.0) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
Error:Execution failed for task ':app:prepareDebugAndroidTestDependencies'.
> Dependency Error. See console for details.

http://g.co/androidstudio/app-test-app-conflict を見ろと書いているので見ると、どうやら main と test で違うバージョンのライブラリを参照しているからだそうだ。

今回は明示的に同じライブラリの違うバージョンを参照しているわけじゃないのでちょっとはまった。おそらく retrofit-mock が内部で okhttp3 を参照していて、それが main で参照しているものとバージョンと違うからエラーが出たのかな。

解決方法は、

  1. test のほうでも com.squareup.okhttp3:logging-interceptor:3.5.0 を参照する
  2. main で参照しているものを com.squareup.okhttp3:logging-interceptor:3.3.0 にする
  3. retrofit2 が com.squareup.okhttp3:logging-interceptor:3.5.0 を使うよう変更してくれるまで待つ

になるのかな。

状況によるかもしれないけど、 1 ですかね。

Yusuke Shigetani

iOS / Android app developer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store