Swiftを使ったiOSアプリケーション開発 @AppleStore銀座 + α

Swiftのセミナーに参加したので内容をまとめておきます。
メモしたものをまとめたので間違っていたらすみません。。
あとプラスαでセミナーにはなかった関連する情報も少しだけ載せておきます。

# 概要
#### 開催内容
Swift未経験エンジニアがどのようにiOSアプリケーションを開発したかの話。実際にSwiftでアプリを開発した事例を元にSwiftの良さを語ってくれました。
http://connpass.com/event/30974/

#### 日時
* 2016年5月26日(木)
* 19:00〜20:00
* AppleStore銀座

#### 登壇者
* [杉上 洋平](http://qiita.com/susieyy)さん (Wantedly, Inc.)
* [吉田 健人](http://qiita.com/tamanyan)さん (日本経済新聞社)

# 杉上さんのお話(Wantedly)
#### 基本情報
* Wantedlyで[sync](https://www.wantedly.com/sync)というビジネスパーソン向けメッセージングアプリの開発に携わっている。
* Wantedlyが提供しているアプリは幾つかあり、Objective-CとSwiftが混じっているものや、Swiftだけで開発しているアプリもある。syncはSwiftだけで開発されたアプリ。

#### なぜSwiftを使うのか?
* Swiftは**品質**と**表現力**において素晴らしい言語であるから

#### 品質
* Swiftはミスが起きにくい言語である
* Optional、型推論、などがある
* nilを発明したアントニーモラートも「**nilを作ったのは10億ドルの過ち**」と言っているくらい(参考:[null参照の考案は10億ドル単位の過ち？](http://developers.srad.jp/story/09/03/05/0937219/))

#### 表現力
* 多様なプログラミング言語の設計思想を盛り込んでいる
* プロトコル指向
 * 影響範囲を理解しやすく、複雑なコードを軽減することができる
* 関数型
 * 副作用のない振る舞いを実現できる
 * 同じ条件を与えれば必ず同じ結果が得られる
* 普遍性
 * let,structなどが使える
* 高階関数
 * map,flatMap,filter,forEachなどが使える
* Functional reactive programming(FRP)
 * コードの挙動を理解しやすい
 * RxSwift,ReactiveCocoa,SwiftBondなど
 * syncのアプリでは**SwiftBond**を使っている

#### syncアプリの設計
* 基本は継承しない設計
* 通信ロジックはProtocol,Protocol Extention

# 吉田さんのお話(日本経済新聞社)
#### 基本情報
* 2015年新卒
* 大学時代はPHPでWebアプリを開発していたりした
* アプリ開発は社会人になってから
* [日経紙面ビューアー](http://pr.nikkei.com/multidevice/viewerapp.html)アプリのリニューアルでSwiftを採用

#### Swiftを採用した理由
* type safeなプログラミングだから
* optionalが素晴らしい
* オブジェクト指向、プロトコル指向
* 以前のコード(Objective-C)を使わないから

#### Swiftをどのように勉強したか
* 社内でSwiftに詳しい人がいなかった
* そのため**有名なライブラリのコードを見てSwiftらしい書き方を勉強した**
 * [APIKit](https://github.com/ishkawa/APIKit)
 * [Alamofire](https://github.com/Alamofire/Alamofire)
* これらライブラリはgithubのスターが多いものを選ぶようにした
 * **[awesome-swift](https://github.com/matteocrippa/awesome-swift)**にライブラリがまとまっている
 * 補足：こちらにもライブラリがまとまっていて参考になります→[iOS Cookies](http://www.ioscookies.com/)

#### アプリリニューアルについて
* 「紙面をiPhone,iPadで読む」というコア体験に的を絞ってリニューアルを行った
* リニューアル後は良い意見もあるがもちろんネガティブな意見もあった
* リニューアル後の対応をしっかりと行うことが重要→リニューアル後の2ヶ月で5回のアプッデート実施

# パネルディスカッション&質疑応答
#### タスク管理はどのようにしているか？
* 杉上さん(Wantedly)
 * 全てgithubのissueで管理している
 * タスクだけでなく、仕様や議事録なども全てissueとしてまとめて管理している
 * エンジニア意外にも制作や企画の人も全てgithubのアカウントを持っている
* 吉田さん(日本経済新聞社)
 * backlogを使って管理している

#### どうやってswiftを勉強しているのか
* 杉上さん(Wantedly)
 * Swiftが発表された瞬間から触ってみた
 * おそらく**世界最速でSwiftでアプリを開発した**(Swiftが発表されたその日にRSSリーダーアプリを開発した)
 * 仕事でもSwiftがbeta版の時からアプリに採用しようと当時のCTOに直談判してOKをもらった

#### Swiftに期待する未来は？
* 吉田さん(日本経済新聞社)
 * サーバサイドもSwiftで書けるようになったので使ってみたい
* 杉上さん(Wantedly)
 * 全てがSwiftで書けるようになると嬉しい
 * 最近だとWindows環境やAndroidアプリでもSwfitが使えるようになってきてる

#### Swiftのセキュリティは大丈夫か？
* 杉上さん(Wantedly)
 * Swiftは[LLVM](https://ja.wikipedia.org/wiki/LLVM)なので[リバースエンジニアリング](http://e-words.jp/w/%E3%83%AA%E3%83%90%E3%83%BC%E3%82%B9%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0.html)はされにくい

#### テストはどうしているか？
* 杉上さん(Wantedly)
 * gitのmasterにマージされたら自動で最新のアプリがビルドされるようになっている
 * そこからテスターを使ってテストをしている
 * アプリに追加した機能も場合によっては削除することもあるためテストコードはまだ書いてはいない

#### Objective-CからSwiftに置き換えるこつは？
* 吉田さん(日本経済新聞社)
 * 思い切ってObjective-Cを消すことも重要
* 杉上さん(Wantedly)
 * 新機能はSwiftで書くと良い
 * Objective-CからSwiftを呼ぶのは難しいが、SwiftからObjective-Cなら呼びやすいため、無理にObjective-Cを消さなくても大丈夫
* 補足：Objective-CからSwiftに変換するこちらも便利だと思います→[objc2swift](https://github.com/yahoojapan/objc2swift)