SlideShare ist ein Scribd-Unternehmen logo
1 von 27
N分で作る
TypeScript で Node.js
Visual Studio編
@TANAKA_733
@tanaka_733 (自己紹介)

   お仕事
       Ruby, Java, Node.js, Lua とかでPaaSをごにょっている人
   趣味
       C#な開発
       Windows Phone (7/8)
       Windows Store Apps
       Kinect
   ブログ
       銀の光と碧い空
@tanaka_733 (自己紹介)

   お仕事
       Ruby, Java, Node.js, Lua とかでPaaSをごにょっている人
   趣味
       C#な開発
       Windows Phone (7/8)
       Windows Store Apps
                               TypeScript やるしかない!!!
       Kinect
TypeScript で Node.js

   昔書いた記事のブラッシュアップ版
        http://techblog.hilife-jp.info/2012/10/nodejs-typescript/
   今回はVisual Studioで
   Ts ファイルからjs ファイルへは同じtsc コマンドなのでほかのエディタでも基本同じ
   準備
        Visual Studio 2012 (VS Express for Web か VS professional Edition以上)
        TypeScript VS Plugin (v0.8.2)
              http://www.microsoft.com/en-us/download/details.aspx?id=34790
        Node (v0.8.17), nvmw を使用しています
              https://github.com/hakobera/nvmw
        Git client
              http://code.google.com/p/msysgit/downloads/list?q=net+installer
プロジェクト作成




           0.8.2 から Visual C#から
               TypeScriptの下に
BOM問題

   Visual Studioのテキストファイルのデフォルトエンコードは、
    SHIFT-JISもしくはUTF-8 BOM付きの模様
   Node.js のライブラリまわりでよくはまることが…
   デフォルトの設定はなさそう
   めんどいですが、1つ1つ保存しなおし。
   よりよい方法があったら教えてください <m(__)m>
ファイル > 名前を付けて保存



                  UTF-8 シグネチャなし
                    (BOMなしのこと)




                   ここを押して、
                  エンコードを選択
TypeScript定義ファイルを取ってこよう

   https://github.com/borisyankov/DefinitelyTyped
    が更新頻度が高いのでおすすめ。
   > git clone https://github.com/borisyankov/DefinitelyTyped.git
その1 Hello World

   app.ts を消して一から書き直し。
   まずは、これを書いて定義ファイルを参照可能にする
   ///<reference path='DefinitelyTyped/node/node.d.ts'/>

     import http = module('http')
     http.createServer(function (req, res) {
         res.writeHead(200, { 'Content-Type': 'text/plain' });
         res.end('Hello Worldn');
     }).listen(1337, '127.0.0.1');
     console.log('Server running at http://127.0.0.1:1337/');
こんな感じInteliSense が効きます
node.js を起動する

   > node app.js
その2 パッケージ&PaaSにデプロイ

   npm: node のパッケージ管理システム
   package.json をいつも通り記述 (UTF-8 ボムなしで保存)

       {
             "name": “typescript-sample"
           , "version": "0.0.1"
           , "private": true
           , "dependencies": {
               "express": "3.0.0"
             , "ejs": ">= 0.8.3"
             , "jade": ">= 0.27.7“
           }
       }
npm install でパッケージをインストール

   > npm install を実行
app.ts を書き換え

///<reference path='DefinitelyTyped/node/node.d.ts'/>
///<reference path='DefinitelyTyped/express/express.d.ts' />
///<reference path="DefinitelyTyped/underscore/underscore.d.ts" />

import http = module('http')
import url = module("url")                          コンパイルエラーでるの
import routes = module("./routes/index")             は、あとで追加します
import express = module('express')
var app = <express.ServerApplication> express()

var port = process.env.VCAP_APP_PORT || 1337;          後半のPaaSに
// 続く                                                  デプロイして
                                                     クラウド上で動くときに
                                                        使います
app.ts を書き換え

app.configure(function () {
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    //express3
    app.set('view options', {
        layout: false
    });
    app.use(express.bodyParser({}));
    app.use(express.methodOverride());
    app.use(express.static(__dirname + '/public'));
});

//続く
app.ts を書き換え

app.configure('development', function () {
    app.use(express.errorHandler({ dumpExceptions:
true, showStack: true }));
});

app.configure('production', function () {
    app.use(express.errorHandler());
});

// Routes
app.get('/', routes.index);
app.listen(port);
console.log('Server running at http://127.0.0.1:' + port + '/');
routes フォルダを作成して、index.ts追加


///<reference path='/DefinitelyTyped/express/express.d.ts' />

import express = module("express")
export function index(req: any, res: any) {
    res.render('index',
   { title: 'Page Title', testArray: ["1", "2", "3", "4"] })
}
views フォルダ追加してViewを定義

    jade は素人なのでもっといい書き方があるかも
    このjade (ejsも) VSの補完は効かないし、
     BOMなしで保存しなおさないといけないので、
     VS以外のエディタでやるのがいいような…
    views/layout.jade (ファイルはもう一つ次のページに)
    !!! 5
    html
      head
        title PageTitle
      body
        #container
           #header
        block mainContent
views フォルダ追加してViewを定義

   views/index.jade
    extends layout

    block mainContent

      h1= title
      p Welcome to #{title}


      ul
      - each test in testArray
        li
           a(href= "/user/"+test)
             b= test
実行

   > node app.js
PaaSにデプロイ

   最近は、node.js が動くPaaSが増えてきました
       Azure Web Site, Heroku などなど
   今回は 変わったとこで、Uhuru Cloud を使ってみます
       OSS なPaaS CloudFoundryを使ったサービスの1つ
       CloudFoundry自体はRuby を中心に書かれています
       CloudFoundry本家でもNode.js使えます
       Uhuru は .NET も動かせるのが違うところ
Uhuru Cloud の登録

   http://uhurusoftware.com/ からユーザー登録
コマンドラインツールのセットアップ

   要Ruby 1.9.2 以上
   http://support.uhurusoftware.com/entries/21454287-deploying-and-
    managing-apps-with-command-line
> ruby --version
ruby 1.9.2p290 (2011-07-09) [i386-mingw32]
> gem update –system
> gem install vmcu

> vmcu target services.uhurucloud.com
  Successfully targeted to Uhuru AppCloud [http://services.uhurucloud.com]
> vmcu login
> vmcu cloud-team                Webの管理画面から
                                OneTimeToken 発行して入力
コマンドラインツールからデプロイ


> cd <ProjectFolder>                 本当はビルド成果物(js)とjadeファイルだけで十分


> vmcu push hello-typescript   --runtime node08
                                                  アプリ名はグローバルで一意なので
# 以下プロンプトは全部デフォルトのままEnterでOK                         適当に変えてください
(参考)プロンプト
>vmcu push hello-typescript --runtime node08
Would you like to deploy from the current directory? [Yn]:
Detected a Node.js Application, is this correct? [Yn]:
Application Deployed URL [hello-typescript.uhurucloud.com]:
Memory reservation (128M, 256M, 512M, 1G, 2G) [64M]:
How many instances? [1]:
Bind existing services to 'hello-typescript'? [yN]:
Create services to bind to 'hello-typescript'? [yN]:
Would you like to save this configuration? [yN]:
Creating Application: OK
Uploading Application:
  Checking for available resources: OK
  Processing resources: OK
  Packing application: OK
  Uploading (2M): OK
Push Status: OK

Staging Application 'hello-typescript': OK

Starting Application 'hello-typescript': OK
アプリにアクセス


URL は <appname>.uhurucloud.com
hello-typescript なら hello-typescript.uhurucloud.com
おつかれさまでした

   ここまでのサンプルは Github においています

Weitere ähnliche Inhalte

Was ist angesagt?

TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめYu Nobuoka
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築Saito5656
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会Mugen Fujii
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 
Windows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMIWindows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMIjunichi anno
 
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみたWindows で PHP をビルドしてみた
Windows で PHP をビルドしてみたy-uti
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化Gosuke Miyashita
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform信之 岩永
 
映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010Hiroh Satoh
 
20210515 of4 wi&amp;paraview 5.9.0_motorbike
20210515 of4 wi&amp;paraview 5.9.0_motorbike20210515 of4 wi&amp;paraview 5.9.0_motorbike
20210515 of4 wi&amp;paraview 5.9.0_motorbikeYohichiShiina
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加するYuto Takei
 
VarnishではじめるESI
VarnishではじめるESIVarnishではじめるESI
VarnishではじめるESIIwana Chan
 
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのかJavaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのかYoshitaka Kawashima
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理junichi anno
 
Aspnet mvc 6の今を紹介
Aspnet mvc 6の今を紹介Aspnet mvc 6の今を紹介
Aspnet mvc 6の今を紹介Makoto Nishimura
 

Was ist angesagt? (20)

TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
Windows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMIWindows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMI
 
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみたWindows で PHP をビルドしてみた
Windows で PHP をビルドしてみた
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
Nodejs
NodejsNodejs
Nodejs
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
CruiseControl.NET設置
CruiseControl.NET設置CruiseControl.NET設置
CruiseControl.NET設置
 
Windows Azure PHP Tips
Windows Azure PHP Tips Windows Azure PHP Tips
Windows Azure PHP Tips
 
Node.js入門
Node.js入門Node.js入門
Node.js入門
 
映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010
 
20210515 of4 wi&amp;paraview 5.9.0_motorbike
20210515 of4 wi&amp;paraview 5.9.0_motorbike20210515 of4 wi&amp;paraview 5.9.0_motorbike
20210515 of4 wi&amp;paraview 5.9.0_motorbike
 
Bot Framework v4 開発 Tips 2018-11
Bot Framework v4  開発 Tips 2018-11Bot Framework v4  開発 Tips 2018-11
Bot Framework v4 開発 Tips 2018-11
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
 
VarnishではじめるESI
VarnishではじめるESIVarnishではじめるESI
VarnishではじめるESI
 
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのかJavaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理
 
Aspnet mvc 6の今を紹介
Aspnet mvc 6の今を紹介Aspnet mvc 6の今を紹介
Aspnet mvc 6の今を紹介
 

Andere mochten auch

20140322 mvvm crossforwindowsstoreapps-pdf
20140322 mvvm crossforwindowsstoreapps-pdf20140322 mvvm crossforwindowsstoreapps-pdf
20140322 mvvm crossforwindowsstoreapps-pdfTakayoshi Tanaka
 
20140322 mvvm crossforwindowsstoreapps
20140322 mvvm crossforwindowsstoreapps20140322 mvvm crossforwindowsstoreapps
20140322 mvvm crossforwindowsstoreappsTakayoshi Tanaka
 
110216 jawsug lt by t_tanaka_wap
110216 jawsug lt by t_tanaka_wap110216 jawsug lt by t_tanaka_wap
110216 jawsug lt by t_tanaka_wapTakayoshi Tanaka
 
20140510 Twitter Authentication by WebAuthentictionBroker in Windows Phone 8....
20140510 Twitter Authentication by WebAuthentictionBroker in Windows Phone 8....20140510 Twitter Authentication by WebAuthentictionBroker in Windows Phone 8....
20140510 Twitter Authentication by WebAuthentictionBroker in Windows Phone 8....Takayoshi Tanaka
 
110820 tech aid_lt_kinect_pub
110820 tech aid_lt_kinect_pub110820 tech aid_lt_kinect_pub
110820 tech aid_lt_kinect_pubTakayoshi Tanaka
 
Augmented reality communication that provides a new experience value
Augmented reality communication that provides a new experience valueAugmented reality communication that provides a new experience value
Augmented reality communication that provides a new experience valueEtsuji Kameyama
 

Andere mochten auch (9)

20140419 xamarin zumo
20140419 xamarin zumo20140419 xamarin zumo
20140419 xamarin zumo
 
20140322 mvvm crossforwindowsstoreapps-pdf
20140322 mvvm crossforwindowsstoreapps-pdf20140322 mvvm crossforwindowsstoreapps-pdf
20140322 mvvm crossforwindowsstoreapps-pdf
 
120225 qp lt
120225 qp lt120225 qp lt
120225 qp lt
 
120517 cf tour_london
120517 cf tour_london120517 cf tour_london
120517 cf tour_london
 
20140322 mvvm crossforwindowsstoreapps
20140322 mvvm crossforwindowsstoreapps20140322 mvvm crossforwindowsstoreapps
20140322 mvvm crossforwindowsstoreapps
 
110216 jawsug lt by t_tanaka_wap
110216 jawsug lt by t_tanaka_wap110216 jawsug lt by t_tanaka_wap
110216 jawsug lt by t_tanaka_wap
 
20140510 Twitter Authentication by WebAuthentictionBroker in Windows Phone 8....
20140510 Twitter Authentication by WebAuthentictionBroker in Windows Phone 8....20140510 Twitter Authentication by WebAuthentictionBroker in Windows Phone 8....
20140510 Twitter Authentication by WebAuthentictionBroker in Windows Phone 8....
 
110820 tech aid_lt_kinect_pub
110820 tech aid_lt_kinect_pub110820 tech aid_lt_kinect_pub
110820 tech aid_lt_kinect_pub
 
Augmented reality communication that provides a new experience value
Augmented reality communication that provides a new experience valueAugmented reality communication that provides a new experience value
Augmented reality communication that provides a new experience value
 

Ähnlich wie 13016 n分で作るtype scriptでnodejs

node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るKiyoshi SATOH
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Daisuke Hiraoka
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるdavid9142
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2Takao Tetsuro
 
120512 metro styleapp_javascript
120512 metro styleapp_javascript120512 metro styleapp_javascript
120512 metro styleapp_javascriptTakayoshi Tanaka
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireAkio Katayama
 
Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0Toshiro Shimizu
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発Yuta Matsumura
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...Naoya Ito
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaYuta Kawadai
 
Aeolus Conductorによる複数環境へのデプロイ自動化
Aeolus Conductorによる複数環境へのデプロイ自動化Aeolus Conductorによる複数環境へのデプロイ自動化
Aeolus Conductorによる複数環境へのデプロイ自動化Etsuji Nakai
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスドMicrosoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスドKazumi Hirose
 

Ähnlich wie 13016 n分で作るtype scriptでnodejs (20)

node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
Using Windows Azure
Using Windows AzureUsing Windows Azure
Using Windows Azure
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
 
Visual studio de debug
Visual studio de debugVisual studio de debug
Visual studio de debug
 
120512 metro styleapp_javascript
120512 metro styleapp_javascript120512 metro styleapp_javascript
120512 metro styleapp_javascript
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
 
sveltekit-ja.pdf
sveltekit-ja.pdfsveltekit-ja.pdf
sveltekit-ja.pdf
 
Vue入門
Vue入門Vue入門
Vue入門
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
 
Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
 
Aeolus Conductorによる複数環境へのデプロイ自動化
Aeolus Conductorによる複数環境へのデプロイ自動化Aeolus Conductorによる複数環境へのデプロイ自動化
Aeolus Conductorによる複数環境へのデプロイ自動化
 
Ansible2.0と実用例
Ansible2.0と実用例Ansible2.0と実用例
Ansible2.0と実用例
 
densan2014-late01
densan2014-late01densan2014-late01
densan2014-late01
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスドMicrosoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
 

Mehr von Takayoshi Tanaka

deep dive distributed tracing
deep dive distributed tracingdeep dive distributed tracing
deep dive distributed tracingTakayoshi Tanaka
 
202202 open telemetry .net handson
202202 open telemetry .net handson202202 open telemetry .net handson
202202 open telemetry .net handsonTakayoshi Tanaka
 
202109-New_Relic-for-csharp-engineers
202109-New_Relic-for-csharp-engineers202109-New_Relic-for-csharp-engineers
202109-New_Relic-for-csharp-engineersTakayoshi Tanaka
 
20210129 azure webapplogging
20210129 azure webapplogging20210129 azure webapplogging
20210129 azure webapploggingTakayoshi Tanaka
 
SRENEXT 2020 [B5] New RelicのSREに学ぶ SREのためのNew Relic活用法
SRENEXT 2020 [B5] New RelicのSREに学ぶSREのためのNew Relic活用法SRENEXT 2020 [B5] New RelicのSREに学ぶSREのためのNew Relic活用法
SRENEXT 2020 [B5] New RelicのSREに学ぶ SREのためのNew Relic活用法Takayoshi Tanaka
 
20191024 Get Start gRPC with ASP.NET
20191024 Get Start gRPC with ASP.NET20191024 Get Start gRPC with ASP.NET
20191024 Get Start gRPC with ASP.NETTakayoshi Tanaka
 
New Relicで始める、.NET Applications on AWSのObservability
New Relicで始める、.NET Applications on AWSのObservabilityNew Relicで始める、.NET Applications on AWSのObservability
New Relicで始める、.NET Applications on AWSのObservabilityTakayoshi Tanaka
 
C#エンジニアのためのdocker kubernetesハンズオン (再)
C#エンジニアのためのdocker kubernetesハンズオン (再)C#エンジニアのためのdocker kubernetesハンズオン (再)
C#エンジニアのためのdocker kubernetesハンズオン (再)Takayoshi Tanaka
 
C#エンジニアのためのdocker kubernetesハンズオン
C#エンジニアのためのdocker kubernetesハンズオンC#エンジニアのためのdocker kubernetesハンズオン
C#エンジニアのためのdocker kubernetesハンズオンTakayoshi Tanaka
 
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
20190604 Containerized MagicOnion on kubernetes with Observability with New R...20190604 Containerized MagicOnion on kubernetes with Observability with New R...
20190604 Containerized MagicOnion on kubernetes with Observability with New R...Takayoshi Tanaka
 
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能Takayoshi Tanaka
 
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能Takayoshi Tanaka
 
Try! Visual Studio 209 git feature
Try! Visual Studio 209 git featureTry! Visual Studio 209 git feature
Try! Visual Studio 209 git featureTakayoshi Tanaka
 
(過去バージョン) Q#基礎 ver1.0
(過去バージョン) Q#基礎 ver1.0(過去バージョン) Q#基礎 ver1.0
(過去バージョン) Q#基礎 ver1.0Takayoshi Tanaka
 

Mehr von Takayoshi Tanaka (20)

deep dive distributed tracing
deep dive distributed tracingdeep dive distributed tracing
deep dive distributed tracing
 
202202 open telemetry .net handson
202202 open telemetry .net handson202202 open telemetry .net handson
202202 open telemetry .net handson
 
202109-New_Relic-for-csharp-engineers
202109-New_Relic-for-csharp-engineers202109-New_Relic-for-csharp-engineers
202109-New_Relic-for-csharp-engineers
 
20210129 azure webapplogging
20210129 azure webapplogging20210129 azure webapplogging
20210129 azure webapplogging
 
20201127 .NET 5
20201127 .NET 520201127 .NET 5
20201127 .NET 5
 
Unity(再)入門
Unity(再)入門Unity(再)入門
Unity(再)入門
 
最近のQ#について
最近のQ#について最近のQ#について
最近のQ#について
 
SRENEXT 2020 [B5] New RelicのSREに学ぶ SREのためのNew Relic活用法
SRENEXT 2020 [B5] New RelicのSREに学ぶSREのためのNew Relic活用法SRENEXT 2020 [B5] New RelicのSREに学ぶSREのためのNew Relic活用法
SRENEXT 2020 [B5] New RelicのSREに学ぶ SREのためのNew Relic活用法
 
20191024 Get Start gRPC with ASP.NET
20191024 Get Start gRPC with ASP.NET20191024 Get Start gRPC with ASP.NET
20191024 Get Start gRPC with ASP.NET
 
New Relicで始める、.NET Applications on AWSのObservability
New Relicで始める、.NET Applications on AWSのObservabilityNew Relicで始める、.NET Applications on AWSのObservability
New Relicで始める、.NET Applications on AWSのObservability
 
C#エンジニアのためのdocker kubernetesハンズオン (再)
C#エンジニアのためのdocker kubernetesハンズオン (再)C#エンジニアのためのdocker kubernetesハンズオン (再)
C#エンジニアのためのdocker kubernetesハンズオン (再)
 
20190806 Q# Measurements
20190806 Q# Measurements20190806 Q# Measurements
20190806 Q# Measurements
 
C#エンジニアのためのdocker kubernetesハンズオン
C#エンジニアのためのdocker kubernetesハンズオンC#エンジニアのためのdocker kubernetesハンズオン
C#エンジニアのためのdocker kubernetesハンズオン
 
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
20190604 Containerized MagicOnion on kubernetes with Observability with New R...20190604 Containerized MagicOnion on kubernetes with Observability with New R...
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
 
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
 
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
 
Try! Visual Studio 209 git feature
Try! Visual Studio 209 git featureTry! Visual Studio 209 git feature
Try! Visual Studio 209 git feature
 
Q#基礎 ver1.1
Q#基礎 ver1.1Q#基礎 ver1.1
Q#基礎 ver1.1
 
(過去バージョン) Q#基礎 ver1.0
(過去バージョン) Q#基礎 ver1.0(過去バージョン) Q#基礎 ver1.0
(過去バージョン) Q#基礎 ver1.0
 
ゼロから始めるQ#
ゼロから始めるQ#ゼロから始めるQ#
ゼロから始めるQ#
 

13016 n分で作るtype scriptでnodejs

  • 2. @tanaka_733 (自己紹介)  お仕事  Ruby, Java, Node.js, Lua とかでPaaSをごにょっている人  趣味  C#な開発  Windows Phone (7/8)  Windows Store Apps  Kinect  ブログ  銀の光と碧い空
  • 3. @tanaka_733 (自己紹介)  お仕事  Ruby, Java, Node.js, Lua とかでPaaSをごにょっている人  趣味  C#な開発  Windows Phone (7/8)  Windows Store Apps TypeScript やるしかない!!!  Kinect
  • 4. TypeScript で Node.js  昔書いた記事のブラッシュアップ版  http://techblog.hilife-jp.info/2012/10/nodejs-typescript/  今回はVisual Studioで  Ts ファイルからjs ファイルへは同じtsc コマンドなのでほかのエディタでも基本同じ  準備  Visual Studio 2012 (VS Express for Web か VS professional Edition以上)  TypeScript VS Plugin (v0.8.2)  http://www.microsoft.com/en-us/download/details.aspx?id=34790  Node (v0.8.17), nvmw を使用しています  https://github.com/hakobera/nvmw  Git client  http://code.google.com/p/msysgit/downloads/list?q=net+installer
  • 5. プロジェクト作成 0.8.2 から Visual C#から TypeScriptの下に
  • 6. BOM問題  Visual Studioのテキストファイルのデフォルトエンコードは、 SHIFT-JISもしくはUTF-8 BOM付きの模様  Node.js のライブラリまわりでよくはまることが…  デフォルトの設定はなさそう  めんどいですが、1つ1つ保存しなおし。  よりよい方法があったら教えてください <m(__)m>
  • 7. ファイル > 名前を付けて保存 UTF-8 シグネチャなし (BOMなしのこと) ここを押して、 エンコードを選択
  • 8. TypeScript定義ファイルを取ってこよう  https://github.com/borisyankov/DefinitelyTyped が更新頻度が高いのでおすすめ。  > git clone https://github.com/borisyankov/DefinitelyTyped.git
  • 9. その1 Hello World  app.ts を消して一から書き直し。  まずは、これを書いて定義ファイルを参照可能にする  ///<reference path='DefinitelyTyped/node/node.d.ts'/> import http = module('http') http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello Worldn'); }).listen(1337, '127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/');
  • 12. その2 パッケージ&PaaSにデプロイ  npm: node のパッケージ管理システム  package.json をいつも通り記述 (UTF-8 ボムなしで保存) { "name": “typescript-sample" , "version": "0.0.1" , "private": true , "dependencies": { "express": "3.0.0" , "ejs": ">= 0.8.3" , "jade": ">= 0.27.7“ } }
  • 14. app.ts を書き換え ///<reference path='DefinitelyTyped/node/node.d.ts'/> ///<reference path='DefinitelyTyped/express/express.d.ts' /> ///<reference path="DefinitelyTyped/underscore/underscore.d.ts" /> import http = module('http') import url = module("url") コンパイルエラーでるの import routes = module("./routes/index") は、あとで追加します import express = module('express') var app = <express.ServerApplication> express() var port = process.env.VCAP_APP_PORT || 1337; 後半のPaaSに // 続く デプロイして クラウド上で動くときに 使います
  • 15. app.ts を書き換え app.configure(function () { app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); //express3 app.set('view options', { layout: false }); app.use(express.bodyParser({})); app.use(express.methodOverride()); app.use(express.static(__dirname + '/public')); }); //続く
  • 16. app.ts を書き換え app.configure('development', function () { app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function () { app.use(express.errorHandler()); }); // Routes app.get('/', routes.index); app.listen(port); console.log('Server running at http://127.0.0.1:' + port + '/');
  • 17. routes フォルダを作成して、index.ts追加 ///<reference path='/DefinitelyTyped/express/express.d.ts' /> import express = module("express") export function index(req: any, res: any) { res.render('index', { title: 'Page Title', testArray: ["1", "2", "3", "4"] }) }
  • 18. views フォルダ追加してViewを定義  jade は素人なのでもっといい書き方があるかも  このjade (ejsも) VSの補完は効かないし、 BOMなしで保存しなおさないといけないので、 VS以外のエディタでやるのがいいような…  views/layout.jade (ファイルはもう一つ次のページに) !!! 5 html head title PageTitle body #container #header block mainContent
  • 19. views フォルダ追加してViewを定義  views/index.jade extends layout block mainContent h1= title p Welcome to #{title} ul - each test in testArray li a(href= "/user/"+test) b= test
  • 20. 実行  > node app.js
  • 21. PaaSにデプロイ  最近は、node.js が動くPaaSが増えてきました  Azure Web Site, Heroku などなど  今回は 変わったとこで、Uhuru Cloud を使ってみます  OSS なPaaS CloudFoundryを使ったサービスの1つ  CloudFoundry自体はRuby を中心に書かれています  CloudFoundry本家でもNode.js使えます  Uhuru は .NET も動かせるのが違うところ
  • 22. Uhuru Cloud の登録  http://uhurusoftware.com/ からユーザー登録
  • 23. コマンドラインツールのセットアップ  要Ruby 1.9.2 以上  http://support.uhurusoftware.com/entries/21454287-deploying-and- managing-apps-with-command-line > ruby --version ruby 1.9.2p290 (2011-07-09) [i386-mingw32] > gem update –system > gem install vmcu > vmcu target services.uhurucloud.com Successfully targeted to Uhuru AppCloud [http://services.uhurucloud.com] > vmcu login > vmcu cloud-team Webの管理画面から OneTimeToken 発行して入力
  • 24. コマンドラインツールからデプロイ > cd <ProjectFolder> 本当はビルド成果物(js)とjadeファイルだけで十分 > vmcu push hello-typescript --runtime node08 アプリ名はグローバルで一意なので # 以下プロンプトは全部デフォルトのままEnterでOK 適当に変えてください
  • 25. (参考)プロンプト >vmcu push hello-typescript --runtime node08 Would you like to deploy from the current directory? [Yn]: Detected a Node.js Application, is this correct? [Yn]: Application Deployed URL [hello-typescript.uhurucloud.com]: Memory reservation (128M, 256M, 512M, 1G, 2G) [64M]: How many instances? [1]: Bind existing services to 'hello-typescript'? [yN]: Create services to bind to 'hello-typescript'? [yN]: Would you like to save this configuration? [yN]: Creating Application: OK Uploading Application: Checking for available resources: OK Processing resources: OK Packing application: OK Uploading (2M): OK Push Status: OK Staging Application 'hello-typescript': OK Starting Application 'hello-typescript': OK
  • 27. おつかれさまでした  ここまでのサンプルは Github においています