13
実装とアプリ開発と独学で iOSアプリ開発と向き合うこと potatotips #31 2016/07/21 Fumiya Sakai

実装とアプリ開発と独学でiOSアプリ開発と向き合うこと

Embed Size (px)

Citation preview

実装とアプリ開発と独学で

iOSアプリ開発と向き合うこと

potatotips#31

2016/07/21FumiyaSakai

自己紹介と簡単な経歴など

✦ 今までの仕事履歴(本業)

石川県金沢市生まれ

本業はサーバーサイドのプログラマ※Rails&PHP使い

26歳〜31歳: Webプログラマ(PHP&Rubyがキャリア長い)

23歳〜25歳: Webデザイナー兼ディレクター

チャンスがあればiOSアプリ開発も絶賛やってみたい!

趣味:シルバーアクセサリー集め・スイーツ作り・アプリ開発

女子向け・グルメ・エンタメ関連のお仕事が多い

Qiita:http://qiita.com/fumiyasac@github

Github:https://github.com/fumiyasac

✦ 酒井文也(さかいふみや)

東京(大塚)住まいの31歳

こんな格好を普段からしているので遊び人に見られますがエンジニアです。

文系卒に思われますが実は数学科で理系卒です。

めっちゃお酒好きそうに見えますがビール苦手でお酒も超弱いです。

今でもたまにUIまわりとか触りたくなることがあったりなかったり

今年の4月からフリーランスです。(今はとある会社にいます)

最近のはまっている食べ物はカボチャと担々麺です。

最近はSwift以外ではRailsやLaravel・CakePHP・Node.jsなんかも

これまでに作ったもの(ネイティブアプリ)

①簡易家計簿アプリ「Coffre」

②ゲームアプリ「10秒虫食い算」

・カレンダーを自作しています

・シンプルなお小遣い帳感覚で支出管理できます

・全問正解者ほとんどいません…

・不定期ですがコラムも書いています

・サーバーサイドはRubyonRailsを使用

http://www.coffre.me/

・デザインにもこだわってみました(特にグラフ)

・実はちょっとバグがあります。

・問題は今後追加予定(現在110問収録)

個人的にはなりますが、他にもアプリ・Webサービスなど開発中です(2016年も宜しくお願いします)

・サイト等は次回のアップデートで公開予定

http://blog.just1factory.net/services/284

・若干の中毒性を含みます

✦ 圧倒的未体験ゾーンからの始まり

ふとしたきっかけから始まったiPhoneアプリ開発のお仕事

その時は無事できた!という安堵感と同時に何か物足りない感じを覚えた良い思い出です。

★突然の実務デビュー

・短期間(3週間程度)でイベント向けのサンプルアプリを開発

・この際は現存するゲームタイトルのアプリをデチューン

★しかしながら感じた違和感

・面白かったのでもう少し触ってみたい思った

・プライベートでは憧れはあったもの手つかず状態

・この時はObjective-Cは未経験&XCode触ったことがない

・中はWebViewを使ったいわゆる「ガワアプリ」で申請はなし

・スピード重視過ぎてかなりあやふやな理解

・その時のメイン言語はPHP+MySQL

実際にアプリを作る+Objective-Cへの抵抗をなくすという点で良かった。

本業とは異なる分野に初めて手を出したけれども到底使いこなせてはいない

ブースの人が

自分のアプリを触る感動!

不安しか

正直なかった!

✦ せっかく取り組むのだからちゃんと時間を作ろう!

30の誕生日にアプリ開発の学校へお申込み

そして一番大切な心がけは「自分に余計なプレッシャーを与えない」こと「続けること」の2点を注意した。

★始めた時に取り組んだこと

・お仕事の後に毎日10時まで(時間厳守)

・まずは1アプリを"ある程度"0から作る

★potatotipsを始め勉強会で自分の成果?として発表してみる

・登壇(Swiftビギナーズ勉強会・Swift愛好会等)

・Qiitaを書いてみた

・デザイン〜リリースまでを一旦目標

・今までやっていたサーバーサイドを含む

・Githubに作りかけのものを挙げてみた

・軽い執筆等もやってみた

実装をしない日もあったけどできる限りXCodeは開いているように

実装の「正解とは?」がわからないそんな時は作ってみてまとめる

ぶっちゃけ今実務レベル

かと言われれば微妙かも..

まずは基本的なもの

から地道に作っていく!

✦ 今まで一応プログラムは書いていたから考え方は応用可能?

いきなりアプリって面喰らわないかい?

「全く初めてで戸惑った部分」に関しては小さなサンプルを作ってみたり動かしたりをして適宜補っていく。

★思ったよりも生かすことができた部分

・アプリのUI設計やパーツ作成

・サーバーサイドとの連携

★全く初めてで戸惑った部分

・GestureRecognizerやTouchEvent

・CameraやAVFoundation

・CoreDataやデータ永続化

・プッシュ通知

データ永続化の部分はドキュメントや書籍の紹介が少ない

使わないものはたとえ知識があっても実装になると戸惑う部分が多くあるはず

別分野の技術を知っていて良かったと思える瞬間

iOS特有のものや個人アプリでは使わない部分は不慣れ

✦ コードレビューがない孤独な戦いの中で

個人開発の気をつけるべきところ

せっかくアプリが作れたけれども中のコードがバッドノウハウに汚染された状態に陥らないようにしよう。

★焦るあまりにバッドノウハウを実装することも…

・Controllerに寄せまくる状態

・AutoLayoutをあまりきちんと使わないUI実装

★取り組んで見て良かった取り組み

・他言語での実装との比較

・ライブラリなしでのUI開発

・テストを書かない

・実際のサンプルを作った上での説明

・その他便利サービスの活用(Parse/NCMB/Repro)

恥ずかしい実装をしないための工夫はまだまだこれから

レビューをされることのありがたみを改めて知ることができた

アプリやサンプルを作る中で使えそうなところから試していく

✦ 基本書+参考書の組み合わせで実装したいものから着手する

勉強する上で役に立った参考書

実装したいものを決める→実装のキモとなる部分を本で探す→実装するorアプリにする→過程を書き残す

★最初の基本を理解する★言語仕様や文法理解

リファレンス 具体的実装 UIKit理解 CoreData理解

✦ 実際のカレンダーに日本の祝祭日を計算で算出

成果例1:日本の祝祭日を計算で出すロジック

おかげさまでSwiftだけでなく日本の祝祭日にも詳しくなることができて取り組みがいがありました(笑)

★祝祭日の部分は赤色で表示されるようになっています

・振替え日やハッピーマンデー法の施行前・施行後の祝祭日にもできるだけ対応

ゴールデンウィーク・シルバーウィーク対応も考慮済み

・日本の祝祭日全てのロジックを計算式で考慮しています

春分・秋分・ハッピーマンデー法対応も考慮済み

✦ 自力で作成するのは結構辛そうであったのでなんとか楽をしてみた

成果例2:WebViewとネイティブの組み合わせ

ネイティブアプリだと実装に時間がかかる部分については「切り分け」をしてどう実現できるかを意識する。

★ローカルのHTMLとChart.jsを利用した滑らかなグラフ

CoreDataやRealm等で永続化したデータを集計して表示させる

<script src="./Chart.js"></script> <script> function drawBarChart(expense, sum){ barChartData = { labels : [expense[0],expense[1],expense[2]], datasets : [ { label: "ハイカロリーBest3", fillColor : "rgba(220,220,220,0.5)", strokeColor : "rgba(220,220,220,0.8)", highlightFill: "rgba(220,220,220,0.75)", highlightStroke: "rgba(220,220,220,1)", data :[sum[0],sum[1],sum[2]] } ] } //アニメーション処理を記述 ctx = document.getElementById("mycanvas").getContext("2d"); window.myBar = new Chart(ctx).Bar(barChartData,{responsive : true}); } </script>

//ローカルWebviewのJavaScriptのメソッドをキックする initBarChart = NSString(format:"drawBarChart(['%@','%@','%@'],[%@,%@,%@]);", first.food, second.food, third.food, String(first.amount), String(second.amount), String(third.amount)) as String

//ローカルWebviewのJavaScriptのメソッドをキックする self.grachWebView.stringByEvaluatingJavaScriptFromString(initBarChart)

※このようなネイティブライブラリも

ネイティブ側で整形してWebView側のJSにて描画

<JavaScript側> <Swift側>

✦ グルメ系のアプリや女性向けアプリのUIや配色を参考にする

デザインやUIの参考にしたもの

ダウウロードして触ってを繰り返してうちに自分のiPhoneが女子向けアプリだらけになっていました。。。

★UIパーツを要素に分解

★気になったアプリを実際に入れてみて操作感や配色をチェックする

・タブのスクロールと連動する部分はどう実現しているのか?

・写真と文字の大きさのバランスや配色のパターンや傾向はあるか?

・はじめのうちはライブラリに頼らないで実装することはできないか?

要素を分解して考えるようにすると面白い!

✦ 作りたいものがある場合は最初はこんな感じで設計

作りたいものはまとまってから

まとめないと実装する際にとっ散らかりやすい&途中でだれてしまうリスクが大きくなるので今もしている

★画面の設計はしっかりと行うようにする(アナログですけどね)

画面遷移図があるだけでも考えがかなりまとまる

ポイントとなる実装は具体的な処理の概要を記載

直す時は消さないでカラーのボールペンで上書き

✦ 本業でもそうでなくともアプリ開発を続けるために

今回のまとめ

ご清聴ありがとうございました!またこのような機会があった際には是非ともよろしくお願い致します!

★自分でアプリを作る場合はついつい短絡的な実装をしそうになる

・勉強会の参加やサンプルアプリ開発を通じていろいろ知見を得ていきたい

・アプリ開発と同じようにライブラリやサンプル開発にも注力をしていきたい

プライベートでも本業で書く場合と同じような心がけをしようと思います。

★QiitaやGithubを活用して実装の足跡を残しておく

作りかけの状態でも実装のプロセスや記録を残して説明としてしっかりと残すと良い賄いになった。

★今までで培ってきた部分や書き方から考え方のヒントを見いだすアプローチ

実装のイメージがよく湧かない場合は自分の仕事でやっている言語に当てはめて考える。

★サンプルやアプリ開発に加えて他にもライブラリの作成も今後してみたい

まだまだ機能追加やリファクタリング・テストケースの充実化などはしていく予定です