
å°ãåãŸã§ãæåã®Angular.jsãã2çªç®ã«äœæãããã¢ããªã±ãŒã·ã§ã³ã移è¡ããåé¡ã«èå³ããããŸããã ã¡ãªã¿ã«ããã®èšäºã¯ããã«ã€ããŠã®ã¯ãã§ãã ããããäºä»¶ã¯ä»å ¥ããã ãã®åã«ãAngular2ãNode.jsã§ã®ã¿èª¿éããŸããã ãããŠãããã§ã¯ãäž»ã«Visual Studioã§äœæ¥ããŠããããããã®äžããå®è¡ããããšã«ããŸããã ç§ãçµéšããªããã°ãªããªãã£ããã¹ãŠã®ã¬ãŒãããããçµãã£ãåŸãæ°ãã€ãããšããå¥ã®èšäºã§Visual Studio 2015ã®Angular2å±éãåé¢ããããšã«ããŸããã ãããŠãããã¯äœåãªãã®ã§ã¯ãªããšããããšãæããŠãããŸãã
æåã®ã¹ãããã å°éå ·ã
æåã«ãAngular2ãäŸåããã»ãšãã©ãã¹ãŠã®ããã±ãŒãžãNPMã«ãããããNode.jsããã³NPMã§åäœããããã«Visual Studioãæºåããå¿ èŠããããŸãã
NPM Task RunnerãšPackage Installerãé 眮ããŸãã ã ãããã¯ãã¹ã¿ãžãªãšnpmã®çžäºäœçšã«åœ¹ç«ã¡ãŸãã
npmãšwindowsãšããã°ã
çµå±ã®ãšããããŠã£ã³ããŠã®è»žã¯éåžžã«ç¬åµçã§ãã Node.jsãã€ã³ã¹ããŒã«ãããšãnpmãèªåçã«ã€ã³ã¹ããŒã«ãããŸãã ãã ãããã®åŸã«npmãã°ããŒãã«ã«ïŒ-gãã©ã°ã䜿çšããŠïŒã€ã³ã¹ããŒã«ãããšãã»ãŒç¢ºå®ã«ä»ã®å Žæã«ã€ã³ã¹ããŒã«ãããŸãã
ãããŠïŒããã§ã¯ãŠã£ã¶ãŒãããŠãµã®ãåãåºããŸãïŒäœ¿çšãããŸããã
åé¡ã¯ãNode.jsã®ã€ã³ã¹ããŒã«äžã«ãNodeã€ã³ã¹ããŒã©ãŒãä»å±ã®npmãžã®ãã¹ãPATHç°å¢å€æ°ã«æžã蟌ãããšã§ãã ãããã£ãŠãã³ã³ãœãŒã«ã®äžããnpmãåŒã³åºããšãã°ããŒãã«npmã§ã¯ãªããå ·äœçã«ã¢ã¯ã»ã¹ã§ããŸãã
ãã®å¥åŠãªåäœãä¿®æ£ããã«ã¯ã以äžãå¿ èŠã§ã
ã°ããŒãã«ãã€ã³ã¹ããŒã«ãããå ŽæãèŠã€ããïŒnpm root -gã³ãã³ããå®è¡ã§ããŸãïŒ
PATHã§æå®ããããã¹ãnpmããŒãã®npmã°ããŒãã«ã«çœ®ãæããŸãã ã·ã¹ãã ãšãŠãŒã¶ãŒã®äž¡æ¹ã§ãããè¡ãããšãå¿ããªãã§ãã ããããŸãããã·ã³ãåèµ·åããŠãã ããã
ãããŠïŒããã§ã¯ãŠã£ã¶ãŒãããŠãµã®ãåãåºããŸãïŒäœ¿çšãããŸããã
åé¡ã¯ãNode.jsã®ã€ã³ã¹ããŒã«äžã«ãNodeã€ã³ã¹ããŒã©ãŒãä»å±ã®npmãžã®ãã¹ãPATHç°å¢å€æ°ã«æžã蟌ãããšã§ãã ãããã£ãŠãã³ã³ãœãŒã«ã®äžããnpmãåŒã³åºããšãã°ããŒãã«npmã§ã¯ãªããå ·äœçã«ã¢ã¯ã»ã¹ã§ããŸãã
ãã®å¥åŠãªåäœãä¿®æ£ããã«ã¯ã以äžãå¿ èŠã§ã
ã°ããŒãã«ãã€ã³ã¹ããŒã«ãããå ŽæãèŠã€ããïŒnpm root -gã³ãã³ããå®è¡ã§ããŸãïŒ
PATHã§æå®ããããã¹ãnpmããŒãã®npmã°ããŒãã«ã«çœ®ãæããŸãã ã·ã¹ãã ãšãŠãŒã¶ãŒã®äž¡æ¹ã§ãããè¡ãããšãå¿ããªãã§ãã ããããŸãããã·ã³ãåèµ·åããŠãã ããã
æ¡åŒµæ©èœãã€ã³ã¹ããŒã«ããåŸãã¹ã¿ãžãªãå®è¡ããŠç©ºã®Webãããžã§ã¯ããäœæããŸãã 次ã«ãVisual Studioã§äœ¿çšãããnode.jsãšnpmãæŽæ°ããå¿ èŠããããŸãã ã¹ã¿ãžãªã¯ã°ããŒãã«npmãšnode.jsã䜿çšãããããŒã«ã«ã䜿çšããŸãã 圌女ã¯ãã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããŠãããã®ã«ã€ããŠäœãç¥ãããå€éšWebããŒã«ã«ããnode.jsã«äŸåããŠããŸãã ãããããããªãå Žåãã¹ã¿ãžãªã¯å€ãã³ã³ããŒãã³ãã䜿çšããã¢ããªã±ãŒã·ã§ã³ã®èµ·åã«å€±æããŸãã ãã®ããããããžã§ã¯ããã¯ãªãã¯ããŠãã¯ã€ãã¯ã€ã³ã¹ããŒã«ããã±ãŒãžãéžæããŸãã 衚瀺ããããŠã£ã³ããŠã§ãgulpãšå ¥åããŠèšå®ããŸãã ãã¡ãããããã¯çµ¶å¯Ÿã«å¿ èŠãšããããã§ã¯ãããŸããããççŽã«èšã£ãŠãç§ã¯package.jsonãæåã§äœæããã®ãé¢åã§ãã
gulpãã€ã³ã¹ããŒã«ãããšãpackage.jsonãååŸãããŸãããããããã«æäœã§ããŸãã
ãããŠãæåã«è¡ãå¿ èŠãããã®ã¯ãã¹ã¿ãžãªã§äœ¿çšããnode.jsãšnpmã®ããŒãžã§ã³ã確èªããããšã§ãã
ãnpm -vãããã³ãnode -vãã³ãã³ãã䜿çšããŠã¹ã¯ãªããã»ã¯ã·ã§ã³ãpackage.jsonã«è¿œå ããã¿ã¹ã¯runner-aã§å®è¡ããŸãã
package.json
{ "name": "myproject", "version": "1.0.0", "devDependencies": { "gulp": "^3.9.1" }, "scripts": { "getNpmVersion": "npm -v", "getNodeVersion": "node -v" } }
å人çã«ãç§ã®çµæã¯å°è±¡çã§ããïŒããŒãv0.10.31ãšnpm 1.4.9ã ç¹°ãè¿ãã«ãªããŸããããããã¯Visual Studioã䜿çšããããŒãžã§ã³ã§ãããã€ã³ã¹ããŒã«ãããããŒããã°ããŒãã«npmãããããšã¯äœã®é¢ä¿ããªããšããäºå®ã«æ³šç®ããŸãã
ããŠããã®ãžã£ã³ã¯ã¯ãã¹ãŠæŽçæŽé ããå¿ èŠããããŸãã package.jsonã«æ°ããã³ãã³ããupdateNpmãïŒãnpm install npm @ latestããè¿œå ããŠå®è¡ããŸãã å°ãåŸ ã£ãŠãããgetNpmVersionãå®è¡ããŸãã Npmã¯æŽæ°ãããããŒãžã§ã³3.10.5ã«ãªããŸããã
ãã ããnode.jsã§ã¯ããã®ã¢ãããŒãã¯æ©èœããŸããã æ£çŽã«èšããšãnode.jsãæŽæ°ããæ¹æ³ãèŠã€ããããŸããã§ããããå¿ èŠãªã€ã³ã¹ã¿ã³ã¹ãã¹ã¿ãžãªã«äœ¿çšãããæ¹æ³ãèŠã€ããŸããã
ãã®ããããŸããnode.jsãã€ã³ã¹ããŒã«ãããŠããå ŽæãèŠã€ããŠãããã«ãã¹ãã³ããŒããŸãã 次ã«ã[ããŒã«]-> [ãªãã·ã§ã³]-> [ãããžã§ã¯ããšãœãªã¥ãŒã·ã§ã³]-> [å€éšWebããŒã«]ã«ç§»åããããŒãã®éåžžããŒãžã§ã³ãæãæ°ãããã¹ãè¿œå ããŸãïŒãªãå Žåã¯ãããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããŸãïŒã æäžéšãžã®æ°ããéãæ©ãããšãå¿ããªãã§ãã ããã ã¹ã¿ãžãªãåèµ·åãïŒWindowsãåèµ·åããå¿ èŠã¯ãããŸããïŒãgetNodeVersionã³ãã³ããå®è¡ããŸãã åºæ¥äžãããããŒãžã§ã³ãæŽæ°ãããŸãã
ã¿ã³ããªã³ãšã®ããããã¹ãŠã®ãã³ã¹ã®åŸãç§ã¯ã³ãŒããŒã«è¡ãããšãææ¡ããŸãã ããã«ããããç°¡åã§ã¯ãããŸããã
ã¹ããã2 äŸåé¢ä¿ã®ã€ã³ã¹ããŒã«ã
ç§ãã¡ã®project.jsonãèŠããç¶ããŸãããã 次ã«ãã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®äŸåé¢ä¿ãå ¥åããŸãã äŸåé¢ä¿ã¯ããŠã£ã³ããŠã«åãããŠç·šéããã5 MIN QUICKSTARTãš ãå°ãããªãããéåžžã«èªããããã¥ã¢ã³ã¹ããååŸãããŸãã
å¯èœæ§ã®ãããã¥ã¢ã³ã¹ã
Angular2ã¯typescriptäžã«æ§ç¯ãããŠããŸãã ïŒå
æ¥ã ãã§ããããã¯ã€ãã¯ã¹ã¿ãŒãã¯çŽç²ãªJavaScriptã§å§ãŸããŸããïŒã ãããã£ãŠãhello worldã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ã®1ã€ã¯ããtypescriptãã®ãããªtypescriptãžã®äŸåé¢ä¿ã§ãïŒã^ 1.8.10ãã ããã¯ãã¢ãžã¥ãŒã«ãããŒããããšãã«ãtypescriptã®ææ°ããŒãžã§ã³ãããŒããããããšãæå³ããŸããã1.8.10以äžã§ãã çªç¶ãã¯ã€ãã¯ã¹ã¿ãŒããæäŸããã¢ã»ã³ããªã¯ããšã¯ã¹ããŒãäžã«è¡šç€ºãããããã©ã«ãã®ããŒã¯ãŒãã«ãããææ°ã®ã¿ã€ãã¹ã¯ãªããããµããŒãããŸããã å°ãªããšãããã¯ç§ã®ããŒãžã§ã³ã§ãã éèŠãªããšã¯ãææ°ããŒãžã§ã³ã§ã¯ãangular2ããé¢éžãããªãããšã§ããããããä¿®æ£ããŠ1.8.10ã ããæå®ããã°ããã¹ãŠãåé¡ãªãã¯ãã§ãã
ãã°ã¯ãã§ã«éä¿¡ãããŠãããçµæãæåŸ ãããŠããŸãã
ãã°ã¯ãã§ã«éä¿¡ãããŠãããçµæãæåŸ ãããŠããŸãã
package.json
{ "name": "myproject", "version": "1.0.0", "devDependencies": { "gulp": "^3.9.1", "typescript": "1.8.10", "typings": "^1.0.4" }, "dependencies": { "@angular/common": "2.0.0-rc.4", "@angular/compiler": "2.0.0-rc.4", "@angular/core": "2.0.0-rc.4", "@angular/forms": "0.2.0", "@angular/http": "2.0.0-rc.4", "@angular/platform-browser": "2.0.0-rc.4", "@angular/platform-browser-dynamic": "2.0.0-rc.4", "@angular/router": "3.0.0-beta.1", "@angular/router-deprecated": "2.0.0-rc.2", "@angular/upgrade": "2.0.0-rc.4", "systemjs": "0.19.27", "core-js": "^2.4.0", "reflect-metadata": "^0.1.3", "rxjs": "5.0.0-beta.6", "zone.js": "^0.6.12", "angular2-in-memory-web-api": "0.0.14" }, "scripts": { "postinstall": "typings install", "typings": "typings", "cmd": "npm typescript", "getNpmVersion": "npm -v", "getNodeVersion": "node -v" } }
次ã«ãã©ã³ããŒã®ã¿ã¹ã¯ã®äžã§ãã€ã³ã¹ããŒã«ã³ãã³ããå®è¡ãããã¹ãŠã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããããŸã§åŸ ã¡ãŸãã ãã¹ãŠãããŸãããã°ãnode_modulesãã©ã«ããŒã«ä»ã®ãã©ã«ããŒãããã€ãããã¯ãã§ãããã®äžã«ã@angularããã©ã«ããŒããããŸãã 衚瀺ãããŠããå ŽåããããŸã§ã®ãšãããã¹ãŠãé 調ã«é²ã¿ãäŸåé¢ä¿ãã€ã³ã¹ããŒã«ãããŠããŸãã ããã§ãªãå Žåã¯ïŒ cachem npmã®åé¡ãçºçããå ŽåããããŸãã ããã±ãŒãžãã€ã³ã¹ããŒã«ãããŠããããã©ã³ããŒã¿ã¹ã¯ã³ã³ãœãŒã«å šäœããšã©ãŒã§èµ€ããªã£ãŠããå Žåã¯ãpackage.jsonã«å¥ã®ã³ãã³ããnpm cache cleanããè¿œå ããŠå®è¡ããŠãã ããã ãã¶ãããã圹ç«ã€ã§ãããã
ã¹ããã3 Visual Studioã®typescriptãæ§æããŸãã
ã¿ã³ããªã³ãã³ã¹ã§ããã«ããã€ãã®ã¹ããããè¡ãçªã§ããã
æåã®.tsãã¡ã€ã«ãè¿œå ããŸãããã ã«ãŒãã«appãã©ã«ããŒãäœæãã空ã®app.component.tsãã¡ã€ã«ãããã«è¿œå ããŸãã æ³ååãçºæ®ããªãã§ãèªåã®ååãèããŠãã ããã ãããã¿ã§ããã¹ãŠãå£ããå¯èœæ§ããããŸãã ã¹ã¿ãžãªãéããŸãã
Visual StudioãšTypeScriptïŒ TypeScriptãšVisual Studio
ãã¹ãŠã®ãŸãšããªå®¶ã§ã¯ãã¿ã€ãã¹ã¯ãªããã®èšå®ã¯ç¹å¥ãªãã¡ã€ã«ã§èšå®ãããŠããŸã-tsconfig.jsonã ããããVisual Studioã¯æ°ãŸãããªå¥³æ§ã§ãã CommonJSã¢ãŒãã§typescriptã䜿çšããå ŽåïŒãããŠããã®äžã§æ£ç¢ºã«åäœããå ŽåïŒãtsconfig.jsonã¯ã¹ã¿ãžãªãç¡èŠããŸãã äžæ¹ãç§ãã¡ã«ãšã£ãŠéåžžã«éèŠãª2ã€ã®ãªãã·ã§ã³ããããŸã-ãemitDecoratorMetadataãïŒtrueã
ãExperimentalDecoratorsãïŒtrueã ãã®ããããããã®ãã©ã°ã¯.csprojãã¡ã€ã«ã§ãã³ã§èšå®ãããŸã...詳现ã¯ãã¡ããã芧ãã ãã
ãExperimentalDecoratorsãïŒtrueã ãã®ããããããã®ãã©ã°ã¯.csprojãã¡ã€ã«ã§ãã³ã§èšå®ãããŸã...詳现ã¯ãã¡ããã芧ãã ãã
ãªãã·ã§ã³ã®ããå®å
šãªã»ãã
<PropertyGroup Condition="'$(Configuration)' == 'Debug'"> <TypeScriptRemoveComments>false</TypeScriptRemoveComments> <TypeScriptSourceMap>true</TypeScriptSourceMap> <TypeScriptTarget>ES5</TypeScriptTarget> <TypeScriptJSXEmit>None</TypeScriptJSXEmit> <TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled> <TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny> <TypeScriptModuleKind>System</TypeScriptModuleKind> <TypeScriptOutFile /> <TypeScriptOutDir /> <TypeScriptGeneratesDeclarations>False</TypeScriptGeneratesDeclarations> <TypeScriptNoEmitOnError>True</TypeScriptNoEmitOnError> <TypeScriptMapRoot /> <TypeScriptSourceRoot /> <TypeScriptExperimentalDecorators>True</TypeScriptExperimentalDecorators> <TypeScriptEmitDecoratorMetadata>True</TypeScriptEmitDecoratorMetadata> </PropertyGroup>
ã¹ã¿ãžãªãéãããšã* .csprojãã¡ã€ã«ãèŠã€ãããPropertyGroupããŒãã«2ã€ã®æ°ããè¡ãè¿œå ãããŸãã
<TypeScriptExperimentalDecorators>true</TypeScriptExperimentalDecorators> <TypeScriptEmitDecoratorMetadata>True</TypeScriptEmitDecoratorMetadata>
ããã§ãããžã§ã¯ããéããããããã£ã«ç§»åããŠãæ°ããã¿ã-TypeScript Buildã確èªããŸãã
EcmaScript 6ãšModule System-Common Jsãèšå®ããŸãã ä¿åããŸãã
ã¹ããã4 ã³ãŒãã
ããã§ãapp.component.tsã«ã³ãŒãã®æåã®è¡ãè¿œå ã§ããŸã
ãããããã«ã³ããŒããŠããããžã§ã¯ãããã«ãããŸãã
app.component.ts
import { Component } from '@angular/core'; @Component({ selector: 'my-app', template: '<h1>My First Angular 2 App</h1>' }) export class AppComponent { }
ãã¹ãŠãæ£åžžã«å®è¡ãããå Žåããã«ãã¯ãšã©ãŒãªãã§å®è¡ãããŸãã ããã¯ç§ãã¡ã®äž»èŠãªã³ã³ããŒãã³ãã§ããã€ãŸããããã¯ç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã§ãã
次ã«ãèµ·åããããã«èšå®ããŸãïŒããŒãã¹ãã©ããïŒã ãããè¡ãã«ã¯ããã¡ã€ã«ãã¢ããªãã©ã«ããŒã«è¿œå ããŸã
main.ts
import { bootstrap } from '@angular/platform-browser-dynamic'; import { AppComponent } from './app.component'; bootstrap(AppComponent);
ãããŠåã³ãããžã§ã¯ãããã«ãããŸãã ç¹°ãè¿ããŸããããšã©ãŒã¯ãããŸããã ãã¡ãããæ§ç¯ããããšã¯ã§ããŸããããç§ã¯äœãšãèœã¡çããŠããŸãã
次ã«ããããžã§ã¯ãã«ãŒãã«è¿œå ããŸã
index.html
<html> <head> <title>Angular 2 QuickStart</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="styles.css"> <!-- 1. Load libraries --> <!-- Polyfill(s) for older browsers --> <script src="node_modules/core-js/client/shim.min.js"></script> <script src="node_modules/zone.js/dist/zone.js"></script> <script src="node_modules/reflect-metadata/Reflect.js"></script> <script src="node_modules/systemjs/dist/system.src.js"></script> <!-- 2. Configure SystemJS --> <script src="systemjs.config.js"></script> <script> System.import('app').catch(function(err){ console.error(err); }); </script> </head> <!-- 3. Display the application --> <body> <my-app>Loading...</my-app> </body> </html>
ãããŠãŸãæ ¹ãž
systemjs.config.js
/** * System configuration for Angular 2 samples * Adjust as necessary for your application needs. */ (function (global) { // map tells the System loader where to look for things var map = { 'app': 'app', // 'dist', '@angular': 'node_modules/@angular', 'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api', 'rxjs': 'node_modules/rxjs' }; // packages tells the System loader how to load when no filename and/or no extension var packages = { 'app': { main: 'main.js', defaultExtension: 'js' }, 'rxjs': { defaultExtension: 'js' }, 'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' }, }; var ngPackageNames = [ 'common', 'compiler', 'core', 'forms', 'http', 'platform-browser', 'platform-browser-dynamic', 'router', 'router-deprecated', 'upgrade', ]; // Individual files (~300 requests): function packIndex(pkgName) { packages['@angular/' + pkgName] = { main: 'index.js', defaultExtension: 'js' }; } // Bundled (~40 requests): function packUmd(pkgName) { packages['@angular/' + pkgName] = { main: '/bundles/' + pkgName + '.umd.js', defaultExtension: 'js' }; } // Most environments should use UMD; some (Karma) need the individual index files var setPackageConfig = System.packageWithIndex ? packIndex : packUmd; // Add package entries for angular packages ngPackageNames.forEach(setPackageConfig); var config = { map: map, packages: packages }; System.config(config); })(this);
ã¹ããã5 é¢éžãè©Šã¿ãŸãã
ãããŠä»ãå®å®é£è¡å£«ãç«ã¡äžããŸãïŒ ããŠãã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã
ãã¹ãŠãããŸãããã°ãç»é¢ã«My First Angular 2ã¢ããªã衚瀺ãããŸãã æºåãã§ããã³ãŒãã¯ã ãã¡ãã® github ã§å ¥æã§ããŸã ã
ãããããã³ãã¬ãŒããããŠã³ããŒãããŠãã ãã
ãæž èŽããããšãããããŸããã