ナカザンドットネット

それって私の感想ですよね

FluxにはModelがないのではないかと思った覚書

Fluxを使い始めると「おっ、MV*に比べて頭が悪くても状態が壊れないぞ?」という感想になる人が多いと思うんだけど、その理由がふたつあるような気がしてきた。

ModelやViewModelについてはコンテキストが違う人から「それ違くない?」と言われそうな書き方になるかもだけど、思いつきを書きなぐってるだけなので勘弁してください。

1. 単方向データフローが分かりやすく、コードの複雑さの低下に寄与している

これは全くポジティブな要因。

2. FluxはMV*のModel相当の要素が図に含まれていないので考えることが減った

MV*は「Modelって書いてあるからには何かをModelと呼んでデータを突っ込まなきゃいけない」という意識が生まれやすかった(その責務分割が適切だったかは別として)と思う。

でも、FluxにはStoreとかいうViewModel*1みたいなものしかない*2と私は思っていて、MV*でModelと呼ばれていたものを定義させようとする意図は感じられません。

結果的に、Modelについて書いてないので考えるきっかけがなくなって、必要な脳内メモリの量が減った結果、「頭が悪くても〜」という感想になるのではと思いました。

文脈

文脈としてはこの辺の話から来ています。

まとめ

MV*はModel内の設計について定義していませんでしたが、FluxはModelの存在自体を私たちに押し付けてこない子なのでは、と思い始めました。Model相当のものがなくていいわけがないのですが、単方向データフローが強力すぎて、Model相当の部分があやふやでも、みんな何とかなっちゃってるんじゃないかな・・・*3

Model相当の部分を設計したFlux、業務で色々と試してみているので、どこかのタイミングで布教していきたいです。

補足をいただきました

この記事の本質を言語化し直してくれました。

nekogata.hatenablog.com

うん、StoreとVMの話は余計だったなという気持ちはあります。

おまけ

DroidKaigi 2018でベノワさんが紹介していたModel-View-Intentは限定的ながらModel相当の部分(Repositoryとか)にも言及している単方向データフローで、Fluxの単方向データフローしか見たことがなかった私にとってはかなり学びがあったので、興味があれば見てみてください。

speakerdeck.com

www.youtube.com

*1:VMを持ち出すと文脈がぼやけてしまいますが、Presentation Domain SeperationにおけるPresentationの中にいるということだけ伝わればOKです。

*2:StoreがViewModelに見えているのは僕の主観です。Modelだと主張したい方の思想を否定するものではありませんので、異論反論はご自身の主張を自分のブログか何かで展開してください。それはそれで僕も読みたい。

*3:Fat Controller相当のものがAction CreatorやReducerの中に増殖して見通しが死ぬほど悪くなったコードをたまに見かけるし書いたこともあります。

#技術書典 #技術書典4 参加してきました(電書&紙の再販情報アリ)

f:id:Nkzn:20180423164947j:plain

というわけで技術書典4に参加してきました!

経緯や意気込みは下記の通り。

blog.nkzn.info

blog.nkzn.info

ざっくりなにしてたの

実は、サークル参加とは別にスタッフやってました。朝6時に起きて、設営作業をしたり、見本誌の確認とかさせてもらってました(ここの人数が足りなくて駆り出された部分が強い)。

とはいえ11時にはリリースさせていただきまして、自分のサークルのほうに戻りました。スペースの設営やら見本誌対応やら、その後の店番をずっとしていてくれた、売り子の@には頭が上がりません。

実績どうでしたか

12時半になる前には100部が完売してました! 皆さん有り難うございました!

そしてその後来てくださった皆さん! 見通しが甘くてホントゴメンな! まさかこんなに来場者多いとは思わんかったんや! 全部晴天が悪い!*1

その後、売り切れた時のために念の為に用意していたダウンロードカードさんも100枚超が売れまして、累計210部ほどになりました。

みんな本当にありがとうございました。

Boothで電子版のダウンロード販売を開始します

はい、というわけで、各所で予告しておりました通り、電子版の販売を開始します。お値段そのまま1000円です。

echigo-ya.booth.pm

Boothで紙版の受注販売を開始します(!!)

さて、こっちが本番です。紙版の再販にチャレンジします。ちょっとお高めの1500円です。

f:id:Nkzn:20180424151805p:plain

流石にもう一度、ちゃんとした印刷所を使って100部とかするのは精神的にしんどいので、1冊からのオンデマンド印刷ができる、製本直送.comさんに印刷をお願いするつもりです。

www.seichoku.com

技術書典4の現地で再販の希望をいくつかいただいて感激したので、こういう形で用意してみました。

これから試しに1冊刷ってもらって出来栄えを見るステータスなので、注文していただいてもちょっと待っていただくかもしれませんが、気長にお待ち下さい。

価格が上がってることについては、初めての試みということでかかる費用についてのリスクを多めに見積もった結果なので、勘弁してほしい・・・!

初めてのサークル参加を終えて

サークル側で同人誌即売会に参加するのは、TechBoosterでコミケのバックヤードをやらせてもらったときに経験済みでしたが、自分がメインとなって出るのは初めてでした。

気持ちが溢れすぎて長文になりそうなので、箇条書きします。

  • 売り子はいたほうが完全に楽
  • 完売は気持ちいい
  • 完売後に来た人たちには申し訳なかった
  • 色んな知り合いが来てくれて嬉しかった(@さんと初遭遇できたのが最大の収穫)
  • 次回もXamaritansとは隣になりたい(合同でネタタペストリーぶら下げようという話をした)
  • スタッフ業もサークル参加もやったおかげで早朝から夕方まで12時間くらいずっと技術書典をやっていられたし、技術書典を今までの3倍くらい楽しめた気がする
  • 完全に人生の中でも最高クラスの1日でした

というわけで最高でした! また今回みたいな技術書典やりたいな!

次回もサークル参加して部数リベンジしたいと思いました。現場からは以上です。

*1:でも次回も晴れて欲しい

#技術書典 #技術書典4 で「Cheap Dive into React Native」を頒布します

blog.nkzn.info

というわけで、2月に予告していたReact Nativeの本ができました。

タイトルは「Cheap Dive into React Native」です。Deep Diveと名付けるのはちょっと面の皮が薄くて無理だったので、ちょっとトーンダウンしてみました。

f:id:Nkzn:20180418152917j:plain

techbookfest.org

配置

き02にいます。XamaritansPEAKSに挟まれてます。

f:id:Nkzn:20180420155037p:plain

配布形態

あれ これ
サイズ B5
ページ数 88ページ
頒布価格 1000円(おつりオペレーションを極限まで軽くしたかった)

表紙について

妻と「オライリーベースで身も蓋もない感じにしよう」と相談しているうちにこうなりました。

どこからどうみてもなかざん本です。

みんな見つけてくれよな!

モチベーション

DroidKaigi 2018ではReact NativeのAndroid向けの内部実装を調べる機会をもらいまして、かなり深いところまで読ませてもらいました。しかし、カンファレンスという枠組みでの50分という限られた時間の中では、調べたことすべてを話すことはできませんでした。

せっかく調べたので、覚えているうちに全部アウトプットしたい!というのが最初のモチベーションです。

また、ここ1年くらいで実案件にReact Nativeを使う機会が多くなってきました。弊社のチーム開発に適した形で運用していく中で、やはり様々な知見が溜まってきています。こういうのはときどきアウトプットしていかないとお腹を壊すので、いい機会として使わせてもらいました。

内容

記事の内容に合わせて、本の中身や思い出話をお話していきます。

  • 技術書典のiOS版後払いアプリ開発を支えたcreate-react-native-app
  • React Native で Android と Web の同時開発にチャレンジした話
  • WebマークアップエンジニアがRNやってみた(寄稿)
  • ReactAndroid Internals

技術書典のiOS版後払いアプリ開発を支えたcreate-react-native-app

blog.techbookfest.org

技術書典の公式後払いアプリのiOS版をcreate-react-native-appで作りました。私が!作りました!

ejectしない縛りの中で得られた、CRNA/Expoの知見を大放出します。CRNAでプロダクションリリースまで持っていった事例はあまりないはずなのでいい経験になりました。

備忘録として、ここ3週間の出来事を書いてみましょう。

日付 出来事
3/13 わかめさんから無茶振りをもらって面白そうやなと思い快諾
3/27 本業のデスマにより原稿もアプリも白紙のままここまで到達(開発開始)
4/2 リリースに向けた証明書周りの準備を開始(主に達人出版会さんに色々お願いするやつ)
4/4 なんとなく完成したのでTestFlight審査に提出
FGO第二部開幕
4/5 本審査提出
4/7 1度目のリジェクト(カメラパーミッションの指摘。本に書きました)
4/8 FGO第二部第一章クリア(感想は本のあとがきに)
4/9 そろそろフル可処分タイムで作業しなくてもいい気がしてきたので自分の本の執筆を開始
4/10 2度目のリジェクト(サインアップへの動線の指摘。本に書きました)
4/11 審査通った
4/15 パブリックリリース&公式ブログ告知&ゼロデイ障害対応(ごめん)
4/17 本書き終わった
4/18 入☆稿

……うん、よくこの状況で90ページも書いた。偉いぞ俺。*1

4/4〜8の可処分時間の使い方については思うところがないわけでもありませんが、私もFをGOしたかったし、許してくれという気持ちでいっぱいです。*2

謝辞

とはいえ、この短期間でアプリを作れたのは、僕の功績というのはかなり少なめです。

僕が手を付ける前にデータモデルの設計と通信周りのベース開発を7割くらい済ませていてくれた@さんと、素敵なAndroidアプリ版を真似させてくれた@の功績がほとんどだと思っています。自分一人でゼロから作っていたら、こんな時間では到底作れなかったと思います。ありがとうございました。

React Native で Android と Web の同時開発にチャレンジした話

React Native for WebやStorybookを使って、ネイティブとWebの同時開発にチャレンジした事例を紹介します。

qiita.com

こいつをプロダクションで使うために設計レベルで実用性を高めた話です。記事の中身は思想の話が多めになってしまったので、Qiitaと併せて読むと実践的になりそう。

WebマークアップエンジニアがRNやってみた

同僚のWebマークアップエンジニアをReact Nativeのプロジェクトに巻き込んだら結構良い感じだったので、エッセイを書いてもらいました。 RNの裾野の広がりを感じられるいい記事です。

ReactAndroid Internals

React NativeのAndroid向け実装について掘り下げた記事としては、おそらく現時点の日本で一番深くまで潜ったものになっていると思います。Androidエンジニアがこれを読むとReactAndroidがちょっとだけ読めるようになるかもしれません。

  • JavaScriptをどうやって動かしているのか
  • JavaとJavaScriptはどうやって通信しているのか
  • ReactからはReact DOMとReact Nativeがどのように見えているのか
  • どこのレイヤーの処理がどこのスレッドで動いているのか
  • requireされた画像リソースはAndroidアプリのどこに配置されるのか

こんな感じのことを書きなぐった40P超の大作です。

DroidKaigiのディレクターズ・カット版と言ったな。あれは嘘だ。

半分くらい書き直したぜ! DroidKaigiで興味を持った人が更に楽しめる内容になっていると思います。

電書版について

当日までに間に合えば、紙版のおまけに電書版も付けられればと思っています。

また、後日Boothで電書版のダウンロード販売も始めたいので、技術書典に来れなかった方はそちらをお待ち下さい。

というわけで

さあ、お祭りだ! 私は好きにした! 君たちも好きにしろ! みんな楽しもうな!

*1:実はCodeZineの連載も並行で書いてたのでもっと書いてる

*2:オマージュです。

React NativeをWeb IDEで試せるExpo Snackしゅごい

本来ならばAndroid StudioやXcodeを導入しなければWorldにHelloすることも難しいReact Nativeですが、create-react-native-appを使うことでnpm/yarnのみで実行できる環境が構築できます。

この魔法のような環境づくりの立役者がExpoなわけですが、実はExpoにはWeb IDEがあることをご存知でしょうか。その名をExpo Snackと言います。

↓こんな感じでブラウザ上でコードを書くと、すぐに動作を確認することができます。

組み込みプレビューはappetize.ioが使われています。これも大概謎の技術なんですが、DeviceFarmとかRemote TestKitに類似の技術を使ってるんですかね。React Native for Webのようなイミテーションではなく、本当にネイティブのシミュレータや実機で動かしている画面をストリーミングしている形だと思います。

Web IDE

ちゃんとExpo Snackで開くと次のようなWeb IDEっぽい見た目になります。

f:id:Nkzn:20180316235159p:plain

左側のファイルエクスプローラからファイルを追加して、モジュールを作ることもできます。

f:id:Nkzn:20180316235337p:plain

また、package.json(モドキ)にdependenciesを追加することで、外部ライブラリも取り込めるので、かなり色々できそうです。今回のサンプルのReact Navigationも、後から追加したライブラリでした。

f:id:Nkzn:20180316235539p:plain

ただ、何でも追加できるというわけではなく @expo/ をプレフィックスに持つExpo向けライブラリや、JSのみで実現されているライブラリだけしか使えないことには留意してください。Expoをejectせずに使うときのルールと同じで、ネイティブコードを含むライブラリは適用できません。

実機での動作

create-react-native-appでExpoを使う時と同じように、QRコードとExpoアプリによる実機デバッグの手段も用意されています。Web IDEの右上から「QR Code」を押すことで呼び出せます。

f:id:Nkzn:20180317000103p:plain

ちゃんと実機で動いていますね。

f:id:Nkzn:20180317000121j:plain

裏側について考えてみる

これどうやって繋げとるん?と不思議になりましたが、Expoアプリの実行履歴を見る限りでは、expo.ioから持ってきているようです。実際、パソコンと同じネットワーク上に実機がいなくても、問題なく表示できました。サーバー側でビルドしてくれてるんですかね・・・

f:id:Nkzn:20180317000804p:plain

デバッグ中の実機をスリープさせたり復帰させたりすると、Web IDE側に通知が出てきているので、リアルタイムで更新をかけるための何かがありそうです。

f:id:Nkzn:20180317001100p:plain

f:id:Nkzn:20180317001107p:plain

DevToolsで見てみると、PubNubによるロングポーリングで通知を受け取っている感じでした。

f:id:Nkzn:20180317001909p:plain

PubNubってCorona SDKの全盛期に対戦ゲームとかの情報をリアルタイムに同期できて便利だよね的な、今でいうAWS CognitoとかFirebase Realtime Databaseみたいな文脈で使われてたやつだっけ・・・(うろ覚え)

ハンズオンに有用かも

ハンズオンイベントを開くと、多くの場合次のようなトラブルが起きます。

  • Windowsでうまく動かない
  • 事前にHelloWorld相当のところまで進めてきてねって言ってるのに何も準備してこない(そしてセットアップしてるうちにその日が終わる)
  • みんながこぞってツールのインストールをするもんだからネットワーク帯域が枯渇する
  • Windowsでうまく動かない
  • そもそもパソコンを持ってこない(実話)

何度か主催した経験で言うと、これらのトラブルは必ず起きるものなので、参加者の啓蒙やドキュメントの整備といった方向で撲滅しようとするのは(無駄ではないものの)割と無理筋な印象です。ハンズオンをどうしても成功させたいならば、次のどちらかの方法が良いと私は考えています。

  • めっちゃ強いインフラと環境構築済みのパソコンを用意して使わせる(どうしても持参したい人は自己責任で頑張れ)
  • Web上のIDEやコンソールだけを触ってもらう

前者は数万円払ってどこかのコンピュータ室で受講するOracleセミナーとかそういう感じのアレで見かけるやり方ですし、後者はGoogle Cloud Shellのハンズオンが典型的でしょうか。

さて、Expo Snackを使った方法は後者にあたります。Expoアプリが入ったAndroidかiOSの実機は必要になります*1が、まあこのご時世なのでスマホを持ってないという人もあまりいないでしょう。React Nativeハンズオンの勝算を高められる選択肢のように感じられます。

実はリリースまで持っていける

右上に「Export to XDE」というボタンがありまして、これを押すとExpoプロジェクトを手元にダウンロードできます。

f:id:Nkzn:20180317004614p:plain

試してないけど、XDEに読み込ませればアプリをexpo.ioにデプロイできそうですし、expコマンドでiTunes Connectにアップロード可能なバイナリを作るようなこともできるんじゃないでしょうか。

まとめ

Expo Snack使うと最低限の環境構築がめちゃくちゃ簡単にできるので、少なくともハンズオン目的でならガンガン使っちゃっていいと思います。

趣味のアプリ開発とかに実用できるかというと、補完とかあんまり効かないみたいなので、ちょっと苦しいのでは・・・という気持ち。でもそれはVSCodeとかと比べて不便というだけなので、頑張ればアプリ一本作れるのでは・・・?という感じもします。

RNの裾野を広げる良いツールだと思ったので、今後積極的に採用していきたいです。

宣伝

最近会社でReact Nativeを前提としたReactエンジニアの求人を始めたので、新潟でReact Native書くぜっていう稀有な方がいればよろしくお願いします。Reactが分かればAndroidやiOSの経験はなくても大丈夫です。

*1:今回試した限りではappetizeは利用制限がかかりやすかったのであまり期待しないほうがよさそうな気がしました

WebとAndroidのレイアウトシステムにまつわる寸劇(妄想)

Android Studio 3.2で、GridLayoutがレガシー扱いされるようになりました。一方で、オワコン扱いされていたような気もする(個人の感想です)TableLayoutは生き残っています。

レイアウトシステムの世代交代に関する妄想劇

勝手な想像なんですけど、こういう流れが垣間見えた気がしました。


Web「tableでレイアウトを組む時代は終わった。BootstrapのGrid System便利やろドヤ」

Android「いいなそれ! TableLayoutなんてもうやめにしよう! GridLayout作ったから使おうぜ!」

Web「Bootstrapみたいなサードパーティのやつを使わずに、Web標準でflexboxっていうのできたからそっち使おうぜ便利だし」

Android「いいなそれ。ConstraintLayoutも十分便利だけど、FlexboxLayoutも作ったからみんな使おうよ」

Web「ところでCSS Grid Layoutっていうの作ってみたんだけどどうかな」(微妙にAndroidのGridLayoutとAPIが似ている)

Android「複雑なものはConstraintLayoutとFlexboxLayoutがあれば問題ないし、軽微なものはやっぱりTableLayoutでいいな。GridLayoutはオワコンにしようか」

Web「えっ」


CSS Grid Layoutに未来はあるのか。これからもレイアウトシステムからは目が離せませんね。

※ CSS Grid LayoutがAndroidのGridLayoutから何らかの着想を得てAPIを組んだのかどうかは知りませんし、たぶん違うんじゃないかなと思います。ただ、こうだったら面白いなという妄想です。

DroidKaigi 2018で喋ってきました+α

はい、DroidKaigi 2018の帰りの新幹線の中で書いています。最高のDroidKaigiでしたね。来年も楽しみです。

ということで、忘れないうちに各セッションに一言感想を残しておこうと思います。

(あとでスライドを見つけてきて貼ります)

2/8(木) 1日目

オープニング / ひつじ

オープニングムービーにスピーカーの名前が列挙されてたんですが、やっぱり自分の名前を見つけるとアガるよね!

というわけでひつじのご挨拶。いつも通りダウナー系です。安心する。

たろーくん(@)の友情出演で、Kotlin Developer Conf Tokyoの開催予定が宣言されました。めっちゃ楽しみです。

Kotlinアンチパターン / Naoto Nakazato

完全に最高のベストプラクティス集でした。自分ではいつの間にか回避するようになっていた事例ばかりでしたが、今後チームで導入していこうとすると必ず起きる問題ばかりだったと思います。

apply内の名前空間よりも外側のローカルスコープの名前空間が優先されるという話、言われてみればありそうな話ですが、自分でもコードレビューで見つけられるかと言われると無理なので、禁止にした(letとalsoだけにした)という判断はアリなのだろうなと思いました。

Deep dive into LayoutManager for RecyclerView / thagikura

途中参加だったので実は一番良かったところを聞けておりませぬ。

とりあえず「余程のことがない限りはLayoutManagerは自作するまい」という気持ちになったということだけ申し上げておきます。

LayoutManagerの責務が分かっただけでもかなり収穫だったと思います。

AndroidにおけるModel-View-Intentアーキテクチャ / Benoit Quenaudon

DroidKaigiにはベストトーク賞はありませんが、僕の中での2018のベストトーク賞は間違いなくこれです。

MV*って言葉を聞くと身構えるようになってしまった昨今ですが、MVIは名前がMV*なだけで、実態としてはFluxの親戚でした。単方向データフローを重視した設計ということで、それなら私の大好物だということで、かなりすんなり頭に入ってきていたと思います。

Reduxが抱えている課題がかなり解決する考え方のようにも思えたので、なんとかJSでも組めないかな・・・なんて思っているところです。RxJS使ったほうがいいかなあ。無くてもいけるかなあ。

TLを見ていると「EventBusでも実装できるのではないか」「LiveData版を作ってみたい」といった、設計思想を汲み取って自分の土俵で再実装しようとする発言も見られて、やはり聞く人にインスピレーションを与える講演だったのだと思います。

また、ベノワさんはジョークセンスがかなり強い方で、思うざま爆笑させていただきました。

  • 「メッチャ=カッコイイ=キャスト」
  • 「ユーザーが急に暴れて」
  • 「次に急にお母さんから電話がかかって」
  • 「お母さんの電話は取ったほうがいいのでアプリがバックグラウンドに行って」

見逃した方は是非動画で見てください。めっちゃ面白かった。

内容自体もためになるのにトークも面白いとかずるい。一緒に働いてみたいと思いました。

Widget開発再訪 / Ryo Yamazaki

なにげにWidgetって全然触ってこなかったのですが、たまに社内で待ち受けアプリ作りたい的な雑談は出てくるので、勉強のために参加してみました。

雰囲気はわかったので、今度ちょっと手を動かしてみようかなという感じにはなりました。

しかしやまんだーさんの語り口は本当にアツい。

Say bye to Fragments with Conductor & Kotlin / Miquel Beltran

Fragmentへの憎しみを共有できそうな雰囲気をタイトルから感じて参加。

まあアテが外れまして、ほとんどFragmentの話は出てこず、Conductorの使い方を説明していました。

Fragmentから逃げるためにYet Another Fragmentを抱える羽目になっただけでは・・・という気は少ししました。

素晴らしいNDKの世界 / Building High Performance Android Apps with NDK / hak@ & Gerry Fan

ちょっとNDK界隈の空気感が知りたくなって参加。React Nativeの内部実装を読んでいくと、NDKとは無関係でいられないのです。

開発環境が改善された話だったり、グラフィックやオーディオ系の新機能の話だったりと、C++が活躍しそうな分野の話でした。

役に立つかというとアレでしたが、普段あんまり聞かない分野だったので楽しかったです。

マルチモジュールのすヽめ / kgmyshin

何の話かなーと思ったら、Android-CleanArchitectureとかでレイヤーごとにモジュールを分けてるアレでした。Android SDK側でもマルチモジュールの波が来ているので、マルチモジュールにできそうなところがあればやっちゃったほうがよさそうですね。

JSのほうにもmonorepoといってNPMプロジェクトをマルチモジュール化する波が来ていますし、役割ごとにモジュールを分けるのは何かのトレンドなのかもしれないですね。

After Party

主にこきちーず君や新潟勢(クーネルワーク社)と喋ってました。あとたろーくんにKotlin Dev Conf Tokyoに誘われました。最近RNばっかりだけど、Kotlinも古参といえば古参なので、なんかしたいなという気持ちはあります。

実は用事があったので早めに去りました。もうちょっといたかったな。

2/8(木) React Native Meetup #7

After Partyを19時くらいで脱出し、六本木のDMM.com Laboで開催されていたReact Native Meetupにも参加していました。

react-native-meetup.connpass.com

ここ1年ほどReact Nativeおじさんとして活動をしてきた私ですが、RNコミュニティの総本山であるReact Native Meetupには一度も参加したことがありませんでした。なにか思うところがあったわけではなく、普通に私のスケジュール調整能力がウンコだっただけです。

ところで参加してみてどうだったかというと、実は翌日の発表のことが気になって、講演内容があんまり頭に入ってこなかったというアレでした。

講演を聞いていての肌感覚としては、JSエンジニアが多めのコミュニティなのかなと感じました。モノがモノなのでAndroid/iOSエンジニアにも十分に市民権があるのも同時に感じられて、上手く育てばバランスの良いコミュニティになるのかもしれないなあと思ったりしました。

懇親会中はずっと、RNの運用方針に困ってるベンチャーの若者たちと喋ってました。たぶんただのクダ巻いてるオッサンになってたと思います。ごめんなさい。

次回もし参加できることがあれば、是非登壇したいなあ。ReactDOMとReact Nativeのレンダリング時の挙動の違いだけで15分喋れるんですが、いかがでしょうか。

2/9(金) 2日め

午前中は自分の発表準備で完全に引きこもってたよ〜〜〜〜

React Native Androidはなぜ動くのか / Nkzn

www.slideshare.net

がんばったよー!!!!

最終的に144Pで講演しました。昨晩時点での瞬間最大ページ数は186Pなので、削られた42P分のネタについては技術書典4でディレクターズ・カット版として供養いたします。皆様お買上げのほどよろしくお願いいたします。

blog.nkzn.info

また、このセッションを聞いて、既存のAndroidアプリにRNを組み込む「ハイブリッドアプリ」の設計に興味を持った方がいらっしゃれば、Androidアプリ設計パターン入門の第七章で id:tomoima525 さんが最高の記事を書いてくださっているので、ぜひご覧ください。

Android アプリ設計パターン入門

Android アプリ設計パターン入門

  • 著者:日高 正博,小西裕介,藤原聖,吉岡 毅,今井 智章,
  • 製本版,電子版
  • PEAKSで購入する

ReactInstanceManagerの扱いについては私なんかよりよほど知見をお持ちなので、すごく勉強になっています。

All you need is isolating the domain (How to apply DDD to Android Application Development 2) / yanzm

やんざむ先生のドメイン駆動設計シリーズ第二回。

値オブジェクトとエンティティをどうやって定義して、そしてどう実装に落とし込むかというお話。

JSONにドメインが引きずられるのは本当にあるあるだし、今でも引きずられない心の強さを持ちきれていないので、心の強さの持ち方もしりたい・・・。

青本や実践本を読み切るのは大変そうなので、もちこちゃんの大冒険を読みましょうというお話もありました。

booth.pm

Android Things codelab / Android Things であそぼう

すっげーたのしかった! すっげーたのしかった!

ピコピコさせたりピカピカさせたりできた!

あとカメラがついててTensorFlowで画像認識させたりできた!

チュートリアルを全部終わらせたらRainbow Hatをお土産にもらえた! うれしい!

(楽しすぎて語彙力が減っています)

コードで見るFlutterアプリの実装 / konifar

RNとはマルチプラットフォーム仲間のFlutterセッションです。

FlutterのUIフレームワーク自体がReactインスパイアな感じらしく、かなりすんなり読めました。

Dartも(use strongモード?なら)全然悪くない言語だと思うし、独自レンダリングエンジン積んでるのもパフォーマンス良さそうだし、Google謹製マテリアルデザインWidgetが用意されてるのとか羨ましすぎるし、基本的には筋がいいツールだなと印象でした。

ライブリロードのデモで歓声が上がってたのが地味に羨ましかったので、今度RNのトークをする機会があったらライブリロードのデモをしたいと思いました(小学生並みの感想)。

一番気になっていたエコシステム部分についてですが、やはりFlutter用に最近作られたライブラリの利用が中心になってくるようです。旧来のDartのために作られていたライブラリは、Universal JS的な思想で作られているわけではないため、なんだかんだでプラットフォーム依存なコードが入っていることが多い、みたいな話をこにふぁーさんからオフィスアワーのときに聞けました。しばらくは「足りないものは自分で作る」な感じの文化が続くようです。そのへんはJSのエコシステムがかなり使えるRNの優位なところかもしれません。

Gradleプラグインを作って開発効率を改善しよう / tnj

途中参加でした。なんかあれよあれよという間にプラグインができて実際に公開までされてしまって、Gradleプラグイン開発の時代が来るぞ!みたいな気持ちになりましたが、気のせいかもしれません。

最終セッションということで、クロージングも無茶振りでtnjさんがやってました。

みなさんおつかれさまでした。

まとめ

最高のDroidKaigiだった!

来年もCfP出すぞ! トークするぞ! コミュニティに貢献するぞ!

そして他の人の話も聞きたい! みんなCfP出して! なんか話聞かせて! たのむ!

そして、出張として行かせてくれた会社のみんな! ありがとう! DroidKaigi終わったから働く! いっぱい働くよ!

技術書典4にReact Nativeの薄い本を出します

f:id:Nkzn:20180204205546p:plain

突然ですが技術書典4で本を出すことにしました。

技術書典 is 何

techbookfest.org

技術書典は技術書オンリーの同人誌即売会です。コミケなどで技術同人誌をよく見かけるようになってきたことから、オンリーイベントやれるんじゃね?ということでTechBooster付近の人たちで始めたやつで、早いもので第4回です。第2回は私もスタッフ参加しており、熱気を感じることができました。 そして雨が辛かった

技術書典4は2018年4月22日に秋葉原UDXで開催です。

何書くの

本としては1冊ですが、記事としては2本立てにしたいと思っています。

  • React Native Androidはなぜ動くのか
  • ぜんぶReact Nativeになれ

「〜なぜ動くのか」は、今週金曜日にDroidKaigi 2018で講演する内容の文字起こしです。ただの文字起こしではなく、話したいことを50分の講演時間に落とし込んでいく際に削ってしまった内容も全部入った ディレクターズ・カット版 をお送りします。枝葉末節の余計な話も大盛りでお送りするものになるので、DroidKaigiでセッションを聴いてくださった方も楽しめる内容になるかと思います。

「ぜんぶ〜」はアドベントカレンダーでピコピコさせたやつの続編です。実プロジェクトでReact NativeとReact Native for Webを併用したらどうなったのかをお伝えできればと思います。ただし、このプロジェクトは現在リアルタイムで炎上しておりますので、場合によっては書けなくなるかもしれません。

いまのきもち

今まで同人誌も商業誌もちょいちょい書いてきてはいるんですが、なにげに「紙の本で単著」は初めてなので、不安と期待で胸がいっぱいです。

当日に本ができてたらもう褒めてください! くっそチキンなので30部くらいしか刷らない&委託なんか考えてもいないみたいな状況になりそうです。増刷などのその後の展開は完売したら考えます。まずは完成させるぞ!!!

余談

Payment Request APIを初めて実用できてめっちゃ興奮した! 最近の買い物で何気なくChromeに保存してたクレカ情報がそのまま使えたのでくっそ楽だったよ!