ネむティブかどうか クロスプラットフォヌム開発に関する4぀の神話

スマヌトフォンは、猫の写真を消費するためのツヌルずしおだけでなく、䜜業ツヌルずしおも、倪陜の䞋でたすたす倚くのスペヌスを獲埗し続けおいたす。 そのため、モバむル開発の需芁が高たっおいたす。 䞀般的に、劎力ずクヌルさは、Objective-C / iOS甚のSwiftずJava / Android甚のKotlinです。 間違いなく、劎力ずクヌルさはありたすが、クロスプラットフォヌムフレヌムワヌクの䜿甚がネむティブツヌルず比范しおより望たしい倚くの珟実のシナリオがありたす。 詳现はこちら







泚Hacker誌の蚘事の完党版の出版物シリヌズを継続したす。 著者のスペルず句読点が保存されたした。



著者に発蚀暩を䞎えたす。



クロスプラットフォヌムフレヌムワヌクが人生のすべおの問題を解決するのを埅っおいる開発者もいれば、敵意を持っおそれを認識する開発者もいたす。 どちらの「戊争キャンプ」も、どのように、そしお䜕が機胜するかに぀いおの誀解によっお匕き起こされる独自の誀解を持っおいたす。 技術的な議論の代わりに感情が䜿甚されるため、これは火に燃料を远加したす。



開発者、特に初心者の間でも、クロスプラットフォヌムモバむルフレヌムワヌクに぀いお倚くの神話がありたす。 この蚘事では、最も人気のあるものを分析したす。 しかし、たず、ITブラックゞャック党䜓にお金を提䟛するビゞネスの目を通しお、モバむル開発を芋おみたしょう。



クロスプラットフォヌムツヌルを䜿甚する理由



歎史的に、コンピュヌタヌ垂堎には垞に競争があり、各メヌカヌはオペレヌティングシステムずデバむス甚のアプリケヌションを開発するための最適なセットのいわゆるネむティブネむティブツヌルを提䟛しおきたした。



ネむティブツヌル=゚コシステムの所有者によっお提䟛されたす。



「ネむティブ性」の他のすべおの兆候は二次的です-動䜜ずアプリケヌションむンタヌフェむス、OS機胜ぞのアクセス、パフォヌマンスなど。



さらに、ネむティブツヌルは、開発蚀語、受け入れられおいる芏則およびアヌキテクチャのレベルだけでなく、オペレヌティングシステムおよびラむブラリを操䜜するメカニズムのレベルでも互いに互換性がないこずがほずんど垞に刀明しおいたす。 その結果、同じアルゎリズムずむンタヌフェむスを実装するには、異なるプログラミング蚀語で耇数の環境のアプリケヌションを䜜成し、「プラットフォヌムごずに1぀のコマンド」に基づいおアプリケヌションをサポヌトする必芁がありたした。 同時に、異なるプラットフォヌム䞊のアプリケヌションの機胜ず倖芳は、ほが垞に90同䞀です。 楜しみのために、iOSずAndroidのお気に入りのプログラムの実装を比范しおください。



2番目の重芁なポむントは、チヌム内で必芁な知識ず経隓を利甚できるこずです。圌らがそこにいなければ、孊ぶには時間がかかりたす。



これらの䞡方の問題を解決するために、クロスプラットフォヌム開発ツヌルモバむルだけでなくが垂堎に長く登堎し、以䞋を提䟛したす。



-補品の開発ず保守が容易になるように、単䞀のプログラミング蚀語で党䜓的なコヌドベヌスを最倧化したす。

-既存の胜力ず専門家を䜿甚しお、新しいプラットフォヌムにアプリケヌションを実装したす。



珟圚、倚くのプログラミング蚀語および環境およびこれらの蚀語を知っおいる専門家があるため、クロスプラットフォヌム開発甚のツヌルがかなりありたす。 䟋ずしお、この地域で人気のあるPhoneGap、Xamarin、React Native、およびQ tに焊点を圓おたす。







今、あなたは神話に぀いお話すこずができたす。



神話1.マゞック



初心者の開発者の心を刺激する最も䞀般的な神話は、クロスアルゎリズムアプリケヌションをネむティブアプリケヌションに魔法のように倉換するスヌパヌアルゎリズムおよびそれらを䜜成したスヌパヌプログラマヌの信念に関連しおいたす。 「JavaScriptコヌドをSwiftに倉換し、Swiftアプリケヌションをさらにコンパむルする」ずいう粟神に基づいたもの。 クロスプラットフォヌムツヌルの開発者自身もこの神話に力を入れおおり、出力ずしお「ネむティブアプリケヌション」を䜜成するこずを玄束しおいたす。 そしお、誰かがここでcしおいるわけではありたせんが、豊かな想像力ず基本的なメカニズムの理解䞍足により、開発者はシャヌマニスティックなトリックに぀いお考えるようになりたす。



クロスプラットフォヌム゜リュヌションの基瀎ずなる䞻な原則は、コヌドを2぀の郚分に分けるこずです。









「ネむティブ」の䞖界ず「クロスプラットフォヌム」の䞖界を接続するには、クロスプラットフォヌムフレヌムワヌクの可胜性ず制限を決定する特別な**ブリッゞ**を䜿甚する必芁がありたす。



ブリッゞを䜿甚する堎合、「䞖界」間のデヌタ倉換、およびAPI呌び出しずラむブラリの倉換により、垞にパフォヌマンスが䜎䞋したす。



そのため、すべおのクロスプラットフォヌムアプリケヌションにはネむティブパヌツが必芁です。そうでない堎合、オペレヌティングシステムは単にそれらを実行できたせん。 それでは、iOS、Android、およびWindows自䜓によっお提䟛されるシステムAPIずメカニズムを詳しく芋おみたしょう。 次の神話に進みたす。



神話2.ネむティブ



そのため、仮想環境に存圚し、フレヌムワヌクむンフラストラクチャずブリッゞを介しおオペレヌティングシステムずやり取りするアプリケヌションのクロスプラットフォヌム郚分がありたす。



すべおのオペレヌティングシステムiOS、Android、およびWindows UWP-次のサブシステムシステムAPIのセットぞのアクセスを提䟛したす。









クロスプラットフォヌムアプリケヌションにはネむティブ郚分があり、「ネむティブ」アプリケヌションず同じシステムAPIぞのフルアクセスがありたす。 違いは、システムメ゜ッド呌び出しがブリッゞずフレヌムワヌクむンフラストラクチャを通過するこずです。



WebView-アプリケヌションは、1ペヌゞのWebサむトに䌌たWebブラりザヌで動䜜したす。 ネむティブコントロヌルボタン、リストなどぞのアクセスはなく、すべおがHTML / CSS / JavaScriptに基づいおいたす。 䞀方、Web開発者は氎䞭の魚のように感じるでしょう。



iOSでは同様のメカニズムがバヌゞョン7.0でのみ远加されたため、 JavaScript゚ンゞンは比范的最近人気がありたす。 これらの機胜のうち、JavaScriptずネむティブ環境間で転送される耇雑なデヌタ構造のJSONでのシリアル化の必芁性を考慮する䟡倀がありたす。 このような゜リュヌションのクラスを簡単に説明するず、JavaScript環境では、ネむティブアプリケヌションを制埡するJSコヌドが実行されたす。



OpenGL ESおよびDirectXは䜎レベルのサブシステムであり、ゲヌムや、たずえばQt / QMLでナヌザヌむンタヌフェむスをレンダリングするために䜿甚されたす。 ぀たり、OpenGL / DirectXを䜿甚する堎合、開発者自身がネむティブのものにしか芋えないコントロヌルずアニメヌションを描画したす。 䞀方、それは非垞に高いパフォヌマンスを備えた䜎レベルのサブシステムであるため、クロスプラットフォヌムゲヌム゚ンゞンでも䜿甚されおいたす。



すべおのクロスプラットフォヌムアプリケヌションにはネむティブ郚分があるため、システムAPIぞの「ネむティブ」アプリケヌションず同じフルアクセスが朜圚的にありたす。 クロスプラットフォヌムアプリケヌションも、ネむティブツヌルによっおネむティブむンストヌルパッケヌゞにアセンブルおよびパッケヌゞ化されたす。 重芁な質問は、クロスプラットフォヌム郚分ずネむティブの間の盞互䜜甚がどのように線成されるかです。 たずえば、WebView内たたはOpen GL ES / DirectXを䜿甚するず、完党にネむティブなルックアンドフィヌルのナヌザヌむンタヌフェむスを䜜成する方法はありたせんが、同時にGPS、プッシュ通知、およびその他の機胜に完党にアクセスできたす。 JavaScriptたたはCのコヌドは、ネむティブアプリケヌションずその動䜜を非垞に自由に制埡でき、完党にネむティブなルックアンドフィヌルを提䟛したす。



芁玄するず、はい、䜿甚されおいる開発ツヌルApple、Google以倖の芳点からは「ネむティブではありたせん」。 しかし、アプリケヌションはシステムAPIぞのアクセスに関しお完党にネむティブであり、完党にネむティブの倖芳ず動䜜を提䟛できたす。 そしお、私たちは次の神話に向かっおいたす。



神話3.束葉杖の束葉杖



ネむティブAPIはデフォルトでは束葉杖ずは芋なされたせん異なる意芋がありたすがため、すべおのdigりはクロスプラットフォヌムの郚分を察象ずしおいたす。 明らかに、ランタむム環境WebView、JavaScript゚ンゞン、Monoなども束葉杖ず呌ぶのは困難です-長い歎史を持぀成熟した成熟した゜リュヌションです。



束葉杖は、クロスプラットフォヌム郚分がネむティブ郚分ず統合する方法ず呌ばれおいるようです。 さたざたなフレヌムワヌクがどのように機胜するかをよりよく理解するために、PhoneGap、Xamarin、Qt、およびReact Nativeの䟋を䜿甚しお、クロスプラットフォヌム郚分ずネむティブ郚分をリンクするために䜿甚されるオペレヌティングシステムメカニズムを調べたす。



PhoneGapから始めたす。 以䞋は、このフレヌムワヌクに基づいたトップレベルのアプリケヌションアヌキテクチャです。







PhoneGapアプリケヌションは、実際には、WebViewを唯䞀のUIコントロヌルずしお衚瀺するネむティブアプリケヌションです。 ネむティブ郚分ずの盞互䜜甚があるのは圌を通しおです。 iOS、Android、およびWindows UWPのすべおの暙準WebViewは、JSプロパティおよびメ゜ッドのネむティブハンドラヌを远加する機胜をサポヌトしおいたす。 同時に、JSコヌドは独自の隔離された環境に存圚し、ネむティブ郚分に぀いおは䜕も知りたせん。必芁なJSメ゜ッドをプルするか、必芁なJSプロパティを倉曎するだけです。 すべおが暙準のWebベヌスのDOM内にあり、そこにネむティブ実装に関連する新しい芁玠が単玔に远加されたす。



次に、React Nativeを怜蚎したす。







React Nativeでアプリケヌションを䜜成する堎合、開発者はほずんどの堎合、Objective-C、Java、たたはCでネむティブ郚分を実装する必芁があり、ネむティブアプリケヌションの管理はJavaScriptから行われたす。 実際、JavaScript゚ンゞンは、個別に利甚可胜なWebView芁玠です。 PhoneGapの堎合ず同様に、盞互䜜甚は同じJSブリッゞを経由したす。 ただし、React Nativeでは、JSコヌドはWeb DOMツリヌではなく、ネむティブアプリケヌションを制埡したす。



iOSの制限のためJITを実装する方法はありたせん、JavaScriptコヌドはオンザフラむで解釈され、コンパむルされないこずに泚意しおください。 䞀般に、これは実際のアプリケヌションのパフォヌマンスには特に圱響したせんが、芚えおおく䟡倀がありたす。



Xamarin.FormsWindows UWPをサポヌトはそれらのアドオンであるため、今床は叀兞的なXamarin.iOSずXamarin.Androidを芋おみたしょう。







XamarinはMonoラむブラリを䜿甚しおタヌゲットオペレヌティングシステムず察話したす。これにより、[P / Invoke]メカニズムhttps://en.wikipedia.org/wiki/Platform_Invocation_Servicesを䜿甚しおネむティブコヌドを呌び出すこずができたす。 たた、iOS / AndroidのネむティブAPIずの通信にも䜿甚されたす。 ぀たり、すべおのパブリックネむティブAPIメ゜ッドに察しお、Cのラッパヌが䜜成され、次にシステムAPIが呌び出されたす。 したがっお、XamarinアプリケヌションからすべおのシステムAPIにアクセスできたす。



そしお最埌に、経隓豊富な開発者から倚くの質問があるので、Qtを怜蚎しおください。







Qtは「それ自䜓」のものであり、これにはプラス面ず制限がありたす。 Qtラむブラリは、すべおのオペレヌティングシステムが備えおいるC ++システムAPIに接続するだけです。 ナヌザヌむンタヌフェむスのレンダリングには䜎レベルのメカニズムが䜿甚されたすが、ネむティブスタむリングをサポヌトするグラフィック゚ンゞンが䜿甚されたす。 同時に、Androidでは、特別なブリッゞJNIブリッゞを介しおJava APIにアクセスする必芁がありたす。たた、Windows UWPでは、Open GL ESからDirectX呌び出しコンバヌタヌを䜿甚したす。





芁玄するず、すべおのクロスプラットフォヌムフレヌムワヌクは、オペレヌティングシステムの暙準ネむティブ機胜を䜿甚し、成熟しおおり、IT業界の巚人の支揎を受けお経隓豊富なチヌムずオヌプン゜ヌスコミュニティによっお䜜成されたす。 そしお最埌に、最も「匷い」議論の時が来たした。



神話4.ゆっくり



クロスプラットフォヌムフレヌムワヌクに関する議論で人々が奜む重芁な切り札は、生産性が䜎いこずです。 繰り返したすが、䜕を比范し、どのオりムを数えるかによっお異なりたす。



クロスプラットフォヌムアプリケヌションの機胜は、ブリッゞで接続された2぀の䞖界が䞊行しお存圚するこずを思い出しおください。





したがっお、パフォヌマンスを比范するずきは、䜜業の速床を考慮する必芁がありたす。





たずえば、ネむティブず迅速なパフォヌマンスを反応させるなどの怜玢゚ンゞンを入力するず、倚くの異なるテストを芋るこずができたす。たた、倚くのテストでは、クロスプラットフォヌムコヌドからのUIのアクティブな操䜜など、ブリッゞをアクティブに䜿甚するずパフォヌマンスが急激に䜎䞋するこずに泚目しおいたす。 Xamarinの堎合、状況は同じように芋えたす。クロスプラットフォヌム郚分は非垞に高速で、デヌタ凊理のネむティブ郚分に匹敵したすが、ブリッゞを䜿甚するず、パフォヌマンスが䜎䞋する堎合がありたす。 Qtは通垞、C ++レベルで動䜜したすが、それ自䜓は高速です。 PhoneGapに基づいた゜リュヌションを怜蚎する堎合、パフォヌマンスはWebViewに倧きく䟝存したすが、JavaScriptコヌドのUIを積極的に倉曎したり、科孊的な蚈算を行ったりしないでください。



ゆっくり はい。ブリッゞを介したオペレヌティングシステムずの䞍適切な盞互䜜甚により、パフォヌマンスが䜎䞋する可胜性がありたす。 ただし、クロスプラットフォヌムの䞖界自䜓はネむティブのものず同じくらい高速です。



おわりに



今日は、人気のあるクロスプラットフォヌムモバむルフレヌムワヌクの蚭蚈に泚目し、それらを取り巻く基本的な神話に぀いお議論したした。



接続しお、コメントに質問を曞いおください



著者に぀いお



ノャチェスラフ・チェルニコフ -開発郚長、 ビンりェル 過去には、Nokia ChampionおよびQt認定スペシャリストの1人であり、珟圚はXamarinおよびAzureプラットフォヌムのスペシャリストです。 圌は2005幎にモバむル分野に参入し、2008幎からモバむルアプリケヌションを開発しおいたす。Symbian、Maemo、Meego、Windows Mobileから始め、その埌iOS、Android、Windows Phoneに切り替えたした。



Mediumブログで Vyacheslavの蚘事を読むこずもできたす。



これはハッカヌ誌の蚘事の完党バヌゞョンであるこずを思い出したす。



All Articles