現在JavaScriptの設定が無効になっています。このページを利用するにはJavaScriptの設定を有効にしてください。2017の6日目の記事です。一覧はこちらこんにちは。1年ぶりに記事を書きます。Androidエンジニアの森です。アプリの開発を行うかたわら、ヤフーの黒帯制度にてAndroidの黒帯としても活動しています。11月2日からサンフランシスコで行われたKotlinConfと、同月5日から行われた.droidconSFに、社内のトップカンファレンス参加支援制度を利用して参加しました。関係しているようで対照的だったこの2つのイベントについて、振り返ってみたいと思います。KotlinConfとはKotlinConfは、Kotlinにとって初めての公式グローバルカンファレンスです。Kotlinは2011年にJetBrainsから発表されたプログラミング言語で、2012年にオープンソースとなってからは、多くの開発者たちとともに開発が進められてきました。Machine)上で動作し、その簡潔さや安全性、Javaとの高い相互運用性から、急速に利用者が増えてきています。I/Oで、Androidの公式開発言語としての採用が発表されてからは、その勢いに拍車がかかりました。いま注目があつまっているKotlinのイベントですし、社内でもKotlinの導入を進めているところですので、良い機会だと思い参加を決めました。会場についてKotlinConfは、Pier27というサンフランシスコの埠頭で行われました。豪華客船が停泊することもある埠頭だけあって、広く開放感のある会場で、1200枚のチケットが完売しても移動に困ることはありませんでした。会場ではスポンサー企業のブースが開かれ、参加者にTシャツやヨーヨーなどのノベルティを配布していました。スポンサー企業の一覧を見ると、Google社のKotlinに対する期待がうかがえます。設備についてもすばらしく、部屋のどこからでも見ることのできる複数の巨大なスクリーンや、登壇者専用のカンペ用スクリーンなどが用意され、会場では巨大なビデオカメラで撮影されていました。ランチのメニューがKotlinのDSL風に書かれていたり、1日目の終わりにはマジックショーが行われたりと、細かなところまで気配りされており、参加者に楽しんでもらおうという気持ちの伝わるイベントでした。Kotlinは2011年の7月に発表された言語ですが、2015年頃から徐々に採用するサービスが見られるようになり、今年になってAndroidの公式開発言語への採用が発表されてから、利用者が爆発的に増加しました。したKotlinの若々しさを反映してか、これから導入を始める人や、初心者向けのセッションも見られました。内容についてはAndroid向けのものばかりというわけではなく、SpringなどサーバサイドでのKotlinの利用についても同じ程度ありました。意外でしたが、Kotlinでは既存のフレームワークもライブラリも問題なく相互運用できるため、Javaを使用しているのであれば、Kotlinの利用をためらう理由もありません。日本でもサーバサイドKotlinに特化したコミュニティも生まれていますので、今後はサーバサイドでの利用者も増えていくでしょう。Keynote一言で要約すると、「Kotlin/Anywhere」。どのプラットフォームでもKotlinを使おう、となります。Kotlin/JVMサーバサイドではKtorという、Kotlin製のWebフレームワークがリリース目前です。自由度が高く、Kotlinのcoroutineという非同期処理のためのメカニズムを簡便に利用できるよう作られています。個人的な感想ですが、自由度が高いというよりも提供する機能がコンパクトといったほうが正確なので、各種機能を提供するライブラリが増えるまでは、ピュアKotlinへの熱い思いと、DIY精神を求められるでしょう。SpringがKotlinをサポートしているなかで、Ktorをあえてつかう必然性はまだないかな...と思いました。PlayにアップロードされているKotlinを利用したアプリが2.5倍に増加しました。3.0からはKotlinプラグインがバンドルされるなど、GoogleのKotlinへの力の注ぎぶりがわかります。Kotlin/JSKotlin/JSについても発表されました。Kotlinをコンパイルして、jsファイルを出力することができます。KeynoteではReactのWebアプリを作るデモがされました。Projectサーバサイド、Androidアプリ、Webページと、さまざまなプラットフォームをサポートしているKotlinですが、これらプラットフォーム間でコードをシェアし、1プロジェクト内で各プラットフォームを完結させる仕組みも発表されました。Project」です。IDEAでは、プロジェクトを複数のモジュールで構成することができます。プラットフォーム間で共通のロジックを配置するモジュール(共通モジュール)をつくり、各プラットフォーム用のモジュールが共通モジュールに依存するようにします。共通モジュールは、プラットフォーム依存のクラスや関数を必要とした場合、それをexpect修飾子をつけることで、実装を省略したまま定義し、ロジック内で使用することができます。実装を省略したクラスや関数は、それぞれのプラットフォームモジュール内でactual修飾子をつけて実装します。することで、コンパイル時に、expectで省略した箇所の実装を注入しつつ共通モジュールのロジックを取り込むことができます。APIと各クライアントで共通化してしまえば、一貫性を維持でき、非常に扱いやすいものになるでしょう。1プロジェクト内にクライアントとサーバサイド用モジュールが共存することで、手軽にテスト用サーバを立ち上げてみるなどの利便性も見込めます。Projectの形式で作成されています。commonモジュールに共通のロジックが置かれ、common-jvmモジュールでは、JVM(Androidおよびサーバサイド)向けの実装を注入し、common-jsモジュールでJavaScript向けの実装を注入しています。Kotlin/NativeKotlin/Nativeについても発表がありました。Kotlin/Nativeは、LLVMベースのコンパイラで、Kotlinコードをネイティブの実行形式に変換するものです。Assemblyにも対応しています。Kotlinの世界にiOSも含まれるようになったわけです。先に挙げたKotlinConfアプリでも、iOS向けのアプリはKotlin/Nativeで作成されています。デモ用に作成されたSpinnerアプリでは、サーバサイド、Android、iOSのすべてがKotlin/Nativeで作成されています。セッション・ピックアップKotlinConfで面白かったセッションを、いくつかピックアップします。各セッションはすでに動画が公開されていますので、視聴する際の参考にしていただければと思います。Kotlinに詳しくなるここに挙げる3つは、Kotlinについてもっと詳しくなれるセッションです。JVM向けのKotlinコンパイラは、Kotlinコードをclassファイルに変換します。そのバイトコードから見た時、Kotlinの言語機能はどんなコストを支払って実現しているのかといったことを解説してくれます。ExposedKotlinの型システムについて、その詳細を解説しています。Nothingの関係や、Read-Onlyなコレクションをどうやって実現しているかがわかります。Implementation複数の実装方法がある場合の、選択の指針がわかります。自由な書き方のできるKotlinでは、ある処理を行いたい場合に、複数の実装方法があることも珍しくありません。した場合の具体例と、どれを選べばいいかを解説しています。20}のように、プロパティで行う方法が考えられますが、バイトコードに変換されたとき、どう違ってくるのかといったことなどです。let/run/apply/with/alsoといった、いわゆる「スコープ関数」の使い分けについても触れています。FeaturesKotlinのNull安全や第一級関数といった言語仕様が、どのようなバイトコードに変換され、実行時のパフォーマンスにどう影響するかをベンチマーク結果をもとに解説しています。パフォーマンスが求められる場面での参考になるでしょう。Culture」でした。SNS管理サービスであるHootsuiteが、Android向けアプリにKotlinを導入した経験をもとに、どう社内に布教していったかなどを解説しています。Development)という作り方をしています。サービスの機能が、ライブラリというかたちでアプリに提供されており、ライブラリをつなぎ合わせてアプリをつくります。各ライブラリはそれぞれリポジトリを持ち、異なるチームによってメンテナンスされています。することで、ライブラリ単位でKotlin化するなど、変化に対して柔軟に対応できます。修正がライブラリ内に閉じられることで、メインアプリのコードベースに影響を与えません。これによってたくさんの小さなチームに分断されますが、Hootsuite社では、もともと各分野において、ギルドという社内の有志で構成される、自然発生的なコミュニティがあり、その分野での指針や規約、学習といったことをおこなう文化があったので、Kotlinギルドがチームをまたがる水平的なコミュニケーションレイヤとなったそうです。Papers)も、ギルド内でブレストが行われたものです。ライブラリ駆動開発を導入するなら、Hootsuite社のように、社内横断的で開かれたコミュニケーション文化も必要となるでしょう。Culture楽しいここに挙げる2つのセッションは、発表内容もさることながら、その発表形式が面白かったものです。どちらの発表もスライドは使わず、ずっとIntelliJの画面を映しており、内容はそこに書かれていました。Kotlintown」はKotlin初学者がつまづきやすい文法について解説します。IntelliJの画面を映すことで、コンパイラエラーの発生箇所が赤い波線で表示され、それが修正される様子がわかりやすくなっています。Kotlinの標準APIの実装がどうなっているかなども、IntelliJの実装クラスへのジャンプ機能ですぐに見せることができます。Puzzlersは、Kotlinのごく短いコードを画面に映し、その実行結果を参加者に予想させ、答えはその場で実行してみせるという形式でセッションが進んでいきます。意地悪な問題なので、Kotlinについて相当詳しくないと、全問正解はできないでしょう。-4このセッションは聴講者参加型の形式であり、また問題の難解さもあって、とてもおもしろかったです。上にあげた問題の答えはあえて書きませんので、実際に動画で確かめて(24分頃です)みてください。Puzzlers.droidconSFKotlinConfについてはここまでにして、.droidconSFに話を移します。.droidconSFは、Droidconのひとつです。Droidconは、Androidでは世界最大のカンファレンスネットワークで、2009年にベルリンで開催されて以来、世界各地で開かれてきました。ここ数ヶ月の間にも、サンフランシスコの他にニューヨーク、ロンドン、北京で開かれています。Droidconは知名度の高いカンファレンスであり、サンフランシスコで開催されるとあって、近郊にオフィスのあるGoogle、Facebook、Square、Twitter、Pinterestといった名だたる企業からの登壇者も多く、非常にレベルの高い話が聞けそうだということで参加することにしました。Centerという、カリフォルニア大学サンフランシスコ校の、メディカルセンターにあるカンファレンス会場を借りて行われました。KotlinConfよりはやや狭い会場に多くの企業ブースが置かれ、さまざまなノベルティが配布されていました。Pi3を配布したり、SquareがCodelabでクレジットカードリーダーを配布するなどしていました。各セッション会場は、KotlinConfと比べるとやや狭いものでしたが、同時間帯に4~6ものセッションが開かれるため、よほど人気のセッション以外では人で一杯になるということはなく、むしろアットホームな雰囲気のなかでリラックスして聞くことができました。セッションの内容はすべてAndroidに関するものです。初心者に向けたものはほとんど無く、Dexファイルを分解し、解析し、最適化したうえで再生成するなど、底知れないものもありました。他にも、遅くなってしまったビルドをなんとか高速化する話や、スパゲッティコードを何とかする話など、Androidがうまれて9年たち、そろそろ溜まってきた負債について向き合う時期であることを感じさせるものも複数見られました。Guyによる、中の人から見たAndroidの歴史が話されました。当初のエミュレータは、HTC製の実在する端末をベースとしており、80MHzのCPUに32MBのRAM、QVGA(320x240)の画面解像度でした。XLが8コア2.45GHz/1.9GHzのCPU、4GBのRAM、2880x1440の画面解像度であることを考えると、隔世の感があります。そのほか、標準APIとサポートライブラリのFragmentのフラグメンテーションなど、興味深い話を聞くことができました。Academyで公開されています。セッション・ピックアップ.droidconSFで面白かったセッションからいくつかピックアップします。動画は公開されておりませんが、いずれ公開されるでしょう。スライドが公開されているものについてはリンクをつけます。ビルド高速化ビルドを高速化するための、具体的な設定方法です。具体的な設定方法を解説しているのでとても実用的ですし、動画が公開されていなくても、スライドだけでも内容を把握することができます。テストの並列実行やR8コンパイラの適用は効果的です。Gradle社は製品としてGradleを作っており、ビルドツールにとって速度は重要なファクターですから、ビルド速度向上に力を入れています。そのため、最新のバージョンを使うようにしましょう。.droidconSFから離れますが、同じ発表者によるMultidexとなってしまったアプリを、Singledex化する話も参考になります。AgainセキュリティAndroidのセキュリティについては、「誰かに壊される前に自分で壊してみよう」というものと、「Androidのセキュリティは、今や安全になっている。危険というのは神話にすぎない」というものがありました。セキュアに実装されていない箇所を指摘してくれるプラグインや、ペネトレーションテストの方法なども紹介されており、実用的です。DataFacebookFacebookでは、Androidの公式のビルドツールを使わず、buckという独自のビルドツールを作成してapkを作成していたり、ReDexという、Dexファイルの最適化ツールを作っていたりなど、あまり他社がやりそうもないことの紹介をしていて、興味深い内容となっていました。このうちReDexでは、有名なAndroidエンジニアも聞きに来ていて、意地悪な質問を投げかけていたのが印象的でした。You海外のカンファレンスに行こう海外のカンファレンスというと、お金がかかるのではと考えたり、英語だからと気がねして、参加をためらっている方もいるかもしれません。最新の情報をキャッチアップできるだけでなく、世界でもトップレベルの企業がどんな課題をもち、取り組んでいるのかを垣間見ることができ、また最高峰のエンジニアたちがその辺を歩いているなかに身をおくことができ、普通に話しかけることさえできます。これほど贅沢な環境もありません。なにより、自分のモチベーションを高めることができます。皆さまも、海外のカンファレンスに行く機会があれば、迷わず参加してみてください。JAPANにはトップカンファレンス参加支援制度があります。JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。JAPANのサービス開発を支える技術やデザイン、文化を発信しています。Reserved.このページの先頭へ。