Help us understand the problem. What is going on with this article?

iOSエンジニアから見たAndroidアプリ開発とiOSアプリ開発の違いについて説明します

More than 1 year has passed since last update.

概要

iOS開発歴5年のエンジニアが仕事で必死こいて半年ぐらいAndroid開発にアサインした後の
感想を述べたいと思いました。

AndroidとiOSとの開発スタイルの違い

iOSエンジニアがAndroid開発に着手する時につまずいたポイントとして

  • UIデザインの設計・UIKitの扱いかた
  • Optionalの扱い
  • Resourceファイル
  • ActivityとFragmentとの違いと使い分け
  • layoutファイルの取り扱い

このポイントを抑えれば大規模でも最初の3ヶ月は乗り越えられると思います(楽観)。

ResourceファイルはソースコードからのColorの変更も含まれています。

上記5点を乗り越えると若干楽になると思いきや、
次の大きな壁というか細かい違いとしては、

  • UIデザインの設計の仕方
  • 言語仕様
  • ライブラリの追加とimport
  • Optionalの取り扱い
  • IDEの機能
  • 変数宣言について
  • Resourceファイルについて
  • UIKitの扱い
  • アプリのライフサイクル
  • Viewのライフサイクル
  • 配列や型の取り扱い(List, Array, ArrayListとかナンジャラホイ)

これぐらいかなと思いました。
これらに慣れてやっとiOSエンジニアとしては安心してAndroid開発ができるようになりました。

ではそれぞれ見ていきます。

UIデザインの設計・UIKitの扱いかた

iOS Android
UILabel TextView
UIButton Button / ImageButton / etc
UIImageView ImageView
UIView View
UITextView TextView
UISwitch Switch
UIWebView WebView
UITableView ListView
UICollectionView RecyclerView
UIScrollView(縦スクロール) ScrollView
UIScrollView(横スクロール) ViewPager

だいたいこんな感じでしょうか。
これぐらいのポイントを押さえておけば良いのではないでしょうか。

ただ、iOSのデザインはコードから生成する設計パターンとStoryboardやxibで構成を考えるなど
数パターンのやり方があります。それに対してAndroidの場合はXMLファイルを編集するパターンぐらいしか思いつかないです。

なので、デザインの設計パターンで悩むことは少ないはずです。
逆にAndroidエンジニアの方がiOSを触る場合はAutolayoutという大きなハードルがあります。
そのため、 iOS -> Android は開発の抵抗は小さいと思いますが、 Android -> iOS は
かなりしんどいのではないかと推測してます。

あと、AndroidはKotlin / Javaなのでポインタを意識するコストがないのが大きなメリットでした。
アプリ開発にポインタが関わってくると挫折率が大きくなりますね(経験談)。

Optionalの扱い

私はOjbc → Swift → Java → Kotlin の順番で言語を学んでいきましたが、
何と言ってもJavaのOptionalの扱いが非常に大変でした。

SwiftのOptionalに慣れた後にJavaを書くと一発で「Optionalメンドクセー」ってなるくらい。
それぐらいSwiftのOptional が大変すごいのですね。

Optionalの書き方に慣れたらあとは普通ではないでしょうか。

Resourceファイル

iOSのリソース管理はアプリ単位でバラバラですが、Androidは「こうしなさい」というガイドラインが
決まっていますので悩む必要があまりありませんでした。
ただ、ColorやImageファイルをResourceから参照する書き方が数種類あるので、
設計によって書き方を忘れてしまうというデメリットがありました。

もう大変ですね。

Android開発、RGB、16進数、リソースファイルからの色の実装についてをまとめてみた

Android開発、RGBカラーからHSVでの明度(Bright)調整

ただ、Androidのデメリットは角丸やドロップシャドー、枠線、グラデーションを実装するときは
いちいちXMLファイルを作成して設定する必要があるのでそのXMLファイルの管理が非常に大変で、
逆にiOSがかなり優秀でした。

できればiOSみたいに2,3行のコードでサクッと実装できるようにしてほしい。
iOSのノリで枠線や角丸・ドロップシャドーの依頼を受けてしまうと後悔することが多かった。
XMLファイルを作成していたらファイルで容量食いませんか?

アニメーションは言わずもがなiOSの方が優秀で、Androidはあまり関わりたくない印象になっています。
最近のAndroidにMotionLayoutが加わり実装するためにはXMLファイルの準備が必要なのですが、
そんなことはコードだけで実装できるようにしてほしい。

MotionLayout (Android Developer)

ActivityとFragmentとの違いと使い分け

Android Studio1.0 からちょこっとずつAndroidの開発に携わっていましたので、
Activityの概念は理解していましたが、Fragmentの理解が大変でした。
(当初は他のAndroidエンジニアも同じ意見が多かったらしいが)

ただ、これは理解すると簡単で、iOSエンジニアに伝えるとしたら
UIViewのXibファイルみたいなものです。
(ActivityはUIViewControllerに該当するクラスです)

そうとわかれば後の設計方針はほとんど同じです。
Viewにライフサイクルが加わったものと教わるらしいですが、
XibUIViewを繋げた後のアレと同じです。

そこに行き着くまでが大変でした。

layoutファイルの取り扱い

例えを言いますと、

AndroidのLayoutファイル = iOSのAutoLayout

と同じような感じです。
こう言えば、伝わりやすいかと思いました。

Androidには部品の置き方がどのLayoutを使うかで設計方針が変ります。
が、Layoutの使い方を間違えるとXMLファイルがごちゃごちゃします(経験談)。
LinearLayout(Vertical)と考えたらiOSエンジニアは「あー、部品の縦向きの制約ね」と解釈します。

それが勘違いの元に繋がります。

考え方がだいぶiOSと違いましたので、
XMLでlayoutを配置するのはなかなか頭が疲れる作業でした。

ここを超えたらAutoLayoutが必要ない分、Androidの方がデザイン設計は簡単です。
回転後のマージンもしっかりやってくれます。

終わりに

こんな感じで半年ぐらいAndroidの開発をやってみた感想をまとめてみました。
ここの部分を超えたらiOSエンジニアもAndroidをカバーできるようになっていると思います。
(あー、他にもクロージャーvsラムダ式の対比がありましたね。)

iOSエンジニアでAndroid 開発もちょっとやってみたいけど怖いよな〜、
と思っている方でしたら今回の記事で越えるべき壁が見えるはずです。
ここを重点に置けば割とサクッとAndroidができるようになります。

tamappe
フリーランス上がりのiOSエンジニアです。今はオンライン英会話の会社に所属しiOSとAndroidの両OSを開発しています。使用言語は英語/Swift/Objective-C/Java/Kotlin/Ruby/PHPです。注目のトレンドはブロックチェーンでDAppsです。趣味はポーカーとスプラトゥーン2。
https://tamappe.com/
rarejob
明治神宮にあるオンライン英会話サービスを提供するベンチャー
https://www.rarejob.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした