Soumettre la recherche
Mettre en ligne
Obj-CをSwiftにリプレースするお話
•
0 j'aime
•
677 vues
Hitoshi Saito
Suivre
CyberZ スキルウェンズデー 6月14日発表資料
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 19
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Directiveで実現できたこと
Directiveで実現できたこと
Kon Yuichi
Xcode以外の開発環境 AppCodeの紹介
Xcode以外の開発環境 AppCodeの紹介
Akira Hayashi
Macアプリのインストーラ作成ツールSwift版
Macアプリのインストーラ作成ツールSwift版
Akira Hayashi
Visual Studio 2019 Updates Pickup!
Visual Studio 2019 Updates Pickup!
Hiroyuki Mori
ECSとGitLabでCI環境構築
ECSとGitLabでCI環境構築
iwata jaws-ug
ng build --prod & Continuous Delivery
ng build --prod & Continuous Delivery
bitbank, Inc. Tokyo, Japan
angular X designer - デザイナからみたAngularJS #ten1club
angular X designer - デザイナからみたAngularJS #ten1club
silvers ofsilvers
Visual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsi
Tadahiro Ishisaka
Contenu connexe
Tendances
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
bitbank, Inc. Tokyo, Japan
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
VirtualTech Japan Inc.
AngularJS で ハイスピードSI
AngularJS で ハイスピードSI
Koichiro Nishijima
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -
将 高野
BitriseでiOS/Androidアプリ開発が幸せになった話
BitriseでiOS/Androidアプリ開発が幸せになった話
Eigo Takazawa
only ip whitelist at cloudfront is ok?
only ip whitelist at cloudfront is ok?
Yuta Suzuki
開発環境をDockernizeした話
開発環境をDockernizeした話
Yutaka Horikawa
改めて C# でできることを振り返る
改めて C# でできることを振り返る
Yuta Matsumura
Riotでサーバレスにした話
Riotでサーバレスにした話
Hiroyuki Hara
フロントエンドの技術を刷新した話し。
フロントエンドの技術を刷新した話し。
Yutaka Horikawa
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
gree_tech
消滅都市5周年の運営を支えた技術とその歴史
消滅都市5周年の運営を支えた技術とその歴史
gree_tech
Node red basic & node-red-ug-japan
Node red basic & node-red-ug-japan
Harada Kazuki
新登場!Surface Laptop 4
新登場!Surface Laptop 4
Tomokazu Kizawa
これから始める Bot Builder 開発のコツと舞台裏
これから始める Bot Builder 開発のコツと舞台裏
Yuta Matsumura
AngularJS 概説
AngularJS 概説
Kenichi Kanai
Database tools for .NET Core
Database tools for .NET Core
Yuta Matsumura
Blazor Server テンプレート解説
Blazor Server テンプレート解説
Yuta Matsumura
de:code報告
de:code報告
Kouji Matsui
Tendances
(19)
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
AngularJS で ハイスピードSI
AngularJS で ハイスピードSI
OWIN - .NETにおけるPSGI -
OWIN - .NETにおけるPSGI -
BitriseでiOS/Androidアプリ開発が幸せになった話
BitriseでiOS/Androidアプリ開発が幸せになった話
only ip whitelist at cloudfront is ok?
only ip whitelist at cloudfront is ok?
開発環境をDockernizeした話
開発環境をDockernizeした話
改めて C# でできることを振り返る
改めて C# でできることを振り返る
Riotでサーバレスにした話
Riotでサーバレスにした話
フロントエンドの技術を刷新した話し。
フロントエンドの技術を刷新した話し。
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
消滅都市5周年の運営を支えた技術とその歴史
消滅都市5周年の運営を支えた技術とその歴史
Node red basic & node-red-ug-japan
Node red basic & node-red-ug-japan
新登場!Surface Laptop 4
新登場!Surface Laptop 4
これから始める Bot Builder 開発のコツと舞台裏
これから始める Bot Builder 開発のコツと舞台裏
AngularJS 概説
AngularJS 概説
Database tools for .NET Core
Database tools for .NET Core
Blazor Server テンプレート解説
Blazor Server テンプレート解説
de:code報告
de:code報告
Similaire à Obj-CをSwiftにリプレースするお話
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
真吾 吉田
How to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C code
Chiharu Nameki
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
Tomoki Hasegawa
実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターン
Kuniteru Asami
既存Objective-CプロジェクトをSwiftに移行した時ハマったこと
既存Objective-CプロジェクトをSwiftに移行した時ハマったこと
apuruni
The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurug
SAKURUG co.
Inside of swift
Inside of swift
LINE Corporation
Wolcome to swift
Wolcome to swift
Kyohei Ito
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
normalian
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Y Watanabe
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
SEGADevTech
あるインフラエンジニアの過去と未来
あるインフラエンジニアの過去と未来
Tsubasa Hirota
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
Kazumi IWANAGA
Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化
NIFTY Cloud
OpenStack Object Storage; Usage
OpenStack Object Storage; Usage
irix_jp
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
真吾 吉田
Vsug day 2010 summer windows azure でやってみよう
Vsug day 2010 summer windows azure でやってみよう
mizusawa
Sails.jsのメリット・デメリット
Sails.jsのメリット・デメリット
Ito Kohta
Japan MVP Community Connection 2017 Autumn smart Demonstration
Japan MVP Community Connection 2017 Autumn smart Demonstration
Atomu Hidaka
Spring Boot概要
Spring Boot概要
af not found
Similaire à Obj-CをSwiftにリプレースするお話
(20)
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
How to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C code
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターン
既存Objective-CプロジェクトをSwiftに移行した時ハマったこと
既存Objective-CプロジェクトをSwiftに移行した時ハマったこと
The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurug
Inside of swift
Inside of swift
Wolcome to swift
Wolcome to swift
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
あるインフラエンジニアの過去と未来
あるインフラエンジニアの過去と未来
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
IoT Edge and Serverless playground with Node.js ~ IoT EdgeとサーバレスをNode.jsで遊ぶ実験ノート
Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化
OpenStack Object Storage; Usage
OpenStack Object Storage; Usage
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
Vsug day 2010 summer windows azure でやってみよう
Vsug day 2010 summer windows azure でやってみよう
Sails.jsのメリット・デメリット
Sails.jsのメリット・デメリット
Japan MVP Community Connection 2017 Autumn smart Demonstration
Japan MVP Community Connection 2017 Autumn smart Demonstration
Spring Boot概要
Spring Boot概要
Dernier
2024 03 CTEA
2024 03 CTEA
arts yokohama
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
arts yokohama
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
Ayachika Kitazaki
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
ssuser539845
2024 04 minnanoito
2024 04 minnanoito
arts yokohama
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
ssuser370dd7
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
Tetsuya Nihonmatsu
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
Shumpei Kishi
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
Matsushita Laboratory
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
arts yokohama
Dernier
(11)
2024 03 CTEA
2024 03 CTEA
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
2024 04 minnanoito
2024 04 minnanoito
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
Obj-CをSwiftにリプレースするお話
1.
Obj-CをSwiftにリプレースするお話 2017/06/14 Skill Wednesday 齋藤
仁
2.
自己紹介 ・齋藤 仁(さいとう ひとし) ・株式会社CyberZ
OPENREC事業部 ・iOSエンジニアだったりサーバーサイドエンジニアだったり ・ロードバイク乗りです
3.
絶賛Swiftへのリプレース中
4.
Swift化のメリット ● ジェネリクスの活用することで柔軟で汎用的なコーディングが可能 ● optional型を活用することでnull安全なコーディングが可能 ●
Objective-Cより処理パフォーマンスが向上 ● ヘッダーファイルがなくなったので、実装ファイルとヘッダーファイルを行き来する必 要がなくなった ● Objective-Cのいけていないメソッドの呼び出し方からの解放 ● ネームスペース ● 採用力の強化 ● などなど
5.
現在の構成 View ViewController Model
6.
現在の構成 カオス!! ViewControllerView Model Model Model View View Model Model Fat Controller!! Model Model View View View View View View Model
7.
実装面でのKPTを実施 「Problem」 ・null安全が保障されない実装であるため、 EXC_BAD_ACCESSが発生しやすい ・ReactiveCocoaとdelegateが混ざったりしていて、逆効果になっていることがある気がする ・ViewでModelの処理してる ・View周りの実装があらゆる箇所に入り込んでいる。 ・XCodeプロジェクト上のフォルダ構成と実フォルダ構成が合っていない ・xibファイルがないので、 uiの実装効率が悪い ・xib化した時にレビューの仕方どうする? ・アプリ全体の挙動に関わる状態を保っているクラスがどこにあるのか把握しづらい ・クラスに関するコメントがないから、何をしてくれる
Managerなのかわからない ・コードでviewの実装をしているため、メンテが大変 ・コードでViewを生成するのはつらい ・コードの依存関係が複雑 ・コードコメントが少ないので、読みにくい ・サーバ側apiの仕様変更したとこらが、 wikiに反映遅い時もあります ・トップ画面とかの Controllerが親クラスを継承していて、処理の流れを追いにくい。 ・ユニットテストない ・ログイン・サインアップの各 controllerに共通のソースコード多い。 ・各Controllerがかなり肥大化している ・画像名やローカライズの key名を文字列でハードコーディングしているため、存在しないリソース名が出てきた時に気付きにくい ・自動再生と動画再生画面で共通で使えるように MoviePlayerクラスを定義しているが、肥大化しすぎて影響範囲が見切れずメンテしにくい。 自動再生だけに絞るとかなりソースコード少ないはず。
8.
実装面でのKPTを実施 「Try」 ・APIライブラリの使い方もう少し検討する余地ある ・BuildConfigurationの見直し ・Dataレイヤ、Domainレイヤのデータオブジェクトはそこそこ正規化する。 ・DIの導入 ・iOS9以降の対応にシフト。 ・signingの設定とか見直しする ・Swift lint入れる ・XCodeプロジェクト上のフォルダ構成と実フォルダ構成が合っていないのはツールで解決 ・Xib, ストーリーボード有効活用 ・xib化するか検討する。 ・コードフォーマッタの導入 ・タイプセーフリソース化
Swiftgen ・マクロとUtilityの使い分けを統一してもよさそう ・命名規則やコーディング規約の再認識 ・状態を伝えるのはドメインじゃないといけない ・継承していること自体が問題じゃない。ドメイン設計意識する。
9.
以下を実現できるアーキテクチャを選定 ・責務ごとにレイヤー化 ・ドメイン設計意識する ・依存の方向性を単一方向に揃える ・処理の流れは単方向にする ・DIによってユニットテストを導入しやすくする
10.
Clean Architecture
11.
Clean Architecture View ViewController Presenter UseCase
Repository DataStore EntityTranslater Model Presentation Layer Domain Layer Data Layer
12.
Clean Architectureのメリット ● 責務を細分化 ○
各レイヤの役割が明確になる。 ○ MVCでは実装者の経験やレベルなどによって、実装するクラスの構成に差が 出るが、各レイヤーの役割を明確にしてアーキテクチャとして定めることで、 チーム内の共通認識も持ちやすい。 ○ データ・処理の流れを単方向に制限することを意識して実装しやすい。 ● UIとビジネスロジックを分離することでレイヤ間の依存を最小限に抑えるこ とができる。 ● レイヤ間を疎結合に保つことでモジュールの置き換えができ、テストが容易 となる。
13.
実装量が多くて面倒そう。。
14.
MVVMを検討してみた View ViewController ModelViewModel
15.
MVVM PresenterとUseCaseを追加 View ViewController ModelPresenter UseCase
16.
MVVM Repositoryを追加 View ViewController Presenter UseCase
Repository DataStore Model
17.
あれ?どこかで見たような。。。
18.
これClean Architectureじゃね?
19.
その他対応 ● 現状、iOSとtvOSのソースコードは独立しているが、Domain Layer以下を共通化させる。 ● 各レイヤーはprotocolで抽象化してDIで依存性注入 ●
ユニットテストの導入 ● CIツールの活用 ● RxSwiftの導入
Télécharger maintenant