ナカザンドットネット

Android Developer's memo

「ネイティブアプリ開発者は絶滅危惧種なのか?」への感想文

jp.techcrunch.com

こちらの記事への雑な感想です。感想は私の主観であり、ポジショントークであり、所属する組織の意見とは無関係であることを先に述べておきます。

また「ネイティブ」という言葉に「C/C++などから作られた機械語」という本来の意味に加えて、「プラットフォームの標準言語(WindowsのC#, AndroidのJava, iOSのObj-C)や標準開発ツールである」というニュアンスを含めることをご容赦ください。

ポジション

こんな感じのポジションの人です。

  • 中小企業向けにBtoBでアプリを作ることが多い中小企業の人です
  • エンジニアとしてのキャリアの大半がAndroidアプリ
  • 最近はReact Nativeやってる
  • もっと最近はPWAやってる
  • どんなテクノロジがイケてるかよりも、目の前の事業を前に進めるにはどんなテクノロジが適切かを考えるのが好きです

MSがRNめっちゃ使ってるという話について

まずはこちら。

「マイクロソフトのiOSおよびAndroidアプリの中身をスキャンしてみた。その中で、Word、Excel、Xbox、その他もろもろ38本ものアプリが、最近のアップデートでReact Nativeを利用するようになったことを発見した」

昨年の6月に中の人がツイートした、開発中の話題が、実際にリリースされるようになったことを受けての話題ですね。

ツイートはこちら。

Twitterだと話題の発散がしんどいということでRedditに移動したのがこちら。

www.reddit.com

ここで注目しておきたいのは、

Office 365's UI, a lot of it, but definitely not all of it, are pieces that are built using React Native (Windows). API's and Services are still going to be powered by C++, C#, or whatever is the most appropriate for that team. Nothing is converting to "all/completely" JavaScript/TypeScript.

という説明です。「Office 365のUIの多くがReact Nativeやreact-native-windowsで組まれている」のは確かです。しかし、「APIやサービスは各チームにとって最適な言語であるC++やC#や他の言語で書かれており、アプリケーションのすべてをJavaScriptやTypeScriptで記述したものはない」とも言っています。

あえてPDSの用語で分けるなら、「UI」というのはいわゆるプレゼンテーション層でしょうし、「APIやサービス」というのはドメイン層*1にあたるでしょうか。ざっくり言いかえると「画面はReact NativeとJS/TSで書いてるところが多いけど、ビジネスロジックは各チームにとって適切な言語で書いてるよ」ということになりそうです。

Brownfield事例は実質的にネイティブの事例

React Nativeの運用としてはBrownfieldとGreenfieldという言葉があり、「大部分をネイティブアプリとして運用しつつUI付近でReact Nativeを活用する」ことをBrownfield、「ネイティブ側はできるだけinit時のままにしつつ、アプリケーションとしてのすべてのロジックをJS側に書く」ことをGreenfieldと呼びます。Greenfieldの場合は必要なAndroid/iOS開発の知識が少なめになるので、JavaScript出身者にはオススメです。

さて、Office 365の事例は典型的なBrownfieldです。本来ならネイティブUIで開発を行ってもやれるくらいの玄人集団が、ReactというUI状態管理パラダイムによる開発の効率化や、UI人材の効率的な運用のために実施した施策であると感じました。UIの共通化という目的も入っている可能性は否めませんが、「作り方がだいたい同じである」という時点で人材運用上の価値が高い(Learn Once, Write Anywhere)ので、プラットフォームごとにパーツを作り直していても別に不思議ではないかなと思っています。

これは「React NativeとかいうUI管理DSLライブラリを使って、ネイティブアプリのUI実装を効率化したよ」とか「UI実装をWebチームの人に手伝ってもらえるようになったよ」みたいな話であり、開発スタイルとしては依然としてネイティブアプリ開発者の力が多大に必要であるはずです。

XAMLやUIKitやStorybookやレイアウトXMLやDataBindingといった、ネイティブUIのツールキットを使う機会が減っている可能性は高いですが、GUIアプリケーションはそれらだけでできているわけではありません。むしろ複雑なアプリケーションであれば、PDSのPよりDのほうが大きくなることもあるでしょう。Officeの開発では、ネイティブアプリ開発者が、めちゃくちゃ活躍しているはずなのです。たぶん。

そういった観点から、Officeの事例を理由にしてネイティブアプリ開発者の需要を語る切り口は、少し的を外しているように筆者は思いました。

Skypeの事例ならどうなのか

記事内では触れられていませんが、SkypeチームはReact XPという自作のReact Nativeラッパーを開発しており、おそらく今でもこれを運用しています。

microsoft.github.io

これは「Write Once, Run Anywhere」寄りの思想で作られているように筆者には見えており、比較的にGreenfield寄りの運用をしているのかなと想像しています(想像です)。Skype内での活用事例の記事を見ても、JavaScriptランタイムでの話ばかりが出てきます。

React XPはReact NativeをWebやWindowsにも拡張して運用するためのラッパーなので、特殊といえば特殊なのですが、こちらの運用ではネイティブアプリ開発者が登場する場面は少ないのかもしれません(想像です)。Android専用モジュール(hoge.android.tsx)や、Web専用モジュール(hoge.web.tsx)みたいなものを作るケースはありそうなので、ゼロ人ということはありえませんが、Officeチームよりはネイティブアプリ開発者の割合を減らせそうな気がします。(中の人!違ってたらごめん!違ってたらマサカリ投げてくれ!!すぐ直す!!!)

こっちを根拠にして記事を書いてくれてたら、ちょっとだけ納得感上がったのになあ、と思ってます。

ネイティブアプリ開発者の仕事は減るのか

ここからは筆者の極めて個人的な意見です。筆者は自分のキャリアを考えていく上で、現在の業界をこういう観点で見ているよ、という文章なので、違った考え方を持っている人はいっぱいいると思いますし、それらはすべて素晴らしい観点です。是非この記事のブコメに短く書いたりせずに、ご自身のブログ等で持論を展開してください。読みたいです。

ハードウェア利用とかバックグラウンド動作の要件が強いものはネイティブアプリとして作るしかないものもありますが、オフライン時の動作くらいであれば、Service Workerなどの進化(いわゆるPWA)によって解決されつつある分野も多くなってきました。サーバーからもらったデータを画面に表示して、ユーザーの入力をサーバーに投げるだけ*2の要件にネイティブアプリを作る必要があるのかというと、筆者の中では少しずつ疑問符が付くようになってきています。

BtoBでお客さんが「アプリが欲しい」と言った場合に、実はそれは素朴なWebアプリでいい要件だったり、少し込み入ってもPWAの範囲でなんとかなるものは、意外と多いのではないでしょうか(肌感覚です)。もちろん、ネイティブアプリで作るべき要件も世の中に多くありますが、それはすべてではありません。工数や時間やお金をかけて、AndroidとiOSのネイティブアプリをそれぞれ作るコストをかけたいほどの要件を持った顧客は、実はそこまで多くないのではないでしょうか(完全に肌感覚です)。

2010年ごろ、Ajaxの流行とともに、.NET製のデスクトップアプリケーションの一部を、Webアプリケーションに置き換える案件が多くあったように思います。それと同じように、モバイルアプリの世界もブラウザ技術に置き換わっていく部分が出てくると、筆者は考えています。当時とはブラウザ技術の雰囲気も随分と違うので、形は違うことになるかもしれませんが、プラットフォームネイティブな開発一辺倒だった業界が、現実的な別の選択肢を得て、多様化していく、という点では似たようなことになるのかなと。

そういう観点では、相対的に、モバイル向けのサービス提供という分野におけるネイティブアプリの比率は、下がっていくのかもしれません。そういう意味では、ネイティブアプリ開発者の仕事が減るという話も、わからなくはないです。

いまネイティブアプリ開発者である人は、これからシェアが広がっていく(かもしれない)ブラウザ向けの開発を覚えるのもいいのかもしれませんし、よりネイティブアプリ開発者としての力を付けて仕事を取っていくのもいいのかもしれません。「モバイルアプリ開発者」という肩書きで、AndroidネイティブもiOSネイティブもブラウザも全部いけるぜ!というポジションを取っていくのもいいかもしれません。

まとめ

ここから先は君の目で確かめてくれ!という無責任な締めになってしまうのですが、僕もまだAndroidアプリエンジニアを自称している立場であり、今後こういった時代の渦中に放り込まれる立場なので、ご勘弁ください。これからどうなるのかは僕だって知りたい。

冒頭の記事については、ちょっと飛ばし過ぎだけど示唆に富んでいるので、話半分で読んでおこうね、くらいの気持ちです。

ポジショントークは以上です。

みんなの反応

是非この記事のブコメに短く書いたりせずに、ご自身のブログ等で持論を展開してください。読みたいです。

ちゃんとブログを書いてくださった方々を見かけたので、この記事の次に読む記事としてオススメしておきます。

Xamarin勢の反応

「なんでそこでXamarinじゃねーんだよ!」に対するアンサーです。

qiita.com

Cordova勢の反応

昔のイメージでCordovaをdisんないでくれ頼む、というお話。

note.mu

iOSネイティブアプリ開発者の反応

ハイブリッドアプリ的な技術とどう向き合うか、どう見なすか、というお話。(すごくよかった)

otihateten.hatenablog.com

*1:DDDのやつじゃないです

*2:この「だけ」がでかいんですが