現在JavaScriptの設定が無効になっています。このページを利用するにはJavaScriptの設定を有効にしてください。2015の1日目の記事です。一覧はこちらこんにちは、ヤフーでAndroidアプリ開発をしている松田(@shoma2da)です。今年もやってきたヤフーのアドベントカレンダー、僭越ながらトップバッターを務めさせていただきます!初日となる今日は最近話題になっているKotlin(ことりん)という言語を使ったAndroidアプリ開発と、これに関連してヤフーが新技術にどのように向き合っているかについて書いていきます。KotlinとはKotlinは2011年頃に登場した言語で、開発元はJetBrainsです。StudioのベースであるIntelliJを開発している企業でもあります。ソースコードはOSSとして公開されておりGitHubから確認できます。Kotlinはオブジェクト指向をベースにしていますが、そのほかさまざまなスクリプト言語や関数型言語の影響を受けた言語仕様を持っています。今Kotlinが注目されているのか無数にあるプログラミング言語の中でなぜKotlinなのでしょうか。Kotlinに着目したいくつかの理由について説明していきます。Javaとの親和性の高さKotlinはプラットフォームとしてJavaを選択しています。これはJavaで書いた場合と同様にKotlinのソースコード(*.kt)をコンパイルするとクラスファイル(*.class)ファイルが作成され、JavaVM上で動作させられることを意味します。(厳密にはAndroidの実行環境はDalvikVMやARTです。そのためクラスファイルの他に生成されるファイルやコンパイル周りの処理の違いはありますが、基本的にはJavaプラットフォームにおける利点はそのまま享受できます)これによってソースコードがKotlinであろうがJavaであろうがそれらに記述したクラスやメソッドは相互に利用可能(JavaからKotlinを利用することもその逆も可能)となります。そのため既存のJavaからの移行に際して全てをKotlinに書き換える必要はありません。対応できる部分から部分的に対応していくなど状況に応じた選択をしていくことができます。まもなく正式版公開Kotlinは長らくメジャーバージョン(1.x.x)が出ていない状況でしたが、10月末に1.0.0-Candidate版、11月中にBetaとBeta2版が立て続けにリリースされています。公開されているGitHubを見るとよくわかりますがKotlinは非常に開発が活発な状況が続いています。そのためおそらく数週間から数カ月以内には正式な1.0.0版がリリースされることが予想できます。正式版が出るということは言語としての安定性もある程度は担保されることから利用を開始するタイミングとして判断しても良いでしょう。言語仕様Kotlinの言語仕様を語る際に「簡潔」や「安全」といった特徴がよく挙げられます。型推論や各種の省略記法、nullに対する安全性担保や不変(Immutable)のサポートといったさまざまな言語仕様がこれらを実現しています。抽象的ではありますが「カタすぎずゆるすぎず、かゆいところによく手の届く言語」というのが私個人のKotlinに対する感想です。それではKotlinの具体的な言語仕様をいくつか確認していきましょう。Javaを使う場合と比べての利点についても確認できればと思います。本記事では概要のみ触れていきますので詳しく知りたい場合は公式ドキュメントなどをご覧ください。8からは採用されましたが、Androidでは2015年11月時点でも標準では使用できません。(Retrolambdaなどのバックポートツールを使う必要があります)Kotlinでは標準の言語仕様としてラムダ式が存在しています。SafetyNullPointerExceptionはプログラムを書く上では絶対に避けられない問題でしょう。KotlinではNullに対する対応として型による解決を試みています。型でnullを参照し得るかどうかを扱うことによってコンパイル時点で検証が可能になります。Playにリリースしてから!)想定外のnullが来てクラッシュする、といった問題を回避できます。具体的な記述方法としてはnullを許容する場合のみ型の最後に?を付けるといったものです。//コンパイルエラーにならない?付きの型から値を取り出したりメソッドを呼び出す場合はifなどで条件判定してから扱うか?や!!といった記号を使用します。//コンパイルエラーにも実行時エラーにもならない。//コンパイルエラーにならないが実行時にNullPointerExceptionの可能性があるJavaは型でnullに関する情報を扱えないため、KotlinとJavaを相互に使用する場合は返却値などがnullになりえるかどうか注意する必要があります。Safetyを扱えばみなさんのAndroidアプリからNullPointerExceptionを一掃できるでしょう。ちなみにiOS開発に採用されているSwiftでもほぼ同様の言語仕様が取り入れられています。ExtensionKotlinでは継承なしでクラスにメソッドを増やす(拡張する)ことができます。例としてListの要素を交換するswapメソッドを拡張する場合は以下のように記述します。この機能はメソッドの定義箇所が散らばってしまって管理が難しくなる懸念もありますが、ここぞというときに使用するのには非常に便利でしょう。//listの0番目と1番目を入れ替えるこのソースコードに合わせた余談ですが、Kotlinにはオブジェクトの状態が変更可能であるMutableと一度生成したら状態を一切変更できないImmutableとを明確に分けて命名やコーディングされている箇所が多く出てきます。一度その点についても整理しておくと良いでしょう。クラスの定義とコンストラクタKotlinではクラスの定義に合わせてコンストラクタを記述できます。これによってソースコードが短くなることや、valやvarというキーワードを使って簡潔にread-onlyなどアクセス制限の設定ができます。下記のJavaとKotlinで書かれた2つのEmployeeクラスはほとんど同様の仕様を持っています。name:String)上記のように2つの言語を比べるとKotlinがいかに簡潔に記述できるかがわかるかと思います。Android開発のための初期設定ここまででいくつかの言語仕様をご紹介してきましたが、KotlinをAndroid開発で使用するためにはどうしたら良いでしょうか。StudioにJetBrains公式のKotlinプラグインを導入する方法があります。Kotlin公式サイトに手順の記載がありますので詳細についてはこちらをご覧ください。(拙作ですがSlideShareに日本語資料もあります)公式資料中には既存のAndroidプロジェクトとの併用についての記載がないですが、下記のようにbuild.gradleに一行足すだけでjavaディレクトリとkotlinディレクトリ両方を使用できます。今すぐに手元のプロジェクトにKotlinを導入したい場合はプラグインの導入に加えてこのような対応をすると良いでしょう。}ヤフーのアプリ開発における新技術導入Kotlinの言語仕様や導入方法について触れてきましたが、ヤフーでの実際のアプリ開発現場でKotlinのような新技術導入がどのような環境の中で進められているかについてご紹介します。ヤフーではサービス提供品質やUI/UXなどを担保できている前提の中で、ライブラリやOSS選定・開発の進め方について各アプリである程度自由に選択することができます。今回ご紹介したKotlinについても社内のいくつかのアプリでは導入が検討されています。メリット・デメリット(移行や学習のコストと得られるメリット、その技術の安定性や情報量、最悪の場合にはすぐに取り除けるかなど)や各アプリチームのスキルセット・案件状況といったことが勘案されています。当然のことながら正解がある問題ではないので各プロダクトで実際にKotlinの導入を進めるかどうかの判断は今後異なってくるでしょう。各アプリに裁量が委ねられていることによってチームごとに状況に応じた柔軟な対応ができる一方、そうした状況だけが続けば各アプリ間の知識や技術力の格差が発生しかねません。ヤフーでは高い専門性を有する「黒帯」という役割の方が社内全体に向けて情報共有を行ったり、有志によるLT(ライトニングトーク)会や勉強会が頻繁に行われています。Enterpriseで社内のソースコード管理が行われているため社員であれば誰でも各アプリのソースコードを確認できます。ヤフーではこうしたちょっとした活動や環境の積み重ねがあることによって、極端な知識や技術力の格差はほとんどなしに各アプリが開発を進められているように思います。楽しくワイルドに仕事をする本記事ではKotlinという言語の紹介やヤフーでの新技術への向き合い方についてまとめてきました。数年前にヤフー経営陣が新体制になって以来「迷ったらワイルドな方を選べ」といったメッセージが社内で幾度となく繰り返されています。このメッセージは今現在も開発現場で当たり前に話されるメッセージとなっており、たとえ社内で利用実績のない技術であっても将来性や選択理由を明確にすることでチャレンジできるような雰囲気の中で仕事ができています。した雰囲気はヤフーで働く上での一つの特徴ではないかと思いますし、とても楽しく良いことだと思っています。それではこの辺で終了したいと思います。JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。JAPANのサービス開発を支える技術やデザイン、文化を発信しています。Reserved.このページの先頭へ。