
ã¢ããªã±ãŒã·ã§ã³ãå®å šã«JSONããŒã¯ã¢ããã§èšè¿°ãããŠããå Žåãä»ã®ããŒã¿ãšåæ§ã«åŠçããã¯ã©ãŠããããªã³ããã³ãã§ãªã¢ãŒãã§æäŸã§ããŸãã
ããã€ã¹äžã§ã¢ããªã±ãŒã·ã§ã³ãããŒãã«ãŒãåããå¿ èŠã¯ãªããªããŸããããµãŒããŒåŽã§JSONããŒã¯ã¢ãããæŽæ°ããããšã«ãããã¢ããªã±ãŒã·ã§ã³ãèªç±ã«æŽæ°ã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããã³ã«ããµãŒããŒããã¢ããªã±ãŒã·ã§ã³ããªããŒããããŸãã
äžè¬çãªã¢ã€ãã¢ãåŸãããã«ãããªãã芧ãã ããã
Jasonetteã¯ããŸããŸãªæäœãå®è¡ã§ããŸãã JSONããŒã¯ã¢ããã䜿çšããŠãé¢æ°ãã¹ã¿ã€ã«ã·ãŒããªã©ãèŠå®ã§ããŸã ã ãããã£ãŠãã Model-Presentation-Controller ãã¹ããŒã ã«åŸã£ãŠãè€éãªãã€ãã£ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãäœæããããšãå¯èœã«ãªããŸã ã
ãã®èšäºã§ã¯ã[衚瀺]ãªã³ã¯ã®ã¿ãå ¬éããŸãã
- JasonetteãJSON圢åŒã§ããŸããŸãªã¯ãã¹ãã©ãããã©ãŒã UIã¢ãã«ãå®è£ ããæ¹æ³ã
- 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æ§ææ§é ã®éçºãå§ãããšããããã€ãã®ããŒãã«ã«ééããŸããã
- ãã€ãã£ãããŒã¯ã¢ããã·ã¹ãã ã iOSãšAndroidã¯ãç¬èªã®ãã€ãã£ãã€ã³ã¿ãŒãã§ã€ã¹ã§èª€ã£ãŠåžå Žã«åå ¥ããããšã¯ãããŸããã§ããã ã³ã³ãã¥ãŒã¿ã®æ代ã«äœæãããã¬ã€ã¢ãŠãã¯ãåžžã«ãã³ããã«ãããã€ã¹ã«é©å¿ã§ãããšã¯éããŸããã æ§æã¯ããã€ãã£ãã¢ãã€ã«ã·ã¹ãã ãšæãäºææ§ã®ãã圢åŒã§ã¬ã€ã¢ãŠãã衚瀺ããå¿ èŠããããŸãã
- ã¯ãã¹ãã©ãããã©ãŒã ã åæã«ãã¯ãã¹ãã©ãããã©ãŒã ã§ãªããã°ãªããŸããã ããšãã°ãiOS補åã®å Žåã autolayoutã®ãããªãã®ããAndroidã«é©åããªã圢åŒã®èŠèŠçèšèªããããŸããã€ãŸãããœãªã¥ãŒã·ã§ã³ãšããŠã¯é©åã§ã¯ãããŸããã
- æžããããã ã¢ããªã±ãŒã·ã§ã³ã¯ç°¡åãªJSONããŒã¯ã¢ããã«ç°¡åã«å€æã§ãããŸãè€éãªæ§é ã«ç°¡åã«å€æã§ããå¿ èŠããããŸãã
ã»ãšãã©ã®ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãã©ã®ããã«æ§ç¯ãããŠããããèŠããšããããã¯ãã¹ãŠåãã€ã³ã¿ãŒãã§ã€ã¹ãã¶ã€ã³ãã¿ãŒã³ã«åŸã£ãŠäœæãããŠããããšãããããŸãã
- åçŽã«ã¹ã¯ããŒã«å¯èœãªãªã¹ã
- æ°Žå¹³æ¹åã«ã¹ã¯ããŒã«å¯èœãªãªã¹ã
- 絶察äœçœ®æ±ºã
- ã¡ãã·ã¥
æåã®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.èŠçŽ -åã¹ã¯ããŒã«ã³ã³ããŒãã³ãå ã«ããŒã¯ã¢ãããæ§ç¯ãã
ãããã¬ãã«ã®æ§ç¯æ¹æ³ãæããã«ãªã£ãã®ã§ãã¢ã€ãã ãèŠãŠã¿ãŸãããã åã»ã¯ã·ã§ã³ã¯ãã¹ã¯ããŒã«å¯èœãªã¢ã€ãã ã®ããã€ãã®ã³ã³ããŒãã³ãã§æ§æãããŠããŸãã åèŠçŽ ã®ãµã€ãºã¯åºå®ãããŠãããèŠçŽ èªäœã®äžã«ã¯äœãã¹ã¯ããŒã«ããªãããšã«æ³šæããŠãã ããã
åèŠçŽ ã«ã¯æ¬¡ã®ãã®ããããŸãã
- ã©ãã«ãç»åããã¿ã³ãããã¹ããšãªã¢ãªã©ã1ã€ã®ã³ã³ããŒãã³ãã®ã¿
- ãããã®ã³ã³ããŒãã³ãã®ããããã®çµã¿åãã
ãã®éšåã®å®è£ ã§ã¯ããã¹ãŠãããŒãã£ã·ã§ã³ã®å®è£ ã»ã©åçŽã§ã¯ãããŸããã§ãããã¯ãã¹ãã©ãããã©ãŒã ã§ããã€ãã£ãã§ãæè»æ§ããããç°¡åãªæ¹æ³ã§è¶ è€éãªã¬ã€ã¢ãŠããäœæããå¿ èŠããã£ãããã§ãã
幞ããªããšã«ã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ã䜿çšããŠãã©ãããã§ãã¢ã¯ã»ã¹ã§ããŸãã
- Webã¢ããªããæã¡ã§ããïŒ æ¢ã«Webã¢ããªã±ãŒã·ã§ã³ãããå Žåã¯ãAPIã«ãªã¯ãšã¹ããéä¿¡ããã ãã§ãNode.jsãRailsãDjangoãPHPããŸãã¯ãã®ä»ã®Webã¢ããªã±ãŒã·ã§ã³çšã®ã¢ãã€ã«ãã€ãã£ãããŒãžã§ã³ãå³åº§ã«äœæã§ããŸãã
- ãµãŒããŒãå¿ èŠãããŸãã ãModel-View-Controlã³ã³ãããŒã©ãŒå šäœãåäžã®ã¹ã¿ã³ãã¢ãã³JSONãã¡ã€ã«ã«é 眮ã§ãããããå®éã«ã¯ãããŒã¿ãä¿åããŠæäœããå Žæãéžæã§ããŸãã PastebinãŸãã¯Githubã§åäœããéçJSONãã¡ã€ã«ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãäœæããããšãã§ããŸãïŒ
- HTML Webãµã€ããã¢ããªã±ãŒã·ã§ã³ã«å€æããŸã ãJasonetteã«ã¯ã cheerioã©ã€ãã©ãªã§ãµããŒããããŠãã匷åãªHTML-JSONããŒãµãŒããããŸããããã«ãããHTMLãªããžã§ã¯ããJSONãªããžã§ã¯ãã«å€æã§ããŸãã ãããŠããã®å€æåŸã«ã§ããããšã¯ããã§ã«ç¥ã£ãŠããŸããå€æãããJSONãã¡ã€ã«ãããã€ãã£ãã€ã³ã¿ãŒãã§ã€ã¹ãäœæããŸãã ãããã£ãŠãAPIãæããªãWebãµã€ãããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã«å€ããããšãã§ããŸãã ãã¡ãããå¯èœãªéãJSONã䜿çšããããšããå§ãããŸãããããã§ãã¯ãŒã«ã§ãã
ããªãã¯ç¡éã«è¡ãããšãã§ããŸããããã«ã»ãã®ããã€ãã®äŸããããŸãïŒ
1ïŒ åçãæçš¿ããããã®ã¢ããªã±ãŒã·ã§ã³ãã«ã¡ã©ã䜿çšããŠåçãæ®åœ±ãããããS3ã«ã¢ããããŒãããèªåã®ãµãŒããŒã§é²ç»ãå ¬éããŠãWebãã£ãŒããäœæã§ããŸãã

2ïŒNode.jsäžã®iOSããã³AndroidçšEliza Chatbotã¢ããª

3ïŒã»ãã·ã§ã³ç®¡çãåãããã€ã¯ãããã°ã¢ããªã±ãŒã·ã§ã³


4ïŒ ãªã¢ãŒãSlackããã管ç

5ïŒWebããŒãžãJSONãã¡ã€ã«ã«å€æããŠããããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã«å€æãããµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã

ãããã«
Jasonetteã¯è¥ããããžã§ã¯ãã§ãã 2016幎æ«ã«iOSçšã®ããŒãžã§ã³ããããªãã¯ãã¡ã€ã³ã«çœ®ãã1ãæåŸã«Android çšã®ããŒãžã§ã³ã眮ããŸããã
ãããã圌ã¯ãã§ã«ãã®éçºã«ç©æ¥µçã«é¢äžããŠãããŠãŒã¶ãŒã®ã³ãã¥ããã£ãç²åŸããŠãããæ¥éãªæé·ã®æ®µéã«ãããŸãã ãã®æè¡ã«ãããïŒéçºè ã ãã§ãªãïŒãã¹ãŠã®ãŠãŒã¶ãŒã®æ©èœãæ¡åŒµãããå€ãã®åŽåããããã«ã¢ããªã±ãŒã·ã§ã³ãäœæã§ããããã«ãªãããšãé¡ã£ãŠããŸãã
é åçã«èãããŸããïŒ ãã¡ãã®ãããžã§ã¯ãã®ãŠã§ããµã€ããã芧ãã ãã ã æåŸã«ãGithubãªããžããªã¯iOSãšAndroidã«ãããŸã ïŒãããžã§ã¯ããžã®å¯ä»ãåžæããæ¹ã¯å€§æè¿ã§ãïŒïŒ