「The (not so) hidden cost of sharing code between iOS and Android」を読んだ

DropboxのThe (not so) hidden cost of sharing code between iOS and Android という記事を読んだ。

 

https://blogs.dropbox.com/tech/2019/08/the-not-so-hidden-cost-of-sharing-code-between-ios-and-android/

 

異なるプラットフォーム間で共通のc++のコードを使った開発をしようとしたが、1回しか開発しない利点よりも、共通のコードで開発をすることによるオーバーヘッドが大きくなってしまったため、それをやめてちゃんと本来の言語で開発するようにした話。

 

4つのカテゴリにオーバーヘッドを分類している。

 

1つ目はライブラリとフレームワーク。本来その環境で使えたライブラリの置き換えや、それぞれのプラットフォームでc++を使えるようにするためのツールなどを使う必要があった。しかし、それらは本来不要なものだった。それらのOSSに貢献はしたが、本来の環境のほうがより良い貢献がて来たはずと考えている。

 

2つ目は開発環境の話。GoogleAppleIDEなどの環境を使わないことで、特にデバッグが大変だった。また、ツール以外にも頻繁に更新されるAndroid/iOSの開発環境に合わせて、c++の開発環境を作り続けるのにも大きな時間をかける必要があった。(XcodebuildとGradleの両方に対応し追従する必要がある)

 

3つ目は、異なるプラットフォームへの差分の対処の話。例えばカメラロールなど、iOSAndroidが同じモバイルアプリといえども、実装に影響を与える違いがあった。その結果、実装は1回だけでは終わらなく、異なるプラットフォームでは動かせないということが起こる。多くの時間を統合のために費やして、プラットフォーム固有のコードを書く必要もあった。これによって、コードを1度書けばよいという利点は、大きく損なわれてしまった。

 

4つ目は、訓練と採用と人材の維持の話。モバイルの開発者と、c++でスタック開発を続けるという業務内容がマッチしなかった。一般的に、モバイルの開発コミュニティは新しい技術やパターンが頻繁に出てきてそれらが採用されていく。最良な開発者は最新の状況についていきたいと考える。標準的なスタックのようなものに対して、最新の技術とチャレンジを追求するのは相反している。

 

1回だけ実装すればよいというのが、実際にはそうならなかったという実装的な面と、それをやりたいエンジニアがいなかったという人材的な2つ問題が理由となって、dropboxでは、c++で共通のコードを開発することをやめた。