æåã®ããŒãã§ã¯ãWindows Azureã¯ã©ãŠãã§RESTful APIãäœæããæ¹æ³ãšãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã§RESTful APIã䜿çšããæ¹æ³ã«ã€ããŠèª¬æããŸããã ãã®ããã¹ããšäŸã¯ãã®èšäºã«å€§ããäŸåããŠããããããã®èšäºãããç解ããããšããå§ãããŸãã
ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³åãã®ã¯ã©ãŠãããã¯ãšã³ãã®éçºã«é¢ããèšäºã®ç¬¬2éšã§ã¯ãAPIã®ããŒã éçºã®ã¡ãªãããæ倧åããæ¹æ³ã1åæžãæ¹æ³ããããã䜿ãæ¹æ³ãããã³ã³ãã¥ããã£ã®ãã«ãã䜿çšããæ¹æ³ã«ã€ããŠèª¬æããŸãã å§ããŸãããã
Windows AzureãšGit
æ¢ã«èª€ã£ã話ãèããŠããããã«ãMicrosoftã¯æè¿ããªãŒãã³ãœãŒã¹ãã¯ãããžãŒã«æ³šç®ãéããããã«ãªããŸããã ããšãã°ã
Visual Studio 2013ã®ææ°ããŒãžã§ã³ã§ã¯ã
GitããŒãžã§ã³ç®¡çã·ã¹ãã ã®ãµããŒããããã®ãŸãŸãå°å
¥ãããŸããã Windows Azureã¯ã©ãŠããé€å€ãããŠããããTFSã ãã§ãªãGitãä»ã®ã·ã¹ãã ïŒSVNãDropboxãBitbucketïŒã䜿çšããŠã³ãŒããæäœã§ããããã«ãªããŸããã
Windows Azure Mobile Servicesã¯ããã«å
ã«é²ã¿ãGitã®ã¿ãæ©èœãããããšã«ããŸããã ãããããããã¯ãã®ãœãªã¥ãŒã·ã§ã³ã®ãã¬ãã¥ãŒããŒãžã§ã³ã®æéã ãã§ãããäŒæ¥ã®ååãèãããšããã®ãªãã·ã§ã³ã¯ãªãªãŒã¹ã«ç§»è¡ã§ããŸãã
ãããžã§ã¯ãã§Gitã䜿çšããçç±ã¯äœã§ããïŒ ã¯ãããã¹ãŠããã€ããšãŸã£ããåãã§ãã ã€ãŸã-ã³ãŒãã®å
±åäœæ¥ãåããŒã ã¡ã³ããŒã®ããŒã«ã«ãªããžããªãããŒãžã§ã³ç®¡çã®ãµããŒãã ããããããã«éèŠãªã®ã¯ãç¶ç¶ççµ±åã®ååãã€ãŸããªããžããªå
ã®ã³ãŒãã®æ°ãããã§ãã¯ã€ã³ããšã«ãœãªã¥ãŒã·ã§ã³ãç¶ç¶çã«å±éãããšããååãéµå®ããããšã§ãã ããŒã ã¡ã³ããŒã®1人ããµãŒããŒã«å€æŽãéä¿¡ãããã³ã«ãã¯ã©ãŠãã«å±éãããŸãã ãããã¯ãã¹ãŠ
Kudu ïŒå¥ã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãïŒã§æ©èœããéåžžã«æåããŠããŸãã
ãµãŒãã¹ã§Gitãæå¹ã«ãã
Gitã䜿çšããŠã¢ãã€ã«ãµãŒãã¹ã®æäœãéå§ããã«ã¯ããã®ãµãŒãã¹ã®ã³ã³ãããŒã«ããã«ã«ç§»åããé©åãªã¢ã€ãã ãéžæããå¿
èŠããããŸãã

ã¢ã¯ã·ã§ã³ã«èªä¿¡ããããã©ãããå°ããããé¢æ°ããã¬ãã¥ãŒæ®µéã«ããéã«ããã€ãã®åé¡ãçºçããå¯èœæ§ãããããšãèŠåããŸãã åæããŠç¶è¡ããŸãã
ãªããžããªã®äœæãå®äºãããšããµãŒãã¹ã³ã³ãããŒã«ããã«ã®[æ§æ]ããŒãžã§ãªããžããªã®ã¢ã¯ã»ã¹èšå®ã確èªã§ããŸãã ãœãŒã¹ç®¡çã»ã¯ã·ã§ã³ã«ã¯ããªããžããªãžã®ã¢ã¯ã»ã¹ã®URLãšãœãªã¥ãŒã·ã§ã³ã®å±éãéå§ããURLã®2ã€ã®ãã©ã¡ãŒã¿ãŒããããŸãã

äœææäœãå®äºãããšãã¯ã©ãŠãããŒã¹ã®Gitã®æºåãæŽããŸãã ãµãŒããŒã«ä¿åãããŠãããã¡ã€ã«ãããŒã«ã«ãªããžããªã«ååŸããŸãããã æšæºã®Gitã³ã³ãœãŒã«ïŒããšãã°ã
Git Bash for Windows ïŒã䜿çšã§ããŸãã
次ã®ã³ãã³ãã䜿çšããŠããµãŒããŒãªããžããªãããŒã«ã«ã«è€è£œããŸãã
git clone <URL_>

ã¯ã©ãŠããµãŒãã¹æ§æã®
GIT URLãã©ã¡ãŒã¿ãŒã§æå®ãããURLãæå®ããå¿
èŠããããŸãã ãŸããGitãŠãŒã¶ãŒã®ãã°ã€ã³åãšãã¹ã¯ãŒããå
¥åããå¿
èŠããããŸãïŒæã£ãŠããªãå Žåã¯ãGitãªããžããªã®æåã®äœææã«ãWindows Azureããã®ãã¢ãäœæããããšãææ¡ããŸãïŒã çµæã¯ã次ã®ç»åã®ããã«ãªããŸãã

ãªããžããªæ§é
ã³ãã³ããå®äºãããšããã«ãã¢ãã€ã«ãµãŒãã¹ã®ååã®ãã£ã¬ã¯ããªãããŒããã©ã€ãã«è¡šç€ºãããŸãã ãã®äžã«ã¯ã
ãµãŒãã¹ãã©ã«ããŒãš
.deploymentãã¡ã€ã«ããããŸãã ãã®ãã¡ã€ã«ã¯éèŠã§ã¯ãããŸãããã
ãµãŒãã¹ãã©ã«ããŒå
ãèŠã䟡å€ããããŸãã
$ ls api extensions package.json scheduler shared table
ãµãŒãã¹å
ã®ãã©ã«ããŒã®ååã«æ³šæãæããšããããããã¹ãŠWindows Azureã¢ãã€ã«ãµãŒãã¹ã®ãµãã·ã¹ãã ïŒAPIãã¹ã±ãžã¥ãŒã©ãŒãããã³ããŒãã«ïŒãšåãã§ãããšãããã¿ãŒã³ã«å ããŠãååã
extensionããã³
sharedã® 2ã€ã®ãã£ã¬ã¯ããªãŒããã¬ãŒã¹ã§ããŸãã
APIãã£ã¬ã¯ããª
APIãã£ã¬ã¯ããªã¯ãã«ã¹ã¿ã APIã³ãŒãïŒ
æåã®ããŒãã§äœæãããã®ïŒãèšè¿°ãããã¡ã€ã«ãä¿åãã圹å²ãæãããŸãã ãã£ã¬ã¯ããªã«ç§»åããŠãã®å
容ã確èªãããšã次ã®3ã€ã®ãã¡ã€ã«ããããŸãã
$ ls coolapi.js coolapi.json readme.md
ãã¹ãŠã®ãã©ã«ããŒã«ããããã®å
容ãç°¡åã«èª¬æããreadme.mdãã¡ã€ã«ãšã¯å¥ã«ãjs-scriptsãããã«æ ŒçŽãããŸããããã¯ã䜿çšããŠããåAPIã«å¯Ÿå¿ããŠããŸãã ãŸããã³ãŒãä»ãã®ã¹ã¯ãªããããšã«ãç¹å®ã®APIãžã®ã¢ã¯ã»ã¹æš©ãèšè¿°ãã1ã€ã®.jsonãã¡ã€ã«ããããŸãã ãããã®ãã¡ã€ã«ã®å
容ãèŠãŠã¿ãŸãããã 以äžã¯ã
coolapi.jsãã¡ã€ã«ã®å
容ã§ãã
exports.post = function(request, response) {
ã芧ã®ãšããããã®ãã¡ã€ã«ã¯ãåã®èšäºã§Windows Azureã³ã³ãããŒã«ããã«ã§çŽæ¥èšè¿°ããã³ãŒããæ£ç¢ºã«ç¹°ãè¿ããŠããŸãã åAPIã®èåŸã«ã¯ãNode.jsã¢ããªã±ãŒã·ã§ã³ã§åäœããåçŽãªjsã¹ã¯ãªããããããããããã¯ç解ã§ããŸãã
coolapi.jsonãã¡ã€ã«ã¯ããã®åœ¢åŒã§ã¯ãªã以åã«éæ¥çã«ããèŠãŠããªãã£ããããããå°ãèå³æ·±ããã®ã§ãã
{ "routes": { "*": { "get": {"permission":"application"}, "post": {"permission":"application"}, "put": {"permission":"application"}, "patch": {"permission":"application"}, "delete": {"permission":"application"} } } }
å®éãããã¯ãäœææã«æåã«èšå®ããç¹å®ã®APIãžã®ã¢ã¯ã»ã¹æš©ã®èª¬æã«ãããŸããïŒãã ãã管çããŒã¿ã«ã®ãŠã£ã¶ãŒãã䜿çšããŠãããè¡ããŸããïŒã ããã§ã¯ãHTTPã¡ãœããããšã«ç¹å®ã®å¶éãèŠå®ãããŠããŸãã ãã®å Žåã
ã¢ããªã±ãŒã·ã§ã³ã¿ã€ãã¯ãã¹ãŠã®ã¡ãœããã«èšå®ãããŸããã€ãŸããã¢ããªã±ãŒã·ã§ã³ããŒãæã€ãŠãŒã¶ãŒã®ã¿ããããã®ã¡ãœããã«ã¢ã¯ã»ã¹ã§ããŸãã æå¹ãªå€ã¯æ¬¡ã®ãšããã§ãã
- ãããªãã¯-ãã¹ãŠã®ãŠãŒã¶ãŒã«ã¢ã¯ã»ã¹ãèš±å¯ãããŸãïŒããŒã¿ã«ã®ãã¹ãŠã®ãŠãŒã¶ãŒãã¢ããã°ïŒ
- user-ã¢ã¯ã»ã¹ã¯ç»é²ãŠãŒã¶ãŒã«ã®ã¿èš±å¯ãããŸãïŒã¢ããã°ã®ã¿ã®èªèšŒæžã¿ãŠãŒã¶ãŒïŒ
- admin-管çè
ã®ã¿ã«ã¢ã¯ã»ã¹ãèš±å¯ãããŸãïŒã¢ããã°ã®ã¿ã®ç®¡çè
ïŒ
ãããã®ãã¡ã€ã«ã®ããã¹ããå€æŽããŠãããªããžããªã«ä¿åãããšããã¹ãŠã®å€æŽãããã«ç®¡çããŒã¿ã«ã«è¡šç€ºãããŸãïŒã€ãŸãããã¹ãŠã®ãŠãŒã¶ãŒãå©çšã§ããããã«ãªããŸãïŒã ããšãã°ãã¡ãœããã®1ã€ã§
Hello Worldæååã
Gitãã
Helloã«å€æŽããGETã¡ãœããããããªãã¯ïŒãããªãã¯ïŒã«ããŠãä¿®æ£ãã¯ã©ãŠãã«éä¿¡ããŸãã
git commit . -m "My first Git commit" git push
çµæã¯æ¬¡ã®ããã«ãªããŸãã

æäœãã°ãèŠããšãåã«ãã¡ã€ã«ããµãŒããŒã«ã³ããŒããã ãã§ãªããKuduã䜿çšããŠãœãªã¥ãŒã·ã§ã³ãå±éããäœæ¥ãé²è¡äžã§ãã
ããã§ãã¢ãã€ã«ãµãŒãã¹ç®¡çããŒã¿ã«ã«ç§»åããŠãã®APIã®ã³ãŒãã確èªãããšãå€æŽå
容ã確èªã§ããŸãã

ãŸãããã©ãŠã¶çµç±ã§APIã«ã¢ã¯ã»ã¹ããå ŽåïŒGETã¡ãœããã®å¶éãç·©åããåŸã«å¯èœã«ãªããŸããïŒãå€éšããå€æŽã«ã¢ã¯ã»ã¹ã§ããããšã確èªããŠãã ããã

ããŒãã«ãã£ã¬ã¯ããª
ãã®ãã©ã«ããŒã«ã¯ããã®ååããæšæž¬ã§ããããã«ãã¢ãã€ã«ãµãŒãã¹ã«ããããŒãã«ã«é¢é£ãããã®ãä¿åããå¿
èŠããããŸãã ãã ããããã«ä¿åãããã®ã¯ããŒãã«èªäœã®ããŒã¿ã§ã¯ãªãïŒGitã«ãšã£ãŠè«ççã§ãïŒãã¬ã³ãŒãã®æ¿å
¥/åé€/å€æŽã®ã€ãã³ããå¶åŸ¡ããã³ãŒãã§ãïŒããŒãã«ã®æäœã®è©³çŽ°ã«ã€ããŠã¯ã
ãã¡ããš
ãã¡ããã芧ãã ãã ïŒã MyTableãšããããŒãã«ãäºåã«äœæããæ¿å
¥æäœäžã«æ©èœããã¹ã¯ãªããããããã«ä¿®æ£ããŸããã ãããŠããããããŒãã«ãã©ã«ããŒã«çµæãšããŠåŸããããã®ã§ãã
$ ls MyTable.json mytable.insert.js readme.md
ã¢ãã€ã«ãµãŒãã¹ã§ãã¡ã€ã«ã«ååãä»ããããžãã¯ã«åŸã£ãŠãjsonãã¡ã€ã«ã«ã¯ããŒãã«ãžã®ã¢ã¯ã»ã¹æš©ã«é¢ããæ
å ±ãå«ãŸããŠããïŒããã¯ããã®ãã¡ã€ã«ã¯APIã§èŠããã®ãšäŒŒãŠããŸãïŒãã³ãŒãã¯jsãã¡ã€ã«ã«æ ŒçŽãããŠãããšããè«ççãªçµè«ã«éããããšãã§ããŸãã ããã«ããã¡ã€ã«ã®ååã¯ããããå±ããããŒãã«ã®ååãšããããå®çŸ©ãããŠããæäœãã圢æãããŸãã ãããã£ãŠãåæ§ã®ãã¡ã€ã«ãããŒã«ã«ã³ã³ãã¥ãŒã¿ãŒäžã§çŽæ¥äœæãïŒmytable.update.jsãªã©ã®ååãä»ããŠïŒããã®äžã«ã³ãŒããèšè¿°ããŠãµãŒããŒã«ã³ããããããšããããã®å€æŽã¯ãæåã§ãã³ãã©ãŒãäœæããããšãªããã³ã³ãããŒã«ããŒã¿ã«ã§ããã«å©çšå¯èœã«ãªããŸãæŽæ°æäœã
å
±æãã£ã¬ã¯ããª
ããã«ã¯ãã¢ãã€ã«ãµãŒãã¹ã®ç¹å®ã®éšåã«é¢ä¿ã®ãªãã¹ã¯ãªãããä¿åã§ããŸãããéã«ã©ãã§ã䜿çšã§ããŸãã åäžã®ãµãŒãã¹å
ã®ã©ã€ãã©ãªã³ãŒããªããžããªã®ãããªãã®ã ãã®ã³ãŒãã䜿çšããã«ã¯ãæåã«ãããèšè¿°ãïŒã³ã³ãããŒã«ããã«ãããããã®ã¹ã¯ãªããã«çŽæ¥ã¢ã¯ã»ã¹ã§ããªããããGitãä»ããŠã®ã¿å®è¡ã§ããŸãïŒã次ã«ãæ¢åã®ã³ãŒãã§æ°ããã¢ãžã¥ãŒã«ãæ¥ç¶ããå¿
èŠããããŸãã
以äžã«ç°¡åãªäŸã瀺ããŸãã
myshared.jsãšããååãšæ¬¡ã®å
容ã®ãã¡ã€ã«ãå
±æãã©ã«ããŒã«äœæããŸãã
exports.someSharedMethod = function () { return 'Hello from Shared!'; }
APIã³ãŒãã§ã¯ã次ã®ã³ãŒãè¡ãè¿œå ããŠãã®ã¢ãžã¥ãŒã«ã䜿çšããŸãã
exports.get = function(request, response) { var myshared = require('../shared/myshared.js'); response.send(statusCodes.OK, myshared.someSharedMethod); };
Node.jsãæ¢ã«äœ¿çšããŠããå Žåããã®ã³ãŒãã¯ããªãã¿ã®ãã®ã§ãã ããã¯ãå€éšã¢ãžã¥ãŒã«ãã¢ããªã±ãŒã·ã§ã³ã«æ¥ç¶ããããã®æšæºçãªã¡ã«ããºã ã§ãã æŠããŠã
å
±æãã©ã«ããŒã¯ããŒããã©ã€ãäžã®åãªããã£ã¬ã¯ããªã§ãããå
±æã¢ãžã¥ãŒã«ãä¿åããããšããå§ãããŸãã éæ³ããªãããã¹ãŠæ£çŽã«ã
ãã®ä»ã®ãã£ã¬ã¯ããª
æ®ãã®2ã€ã®ãã£ã¬ã¯ããªã«ã€ããŠã¯ãåã®ãã£ã¬ã¯ããªãšã»ãŒåããšèšããŸããã³ãŒãã¯ãã®äžã«ä¿åãããŸãã
schedulerãã©ã«ããŒã«ã¯ã察å¿ãããµãŒãã¹ã管çããããã®ã¹ã¯ãªãããå«ãŸããextensionsãã©ã«ããŒã«ã¯ãã¢ãã€ã«ãµãŒãã¹ã®Node.jsã¢ããªã±ãŒã·ã§ã³å
šäœã«æ¥ç¶ã§ããèµ·åæã«äžåºŠã ãå®è¡ãããã³ãŒããå«ãŸããŸãã æ¡åŒµã³ãŒããå®äºãããŸã§ãã¢ããªã±ãŒã·ã§ã³å
ã®ä»ã®ãã¹ãŠã®æäœãäžæãããããšãä¿èšŒãããŠããŸãã ããã¯ãã¢ãã€ã«ãµãŒãã¹ãåèµ·åãããã³ã«ããŒã¿ããŒã¹ã§ç¹å¥ãªèšå®ãè¡ãå Žåã«äŸ¿å©ã§ãã
NPMããã±ãŒãž
Node.jsã®ã¢ããªã±ãŒã·ã§ã³ãã¢ãã€ã«ãµãŒãã¹ã®èåŸã§åäœããŠããããšãç解ããããå°ããã®ã¯çã«ããªã£ãŠããŸã-NPMã¯ãããŸããïŒ ç¥ããªã人ã«ãšã£ãŠã¯ã
NPMã¯NodeïŒNuGetãLinuxã®ãããªãã®ïŒã®ããã±ãŒãžãããŒãžã£ãŒã§ãã ããã¯ãããŸããŸãªç®çïŒãšã©ãŒåŠçããã®ã³ã°ããã¥ãŒã®æšæºåãªã©ïŒçšã«èšèšãããå€æ°ã®ãµãŒãããŒãã£ã©ã€ãã©ãªãæ°ç§ã§ãããžã§ã¯ãã«æ¥ç¶ã§ãããããã¢ããªã±ãŒã·ã§ã³ã®éçºæã«éåžžã«äŸ¿å©ã§ãã
幞ããªããšã«ãWindows Azureã¢ãã€ã«ãµãŒãã¹ã§NPMã䜿çšã§ããŸãã ãããè¡ãã«ã¯ãpackage.jsonãã¡ã€ã«ïŒapiãtableãªã©ã®ãã£ã¬ã¯ããªãšåããã¡ã€ã«æ§é ã®ã¬ãã«ïŒãç·šéããå¿
èŠããããŸãã ãã®ãã¡ã€ã«ã«å¿
èŠãªã¢ãžã¥ãŒã«ïŒNode.jsã®æšæºçãªæ¹æ³ã
äŸåé¢ä¿ã»ã¯ã·ã§ã³ïŒã®èšè¿°ãè¿œå ãããã®ãã¡ã€ã«ããµãŒããŒã«ã³ãããããããšã«ãããWindows Azureã«ã¢ããªã±ãŒã·ã§ã³çšã«ããããããŠã³ããŒããããŸãã requireãä»ããŠããããæ¥ç¶ããã ãã§ãã³ãã¥ããã£ã®äœæãæ倧éã«æŽ»çšã§ããŸãã
ãããã«
Windows Azureã§å©çšå¯èœãªPaaSãã©ãããã©ãŒã ã¯ãè¿
éãã€é«å質ã®ãœãªã¥ãŒã·ã§ã³ãå¿
èŠãšããã€ã³ãã©ã¹ãã©ã¯ãã£ã®å±éãšç®¡çã«å€ãã®åŽåããããããªãéçºè
ã«éåžžã«è±å¯ãªæ©äŒãæäŸããŸãã Windows Azureã¢ãã€ã«ãµãŒãã¹ã¯ãè±å¯ã§å€æ©èœãªæ©èœãæäŸããŸãã ç¹ã«ãã«ã¹ã¿ã APIã¯ãããŸããŸãªãã©ãããã©ãŒã åãã®äžè¬çãªãœãªã¥ãŒã·ã§ã³ãéçºããå¿
èŠãããå Žåã«ãã³ãŒãã®éè€ã®åé¡ãåé¿ããã®ã«åœ¹ç«ã¡ãŸãã
ããã«ãMicrosoftã«ãšã£ãŠè¯ããšå
æ ãªã®ã¯ãå瀟ãçŸä»£ã®ãã¬ã³ãã«å¿ããããšã決å®ãããªãŒãã³ãœãŒã¹ãšã¯ãã¹ãã©ãããã©ãŒã ãæ¯æããŠç¬èªæè¡ã®äœ¿çšãéšåçã«æŸæ£ããããšã§ãã ãæ°ä»ãã®æ¹ã¯ããã®èšäºã§çŽ¹ä»ãããã¹ãŠã®ããšããPCãMacãWindowsãLinuxã®ã©ã®ã³ã³ãã¥ãŒã¿ãŒã§ãå®å
šã«å®è¡ã§ããŸãã ãŸãã3ã€ã®äž»èŠãªã¢ãã€ã«ããã€ã¹ãã¹ãŠã«ãã€ãã£ãã¯ãã¹ãã©ãããã©ãŒã ã©ã€ãã©ãªãååšããããšïŒããã³ãã®ãµãŒãã¹ã®ã»ãšãã©ã«å¯ŸããREST APIãµããŒãïŒã«ããããã®ã¯ã©ãŠããã»ãŒã©ãããã§ã䜿çšã§ããŸãã ç§ã®æèŠã§ã¯ãããã¯ããžãã¹ãè¡ãããã®åªããã¢ãããŒãã§ãããå°æ¥ã®ããã®å€§ããªæºåéã§ãã
PSæåŸã«ãã¢ãã€ã«ãµãŒãã¹ã§ã®Gitãªããžããªã®äœæ¥ã¯ãŸã ãã¬ãã¥ãŒæ®µéã§ãããããäœããäžå®å®ã§ãæéãçµã€ã«ã€ããŠå€åããå¯èœæ§ãããããšã«æ³šæããŠãã ããã
PPSãã®èšäºã¯ã
Microsoft Virtual Academyã® YouTubeãããªãã¥ãŒããªã¢ã«ãŸãã¯ã³ãŒã¹ãšããŠãå©çšã§ããŸãã