9ã€ã®ã¯ãŒã«ãªApp Engineãããã説æãããããåªããŠãããã®ã¯ãããŸããïŒ ãã¡ããã10ã®èª¬æã
ã°ã«ãŒããã£ã¹ã«ãã·ã§ã³ã«åå ããŠãApp Engineã®äžéšã®æ©èœããã°ãã°èŠéããããŠããããšã«æ°ã¥ããã®ã§ãããã°ã©ã ãç°ãªãæ¹æ³ã§èšè¿°ã§ããèå³æ·±ãäºå®ã11åããå°ãå°ãªãéžæããŸããã ããããååãªèšèã§ãæåã®ããããèŠãŠãã ããã
1.ã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ã¯æ°åã§ã¯ãªãæååã§ã
ã»ãšãã©ã®äŸã§ã¯ãapp.yamlããã³appengine-web.xmlã®ãversionããã£ãŒã«ãã«çªå·ããããŸãããããã¯åãªãåæäºé
ã§ãã ã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ã¯ãURLã§äœ¿çšã§ããä»»æã®æååã«ããããšãã§ããŸãã ããšãã°ãããŒãžã§ã³ã«ãliveããšãdevããšããååãä»ãããšãã¢ãã¬ã¹ãlive.latestãã§äœ¿çšã§ããããã«ãªããŸãã
yourapp .appspot.com "and" dev.latestã
yourapp .appspot.comãã
2.ã¢ããªã±ãŒã·ã§ã³ã®è€æ°ã®ããŒãžã§ã³ãåæã«åäœããŠããå ŽåããããŸã
ãã©ã°ã©ã1ã§ç€ºåããããã«ãApp Engineã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã®è€æ°ã®ããŒãžã§ã³ããããã€ãããããã䞊è¡ããŠæäœã§ããŸãã ãã¹ãŠã®ããŒãžã§ã³ã¯åãããŒã¿ãŠã§ã¢ããŠã¹ãšmemcacheã䜿çšããŸãããç°ãªãã€ã³ã¹ã¿ã³ã¹ã§å®è¡ãããç°ãªãURLãæã¡ãŸãã 'live'ã®ããŒãžã§ã³ã¯yourapp.appspot.comïŒããã³æ¥ç¶ããä»ã®ãã¹ãŠã®ãã¡ã€ã³ïŒã®ã¢ãã¬ã¹ãæäŸããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®ãã¹ãŠã®ããŒãžã§ã³ã¯version.latest.yourapp.appspot.comã®åœ¢åŒã®ã¢ãã¬ã¹ã§å©çšã§ããŸãã è€æ°ã®ããŒãžã§ã³ã䜿çšãããšãå®éã®ããŒã¿ã§äœæ¥ç°å¢ã§æ°ãããªãªãŒã¹ããã¹ãããŠããã誰ã«ã§ãå
¬éã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®ç°ãªãããŒãžã§ã³ãåãèšèªã䜿çšããå¿
èŠãããªãããšã¯ããŸãç¥ãããŠããŸããïŒ Javaã§èšè¿°ãããã¢ããªã±ãŒã·ã§ã³ã®1ã€ã®ããŒãžã§ã³ãšPythonã§èšè¿°ããããã1ã€ã®ããŒãžã§ã³ãããå Žåãããã¯ããªãé¢çœãã§ãã
3. Javaã©ã³ã¿ã€ã ã¯ãJavaãã€ãã³ãŒãã«ã³ã³ãã€ã«ããããã¹ãŠã®èšèªããµããŒãããŸã
ã©ã³ã¿ã€ã ã¯JavascriptãšåŒã°ããŸãããå®éã«ã¯ãJVMãã€ãã³ãŒãã«ã³ã³ãã€ã«ãããèšèªã§AppEngineã¢ããªã±ãŒã·ã§ã³ãæžãããšã劚ãããã®ã¯ãããŸããã äžè¬ã«ããã§ã«JRubyãGroovyãScalaãRhinoïŒJavaScriptã€ã³ã¿ãŒããªã¿ãŒïŒãQuercusïŒPHPã€ã³ã¿ãŒããªã¿ãŒ/ã³ã³ãã€ã©ãŒïŒãããã«ã¯Jythonã§AppEngineã¢ããªã±ãŒã·ã§ã³ãäœæãã人ã
ãããŸãã ãã®
WikiããŒãžã§ã¯ ãã³ãã¥ããã£ã§äœãæ©èœããäœãæ©èœããªãã£ããã«ã€ããŠã®ç¥èãå
±æããŠããŸãã
4.æŒç®åãINãããã³ãïŒ=ãã¯ãããŒã¿ãŠã§ã¢ããŠã¹ã«å¯ŸããŠè€æ°ã®ã¯ãšãªãçæããŸã
Pythonç°å¢ã®æŒç®åãINããšãïŒ=ãã¯å®éã«SDKã«å®è£
ãããããã³ãããã®äžãã¯ããã€ãã®ã¯ãšãªã«å€æãããŸãã
ããšãã°ããSELECT * FROM People WHERE name INïŒ 'Bob'ã 'Jane'ïŒããšããã¯ãšãªã¯ããSELECT * FROM People WHERE name = 'Bob'ãããã³ãSELECT * FROM People WHERE name = 'ãã®å®è¡ã«çžåœãã2ã€ã®ã¯ãšãªã«å€æãããŸããžã§ãŒã³ãããšçµæãçµã¿åãããŸãã åæã«è€æ°ã®æŒç®åã䜿çšãããšãå¿
èŠãªã¯ãšãªã®æ°ãããã«å¢å ãããããã¯ãšãªãSELECT * FROM People WHERE name INïŒ 'Bob'ã 'Jane'ïŒAND ageïŒ= 25ãã¯ãæ¡ä»¶ã®ãã¹ãŠã®ããªã¢ã³ãã«å¯ŸããŠ4ã€ã®å®éã®ã¯ãšãªãå®è¡ããŸãïŒå¹Žéœ¢ã¯ãŸãã¯25æ³ä»¥äžã§ãååã¯ãBobããŸãã¯ãJaneãã§ãïŒããããã1ã€ã®çµæã«çµåããŸãã
ãã®ããããããã®æŒç®åã®ããã€ããåäžã®ã¯ãšãªã§äœ¿çšããªãããã«ããããšããå§ãããŸãã ããšãã°ãäžçåŒã§ã¯ãšãªã䜿çšããå°æ°ã®ã¬ã³ãŒãã®ã¿ãåºæºãæºãããšäºæ³ããå ŽåïŒäžèšã®äŸã§ã¯ã25æ³ã®äººãã»ãšãã©ããªãããšãããã£ãŠããå ŽåïŒãäžçåŒãªãã§ã¯ãšãªãå®è¡ããæ¹ãå¹ççã§ããçµæãèªåã§ç¹°ãè¿ããé©åã§ãªãã¬ã³ãŒããç Žæ£ããŸãã
5.å¹çãé«ããããã«ãããã±ãŒãžã§æ¿å
¥ãã¯ãšãªãããã³åé€ã®æäœãçµã¿åãããããšãã§ããŸã
ãã§ãããgetïŒïŒæäœãªã©ãããŒã¿ãŠã§ã¢ããŠã¹ã«ãªã¯ãšã¹ããè¡ããã³ã«ãã¢ããªã±ãŒã·ã§ã³ã¯ãã®ãªã¯ãšã¹ããããŒã¿ãŠã§ã¢ããŠã¹ã«éä¿¡ããããã§ãªã¯ãšã¹ããåŠçãããŠå¿çãè¿ãããŸãã ãã®èŠæ±ãšå¿çã®ãµã€ã¯ã«ã«ã¯æéããããã次ã
ãšå€ãã®æäœãè¡ããšããŠãŒã¶ãŒãçµæãåŸ
ã€ãŸã§ã«ãããªãã®ä»å ç©ãè¿œå ãããå¯èœæ§ããããŸãã
幞ããªããšã«ãååŸã®ã¢ãŒã·ã§ã³ã®æ°ãæžããç°¡åãªæ¹æ³ããããŸãïŒãããæäœã db.putïŒïŒãdb.getïŒïŒãdb.deleteïŒïŒã®åé¢æ°ã¯ãéåžžã®åäžã®åŒã³åºãã«å ããŠãå
¥åãªã¹ããåãåãããšãã§ããŸãã ãªã¹ããæå®ãããšãããŒã¿ãŠã§ã¢ããŠã¹ãžã®1åã®åŒã³åºãã§ãªã¹ãå
ã®ãã¹ãŠã®èŠçŽ ã䜿çšããŠæäœãå®è¡ããã䞊è¡ããŠå€ãã®æéãç¯çŽã§ããŸãã ããšãã°ã次ã®å
žåçãªãœãªã¥ãŒã·ã§ã³ãèŠãŠãã ããã
for entity in MyModel.all().filter("color =", old_favorite).fetch(100): entity.color = new_favorite entity.put()
ãã®ã¹ã¿ã€ã«ã®æŽæ°ã§ã¯ãããŒã¿ãååŸããããã®ãªããžããªãžã®ã¢ã¯ã»ã¹ã«å ããŠããªããžã§ã¯ãã®æŽæ°ããšã«1ã€ã®è¿œå ã¢ã¯ã»ã¹ãå¿
èŠã§ããçµæãšããŠãªããžããªãžã®101ã¢ã¯ã»ã¹ãååŸããŸãã æ¯èŒã®ããã«ããã®äŸãèŠãŠãã ããïŒ
updated = [] for entity in MyModel.all().filter("color =", old_favorite).fetch(100): entity.color = new_favorite updated.append(entity) db.put(updated)
2è¡è¿œå ããããšã§ããªããžããªãžã®ã¢ã¯ã»ã¹æ°ã101ãã2ã«æžãããŸããïŒ
6.ããŒã¿ãŠã§ã¢ããŠã¹ã®ããã©ãŒãã³ã¹ã¯ãæ ŒçŽãããŠãããªããžã§ã¯ãã®æ°ã«äŸåããŸããã
å€ãã®äººã¯ã100,000ã100äžããŸãã¯1000äžã®ãªããžã§ã¯ããä¿åããå Žåã®ã¹ãã¬ãŒãžã®åäœãå°ããŸãã ã¹ãã¬ãŒãžã®äž»ãªå©ç¹ã®1ã€ã¯ããã®ããã©ãŒãã³ã¹ããã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠä¿åããããªããžã§ã¯ãã®æ°ã«å®å
šã«äŸåããªãããšã§ãã ããã«ãApp Engineã®ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã®å®è³ªçã«ãã¹ãŠã®ãªããžã§ã¯ãã¯ã1ã€ã®BigTableããŒãã«ã«ä¿åãããŸãïŒ ããã«ãã¯ãšãªã«é¢ããŠã¯ãããã€ãã£ãã«ãå®è¡ã§ãããã¹ãŠã®ã¯ãšãªïŒæŒç®åãINããšãïŒ=ãã䜿çšããã¯ãšãªãé€ã-äžèšåç
§ïŒã®å®è¡ã³ã¹ãã¯åãã§ããã¯ãšãªã®å®è¡ã³ã¹ãã¯ã¬ã³ãŒãã®æ°ã«æ¯äŸããŸãã圌ãè¿ããŸãã
7.ã€ã³ããã¯ã¹ã®äœæã«å¿
èŠãªæéã¯ããã®ãµã€ãºã«å®å
šã«ã¯äŸåããŸãã
App Engineã¢ããªã±ãŒã·ã§ã³ã«æ°ããã€ã³ããã¯ã¹ãè¿œå ãããšãäœæã«æéããããããšããããŸãã ãã®çç±ã«ã€ããŠå°ãããšãå€ãã®äººãããŒã¿éã«èšåãããããè²»ãããæéãšæ¯èŒããŸãã ãã ããæ°ããã€ã³ããã¯ã¹ãäœæãããªã¯ãšã¹ãã¯ããã¹ãŠã®AppEngineã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ããã¯ã¹ãäœæããéäžã·ã¹ãã ã«ãã£ãŠãã¥ãŒã«å
¥ãããåŠçãããŸãã ããŒã¯æã«ã¯ãä»ã®äººãã€ã³ããã¯ã¹äœæã®ãªã¯ãšã¹ãã®åã«ããå¯èœæ§ããããŸããã€ã³ããã¯ã¹ã®äœæã¯å°ãåŸã§éå§ã§ããŸãã
8.ä¿åããŒã¿ã®éïŒãä¿åããŒã¿ãïŒã¯1æ¥ã«1åèšç®ãããŸãã
1æ¥1åãã¢ããªã±ãŒã·ã§ã³ã®ãStored Dataãã®å€ãåèšç®ããã¿ã¹ã¯ãå®è¡ããŸãã ãã®æç¹ã§ã®ããŒã¿ãŠã§ã¢ããŠã¹ã®å®éã®äœ¿çšã®å€ã䜿çšãããŸãã ãã®éã«ããããããªããžããªã®äœ¿çšæ¹æ³ãèæ
®ããŠãå³ãæŽæ°ããŸããããã«ããã䜿çšæ³ã®ãã¹ãŠã®å€æŽãéåžžã«è¿
éã«ç¢ºèªã§ããŸãã ããã¯ãå€ãã®ãªããžã§ã¯ããå€æ°ã®ãªããžã§ã¯ããåé€ããåŸãã¹ãã¬ãŒãžããã°ãããæºæ¯ãã®ãŸãŸã§ãããšãã«ããã®ãããªå¹æã芳å¯ããçç±ã瀺ããŠããŸãã ãã¡ãããæ¯æãæã«ã¯ã確èªæžã¿ã®å€ã®ã¿ã䜿çšãããŸãã
9.ãã³ãã©ãŒãapp.yamlãweb.xmlãããã³appengine-web.xmlãã¡ã€ã«ã«ãªã¹ããããé åºã¯éèŠã§ã
ã¢ããªã±ãŒã·ã§ã³ãæ§æããéãå€ãã®å Žåãæ§æãã¡ã€ã«å
ã®ãã³ãã©ãŒãäžããäžã«é çªã«åŠçãããããšãå¿ããŠããŸãã埮åŠãªãšã©ãŒãçºçããŸãã ããšãã°ãremote_apiãèšå®ãããšããå€ãã®äººããããè¡ããŸãã
handlers: - url: /.* script: request.py - url: /remote_api script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py login: admin
äžèŠããã¹ãŠã¯ããã§åé¡ãããŸãããããã³ãã©ãŒãé çªã«åŠçããããããrequest.pyãã³ãã©ãŒãæåã«æ€åºããããã¹ãŠã®èŠæ±ïŒremote_apiãå«ãïŒãrequest.pyãééããŸãã request.pyã¯remote_apiã«ã€ããŠäœãç¥ããªãããã404 Not Foundãšã©ãŒãè¿ããŸãã 解決çã¯ç°¡åã§ã-ãcatch everythingããã³ãã©ãŒãæåŸã«ããããšã確èªããŠãã ããã
Javaå®è¡ç°å¢ã«ãåãããšãåœãŠã¯ãŸããŸããããã1ã€ã®å¶éããããŸããappengine-web.xmlã®ãã¹ãŠã®éçãã³ãã©ãŒã¯ãweb.xmlã®åçãã³ãã©ãŒãããæ©ãåŠçãããŸãã
10. GQLã¯ãšãªãæåã§èšè¿°ããå¿
èŠã¯ãããŸãã
次ã®ãããªéåžžã«é »ç¹ãªã¢ã³ããã¿ãŒã³ã1ã€ãããŸãã
q = db.GqlQuery("SELECT * FROM People " "WHERE first_name = '" + first_name + "' AND last_name = '" + last_name + "'")
ã³ãŒããã€ã³ãžã§ã¯ã·ã§ã³ã«å¯ŸããŠè匱ã«ããããšã«å ããŠãæåã®ãšã¹ã±ãŒãïŒãŠãŒã¶ãŒã®ååã«ã¢ãã¹ãããã£ãå«ãŸããŠããå Žåã¯ã©ãããã°ããã§ããããïŒã«å¯ŸåŠããå¿
èŠããããŸãã 幞ããªããšã«ãGqlQueryã¯ãã©ã¡ãŒã¿ãŒçœ®æãè¡ãããšãã§ããŸããããã¯ãæ瀺çãªæååã®è¿œå ãé¿ããããã®æšæºçãªæ¹æ³ã§ãã ãã©ã¡ãŒã¿ã®çœ®æã«ãããäžèšã®ã¯ãšãªã¯æ¬¡ã®ããã«æžãæããããšãã§ããŸãã
q = db.GqlQuery("SELECT * FROM People " "WHERE first_name = :1 " "AND last_name = :2", first_name, last_name)
GqlQueryã¯ãçªå·ä»ããã©ã¡ãŒã¿ãŒã«å ããŠãååä»ãã®ååãšå€ã®ãã¢ãåŒæ°ãšããŠæž¡ãããšããµããŒãããŠããŸãã
q = db.GqlQuery("SELECT * FROM People " "WHERE first_name = :first_name " "AND last_name = :last_name", first_name=first_name, last_name=last_name)
ããã«ãããããã¯ãªãŒã³ãªã³ãŒããçæãããã ãã§ãªããèå³æ·±ãæé©åã䜿çšããããšãã§ããŸãã åãã¯ãšãªãç°ãªãå€ã§äœåºŠãå®è¡ããå¿
èŠãããå Žåã¯ãGqlQueryã®.bindïŒïŒã䜿çšããŠãåãªã¯ãšã¹ãã®ãã©ã¡ãŒã¿ãŒå€ããæ¥ç¶ãã§ããŸãã ããã¯ããªã¯ãšã¹ããäžåºŠã ã解æããå¿
èŠããããããæ¯åæ°ãããªã¯ãšã¹ããäœæãããããé«éã§ãã
q = db.GqlQuery("SELECT * FROM People " "WHERE first_name = :first_name " "AND last_name = :last_name") for first, last in people: q.bind(first, last) person = q.get() print person
æçš¿è
ïŒNick JohnsonãApp EngineããŒã
Javaã¯ãSun MicrosystemsãIncã®åæšãŸãã¯ç»é²åæšã§ãã ç±³åœããã³ãã®ä»ã®åœãPSã å¥åŠãªããšã«ãç§ã¯ããã©ããããšããã¬ãã¥ãŒãã ãã§ç³ãèš³ãªããšæããŸãããä¿èšŒä»ãã®ãå
¬éãã¯æ®å¿µã§ã¯ãããŸããã§ãããããããã¯ã¯ãŸã å
¬éãããŠããŸããïŒãã¡ãããæªå®æïŒã ç§ã¯æ¥ããããã£ããã¹ãŠã®äººã«è¬çœªããŸã-ãããŠããã»ã©ç·åŒµããªãã§ãã ãã:-)