Xamarin.AndroidのN previewとJava8サポートについて

Google I/Oが近づいていますが、それに先立ってAndroid N previewが公開されていますね。既にpreview 2で、今後も5週間ごとにプレビューが出続けるというので、最新版Androidへの対応もだいぶやりやすくなったなという感じです。

そんなわけで、Xamarin.AndroidのMono.Android.dllも、OSS版xamarin-androidとXamarin.Androidの最新preview版は、最新のN preview 2まで対応しています。

Android N APIの最大の特徴は、Java8に対応したことですが、Xamarinユーザーにとっての恩恵はほぼ無いでしょう。

恩恵は無いのですが、Java8サポートは極めて難しい問題をもたらしました。インターフェースのデフォルトメソッドです。当初、N preview 1が登場した後、Mono.Android.dllはこれらについてもメソッドを生成していました。しかし、C#Javaとは異なり、デフォルトメソッドをサポートしません。当然ながら、インターフェースで定義されたメソッドは実装しなければならないことになります。Javaではこれは「やってもいいし、基本やらなくていい」ことなのに、C#になったとたん「やらなければならない」ことになるのは大変です。Java.Util.Iteratorなど、ごく基本的なインターフェースに、突如大量のメソッドが追加されて実装しなければならなくなったわけです。しかしインターフェースでAPIを定義しないと、誰も実装をオーバーライドできないことになります。

しばらく考えましたが、これはいくら何でもメソッドを追加するわけにはいかない、ということで、今のところ、デフォルトインターフェースメソッドは生成しないことにしました。通常のインターフェースメソッドでこういう「省略」を行うと、アプリケーション開発者がバインディングクラスの派生クラスを定義した時に生成するAndroid Callable Wrapper (ACW)が必要なインターフェースメソッドを生成せず、javacがコンパイルエラーを起こすことになるわけですが、インターフェースデフォルトメソッドの場合には問題になりません。

必要であれば、多少ややこしいコードを書く必要がありますが、手作業で追加することも一応可能です。

この辺は、OSS版xamarin-androidのrepoでRFC状態になっているので、何かしら意見があれば書いておいて下さい。

Java 8 Interface Binding · Issue #25 · xamarin/java.interop · GitHub

個人的には、まだどこにどう需要が出てくるかわからない現状で、中途半端なバインディング生成機能を実現したくない派です。現状ほぼメリットないし。

ちなみに、Android SDKでJava8が必要となるソースをコンパイルする際には、javacではなくjackという新しいGoogleコンパイラーを使用する必要がある(ということになっている)ことになっているのですが、

gfx.hatenablog.com

Xamarin.Androidが内部的に生成するコードはJava8の文法を使用しませんし、Java8のjavacをそのまま使っていても問題ないはずです。

JavaバイトコードをDalvikに変換するdx(dx.jar)には、--no-strictというオプションがあって、これを指定しないとJava8のバイトコードは拒絶されてしまうのですが、Xamarin.Androidでは内部的にこれを指定してdxを呼び出しています。

また、java8が問題になるのはproguard(およびそれを内部的に使用するmultidexのツールmainDexClasses)で、この古いツールはJava8に対応していないので、Xamarin.Androidではproguardの使用が指定されていたら、Java7にフォールバックします(実のところ、proguardの中身をいじって、参照されているデフォルトメソッドも全部スキャンするようにしてしまえば良いわけで、それほど対応が難しいとは思えないのですが、Googleはjackへの移行を促進するために政治的に非対応にしているんじゃないかと邪推しています)。

以上、インパクトがありそうでない、ちょっとしたXamarin.Android小ネタでした。

Xamarin Workbookの起源とインスタント実行の系譜

しばらく前、2月の半ば頃のことになりますが、MiguelがThe Evolution of Interactive C#というブログポストを投げていました。

The Evolution of Interactive C# - Miguel de Icaza

奇しくもわたしがDroidKaigi 2016でInstant Runについてのセッションを行う直前に公開されたもので、まあ幸い誰も気づかなかったと思いますが、完全にセッションのオチのネタバレだったんですね。 どうネタバレだったのかはスライドの最後の方を見てもらえれば分かると思いますが、

speakerdeck.com



最後に触れているContinuous Coding、けっこう新しいネタだったので、誰も知らなかったと思いますが、先のMiguelの投稿でも触れられているんですね。

(そういえば、このセッション資料、先日のGoogle Developers Summit TokyoでもGoogle Japanの人に紹介していただいたそうです。インスタント実行とは関係のない文脈だと思いますが、いずれにしろ役に立つネタで良かった^2)

さ て、先の投稿でWorkbookについて言及していることに気付きましたか? 実はシークレットでも何でもなかったんですね。まあ、せっかくなので、Miguelが書いたネタを日本語でなぞってみようと思います。

Xamarin Evolve 2014で発表されたXamarin Sketches、皆さん覚えているでしょうか?

atsushieno.hatenablog.com



Sketches はIDEのpane上に描画されたREPL環境で、XcodeのPlaygroundによく似ていますが(と言ってもそれを誰でも使えるかたちで実現した のはXamarinが先なんだよね、みたいな話は↑のエントリで説明してあります)、この時のcanvasは確かXamarin.Macがベースになって いて、Miguelはこれを「みんなが実際にやりたかったことは、単独のスケッチを実行することじゃなくて、アプリケーションを実際に動かしながら描画す ることだったから、あまり便利じゃなかった」と回想していますね。そして、それで作られたのがXamarin Inspectorだった、というわけです。

blog.xamarin.com


Inspector は、その名の通り、UI要素の内容をinspectするために作られたものですが(それ自体はTest Cloudの要素でもあるXamarin.UITestや、そもそもAndroid SDKにはhierarchy viewerなんかも同じですね)、その内容を動的に書き換える機能もREPLの統合によって実現しています。Inspectorが面白いのは、UI要素 をクエリする部分と描画する部分を切り分けていて、描画する部分は基本的にHTML Canvasでやっているんですね。

https://developer.xamarin.com/guides/cross-platform/inspector/Images/mac-3d-view-small.png



Inspectorはまだプレビューですが、基本的にこの辺りのプロジェクトは全て繋がっているわけです。

ところで、ハッカーの皆さんには割とよく知られていると思いますが、Jupyter Notebookというプロジェクトがありますよね。

Try Jupyter!


Jupyter Notebook、かつてIPython Notebookとして公開されていたプロジェクトですが(Miguelの先の投稿でIPythonって書いてあることに気付きました?)、まあ、要する に、これらは皆同じ「markdownの中に埋め込まれたREPL」の系譜です。Workbookの発想そのものは、特に新しいものじゃないんです。

Xamarin Workbook、面白いので、みんなこれを使ってドキュメントを書くといいと思います。と言いたいところなんですが、Workbookは Inspectorの一部で、Inspectorはオープンソースじゃないんですよね…まあ、コードが実行できなくても、サンプルコードフラグメントがド キュメントに含まれていて、それが実行可能だというのは有用なので、手元で動かせればいいという人はぜひ使ってみて下さい。

この Workbookも、Continuous Codingも、基盤として使用しているのはInspectorです。特にContinuous Codingはソースが公開されているので、使おうと思えば誰でも使えるということがみてとれるかと思います。けっこう夢がひろがりんぐだと思いませんか? (無理ですかそうですかそうですね。。)

アンカンファレンスやろう

Xamrin Evolveが再来週に迫ってきましたね。

https://evolve.xamarin.com/

参加される皆さんどうぞよろしくお願いします。

 

まあそんな人はほぼ皆無だと思うわけですが、日本ではde:codeの前夜祭のようなものがあって、de:code参加者でなくても参加できるそうなので*1、前回書いたようなゲリラ(非公認)ミートアップのようなものをここでやりましょう。*2

connpass.com

アンカンファレンスって何?

アンカンファレンスというのは、セッションのように誰かが1人だけ発表して他の人はそれを聞くだけ、みたいな退屈な時間ではなくて、誰かがトピックを持ち込んで、それについてみんなが会話に参加するかたちで作っていく、単なる雑談の場よりはもう少しオーガナイズされたミートアップのようなものです。

プロジェクターがあるのでスライドを見せながらしゃべることもできますが、1人でしゃべっているだけだと単なる短いセッションで終わってしまうので、それは用意しても手短に、あるいは画面を共有するに留めるのが良いでしょう。わたしは基本的にスライドみたいなものを用意するつもりはありません。(Webページをみんなで眺めることはあるかもしれませんが。) 質疑応答が活発であれば、それで終わるかもしれませんね。

まあ先着順のようなので、そもそもその場でアンカンファレンスにエントリーできるかどうかは当日にならないとわからないのですが、わたしがいることには変わりないので、何かしらの場が作れるだろうと思います。15分で終わらなかった話をテーブルの外で続けてもいいですしね。

*1:かく言うわたしもde:codeには参加登録していませんし

*2:すぐに人数がいっぱいになったらどうしようと思ってちょっと待っていたのですが、その懸念は必要なかったようですしね。

Xamarin is going to be open to Everyone

Microsoft Build 2016 2日目のキーノートで、MonoランタイムがMITライセンスに変更され、Xamarin Runtimeと称されるXamarinプラットフォームの部分がオープンソース化されることが発表されました。

blog.xamarin.com

今後数ヶ月、おそらくは来月のXamarin Evolveまでに、何かしらの成果が公開されるのでしょう。Buildから1ヶ月もしないうちにXamarinオンリーイベントとか、まあまさかもう動かせないしやるしかないって感じですね。ちなみに参加が危ぶまれていたわたしですが、何とか行けることになったので、現地に赴かれる酔狂な皆様もある意味ご安心下さい。(?)

(XamarinがVSに…云々は、ここではどうでもいい話なので、そういう話はそういう方面のコミュニティを眺めて下さい。)

monoランタイムがMITライセンスになると、Unity(3D)のような製品が、ライセンスを気にすること無く、既に組み込みLinux環境に最適化されたmonoを、改変ソースを公開せずに使用できるようになります。(ただし、Unityで使用されているmonoランタイムは、本家monoにかなり手を加えたものであり、かつかなり昔のバージョンをもとにしているはずなので、最新版のmonoにすんなりアップデートするということはないだろうと思います。) .NET Coreも既にクロスプラットフォームで動作しますし、.NET MicroFxという選択肢もありますが、いま.NET Coreを選ぶのは、長期的な計画でもなければかなりチャレンジャーであることは否めませんし、minimized runtimeやstable embedded APIを期待している人は、まだmonoを選んだほうが良いかもしれません。この辺は、それぞれの特性や自分の計画を踏まえて選ぶのが良いでしょう。

ランタイムがMITライセンスに変更になったのは、もちろんMonoチームがもはや組み込みライセンスビジネスで生きていく必要がなくなった(Microsoftエコシステムの一部として開発していく)ことから実現したものです。

そしてXamarinプラットフォームのOSS化。ついにこの日が来てくれた、という感じです(まだですけど)。

いずれはLinux環境でも利用可能になり、全てとは言わないまでもコア部分だけでもオープンソースの環境として公開し、アプリケーションが開発できるようになってほしい、と思っていましたが、とうとう実現しそうです。

公式ブログには、アプリケーションをビルドするために必要となるツールとライブラリ一式がOSS化される、とあります。もちろんMicrosoftは全てをオープンソースに捧げているわけではなく、Visual StudioなどのIDEに統合する部分を、引き続き製品の一部として(のみ)提供していくわけで(ちなみにXamarin Studio for Windowsは無くなります。もちろんMonoDevelopは引き続きOSSです)、その部分はクローズドソースで収益源になるようです(その辺はFAQを見てもらえればと思います)。

ソースを書いてアプリケーションをビルドするための、最小限の環境は提供するから、IDEに頼りきらない開発者は我が道を切り開いて歩いてくれ、ということです。面白い。受けて立とうじゃないか。われわれは.NET Framework SDK Toolsしか無いような環境でも生き延びてきたんだぜ。(って自分が中の人だったことを忘れるところだった…)

個人的にも、自作のライブラリなどをiOS/Androidで展開する時に、商用製品を買ってもらわないとcontributeしてもらえない事態には、忸怩たる思いがあったので、これで誇りをもって開発していくことができます。

オープンソースで.NET開発を推進してきたMonoが、Xamarinになってクローズドソースの製品を売り続けてきたのを、Microsoftが買収してオープンソースにして公開するというのは、歴史の皮肉とも言えますが、実に面白い展開になってきましたね。

面白いといえば、JetBrainsとUnity3DとRedHatが.NET Foundationにjoinするというニュースもなかなかのインパクトだと思います。Riderもプレビュー版が公開されたばかりなので、JetBrainsが、Javaで書かれたIDEに.NETをどう組み込んで統合していくか、見ものですね。わたしが彼らに大いに期待しているのは、.NET Core統合の実現です。RedHatLinux環境で.NET Coreの普及を促進していくための協業をどう展開していくかですね。Unityは、まあ言うまでもないでしょうけど、最適なランタイムを実現するための選択肢が広がって、近くない将来の見通しは良くなったのではないかと思います。

Build1日目のUbuntu組み込みの件も含めて、今回のBuildには面白いネタがたくさんありましたね。日本でも5月下旬のde:codeでいろいろ紹介されると期待しています。わたしは今のところ参加する予定はないのですが(どういう身分になっているのかすら何も決まっていないし!)、この辺に関心のある人が集まる日々になるので、何かしら集まって話せる機会を設けたいところですね。

長かったこれまでと、分からないけど楽しみなこれから

今回は振り返り無駄話です。

もう遡ること13年以上前、初めてmonoにパッチを送った時のことを、今でも覚えています。実のところ、monoのML(当時はmono-listしかありませんでした)には当時のアーカイブがあるので、今でも見ることが出来るんですね。 http://lists.ximian.com/pipermail/mono-list/2002-October/008988.html

.NETは、2002年当時のわたしにとっては、オープンソース開発の世界における脅威でした。

.NET Frameworkを知ったのは、仕事でWindowsアプリケーション開発に初めて関わってほどなくのことでした。当時はJavaのコードを書き始めて半年くらいだったと思います。C++VBじゃない、Java並に簡単な言語でGUIアプリまで作れてしまう、その大きな可能性に魅了されましたが、同時にこれがWindowsでしか動作しない、プロプラエタリな開発環境であることは、わたしの目には大きな脅威として映りました。

わたしが職業エンジニアになったのは、ついうっかりのようなものです。当時のわたしは、大学で知財法制に無駄に詳しくなった後、その非論理的な制度設計に嫌気が差して*1、自由なソフトウェア(まあ正確にはオープンソースですが)の世界に魅入られており、この.NET Frameworkのような開発環境がオープンソースで存在すればいいのに、と思っていたのでした。.NETはECMAで標準化を図っていましたが、それはもう完全にJavaの標準化プロセスに対抗しているように見えました。だいたい技術標準だというのなら、実装が2つあるべきじゃないか。他に実装もないのに、何が標準化だ、と。

…そして、monoを「発見」したのです。

当時、monoは始まってから既に1年弱が経過していたと思います。その時点で、既にmcsでコンパイルしたコンソール アプリケーションをmonoランタイムで実行できるようになっていました。mcsはC#で書かれていて、セルフホストしておらず(mcsでmcsをビルドできるほど完成しておらず)、Windows上でcscを使ってビルドしなければなりませんでした。

そんな状態のmonoでしたが、さまざまなドキュメントが既に存在していたので、とりあえずそれらを日本語訳するところから始めました。MLにも登録して、眺めるようになりました。MLを眺めているうちに、Miguel de IcazaがXML DOMのAPIが足りないから実装してくれ〜、みたいなメッセージを投げたのを見て、えっ、そんなのも無いの?…と思って、ソースに手を入れはじめたのが、最初の一歩でした。(ちなみに書いたコードはいい加減で、間違って彼だけに送ってしまったら「すばらしい! ちなみにテストを書いてくれ!」みたいな返事が来て、初めてテストなるものを書いてみたら、全く期待通りに動かなかったのでした…)

当時、monoチームには日本語を話せるDuncanというハカーがいて(というか今でもXamarinにいるのですが)、彼といろいろ日本語で会話しながら、いつの間にかmonoの開発チャットに出入りして、カタコトの英語でやりとりできるようになったのでした。誰が誰だかは当初全然わかりませんでしたが、あのmonoを毎日作っている連中です。すげー!と思いながら、同時にとても追いつけない量の会話を流し見しながら、参加していたものでした。

1年ほど経って、わたしが転職を考えていた時、その話をそのDuncanにしたら「じゃあうちで働きなよ!」みたいなことになって、翌日Miguelから「何ドルで働く?」(うはhドルかよ!) 「Novellに統合されたら人を雇えるから来いよ」みたいな話が来て…それでmonoチームに入ることになったのでした。

そんなわけで、会社に入ったのはNovellになってからなのですが、Ximianは近くでずっと見ていましたし、完全にNovellとは別の指針で動いているXimianの一員として仕事していました。MiguelとNatの2人が始めたベンチャー企業が、Novellという大企業に買収されて、それでも(エンジニアの目に見える範囲では)あまり変わらない体制でGNOMEとMonoを開発していくのを、9年近く見てきました。

MonoとNovellの話は(今日は)どうでもいいのでした。今日は.NETの話を書きたい。

.NET Frameworkが猛威を振るっていた(ようにわたしに見えていた)のは、Microsoftが.NET 2.0をリリースして、並行して次世代.NETでWinFXと呼ばれる「全てがマネージド」の世界を構築しようとしていた頃でした。大量のマネージドコードのプロプラエタリなフレームワークが、うっすらとしたECMA CLIの上に悪夢のように覆いかぶさって、せっかくASP.NETが動くようになったLinuxが、また.NET開発の一線から遠ざかってしまう。何とかして対抗しなければならない。そう思いながらMonoの機能を拡張していたのでした。(まあそれはわたしの話であって、他のメンバーには当然ながら各々の思想があります。)

結果的にWinFXはだいぶ縮小した存在になり、WPFもWFもしばらくは大規模に使われず、WCFは出来るとみて着手することになったので、そういった懸念は概ね杞憂に終わったのでした。

その頃から、Microsoftの開発の潮流に変化が見え始めます。(WinFXの反省だったのかな、とわたしは勘ぐるのですが、)新しい.NET 3.5の開発からは宣伝的な文句は消え、Linqなど質実剛健な機能拡張が行われるようになりました。オープンな技術標準を目指したIdentity Metasystemのコンセプトとともに、Infocardが登場しました。ASP.NETの中核となるMVCオープンソースで公開され、ほどなくいくつかのコンポーネントオープンソースで公開されるようになっていったのでした。その後も、IronLanguages、Reactive Extensions、Roslyn、そして.NET Coreと、NET Framework (referencesource)、VSCodeと、オープンソース指向で開発していくMicrosoftの姿勢は、もはや揺るがないものになりました。

このオープンカルチャーの契機となったASP.NET MVCをリードしていたのが、今回の買収の結果、Xamarinチームを配下におさめることになった、Scott Guthrieです(今はAzureチームのトップですね)。彼はMiguel、Natの2人とは長く交友関係にあって、XimianのMonoチームがNovellレイオフされた時も、いろいろ出来る範囲で手助けしようとしてくれたそうです。今回の統合は、ごく自然に成り立ったと言えるでしょう。"married" と表現している人も少なからずいました。

今回の買収は、MiguelとNatの2人にとっては、2度目の大成功ということになります。Xamarinの立ち上げは容易なものではありませんでしたが(その辺はXamarinの2年半を振り返るを見てもらえればと思います)、今回このゴールのひとつに到達できて、わたしは、期待されていた、あるべき結末を見た思いになりました。

MiguelがECMA標準をもとにMonoを始めてから約15年。MonoはXamarin製品の中核であり、まだまだ使われていきますが、大きな節目を迎えたとは言えるでしょう。Nadellaの新生Microsoftの傘下に加わったXamarinが、これからMicrosoftと一緒に、Monoが築いてきたエコシステムをどう発展させていくのか。おそらくは中の人として、今後も見続けていきたいと思います。

*1:その辺は http://d.hatena.ne.jp/atsushieno/20070813/p1 にあります

DroidKaigi2016セッションと資料にまつわるあれやこれや

2/18-19のDroidKaigiで、Android Studio 2.0のInstant Runについて話してきたので、少しその補足というか背景とかを書いておこうと思うます。

(DroidKaigi自体はいろんな人といろんな話ができてちょう面白かったのだけど、これじゃただの小並感なのでその辺は他の人にお任せです。)

 

speakerdeck.com

DroidKaigiは、2015には一応CFPにXamarinネタを投げてみたけど採用されず(CFPにも「とりあえず使い方から.NETっぽいリアクティブなコードとか書くよー」とか適当なことしか書いてなかった)、参加申込も寝て起きたら瞬殺で終わっていて、結果的にノータッチだったのでした。

今年も当初は参加予定すら無かったのだけど、CFPがそれほど集まっていなくて、たまたまInstant Runの調べ物をしていて、これくらいなら軽くしゃべれて、新しいモノ好きにはウケる話かなーと思って、投げてみたら通ったという感じでした。(最終的にはえらい数のCFPが届いていましたが。)

今回はまずそれなりのストーリーラインがほしいなと思い、まずスライドの下地となる話をちゃんと書こうと決めました。それが最終的にはコレです。

qiita.com

多分それなりに長期的に役に立つ読み物になるんではないかと思います(自己評価)。

実のところ大半は3ヶ月くらい前にgistでまとめてあったのだけど、とりあえずDroidKaigiまで待ってから出すことにしました。インスタント実行の部分 (Part III)をどうするか決めていなかったためです。

この部分は、実のところちゃんと調べないと分からなかったので(今でもだいぶうっすらとした情報量のはず)、話に入れるかどうかも決めていませんでした。30分しかなかったし。割と直前まで迷いました。ただ、ビルドの話だけにするとどうしてもオチが弱かったので、それならInstant実行のあるべき姿をプッシュする方が面白いかなと思って、滑りこませることにしました。Xamarin関係の言及が多くなってしまったのは、完全に副作用です。仕事でもないのにわざわざ宣伝なんてうんざりだし。Continuousがオープンソースでなければ完全にカットするところでした。

DroidKaigiではInstant Runおじさんとか言われたりしてたけどw、あれ自体にはあんまし思い入れはない、というか普段はXamarin Studioで日々fast deploymentしているわけで、自分にとっては新しくないわけです。ついでに言えば、YAPF(横浜Androidプラットフォーム部, 当時)で Xamarin.Androidの話をした時にその基本的な仕組みをちょっとだけしたこともあるので、実はInstant Runの基本的な仕組みは、ごく一部の(?)Androidersにとっては、完全に新しい話ではなかったりします。Android SDKが追い付いてきて、お、やったね?という感じです。

(ちなみに、従来の Xamarin.Androidのfast deploymentでは、dllの変更はすぐに反映されるけど、生成されるACW(java interop部分)に変更が生じると、Javaビルドタスクが実行される→APKが生成される→再インストール、となってfast deployment効かないじゃん!ってことになっていたので、最近はその辺を改善する仕事をやっていたのでした。*1

まあ仕事中に得られた知見は発表のごく一 部にしか活かせず*2、基本的には仕事と無関係なJavaとGradleの調べ物の産物です。

セッション全体的には、しゃべりがちょっと早すぎたかな?とは思ったものの、まあ内容がやや詰め込み気味だったのでいたしかたなく(だいぶ削ったのでした)、伝えるべきことは伝えられたかと思います。

…次回、DroidKaigiかは分かりませんが、似たような機会があったら、また.NETやXamarinとは全く無関係な調べ物と話をしたいですね。

*1:2/20に初登場したアルファ版 では、アプリケーションのcsproj に<FastDeploymentType>Assemblies:Dexes</FastDeploymentType> というプロパティを追加してやると、その辺が機能するわけですが(今こっそり隠し機能を暴露した!)、くだらない政治的な紛争の結果、この辺はまだ リリースノートにも載っていません(!)。秘密ってほどのことではないけど

*2:Bazelに似たようなコードがあることを教えてもらった程度。Instant Runの発表直後にそんなの見つけてくるmonodevelopハカーこわい

お知らせ.bat

まだあったのか!という感じのこのhatenablogですが、今年もよろしくお願いします。

今回は(も)ざっくりお知らせです。

.NET Platform Standard日本語訳

まず、githubdotnet/corefxのリポジトリに、.NET Platform Standardというドキュメントがあって、これが.NET Coreの目指すプラットフォームの標準化について説明しています。これは将来の.NETの標準化の動向に大きく影響する内容で重要だと思うので、日本語訳を作ってみました。

https://gist.github.com/atsushieno/7056f56ce4cfd01e0239

ちなみに内容の80%くらいは、以下の岩永さんのスライドで分かりやすくまとめられているので、先にこっちを見て概要を掴んだほうがいいかもしれません。(というか、ここで言及されていないのはBait and switchの詳細とかガードレールの存在くらいかも。)

docs.com

JXUG #10 XamarinでのNuGetとCIを極めよう

次。ひさしぶりにJXUGでXamarinネタをしゃべります。

jxug.connpass.com

今回はトピック指定で来ましたので、NuGetを使う話です。まあ、NuGet自体の話はあんまり語ることがない(と思う)ので、PCLを絡めて、Xamarinで使うようなパッケージってどう使う / ビルドするといいの?みたいな話をしようと思います。(NuGetの使い方だけ何十分もひたすら聞きたい人なんて居ないよね…?)

で、PCLでライブラリを作る話ですが、最後に2014年5月にこの記事を書いてからもう2年経とうとしているわけでして*1

www.buildinsider.net

この間にいろいろアップデートがあったので(とは言ってもPCLの基礎はほとんど変わっていないという認識ですが)、その辺を反映しつつ、モダンなクロスプラットフォーム開発はどうなっている・どうなっていくのか、という方向性で話をしたいと思います。(上記の日本語訳は、そのためのものだと思ってもらえればと思います!) まあスライドはまだ1枚も書いていませんけど。

Instant Runを実現する仕組み at DroidKaigi2016

もうひとつ、セッションが確定したら書こうと思っているうちに参加人数がいっぱいになって告知する意味が全然なくなっちゃったDroidKaigi2016の1日目(2/18)に、Android Studio 2.0 Previewの新機能Instant Runについての話をします。Xamarinは無関係です。基本的には()

droidkaigi.github.io

Instant Runはパッと見では「何でそんなこと出来ちゃうの?」って思えるような不思議な機能ですが、この辺の黒魔術がどのように実現されているのか、掘り下げて解明していく話をしたいと思います。詳しくはまた事前にリークするかも。しないかも。

CFPには書いたのですが、Instant Runのソースは公開されていないので、おそらく推測で話すことになるでしょう。まあ、それなりの傍証がある、確からしい話をするつもりではあります。既にDroidKaigiに登録しているラッキーな人で、もし興味が湧いてきたら、ぜひ聞きに来て下さい。

*1:これ、公開されたのは5月なんですが、大部分はその前の冬休みに書き上げていたんですよね…