iOSアプリのdev活報告

iOS

どうもayijkです。

仙台から帰ってきてはや1週間が過ぎました。まさに光陰矢のごとし,もうすぐ6月も終わりかと思うと信じられません。
さて6月も終わりということでそろそろ長かった研修も終わりが見えてきました。
仕事——というよりも「社会人としての成長」というのはなかなか目に見えてこないのでもどかしいのですが,まぁなんとかやっています。
そういうほんわりとした目に見えない成長もそれはそれで楽しみなのですが,技術者としては,やっぱり目に見える成果物を作ってこそ心の底からニンマリできると思うのですよね。

というわけで,やっとiPhoneアプリ開発をスタートしました(そして本ブログに”iOS“なるカテゴリが生まれました笑)。
4月にiPhoneを買ってから2ヶ月以上……重い腰がやっとあがりました。

developer活動のはじめ

Androidアプリは5年強作ってきているので,「こんなアプリが作りたいな」と思ったときにその実現方法はだいたい分かってくるようになりました。細かいUIは未だに苦手ですが,どういうコンポーネントを使って処理をして,とかいう空気感がわかってくると開発はもはや作業に近いので純粋にプログラミングだけを楽しめる至高の趣味になります。

そんな私にとって,iPhoneアプリ開発は未知の領域。
iPhoneアプリとAndroidアプリって,ユーザにしてみたら似たようなUIが備えられているし,「ほとんど同じなんじゃないの?」と思われるかもしれませんが,実際はだいぶ違うようです(自信ありません笑)。開発言語の違いもさることながら,「アプリ斯く在るべし」というモチーフが根本から異なっている印象を受けました(開発を始めて2日目なので,当然的外れかもしれません)。
アプリの挙動をどういう風に記述していくか——その感覚がAndroidと全然違うので,右も左も分からなくて6/18(日)は半日ずっと他人の書いたコードをチラ見して回っていました。

その後は試行錯誤しながら半日と数時間。なんとか一旦落ち着いたので,こうしてブログに書いてみた次第です。

iOSアプリにGoogleMapを貼ってみた

一番最初にiPhoneアプリで作りたいのは地図を利用したアプリなので,ひとまずGoogle MapをiPhoneアプリ上で表示してみることに挑戦してみました。
ピンが立っている場所はいわゆる「現在地」を表しています(実際の自宅の住所から乱数を乗せていますが,取得自体はできています)。

実際にやったことと言えば,

  • GoogleMapのSDKの用意をして
  • Viewに追加して
  • 位置情報の権限をちょろっと誤魔化した

くらいなので実際の作業量はほとんど無い上にコードの大半はコピペですが,これだけでも2時間溶けました。圧倒的融解速度です。
とはいえ,不慣れなものは触れるだけで疲れますが,その分だけ面白いのも確かですね。
じゃなきゃわざわざやりませんもん。

Androidデベロッパから見た「iOSよくわからないよ」5選

iPhoneアプリの実態がまるでわからないまま開発をスタートしたので,やりたいことがどうやって実現できるのか,また,それをどうやってググればいいのかわかりません。
特に以下の5点については苦労させられましたし,今後もずっと苦労しそうな気がします笑

Storyboardの立ち位置がよくわからない

Androidでは,画面遷移も含めて全てJava(もしくはKotlin!)コーディングで完結できます。
ところがiOSアプリの場合は,Storyboardと呼ばれるGUIベースの画面遷移図のようなもので遷移やViewの配置を行うのですが,ソースコードとしてで管理できないので端的に言ってキモチワルイ。
皆さん,Storyboardのことをどういうヤツだと思って開発しているのか……私,気になります!

StoryboardとSwiftコードの連携がよくわからない

上記と同じく,Storyboardに関する理解が圧倒的に足らないせいだと思うのですが,Storyboardで配置したViewに対してSwiftから処理を加えるやり方に不満があります。Ctrlを押下しながらSwiftコードにD&Dするのはいいんですが,その対応関係がどこに記録されているのかわからないので下手にコードをカットできません。
その点,AndroidはfindViewByIdという途轍もなく便利なヤツがいたので,パッと見てわかりやすくてよかったですね。

Xcodeが使いにくい(=カスタマイズの仕方がよくわからない)

Androidアプリ開発当初こそ,今は亡きEclipseで開発していましたが,ここ3,4年くらいはずっとAndroid Studioです。研究室でJavaを書いているときもIntelliJ IDEAを使っていたので,指がJetBrainsのキーバインディングに慣れすぎているんですよね。
XcodeもポイントポイントでオシャレなUIしているのはいいんだけど,IDEとして見たときに,JetBrains製のものと比較してやっぱり不満が残ります。まぁ,不慣れの影響が大きいんだろうけど。
Xcodeの実際の使い方は,やっぱり開発者の方に直接訊くのが一番早いですかね。今度(初心者向けの)勉強会に参加する予定なので,その時に色々訊いてみたいです。

そういえばJetBrains製の”AppCode“というIDEがあるみたいなんですが,これの評判がどうなのかも興味があります。JetBrainsで揃えられるなら揃えたい。

外部ライブラリの使い方がよくわからない

AndroidはGradleでビルドするので,外部ライブラリを使いたいときはdependenciesに1行追加するだけです。超簡単。
対してiOSは,CocoaPodsというよくわからないライブラリ管理ツールを使ってライブラリの依存関係を解決するらしいです。
Gradleも相当にクセがあるけれど,こちらもなかなかの取っつきづらさ。
Gradleは結局JVMのビルドツールなので「つまるところjarファイルさえ管理していればいいんでしょ」と思っておけば楽だったんですが,iOS/Swiftはそもそもどういう言語なのかも理解が追いついていないので大変です。

アプリ開発もいいけど,ビルドツールに対する理解がまず先決な気がしますね,これは(Android開発も,Gradleがチンプンカンプンだったら書くの相当辛いと思いますし)。

コールバックの考え方がよくわからない

位置情報の取扱いに顕著なんですが,Swiftにおけるコールバックの流れ方が不明です。
JavaであればInterface作ってaddHogeListenerに登録して@overrideした関数を弄ればいいっていう雰囲気はわかるんですが,Swiftの場合はそもそもoverrideっていう文字列をほとんど見ないし,リスナーの登録もありません。delegate(委譲)という仕組みを利用して,よしなにやっているみたいですが,そのあたりの言語仕様に疎すぎるのが諸悪の根源ですね。ちゃんと勉強します。

今後について

ひとまず一旦は落ち着きましたが,作りたいアプリにどういう処理が必要なのか,全体像を見渡すのには相当な時間がかかりそうと言うことがわかりました。

上でも書いていますが,兎にも角にもSwiftなる言語に慣れることを先決とします。
ネットの記事を巡るだけでも簡単なサンプルは作れるでしょうが,やっぱり体系的に勉強するには本が一番ですよね。今度,会社帰りに本を数冊見繕ってくる予定です。

この記事をご覧の方で,iOSの扱いに覚えのある人はよい書籍を教えていただけると幸いです。
よろしくお願いします!!