SwiftエンジニアになるべくRailsエンジニアの私が実践している学習方法


Swiftという艶美な響きに心奪われ、Swiftエンジニアとして成長するために日々、
新しいことや興味のあることを勉強している方が多いと思います。

今回はWebエンジニア(普段はRails4,Ruby2系の開発がメインです。)の私が実践していてオススメだと思う学習方法をinput編、output編に分けて紹介させていただきます。

## input


### その1 ライブラリのコードを読む
以前はObjective-Cと比べるとSwiftはライブラリが少なかったのですがXCodeのバージョンアップに伴いSwiftもどんどん改善されていったこと、Swiftの魅力に取り憑かれてオープンソースが盛り上がってきたことでどんどんライブラリの数が増えてきました。
それに対して使うのはもちろんのこと、
「どのような書き方」で「どのような設計になっているか」という観点でコードを読むと
これは試してみたい！とか後でじっくり読みたい！と思ったライブラリなどをはてブして週末や時間のある時に見て学習しています。

僕のようなiOSの知見がなくSwiftから始めた方はこちらあたりがオススメです。

#### [cocoapods.org](https://cocoapods.org/)
![スクリーンショット 2015-12-19 16.02.40.png](https://qiita-image-store.s3.amazonaws.com/0/15812/f2cf7dad-6c82-91e1-4d31-d917d0c9b33d.png "スクリーンショット 2015-12-19 16.02.40.png")

#### [swifttoolbox](http://www.swifttoolbox.io/)

![スクリーンショット 2015-12-19 16.05.35.png](https://qiita-image-store.s3.amazonaws.com/0/15812/da07ee1a-4f2d-05c4-503c-c7fb5fac2fb6.png "スクリーンショット 2015-12-19 16.05.35.png")

#### [cocoacontrols](https://www.cocoacontrols.com/controls?language=2-swift&page=2)

![スクリーンショット 2015-12-19 16.07.50.png](https://qiita-image-store.s3.amazonaws.com/0/15812/56e5a0a7-c20c-b00d-e098-5750bec07bf4.png "スクリーンショット 2015-12-19 16.07.50.png")



### その2 動画を見る
今では本だけでなく著名なエンジニアがQiitaを通して多くの有益な情報を発信してはいますが
どうしても実際に動かいてるのを見た方が分かりやすい、動画の方が理解しやすいサンプルなどがあります。
その際にはyoutubeに多くのサンプルアプリ作成動画を見ながら自分の作ってるサンプルに近いアプリを見てイメージするということをしています。
また英語であってもXcodeの使い方やコードがベースなので問題なく理解することが出来ます。
(4Gだと速度的にもお金的にもしんどいのですがwifiがあるカフェであれば出先でもスマホで見ることが出来るのも良い。)

####[youtube](https://www.youtube.com/results?search_query=swift+sample)
![スクリーンショット 2015-12-19 16.21.03.png](https://qiita-image-store.s3.amazonaws.com/0/15812/adab9922-280d-2799-9749-72115fa2b12d.png "スクリーンショット 2015-12-19 16.21.03.png")


### その3 綺麗なコードを書くための仕組みなどを勉強する
仕事で使おうとなると「自分以外の人が理解しやすいコードになっているか」、「保守性はどうか」、「品質はどうか」、「ドキュメントや自動化をどうするか」といったアプリが作れることはもちろんのことその他以外のことを求められます。
まだまだ僕も出来ていないのでもっとやっていかないといけないところです。

#### コードの保守性：[SwiftLint](https://github.com/realm/SwiftLint)

![スクリーンショット 2015-12-19 18.27.44.png](https://qiita-image-store.s3.amazonaws.com/0/15812/529abb21-47fb-57ff-0064-5b4facb46173.png "スクリーンショット 2015-12-19 18.27.44.png")


#### ドキュメント自動化：[jazzy](https://github.com/Realm/jazzy)

![スクリーンショット 2015-12-19 18.27.55.png](https://qiita-image-store.s3.amazonaws.com/0/15812/7ef904c1-5452-b6ac-2004-b4402ae39a88.png "スクリーンショット 2015-12-19 18.27.55.png")

#### テスト系まとめ：[SwiftからiOSアプリ開発を始めた人に読んでほしいテスト系リスト](http://qiita.com/g08m11/items/5d6a15087e43bf391522)
![スクリーンショット 2015-12-19 18.30.57.png](https://qiita-image-store.s3.amazonaws.com/0/15812/3b6b202e-2b3b-c978-48f0-b5e682f66da3.png "スクリーンショット 2015-12-19 18.30.57.png")


### その4 Swift勉強会に参加する
shibuya.swiftなどの著名なiOSエンジニアの方々が参加する勉強会に参加し、
「どんなライブラリを使ってますか？」、
「何人体制でどんな設計でコードを書いてますか？」、
「(コード見せつつ)〇〇を実装するときにもっと上手く書けそうな気がするんですがどう思いますか？」といったCodeの話や会社のフェーズや組織体制が異なる場合の書き方に関する質問などもしています。
そうすることで、社外の人だから聞ける情報やSwiftの新発見に出会うことが出来ます。
その度に「自分はまだまだだなー。。。」とは思うのですが今の自分では絶対気づけないことを教えてくれるので積極的に参加しています。

### [shibuya.swift](http://shibuya-swift.connpass.com/)

![スクリーンショット 2015-12-19 18.29.31.png](https://qiita-image-store.s3.amazonaws.com/0/15812/fc71a5fb-5121-50d8-8d25-a48838194479.png "スクリーンショット 2015-12-19 18.29.31.png")



次にアウトプット的な学習方法です。

## output

### その1 自分の知識をベースにサンプルコード的なアプリを作る
一気にしっかり作ろうとすると時間の確保や体力の確保などその他諸々の調整があるのですが、
サンプルコードレベルであれば難易度の差はあれど土日の空いてる時間などで作ることが出来ます。
この前は休日にRealmを使ったToDoアプリを作りました。

#### [【初心者向け】徹底詳解！cocoapod + RealmでToDoアプリを作るチュートリアル (全4回)](http://qiita.com/g08m11/items/e8a525490b5113c052a7)

![スクリーンショット 2015-12-19 18.24.24.png](https://qiita-image-store.s3.amazonaws.com/0/15812/8f792859-cc8f-a9a5-f1b6-2fac482b51d3.png "スクリーンショット 2015-12-19 18.24.24.png")

### その2 自分の知識をベースに軽めのライブラリを作って公開してみる
これも「その1」と似ているのですがポイントとしては実際に公開してみることです。
「cocoapodに上げる」、「READ MEを英語にする」といった課題はありますが、
公開してみたことで[@jollyjoester](https://github.com/jollyjoester)さんから人生初のプルリクを頂くことが出来ました。

#### [Swift2.0対応済！Swift用のDebugライブラリ「Debug」を作りました](http://qiita.com/g08m11/items/69565b095f60f3f906f9)

![スクリーンショット 2015-12-19 18.18.22.png](https://qiita-image-store.s3.amazonaws.com/0/15812/48bee952-b5f2-8bd8-4849-cebd11de8b81.png "スクリーンショット 2015-12-19 18.18.22.png")


### その4 Swift勉強会のLTに「登壇者」として参加する
inputでの勉強会参加と異なりLTを行うことでそのために必要な周辺情報や「参加者に理解してもらえるように説明するためにどのような情報が必要か」といったことを調べることで今まで抜け漏れていた
情報をカバーすることが出来ました。

#### [この変更は嫌だったXcode7〜ハマる前に知って欲しいこと〜](http://www.slideshare.net/g08m11/swift-55293632)

![スクリーンショット 2015-12-19 18.23.01.png](https://qiita-image-store.s3.amazonaws.com/0/15812/9a96ad41-957f-b0d3-7859-d45807aeb81e.png "スクリーンショット 2015-12-19 18.23.01.png")


### その5 スマ検を受ける
Swiftを体系立て理解するために詳解Swiftなどを読見返したりはしたのですがなかなか頭に入ってこず、理解出来ているつもりになっていました。
そのため、スマ検というサイトを使い、問題形式で回答することで、用語やコードの書き方、Swiftの基本的な概念などの基礎部分の再学習を行いました。
(スマ検なのにスマホに適したUIになっていないのでPCでの閲覧をオススメします。)

#### [スマ検](https://spkentei.jp/frontend/index/sample)

![スクリーンショット 2015-12-19 18.21.11.png](https://qiita-image-store.s3.amazonaws.com/0/15812/16eeb638-f86c-2958-8ae7-ee20e547b879.png "スクリーンショット 2015-12-19 18.21.11.png")


### 最後に

私はSwiftに出会えたことで一生作れないと思ってたアプリを作る事ができ、
リジェクト祭りになると予想していたアプリをリリースする事ができ、
アプリ経由から一定の売上を上げれるまで多くの方々に利用して頂くことが出来ています。
今ではWebエンジニアであった僕が[女性限定のプログラミング講座をSwiftメインで教えること](http://morei.connpass.com/event/)さえ出来ています。
Swiftを始めるには始めたが今の会社が全くアプリに興味がなく一向にアプリを出す予定がないからといってどうやって勉強しようかと悶々としている人にこの記事を少しでも参考にして頂き、
プライベートだけでもアプリをリリースするという経験に役に立てて頂ければ幸いです。