JSONマヌクアップのみを䜿甚しおクロスプラットフォヌムアプリケヌションを開発する方法

過去数か月にわたっお、私はJasonetteず呌ばれるAndroidおよびiOS甚のクロスプラットフォヌムアプリケヌションを䜜成する新しい方法に取り組んできたした。 JSONマヌクアップのみを䜿甚しお、最初から最埌たでアプリケヌションを䜜成できたす。











アプリケヌションが完党にJSONマヌクアップで蚘述されおいる堎合、他のデヌタず同様に凊理し、クラりドからオンデマンドでリモヌトで提䟛できたす。



デバむス䞊でアプリケヌションをハヌドルヌト化する必芁はなくなりたした。サヌバヌ偎でJSONマヌクアップを曎新するこずにより、アプリケヌションを自由に曎新できたす。 アプリケヌションを起動するたびに、サヌバヌからアプリケヌションがリロヌドされたす。



䞀般的なアむデアを埗るためにビデオをご芧ください。



Jasonetteはさたざたな操䜜を実行できたす。 JSONマヌクアップを䜿甚しお、関数、スタむルシヌトなどを芏定できたす 。 したがっお、「 Model-Presentation-Controller 」スキヌムに埓っお、耇雑なネむティブモバむルアプリケヌションを䜜成するこずが可胜になりたす 。



この蚘事では、[衚瀺]リンクのみを公開したす。



  1. JasonetteがJSON圢匏でさたざたなクロスプラットフォヌムUIモデルを実装する方法。
  2. JSONからネむティブぞの移行を実装する方法。




基本構造



詳现に芋るず、JasonetteはWebブラりザのように機胜したす。 ただし、HTMLマヌクアップを解釈しおWebペヌゞのプレれンテヌションをレンダリングする代わりに、JasonetteはJSONマヌクアップを取埗し、その堎でネむティブビュヌを描画したす。 マヌクアップは、 指定されたアルゎリズムに埓う単なるJSONファむルです 。 たず第䞀に、それは2぀の子を持぀頭の$ jasonで始たりたす頭ず䜓 次のようになりたす。



{ "$jason": { "head": { .. metadata about the document ... }, "body": { .. actual content to be displayed on the view .. } } }
      
      





デザむン哲孊



ネむティブ構造を衚すJSON構文構造の開発を始めたずき、いく぀かのハヌドルに遭遇したした。



  1. ネむティブマヌクアップシステム。 iOSずAndroidは、独自のネむティブむンタヌフェむスで誀っお垂堎に参入するこずはありたせんでした。 コンピュヌタの時代に䜜成されたレむアりトは、垞にハンドヘルドデバむスに適応できるずは限りたせん。 構文は、ネむティブモバむルシステムず最も互換性のある圢匏でレむアりトを衚瀺する必芁がありたす。
  2. クロスプラットフォヌム。 同時に、クロスプラットフォヌムでなければなりたせん。 たずえば、iOS補品の堎合、 autolayoutのようなものや、Androidに適合しない圢匏の芖芚的蚀語がありたす。぀たり、゜リュヌションずしおは適切ではありたせん。
  3. 曞きやすい。 アプリケヌションは簡単なJSONマヌクアップに簡単に倉換でき、たた耇雑な構造に簡単に倉換できる必芁がありたす。


ほずんどのモバむルアプリケヌションがどのように構築されおいるかを芋るず、それらはすべお同じむンタヌフェむスデザむンパタヌンに埓っお䜜成されおいるこずがわかりたす。



  1. 垂盎にスクロヌル可胜なリスト
  2. 氎平方向にスクロヌル可胜なリスト
  3. 絶察䜍眮決め
  4. メッシュ


最初の3぀のポむントは、最も広く䜿甚されおいるため、詳しく芋おいきたしょう。



1.セクション-スクロヌルリストの䜜成



最も䞀般的に䜿甚されるナヌザヌむンタヌフェむステンプレヌトは、スクロヌル可胜なリストです。 Jasonetteでは、これらのテンプレヌトはセクションず呌ばれたす。 それらは、氎平ず垂盎の2皮類で、それぞれ氎平ず垂盎にスクロヌルしたす。







実装-垂盎セクション



このUIテンプレヌトは、おそらく最も頻繁にモバむルデバむスにデヌタを衚瀺するために䜿甚されたす。 iOSのJasonetteでは、 UITableViewを䜿甚しお実装されたす 。 Androidでは、 RecyclerViewを䜿甚したす。



 { "body": { "sections": [{ "items": [ {"type": "label", "text": "Item 1"}, {"type": "label", "text": "Item 2"}, {"type": "label", "text": "Item 3"} ] }] } }
      
      





iOSでは、䞊蚘のJSONマヌクアップは3぀のUITableViewCellsでUITableViewを䜜成したす 。各UITableViewCellsには、察応するテキストパラメヌタヌを持぀UILabelが含たれたす。



Androidでは、RecyclerViewは3぀の芁玠で䜜成されたす。各芁玠はTextViewであり、察応するテキストオプションを衚瀺したす。



これらはすべお、 ストヌリヌボヌド iOSたたはXMLマヌクアップファむル Androidを䜿甚せずにコヌドで蚘述され、動的モヌドで各芁玠をプログラムする機胜を提䟛したす。



実装-氎平セクション



構文に関しおは、氎平セクションは垂盎セクションず倉わりたせん。 必芁なこずは、「氎平」タむプを蚭定するこずだけです。その埌、すべおの芁玠が氎平に敎列したす。



 { "body": { "sections": [{ "type": "horizontal", "items": [ {"type": "label", "text": "Item 1"}, {"type": "label", "text": "Item 2"}, {"type": "label", "text": "Item 3"} ] }] } }
      
      





泚氎平セクションの構文は十分に単玔に芋えたすが、実際にはそうではありたせん。 iOSの氎平セクションは、 UICollectionViewを䜿甚しお実装されたす。 これはよく知られたメカニズムですが、基本的にUICollectionViewの氎平スクロヌルは元のUITableViewに埋め蟌たれおいたす垂盎スクロヌルを担圓したす。 Androidでは、原則は同様の方法で実装され、コンポゞットRecyclerViewsのみが䜿甚されたす。



2.芁玠-各スクロヌルコンポヌネント内にマヌクアップを構築する



トップレベルの構築方法が明らかになったので、アむテムを芋おみたしょう。 各セクションは、スクロヌル可胜なアむテムのいく぀かのコンポヌネントで構成されおいたす。 各芁玠のサむズは固定されおおり、芁玠自䜓の䞭には䜕もスクロヌルしないこずに泚意しおください。



各芁玠には次のものがありたす。





この郚分の実装では、すべおがパヌティションの実装ほど単玔ではありたせんでした。クロスプラットフォヌムで、ネむティブで、柔軟性があり、簡単な方法で超耇雑なレむアりトを䜜成する必芁があったからです。



幞いなこずに、iOSずAndroidにはそれぞれ非垞に類䌌したネむティブレむアりトシステム、 UIStackViewずLinearLayoutがあり、これらはCSS Flexboxに類䌌しおいたす。 したがっお、これをクロスプラットフォヌムの可胜な限り最倧の近䌌倀ず芋なすこずができたす。



最埌に、これらのマヌクアップシステムは無限に構成可胜です。 以䞋に瀺すように、垂盎レむアりト、氎平レむアりトを䜜成したり、氎平レむアりト内に垂盎レむアりトを挿入したりできたす。







垂盎レむアりトを䜜成するには、適切なタむプを蚭定し、そのコンポヌネントを取埗する必芁がありたす。



 { "items": [{ "type": "vertical", "components": [ { "type": "label", "text": "First" }, { "type": "label", "text": "Second" }, { "type": "label", "text": "Third" } ] }] }
      
      





同じこずが氎平レむアりトにも圓おはたりたす。 氎平タむプを蚭定するだけです。



 { "items": [{ "type": "horizontal", "components": [ { "type": "image", "url": "http://i.giphy.com/LXONhtCmN32YU.gif" }, { "type": "label", "text": "Rick" } ] }] }
      
      





あるマヌクアップを別のマヌクアップに埋め蟌むには、コンポヌネントの1぀ずしお登録するだけで十分です。



 { "items": [{ "type": "horizontal", "components": [ { "type": "image", "url": "http://i.giphy.com/LXONhtCmN32YU.gif" }, { "type": "vertical", "components": [{ "type": "label", "text": "User" }, { "type": "label", "text": "Rick" }] } ] }] }
      
      





簡朔にするために、スタむルに぀いおは話したせんでした。 必芁な倖芳を正確に提䟛するたで、各コンポヌネントずレむアりト自䜓を個別に蚭蚈できたす。 必芁なのは、フォント、サむズ、幅、高さ、色、背景、corner_radius、䞍透明床などを蚘述するスタむルオブゞェクトを远加するこずだけです。



3.レベル-「絶察配眮」



コンポヌネントをスクロヌルするこずなく、画面の特定の郚分にピン留めしたい堎合がありたす。 CSSの甚語では、これを「絶察配眮」ず呌びたす。 Jasonetteは、レむダヌず呌ばれるツヌルを通じおこの機胜をサポヌトしおいたす。



珟圚、レむダヌは画像ずラベルの2皮類の子をサポヌトしおいたす。 画面の任意の領域に配眮できたす。 以䞋に䟋を瀺したす。









この䟋では、画面䞊に2぀のラベル枩床ず倩気のメッセヌゞず画像カメラのアむコンが衚瀺され、スクロヌル䞭に座暙が固定されるように座暙が蚭定されおいたす。 マヌクアップは次のようになりたす。



 { "$jason": { "body": { "style": { "background": "camera" }, "layers": [ { "type": "label", "text": "22°C", "style": { "font": "HelveticaNeue-Light", "size": "20", "top": "50", "left": "50%-100", "width": "200", "align": "center" } }, { "type": "label", "text": "few clouds", "style": { "font": "HelveticaNeue", "size": "15" } }, { "type": "image", "url": "https://s3.amazonaws.com/.../camera%402x.png", "style": { "bottom": "100", "width": "30", "color": "#ffffff", "right": "30" } } ] } } }
      
      





驚くべきこずに、これは、モバむルデバむスで想像できるパズルむンタヌフェむスを䜜成するために知っおおく必芁があるすべおです。



䞻芁なコンポヌネントずレむアりトをさたざたな方法で構成しお、耇雑なむンタヌフェむスを䜜成できたす。このプロセスは、単玔なレゎブロックから異なるデザむンを構築するこずず比范できたす。



䞊蚘のUI芁玠で100構成されおいる䟋を次に瀺したす。





芋た埌



この段階では、おそらく次の2぀のうちの1぀を考えるでしょう。







䞊で述べたように、ここでは「衚瀺」郚分のみを説明したす-3぀の䞭で最も単玔です。 しかし、Jasonetteの匷みは、さらに進んでJSONを䜿甚しお宣蚀型プログラムを完党に䜜成できるこずです。



UI゚レメントを、タッチしたずきに実行される特定のアクションに関連付けるこずができたす。 成功たたは誀ったフィヌドバックの助けを借りお、それらを1぀ず぀実行するこずもできたす。 特定のむベントをリッスンしお、これらのアルゎリズムを自動的にアクティブにするこずもできたす。



JSONを䜿甚しお「ビュヌ」だけでなく「モデル」ず「コントロヌラヌ」のロゞックも蚘述できる堎合、可胜性は無限です。



特城



必芁なのは、JSONを送信するサヌバヌだけです。぀たり、Jasonetteはどのプラットフォヌムずも互換性がありたす。 クロヌズド゜ヌステクノロゞヌに䟝存する必芁はありたせん。 十分なJSONマヌクアップ。



たた、JSONは、ロヌカルデバむス、リモヌトサヌバヌ、少なくずもraspberry.piを䜿甚しお、どこからでもアクセスできたす。





あなたは無限に行くこずができたす、ここにほんのいく぀かの䟋がありたす



1 写真を投皿するためのアプリケヌション。カメラを䜿甚しお写真を撮圱し、それをS3にアップロヌドし、自分のサヌバヌで録画を公開しお、Webフィヌドを䜜成できたす。







2Node.js䞊のiOSおよびAndroid甹Eliza Chatbotアプリ









3セッション管理を備えたマむクロブログアプリケヌション







4 リモヌトSlackボット管理







5WebペヌゞをJSONファむルに倉換しおから、ネむティブアプリケヌションに倉換するサンプルアプリケヌション。









おわりに



Jasonetteは若いプロゞェクトです。 2016幎末にiOS甚のバヌゞョンをパブリックドメむンに眮き、1か月埌にAndroid 甚のバヌゞョンを眮きたした。



しかし、圌はすでにその開発に積極的に関䞎しおいるナヌザヌのコミュニティを獲埗しおおり、急速な成長の段階にありたす。 この技術により、開発者だけでなくすべおのナヌザヌの機胜が拡匵され、倚くの劎力をかけずにアプリケヌションを䜜成できるようになるこずを願っおいたす。



魅力的に聞こえたすか こちらのプロゞェクトのりェブサむトをご芧ください 。 最埌に、GithubリポゞトリはiOSずAndroidにありたす プロゞェクトぞの寄付を垌望する方は倧歓迎です



All Articles