Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
クロスプラットフォームSwiftとKotlinでクロスプラットフォームなアプリ開発
2016/10/22
助川詞音GitHub shion-skgw
自己紹介
氏名 助川 詞音(スケガワ シオン)
社歴・業界歴 3年(平成25年5月入社)
所属 バンド部(微妙な立ち位置)
趣味 海外旅行で、どこに行くか調べて妄想すること
好きな食べ物 骨とか皮とか種のない物(柿の種は例外)
好きな俳優 緒形 拳(オガタ ケン)
はじめに
みなさんは、
スマホアプリを開発したもののこのような事で、悩んでいないでしょうか...
競合他社からシェアを奪えない...
広告・宣伝のお陰で知名度こそ伸びたが、販売数がイマイチ...
ダウンロード数が伸びない...
そのお悩み、
SwiftとKotlinで解決できるかも!
アジェンダ
・最近のスマホ事情
・クロスプラットフォーム
・Swift
・Kotlin
・SwiftとKotlin
最近のスマホ事情
国内のスマホ出荷台数
2015年度のスマホ総出荷台数は2,916万台で、
2016年度では2,770万台になると予想されている。
2016年度の出荷台数減少予測は、昨今の買い替えサイクル長期化の煽りを受けることが予想されるため。
株式会社MM総研よりhttp://www.m2ri.jp/newsreleases/
OS別シェア分布
2016年現在、スマホ市場において大きくシェアを握っているOSは以下の通り。
・iOS (Apple):iPhone等、Apple製品で採用・Android (Google):各社スマホで採用
この二大OSのシェア分布は次のようになっている。
国内のシェア分布
2016年4月度統計データhttp://www.kantarworldpanel.com/global/smartphone-os-market-share/
43%56%
iOS
Android
Other
国内のシェア分布
つまり、ほぼ100%が前述の二大OSで構成されており、内訳は概ね半々といった具合である。
だったら、
iOSとAndroidどっちも対応させなきゃ!
クロスプラットフォーム
クロスプラットフォーム
クロスプラットフォームとは、OS、ハードウェア等、仕様の異なる端末上で、同じ仕様の動作をするソフトウェアのこと。
マルチプラットフォームと言ったりもする。
PS版もXbox版もあるゲームソフトがクロスプラットフォームであると言える。
クロスプラットフォーム
また、iOSとAndroid両方で同じアプリが公開・販売されていることがあるが、これも、クロスプラットフォームである。
つまり、これを実現したい!
Swift
Swiftって?
Swiftとは、macOSやiOSなどのApple製品上で動作するネイティブアプリケーション開発言語で、2014年6月にリリースされた言語である。
様々な言語の特徴を取り入れ、簡潔・安全な実装を行える言語を目指しており、学習コストが低いことが特徴である。
2015/12にオープンソース化され、現在ではLinux上で動作するサーバーサイドアプリケーションの開発用途にも注目されている。
Swiftって?
Swiftのパラダイムは以下の通り。
・オブジェクト指向言語である・関数型言語のような記述ができる(※)・静的型付け言語である・型推論言語である
※ここで言う関数型言語は、第一級オブジェクトが関数であることを指す。つまり、JavaScriptの様に関数を変数に保持できる。
// Swift サンプルコード
class Test {var parameter: String?func printParm() {
print(parameter)}
}
func printMethod() {// Testクラスインスタンス生成
let testClass = Test()// パラメータを設定し実行
testClass.parameter = "Parm"testClass.printParm()
}
// 関数を変数に保持し実行
let method = printMethodmethod()
Kotlin
Kotlinって?
Kotlinとは、Javaをより簡潔な安全な実装をできる様に改良したJVM上で動作する汎用言語である。
Java資源もそのまま使用することができ、Javaに代わるAndroidの開発言語として注目されている。
Kotlinはチェコのジェットブレインズ社によって2011年7月にリリース。ジェットブレインズ社製品としてIDE IntelliJ IDEA などが有名。
Kotlinって?
Kotlinのパラダイムは以下の通り。
・オブジェクト指向言語である・関数型言語のような記述ができる・静的型付け言語である・型推論言語である
SwiftとKotlinはパラダイムが似ており、構文等も共通点が多い。
// Kotlin サンプルコード
class Test {var parameter: String? = nullfun printParm() {
println(parameter)}
}
fun printMethod() {var testClass = Test()testClass.parameter = "Parm"testClass.printParm()
}
class TestMain {companion object {
@JvmStatic fun main(args: Array<String>) {fun method() = printMethod()method()
}}
}
SwiftとKotlin
SwiftとKotlin
前述のソースコードは、Xcode(Swift)、IntelliJ IDEA(Kotlin)上で実際に動作する。
どちらも構文的な差があまりなく、パラダイムも似通っていることから昨今のスマホアプリデベロッパ界隈ではiOSはSwift、AndroidはKotlinで開発することが流行っている。
次項、両者の共通点を紹介する。
共通点1
構文が似てる!
共通点1
前述の通り構文が似ているため、一括置換だけで対応できたりする。
Swift
// 変数
var parm1: String
// 定数(型推論のため型指定不要)
let Parm2 = 1200
// 関数
func method(arg: Int) -> String {}
Kotlin
// 変数
var parm1: String
// 定数(型推論のため型指定不要)
val Parm2 = 1200
// 関数
fun method(arg: Int) : String {}
Swift
let list = [1, 2, 3, 4, 5]list.forEach {
print($0)}
共通点1
Kotlin
val list = arrayOf(1, 2, 3, 4, 5)list.forEach {
println(it)}
Swift / Kotlin
var sub = SubObject()
// キャスト失敗時はnullが代入される
var super = sub as? SuperObject
共通点1
以下はキャストの例?を用いたキャストは、失敗時にnullを返す。
共通点2
オプショナル型!
共通点2
Swift、及びKotlinにはオプショナル型と呼ばれる型がある。
これは、プログラム実行時のNULLアクセスによるランタイムエラーを防ぐ目的で利用される。
どちらの言語でも頻繁に利用されるが、これの構文、挙動がどちらも同じである。
Swift / Kotlin
// コンパイルエラー:null(Swiftはnil)を代入できない
var variable: String = null
var employee: Employee? = null// print結果はnullとなり、ヌルポが発生しない
print(employee?.identify)
共通点2
型に?を付与するとオプショナル型となり、?を介してアクセスした場合、ヌルポにならない。
共通点3
バージョンアップするとすぐコンパイルエラーになる!
どちらも、バージョンアップの壁がやたら大きく基本構文さえ改廃されるので対応が大変。。。
例えば Swift2 → Swift3 で i++ が使えなくなった。
しかし。。。
前述のように共通点の多い言語だが、クラスプラットフォームアプリの開発にはライブラリも忘れてはならない。
残念なことに、どちらの言語でも利用出来るフレームワークなどは存在しないので別途、対応が必要になる。
非常に面倒くさい。。。
J2ObjC
前述の手間を省くツール J2ObjC はGoogleが2012年9月にリリースしたJavaをObjective-Cに変換するツールである。
Google自身、実際に Inbox の開発で利用した実績のあるツールなので利用しない手はない。
J2ObjC(Java to Objective-C)http://j2objc.org
Objective-C?
Swiftは、元々Apple製品のソフトウェア開発で用いられてきたObjective-Cを呼び出すことが容易である。
つまり、共通ライブラリをJavaで開発し、AndroidはKotlinから直接参照する。iOSは一旦Objective-Cに変換したソースをSwiftから参照することで、双方の言語で同じライブラリを利用出来る。
まとめ
SwiftとKotlinの共通点を紹介したが、両者は似てるだけで、ちゃんと違う言語である。
実際に文字列置換で埋まるほど言語仕様の差は浅くないので、結局は別々に開発することになる。
ただ、どちらも従来のプログラミング言語にはなかった特徴や概念があるので面白いと思う。
まとめ
また、J2ObjCだったりObjective-CライブラリをJava化したソースがGitHubに転がってたりすることから、iOS↔Androidという分野は過渡期のようで追っていくのが今一番楽しい時期だと思います。