はじめに
はじめまして!kitakです!
アイスタイル Advent Calendar2020の12/6の投稿をさせて頂きます!
アプリ開発グループ(Android)所属の2019年新卒、kitakです!
1年目の去年の年末はアドベントカレンダーには不参加でしたが、2年目となる今年の年末は思い切って何か書いてみようと思いました!
今までに記事を書いてアウトプットすることをほとんどしてこなかったので、拙い文章かと思いますがどうかお手柔らかにお願いします!笑
目次
1 今まで両方のOSを触ってみて
2.基本的な比較
3.画面上のレイアウト作成の比較
4.画面の操作における実装の比較
5.ライフサイクルイベントの比較
6.最後に
1. 今まで両方のOSを触ってみて
私はこれまでiOSとAndroidと両方のOSを触ってアプリを作った経験があり、折角なので双方の開発の仕方や構造における比較などを簡単にまとめてみたいなと思います。
アプリ開発をしたことがない方やこれからアプリを作ってみたいなと思ってる人にも見て頂きたいので、凝った技術の話などは避けつつ基本的な概要なども含めて簡潔にご紹介していこうと思います。
なので本記事はアプリ開発経験者の方には少々退屈する内容になるかなと思います。(ご了承ください…)
アプリ開発のことを簡単に知りたかったり、どっちのOSを選ぶか迷っている人は是非ご覧いただければと思います?
2.基本的な比較
Appleが提供しているiOSとGoogleが提供しているAndroid、そのどちらかを普段皆さんは利用されているかと思います。
下記の表は、iOS,Androidの基本的な情報を比較して表にまとめたものになります。
OS(オペレーティングシステム) | iOS | Android |
---|---|---|
OS制作会社 | Apple | |
OSが動くスマホを作っている会社 | Apple | Google, Sony, SAMSUNGなど |
開発ツール | XCode | Android Studio |
開発言語 | Swift, Object-C | Kotlin, Java |
開発可能なPCのOS | Macのみ | Mac, Windowsなど |
世界シェア | 25% | 75% |
日本のシェア | 63% | 37% |
まずiOSアプリの開発はMacが必須です!
世界的なシェアはAndroidが圧倒的に多いですが、日本はiPhone大国と呼ばれるくらいiPhone率が高いです。
余談ですが、数ヶ月前に19新卒の同期にどちらのスマホを利用しているかアンケートを取ったところ、24人中3人しかAndroidのスマホを利用していませんでした。ちなみに16人いる女性陣全員がiPhoneだったのは驚きました笑
基本的な情報の比較を見てもらった後は、いよいよ実装についての比較をしてみたいと思います。
今回は以下3点をピックアップしてみました!
- 画面上のレイアウトの作成について
- 画面操作における実装について
- ライフサイクルイベントについて
3. 画面上のレイアウト作成の比較
どちらのOSも基本的には画面をはじめとした外見の部分と
実際にアプリを動かす中身の部分で構成されています。
この章では、それぞれのOSがどのような方法で画面を作るのかを比較してみたいと思います。
【iOS】Storyboardを使った画面の作成
まずは、iOSの画面作成方法について説明します。
一般的にiOSの画面の作成はStoryBordを使って作成します。
StoryBoardとはアプリ画面のレイアウトや画面遷移、デザインなどを視覚的に作成することができ、ボタンやテキストなどのオブジェクトを配置しながら画面のレイアウトを作成することができます。
最初は頭で考えずに直感でレイアウトを作成できるので
プログラミングに自信がない初心者の方でも入りやすいかと思います。
実際の画面はこのようになっています。
画像右上の“+”ボタンを押すとオブジェクトライブラリが表示されます。ここでは画面にボタンやテキストラベルなどをドラッグ&ドロップして直接StoryBoard上に取り付けることができます。
上記画像のでは、オブジェクトを画面に取り付けました。
オブジェクトを取り付けてから、位置の制約やテキストの大きさ、色変更など一通り行えることができます。細かなレイアウトは画面右側のUtilityAreaで行うことができます。
今回のレイアウトでは、横幅の長さとそれぞれのオブジェクトに制約を加えています。
【Android】xmlファイルを使った画面の作成
Androidではxmlというマークアップ言語を用いてレイアウトを作成します。実は先ほどのStoryboardも基はxmlファイルです。StoryBoardでもxmlファイル形式で開発することが可能でどちらも同じ入れ子(ネスト)構造をしている共通点がありますが、Androidの方がxmlのソースファイルが見やすく、分かりやすい点も含め、iOSのソースファイルよりも開発がしやすいかなと思います。
画面の作成方法は以下のように行っています。
iOS上のStoryboardに似た画面に直接オブジェクトを貼り付ける方法のもの(1枚目)とxmlファイルにコードを記述する方法のもの(2枚目)の2パターンがあります。
直接ファイルにコーディングする方法は、オブジェクトごとに高さや幅の調整、位置の制約、デザインなどを記述することができます。Web開発経験者の方などはHTMLとCSSが混在しているようなもだのと捉えておくと分かりやすいかなと思います。
双方の比較
自分の経験を元に双方を比較して以下のように考えました。
今回は良いなと思った点と苦労した点でそれぞれまとめました。
良いなと思った点
iOS(StoryBoard)
- 初心者にとって最初はStoryBoardの画面作成はとても便利。
- プログラミング経験がない人やあまり自信がない人でも入りやすい。
- 視覚的に取り付けながらの作業なのでイメージしながら作りやすい。
Android (xmlファイル)
- オブジェクトごとにidを付与することができ、多様な操作が行える。
- 配置方法を色々選べる(LinearLayout, RelativeLayoutなど)
- リソースファイルにString(文字列)、color(色)、style(予め作成したボタンなどのレイアウト)等を登録していつでも使用することができる。
苦労した点
iOS(StoryBoard)
- 制約の設定でつまづきやすい。凝ったものだとレイアウトの知識が必要になってくる。
Android (xmlファイル)
- レイアウトをコーディングする際、どのような設定が必要になるかある程度覚える必要がある。
レイアウト作成に関して比較してみた結果、Androidの方が開発しやすいかなと自分は思います。配置方法を選んだり、リソースを駆使するなどできるのであまり苦がなかったです。レイアウトをコーディングする際はチートシートを見ておくと忘れた時に便利かなと思います!
StoryBoardを使っての制作は簡単なものなら容易ですが、難しいレイアウトになってくると知識が必要になってくるので、やり始めた当初はやや苦労した思い出があります。それでも作っているときの楽しさはすごく感じられました!
4. 画面の操作における実装の比較
ここからは画面の操作をどのように実装していくのか説明したいと思います。
【iOS】ViewControlerを使って実装してみる
ViewControllerはView(画面)の管理、操作を行うクラスです。
iOSアプリ開発で一般的によく使用するクラスでもあります。
初期状態はかなりシンプルです。
shift+クリックでViewのオブジェクトをクラスに引っ張るようにしてドラッグすると、ViewControllerを紐づけることができます。
ここに簡単な実装を加えます。画像では、ボタン押下時に入力したtextFieldをLabelに反映させる処理を行っています。
【Android】Activityを使って実装してみる
Activityとは画面のライフサイクルを司るクラスです。先程のiOS側で出てきたViewControllerと同様なものです。
初期状態はこちらもシンプルです。
“R.layout.activity_main”と作成時にViewと紐付けられています。
ここでもiOSと同様にボタンを押下時に、入力したtextFieldをLabelに反映させる処理を行っています。
オブジェクトごとに付けたid+setOnClickListner{}でボタン押下時の処理が書けます。
双方の比較
今回も良いなと思った点、苦労した点について分けて比較したいなと思います。それぞれの開発ツールの仕様についても少し触れています。
良いなと思った点
iOS
- 初期状態がシンプル
- オブジェクトをドラッグしてViewControllerに配置して処理を書けるのは視覚的にも入りやすく初心者にも分かりやすい。
- 一度に複数のViewControllerやStoryBoardを開発画面内で表示できる。
Android
- 初期状態がシンプル
- どのView(xmlファイル)がセットされているかコードを見てすぐに分かるところが良い。
- タブバーがついており、すぐ別のクラスなどが見れるのは便利
苦労した点
iOS
- デフォルトでタブバーがついていないなかったので最初からタブバーは存在していないものだと思っていた。
※ファイルを右クリックしてopen in new tabを選択するとタブ化することが可能です。実際の開発現場でもよく利用されている便利な機能ですので是非使ってみてください
Android
- iOSに比べるとオブジェクトの紐付けなど視覚的に少し分かりづらかった。(自分も分かるまで最初時間かかりましたw)
-
タブバーの制限は10個まで(10個を超えると古い順にタブから消える泣)
比較すると他にも色々出てくるかと思いますがこんなところです。
総合的に見てみると自分はAndroidの方が開発してて
やりやすかったなと感じる場面が多かったです。iOSの方も一度に開発画面を色々と見られるところは良いなと思いました。
5.ライフサイクルイベントの比較
ここからはViewController、Activityそれぞれのライフサイクルを比較したいと思います。
ライフサイクルって?
いきなりライフサイクルと言われてもピンとこないかと思いますが、その名前の通り、人生の一環の流れを表しており、今回の場合だと画面を生成するところから破棄するまでの一連の流れを指しています。以下順番にライフサイクルを見てみましょう。
ViewControllerのライフサイクルイベント
こちらがViewControllerのライフサイクルです。
それぞれのイベントごとに簡潔な意味合いを右側に書きました。イベントはそれぞれメソッドになっており、メソッドの中に処理を呼び出すことで、どのタイミングで何の処理を呼び出すかを決めることができます。
iOSはWillやDidなど特定の処理の前か後に置くかで決めることができるのが特徴かなと思います。
Activityのライフサイクルイベント
こちらがActivityのライフサイクルです。
一見わからないかと思いますが大きく以下の4点のアクションがあります。
- アクティビティが開始されるとonCreate, onStart(), onResume()が順に呼ばれる。
- 別のアクティビディが画面に表示される前にonPause()が呼ばれる。
- 他のアクティビティの裏に隠れて停止している場合、再び画面から表示される場合はonRestart()が呼ばれる。
(しかし、Activityのメモリが足りない場合は、強制的にプロセスが終了する場合がある) - Activityが終了する時はonDestroyが呼ばれる。
Androidのライフサイクルイベントは全てon〜から始まっており、「このイベントをしている時に何か処理を載せてね〜」という意味合いになるのかなと思います。
双方の比較(似ているところなど)
比較するにあたってそれぞれの類似点などをピックアップして見ていきたいと思います。
画面の生成
- iOS: loadView 〜 viewDidLoadまでの流れ
- Android: onCreate()
画面の表示(画面に見えるものになるまで)
- iOS: viewWillAppear 〜 viewDidAppearまでの流れ
- Android: onResume() 〜 onStart()までの流れ
画面の消去
- iOS: viewWillDesappear 〜 viewDidDesappearまでの流れ
- Android: onPause() 〜 onDestroy()までの流れ
一概に全部同じというわけではないかなと思います。
(あくまで似ているなぁと思った点なので)
iOSはWill(前)やDid(後)時系列での表し方なので
Androidで置き換えると若干違いがあるようにも考えました。
6.最後に
今回はアプリの入門的な部分をピックアップして、双方のOSでどのようなことが行えるのか比較しました。
今回話した以上に基礎的な部分は膨大にあるので、その続きは気が向いたらQiitaなどで書きたいなと思います。
また、アプリ開発のことをよく知らない人達や初心者の人達に向けてなるべく分かりやすい形でアウトプットを残すこともとても大切だなと今回書いてみてすごく感じました。調べて書いて文章に残すことで自分の身にも大きく理解が深まると改めて感じました。(特にライフサイクルの部分など)
まだまだ開発者としては未熟者ですが、来年はアプリを色々と自作し、来年のこの時期にまた発表できるのを目標に頑張っていこうと思います!
すみません、気がつけばかなり長い記事になりました笑
最後までご覧いただきありがとうございました。