Proč (ne)používat React Native?
Aplikace, Development
06. 5. 2021
Platíte dvě vývojářské firmy, aby vytvořili dvě úplně stejné mobilní aplikace. Zní to jako začátek vtipu o špatném podnikateli. V konkurenčním světě Googlu a Applu se ale jedná o tvrdou realitu. Může tuto situaci vyřešit právě React Native?
Dva operační systémy vládnou všem
V posledních letech se výběr mobilních zařízení značně zúžil. Jasně, nových značek telefonů přibývá jako hub po dešti. Řeč je ale o operačních systémech. Android nebo iOS je nainstalovaný na více než 99 % všech mobilních zařízení na trhu. Pokud si chcete koupit nový mobil, ve výběru operačního systému moc možností nemáte.
Pro vybíravého zákazníka to tedy moc dobrá zpráva není. Naopak pro vývojáře a investory by se mohlo zdát, že je to výhra. Pokud chcete vytvořit vlastní mobilní aplikaci, máte jistotou, že pokud pokryjete pouhé dvě platformy, pokryjete zároveň celý trh.
Přestože produkty od firmy Apple patří do dražší cenové kategorie, jejich zastoupení na trhu stoupá a aktuálně se blíží 30 %. To rozhodně není zanedbatelné číslo. Pokud to tedy se svojí mobilní aplikací myslíte vážně, nemáte na výběr. Musíte investovat do obou platforem.
Proč vyvíjet aplikaci dvakrát?
Pokud nemáte s vývojem mobilních aplikací zkušenost, okamžitě vás napadne otázka: Proč nevytvořit jednu aplikaci a tu nahrát zároveň na Google Play a App Store? Popravdě, byli bychom velice rádi, kdyby to takhle fungovalo. Tento článek by nikdy nevznikl a všichni mobilní vývojáři by dosáhli programátorské nirvány. V dnešní době sice něco podobného možné je, ale tak jednoduché to není. O tom ale později.
Nativní nástroje Applu a Androidu jsou velice odlišné. I když výsledné aplikace vypadají identicky, pod kapotou fungují jinak. Je to jako mít dvě auta se stejnou karosérií, ale jiným motorem. Vypadají stejně, ovládají se stejně, ale každé z nich bylo vyrobeno z různých součástek.
V čem se liší programování pro Android a iOS:
- Programovací jazyky: iOS používá Swift – Android Javu nebo Kotlin.
- Vývojové prostředí: iOS používá Xcode – Android používá Android Studio.
- Layout system: iOS používá UIKit – Android je založen na XML.
- Aplikační programovací rozhraní: Jedná se o funkce, které se volají z programovacího jazyka a umožňují aplikaci komunikovat s operačním systémem. Stejné funkcionality mají na každé platformě jiné rozhraní a mohou fungovat jinak. Navíc existují funkcionality, které druhá platforma nemá vůbec.
- Mnoho dalších vyčerpávajících bodů…
Zápletka: multiplatformní vývoj
I když jsou oba zmíněné operační systémy v některých věcech rozdílné, vzniká spousta různých nástrojů a frameworků, které umožňují vyvíjet mobilní aplikace pro obě platformy najednou. Přece jen přes všechny jejich rozdílnosti toho mají také hodně společného.
Multiplatformní vývoj není ve světě programování žádnou novinkou. Příkladem mohou být programy psané v Javě, které fungují na většině počítačových operačních systémech. Samotný program se spouští v tzv. Java Virtual Machine (JVM), který řeší všechny rozdíly mezi operačními systémy za programátora.
Dalším zajímavým příkladem je Unity, které je hojně používáno pro tvorbu her. Existuje spousta grafických karet, chipů a dalších hardwarových zařízení. Dokážete si představit programovat 3D hru speciálně pro každou známou grafickou kartu na trhu? Unity vytváří nástavbu, pomocí které jeden kód můžete přenést na zařízení jako je PlayStation, Xbox, Windows, Mac nebo dokonce i mobilní telefon.
Mobilní multiplatformní nástroje
Stejně jako pro počítačové programy nebo 3D grafiku, i pro mobilní zařízení existuje spousta možností jak vyvíjet multiplatformě. Dnes se budeme bavit o Reactu Native, poměrně mladém, ale velmí populárním frameworku.
Další příklady nástrojů pro mobilní multiplatformní vývoj:
- Xamarin
- Flutter
- Adobe PhoneGap
- Ionic Framework
Multiplaformních nástrojů pro mobilní vývoj je ale mnohem víc. Skoro by se zdálo, že nativní vývoj je minulostí a už nás nemusí trápit vytváření duplicitních aplikací pro více platforem. Jak už ale bylo psáno, kdyby v tom nebyl žádný háček, pravděpodobně právě nečtete tento článek.
React Native
Z aktuálně dostupných možností pro mobilní multiplafomní vývoj se nejvíce mluví o React Native. Jedná se o open source projekt vyvinutý Facebookem v roce 2015. Aplikaci napíšete pouze jednou a následně ji můžete přenést nejen na iOS a Android, ale také například na počítačové operační systémy Windows nebo macOS.
Existují multiplatformní nástroje, které používají tzv. „webview“. Uživatelské rozhraní aplikace je vykresleno pomocí webového rozhraní, což přináší řadu nevýhod. Naproti tomu, jak už název napovídá, React Native vytváří mobilní aplikace, které jsou 100% nativní.
React Native používá stejný programovací koncept jako React, framework pro vývoj dynamických webových stránek. Stejně jako v Reactu se jako programovací jazyk používá Javascript. Ten ovládá většina webových vývojářů, kterých je mezi programátory nejvíc. Právě z tohoto důvodou se může zdát framework jako ideální volba.
Hlavní výhody
Pro vytvoření mobilní aplikace pro obě platformy vám stačí jeden vývojářský tým se znalostí jednoho jazyka. V době, kdy jsou programátoři drazí a těžko k sehnání, tuhle výhodu určitě ocení i HR oddělení.
Vývoj je až dvakrát rychlejší a levnější. Za stejnou dobu můžete naimplementovat dvojnásobek funkcionalit oproti nativnímu vývoji. Alespoň teoreticky.
Javascript patří mezi nejrozšířenější programovací jazyky na světě. Díky tomu má rozsáhlou komunitu, takže při vývoji není potřeba znovu vymýšlet kolo. Ve veřejném registru javascriptových knihoven je více než jeden milión volně dostupných balíčků.
Jelikož je framework postaven na jeho webovém předchůdci, pro webové programátory používající React je snadné přejít na jeho mobilní alternativu.
Potenciální problémy
Největším problémem je, že ne všechny části aplikace lze psát multiplatformně. Některé části kódu je potřeba psát nativně. Může dojít k situaci, kdy je aplikace napsána ze 40 % v React Native, 30 % ve Swiftu a 30 % v Javě. Místo jednoho kódu a jednoho programátora máte tři kódové báze a tři programátory. Původní záměr ušetřit čas a peníze se může proměnit ve velké finanční a náborové problémy.
I když je React Native překládán do nativního kódu, výsledná aplikace je méně výkonná. V případě výpočetně náročných operací je React Native několikanásobně pomalejší než při použití nativního buildu.
React Native je psán v Javascriptu, který je dynamicky typovaný. Na jednu stranu to umožňuje rychlejší vývoj, na druhou stranu to může zhoršovat udržitelnost aplikace, obzvlášť v případě větších projektů.
React Native je poměrně mladý projekt a rychle se vyvíjí. Díky tomu může obsahovat bugy a při aktualizacích budete často narážet na změny, které nejsou kompatibilní s verzí, kterou právě používáte. Tento fakt přirozeně zvyšuje náročnost na údržbu kódu.
Přechod Airbnb na React Native
Výše zmíněných výhod si byla moc dobře vědoma i firma Airbnb (služba zprostředkující pronájem ubytování). Proto se v roce 2016 rozhodla pro React Native. Od přechodu na novou technologii si slibovali zkvalitnění vývoje své mobilní aplikace – psaní jednotného kódu, rychlejší vývoj a větší udržitelnost kvality produktu.
Nadšení z nové technologie netrvalo dlouho a v roce 2018 se Airbnb rozhodlo od používání React Native upustit. Framework nedokázal splnit cíle, které od jeho používání vývojáři očekávali. Nedostatky zkrátka nakonec převýšily výhody.
Jaké z toho plyne ponaučení? Nenechte se snadno zlákat moderními trendy a vybírejte takové technologie pro vývoj, které vyhovují vaším požadavkům. Každý projekt je unikátní.
Kdy použít React Native
Pokud se rozhodnete vyvíjet v React Native, mějte se na pozoru. Obecně se dá říct, že je vhodnější pro jednodušší projekty.
Kdy je vhodné použít React Native:
- Aplikace nedisponuje složitými funkcemi specifickými pro platformu.
- Nemáte v plánu aplikaci rozšiřovat a udělat z ní druhý Instagram.
- Potřebujete udělat jednoduchou aplikaci rychle a levně.
Kdy jít klasickou cestou
Pokud vaše aplikace disponuje mnoha funkcemi, máte ji v plánu do budoucna rozšiřovat a je důležité, aby byla rychlá, jděte nativní cestou.
Kdy je vhodné vyvíjet nativně:
- Aplikace je robustní a máte s ní do budoucna velké plány.
- Je kladen důraz na výkon aplikace.
- Máte dost finančních prostředků na nativní vývoj.
Dobrý sluha, špatný pán
Multiplatformní vývoj je dvousečná zbraň a to platí i pro React Native. Nabízí řadu výhod, ale zároveň skýtá mnohá úskalí. Je potřeba si uvědomit, že žádná technologie není univerzální. Všechno má své specifické využití a u vývojářských technologií to platí dvojnásob.