オブジェクト指向初心者が、Swiftでアプリを開発するまで


[Swiftアドベントカレンダー](http://qiita.com/advent-calendar/2016/love_swift)18日目を書きます。

昨日の[Taji-taji](http://qiita.com/taji-taji)さんのような高度な話ではありません。
本記事には、技術要素はあまりありません。ポエムです。ゼロではないけど...。

## はじめに

おおぐちさとる([Twitter:o_chicchi](https://twitter.com/o_chicchi) [Facebook:ohguchi.satoru](https://www.facebook.com/ohguchi.satoru))と申します。

[Swift愛好会](https://love-swift.connpass.com/)に参加するようになって、けっこうな時間が経ちますが、Qiitaに書いたことも無ければ、談義をしたこともないので、知らない人は多いのではないかと思います。なので、アドベントカレンダーの空きを利用して、自己紹介も兼ねて、最近のアプリ製作の紹介、合宿でやったことを書きます。

## どんな奴

都内の中堅SI会社に勤務するSAPテクニカルコンサルタントという怪しい肩書きの持ち主です。
たまに開発もしますが、メインはインフラ寄りのエンジニアです。スキルの振れ幅大きいので、要は何でも屋とも言います。

経歴は、ハードウエアエンジニア、制御系SE、社内SE、ネットワークエンジニアを経て、現職です。その昔、[NEC PC-8001](https://ja.wikipedia.org/wiki/PC-8000%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA#PC-8001) に出会い、[PC-8801mk2SR](https://ja.wikipedia.org/wiki/PC-8800%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA) に運命変えられました。今は、ハード製作といった下のレイヤーから、けっこう大きめなサーバの上に乗っかるアプリケーションまで、趣味や仕事で扱っています。

あと、資格コレクターなので、最近世間で有名な逃げ恥の平匡さんが持っている[データベーススペシャリスト](https://www.jitec.ipa.go.jp/1_11seido/seido_gaiyo.html)も保持してます。高度情報処理者資格もずいぶん集めました。

そのほか、昔、アマチュア無線でパケット通信やっていたり(MO-RBBSもやっていました)、パソコン通信(Nifty-Serve、PC-VAN)なんかもよくやっていました。なので、無線とか通信など、その辺も若干詳しいです。

## 経緯

Objective-C もやっていたんですが、なかなかリリースできるまでの経験まで至らず、Swift になっちゃったねということで、書籍を買い直しました。言わずもがな、[世界一本](https://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E7%89%88-No-1%E3%82%B9%E3%82%AF%E3%83%BC%E3%83%AB%E8%AC%9B%E5%B8%AB%E9%99%A3%E3%81%AB%E3%82%88%E3%82%8B-%E4%B8%96%E7%95%8C%E4%B8%80%E5%8F%97%E3%81%91%E3%81%9F%E3%81%84iPhone%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E3%81%AE%E6%8E%88%E6%A5%AD-Xcode-Swift/dp/4774178713/ref=sr_1_1?ie=UTF8&qid=1481990734&sr=8-1&keywords=swift+%E4%B8%96%E7%95%8C%E4%B8%80)ですね。諸般の事情で、2冊あります。

![IMG_0009.jpg](https://qiita-image-store.s3.amazonaws.com/0/73831/7581e005-ecc2-a8da-cba8-5d94c7dca11d.jpeg "IMG_0009.jpg")

この本が縁で、RainbowApps のプログラミングスクールにも行きまして、著者の高橋さんに教わり、そこで知りあった人たちの縁で、Swift愛好会といったコミュニティの勉強会に参加するようになりました。

スクール云々より、この出会いはとても大きかったです。

## iPhoneアプリについて

その RainbowApp に行った中で、アプリを作りました。

[AppStore] Simoncats
https://itunes.apple.com/jp/app/simoncats/id1078064315?mt=8


![IMG_0008.jpg](https://qiita-image-store.s3.amazonaws.com/0/73831/37163060-1dee-2aed-3bfd-3d938f24f266.jpeg "IMG_0008.jpg")

SimonCats と言います。[サイモンゲーム](https://ja.wikipedia.org/wiki/%E3%82%B5%E3%82%A4%E3%83%A2%E3%83%B3_(%E3%82%B2%E3%83%BC%E3%83%A0))というのがあるのですが、その昔、PC-8001上の N-BASIC で作って楽しくてハマったので、なんとなく移植してみようと。

移植のサンプルプログラムを作る過程で、親友がイラストを描いてくれまして、それを組み込んで、少しルールを変えてリリースしました。ほとんど、この絵に支えられていると言ってもいいですね。友人に感謝です。

ちなみに、何度かバージョンアップしているので、リリースしたときとは、もう、ずいぶん違っています。

## 技術要素

このアプリのウリですが、

- 可愛らしいイラスト
- エクステンションを使って枠線付きボタンを StoryBoard で描く
- 多言語対応(英語、日本語)
- Admobの広告処理をSwiftで記述
- サウンド処理

再活用できそうなTipsは、別記事にまとめました。
こちらを参照してください。

[iOS][Swift]iOSでボタンやラベルの枠線を Storyboard で簡単に描く方法
http://qiita.com/o_chicchi/items/c4469e956c2118226a2d

[iOS][Swift]Admobの広告をSwiftで表示する
http://qiita.com/o_chicchi/items/da8ebfd1d4536f29398b

## 合宿

[アドベントカレンダー](http://qiita.com/advent-calendar/2016/love_swift)にもありますが、今年、[プログラミング合宿](http://qiita.com/gotou015/items/40081f33b68f616491b8)に行きたい思っていたので、[Swift愛好会](https://love-swift.connpass.com/)の合宿に参加できて、しかも、[土善旅館](http://www.dozenryokan.com/)とかテンション上がりました。事務局をやってくれる方々に感謝です。

その中で作業していたのは、Swift3.0 への移行でした。

問題になっていたのは、Admob の広告のライブラリで、もともと、Pods を使わずにプロジェクトを作成していたので、Admob のライブラリを削除した上で、Pods 使用に切り替えて、最新版を再導入したんですが、Xcode のリンク時のエラーを解消できず、プロジェクトを作り直しました。StoryBoardが壊れたりしたのを直し、細かい辻褄があわないところを修正して、リンクが通ることを確認し、Swift3.0へのアップデートは完了しました。本来は、コードの置き換え中心になるはずなんですが、すごく苦労しました。

あと、AVPlayerLayer あたりが使い方が変わっていて、ゲームのチュートリアルの処理を大幅に修正しました。

いまさら参考: Swift3でAVplayerLayerをUIViewのレイヤーとする時
http://qiita.com/noppefoxwolf/items/8c503923b3da23484f30


## リリースに向けて

仕事もそれなりに忙しく、いろいろな活動をしている影響で、進捗は芳しくないのですが、書きかけの GameCenter の処理を頑張って組み込んで、リリースに向けた準備をしていきたいと思います。
次期バージョンでは、イラストの追加も予定していまして、既に素材はあるので、加工して組み込みたいと思います。

## 課題

いくつか課題があります。

- ゲームのメインの処理のプログラムコードの書き方が決していいとは言えないです。状態管理を変数で管理していますが、Swiftには、enum といういい命令があるのですが、活用できてないです。

- 全体的なコード量が多くなっていて、冗長なところも目立つようになってきました。昔、記述したところを見直して、よりスマートにきれいにしたいです。

そもそもは、力業で、ごりごり書いて、リリース優先した遺産ですね。

## まとめ

[Swift愛好会](https://love-swift.connpass.com/)は、普段の仕事の中でコードを書かない私にとって、自分のモチベーションを保つ上で非常に重要な会です。今後も続けて下さい。[@es_kumagai](http://qiita.com/es_kumagai)さんの[Swiftチャチャチャ](http://www.slideshare.net/tomohirokumagai54/swift-loveswift-63485452)のような高度な談義や、いろいろな人のコードの書き方を知って、頑張ってついてこう、頑張ろうと思っています。

そのほか、私自身は、iPhoneのアプリ開発はもちろんのこと、AWS、Bluemix、IoT周辺(RaspberryPi、Arudinoなど)でも遊んでいるので、興味ある方は是非一緒にやりましょう。

それと、初心者の皆さんへ、アプリのリリースはしてみるものです。世界が変わります。ホントに。

明日は、かの有名な [dotstudio](https://dotstud.io/) の[のびすけ](http://qiita.com/n0bisuke)さんの投稿です。[MashupAward2016](http://mashupaward.jp/about/) の [IoTLT](https://iotlt.connpass.com/) の優勝おめでとうございます。

最後まで読んでいただきありがとうございました。

以上