39
クロス プラットフォーム SwiftとKotlinでクロスプラットフォームなアプリ開発 2016/10/22 助川詞音 GitHub shion-skgw

クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

クロスプラットフォームSwiftとKotlinでクロスプラットフォームなアプリ開発

2016/10/22

助川詞音GitHub shion-skgw

Page 2: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

自己紹介

氏名 助川 詞音(スケガワ シオン)

社歴・業界歴 3年(平成25年5月入社)

所属 バンド部(微妙な立ち位置)

趣味 海外旅行で、どこに行くか調べて妄想すること

好きな食べ物 骨とか皮とか種のない物(柿の種は例外)

好きな俳優 緒形 拳(オガタ ケン)

Page 3: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

はじめに

Page 4: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

みなさんは、

スマホアプリを開発したもののこのような事で、悩んでいないでしょうか...

Page 5: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

競合他社からシェアを奪えない...

広告・宣伝のお陰で知名度こそ伸びたが、販売数がイマイチ...

ダウンロード数が伸びない...

Page 6: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

そのお悩み、

SwiftとKotlinで解決できるかも!

Page 7: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

アジェンダ

・最近のスマホ事情

・クロスプラットフォーム

・Swift

・Kotlin

・SwiftとKotlin

Page 8: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

最近のスマホ事情

Page 9: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

国内のスマホ出荷台数

2015年度のスマホ総出荷台数は2,916万台で、

2016年度では2,770万台になると予想されている。

2016年度の出荷台数減少予測は、昨今の買い替えサイクル長期化の煽りを受けることが予想されるため。

株式会社MM総研よりhttp://www.m2ri.jp/newsreleases/

Page 10: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

OS別シェア分布

2016年現在、スマホ市場において大きくシェアを握っているOSは以下の通り。

・iOS (Apple):iPhone等、Apple製品で採用・Android (Google):各社スマホで採用

この二大OSのシェア分布は次のようになっている。

Page 11: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

国内のシェア分布

2016年4月度統計データhttp://www.kantarworldpanel.com/global/smartphone-os-market-share/

43%56%

iOS

Android

Other

Page 12: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

国内のシェア分布

つまり、ほぼ100%が前述の二大OSで構成されており、内訳は概ね半々といった具合である。

Page 13: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

だったら、

iOSとAndroidどっちも対応させなきゃ!

Page 14: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

クロスプラットフォーム

Page 15: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

クロスプラットフォーム

クロスプラットフォームとは、OS、ハードウェア等、仕様の異なる端末上で、同じ仕様の動作をするソフトウェアのこと。

マルチプラットフォームと言ったりもする。

PS版もXbox版もあるゲームソフトがクロスプラットフォームであると言える。

Page 16: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

クロスプラットフォーム

また、iOSとAndroid両方で同じアプリが公開・販売されていることがあるが、これも、クロスプラットフォームである。

つまり、これを実現したい!

Page 17: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

Swift

Page 18: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

Swiftって?

Swiftとは、macOSやiOSなどのApple製品上で動作するネイティブアプリケーション開発言語で、2014年6月にリリースされた言語である。

様々な言語の特徴を取り入れ、簡潔・安全な実装を行える言語を目指しており、学習コストが低いことが特徴である。

2015/12にオープンソース化され、現在ではLinux上で動作するサーバーサイドアプリケーションの開発用途にも注目されている。

Page 19: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

Swiftって?

Swiftのパラダイムは以下の通り。

・オブジェクト指向言語である・関数型言語のような記述ができる(※)・静的型付け言語である・型推論言語である

※ここで言う関数型言語は、第一級オブジェクトが関数であることを指す。つまり、JavaScriptの様に関数を変数に保持できる。

Page 20: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

// Swift サンプルコード

class Test {var parameter: String?func printParm() {

print(parameter)}

}

func printMethod() {// Testクラスインスタンス生成

let testClass = Test()// パラメータを設定し実行

testClass.parameter = "Parm"testClass.printParm()

}

// 関数を変数に保持し実行

let method = printMethodmethod()

Page 21: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

Kotlin

Page 22: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

Kotlinって?

Kotlinとは、Javaをより簡潔な安全な実装をできる様に改良したJVM上で動作する汎用言語である。

Java資源もそのまま使用することができ、Javaに代わるAndroidの開発言語として注目されている。

Kotlinはチェコのジェットブレインズ社によって2011年7月にリリース。ジェットブレインズ社製品としてIDE IntelliJ IDEA などが有名。

Page 23: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

Kotlinって?

Kotlinのパラダイムは以下の通り。

・オブジェクト指向言語である・関数型言語のような記述ができる・静的型付け言語である・型推論言語である

SwiftとKotlinはパラダイムが似ており、構文等も共通点が多い。

Page 24: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

// 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()

}}

}

Page 25: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

SwiftとKotlin

Page 26: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

SwiftとKotlin

前述のソースコードは、Xcode(Swift)、IntelliJ IDEA(Kotlin)上で実際に動作する。

どちらも構文的な差があまりなく、パラダイムも似通っていることから昨今のスマホアプリデベロッパ界隈ではiOSはSwift、AndroidはKotlinで開発することが流行っている。

次項、両者の共通点を紹介する。

Page 27: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

共通点1

構文が似てる!

Page 28: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

共通点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 {}

Page 29: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

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)}

Page 30: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

Swift / Kotlin

var sub = SubObject()

// キャスト失敗時はnullが代入される

var super = sub as? SuperObject

共通点1

以下はキャストの例?を用いたキャストは、失敗時にnullを返す。

Page 31: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

共通点2

オプショナル型!

Page 32: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

共通点2

Swift、及びKotlinにはオプショナル型と呼ばれる型がある。

これは、プログラム実行時のNULLアクセスによるランタイムエラーを防ぐ目的で利用される。

どちらの言語でも頻繁に利用されるが、これの構文、挙動がどちらも同じである。

Page 33: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

Swift / Kotlin

// コンパイルエラー:null(Swiftはnil)を代入できない

var variable: String = null

var employee: Employee? = null// print結果はnullとなり、ヌルポが発生しない

print(employee?.identify)

共通点2

型に?を付与するとオプショナル型となり、?を介してアクセスした場合、ヌルポにならない。

Page 34: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

共通点3

バージョンアップするとすぐコンパイルエラーになる!

どちらも、バージョンアップの壁がやたら大きく基本構文さえ改廃されるので対応が大変。。。

例えば Swift2 → Swift3 で i++ が使えなくなった。

Page 35: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

しかし。。。

前述のように共通点の多い言語だが、クラスプラットフォームアプリの開発にはライブラリも忘れてはならない。

残念なことに、どちらの言語でも利用出来るフレームワークなどは存在しないので別途、対応が必要になる。

非常に面倒くさい。。。

Page 36: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

J2ObjC

前述の手間を省くツール J2ObjC はGoogleが2012年9月にリリースしたJavaをObjective-Cに変換するツールである。

Google自身、実際に Inbox の開発で利用した実績のあるツールなので利用しない手はない。

J2ObjC(Java to Objective-C)http://j2objc.org

Page 37: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

Objective-C?

Swiftは、元々Apple製品のソフトウェア開発で用いられてきたObjective-Cを呼び出すことが容易である。

つまり、共通ライブラリをJavaで開発し、AndroidはKotlinから直接参照する。iOSは一旦Objective-Cに変換したソースをSwiftから参照することで、双方の言語で同じライブラリを利用出来る。

Page 38: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

まとめ

SwiftとKotlinの共通点を紹介したが、両者は似てるだけで、ちゃんと違う言語である。

実際に文字列置換で埋まるほど言語仕様の差は浅くないので、結局は別々に開発することになる。

ただ、どちらも従来のプログラミング言語にはなかった特徴や概念があるので面白いと思う。

Page 39: クロス プラットフォーム - j-school.ac · Swiftって? Swiftとは、macOSやiOSなどのApple製品上で 動作するネイティブアプリケーション開発言語で、

まとめ

また、J2ObjCだったりObjective-CライブラリをJava化したソースがGitHubに転がってたりすることから、iOS↔Androidという分野は過渡期のようで追っていくのが今一番楽しい時期だと思います。