SlideShare a Scribd company logo
TypeScript ファースト ステップ
~ Any browser. Any host. Any OS. Open Source. ~


日本マイクロソフト株式会社
デベロッパー & プラットフォーム統括本部
エバンジェリスト
井上 章 (いのうえ あきら)
blogs.msdn.com/chack   twitter.com/chack411
セッションのゴール
Session Takeaways


  JavaScript と Web 技術のこれまで を振り返る

  TypeScript の全体像 を学ぶ
アプリ開発のための
    Web 技術
モダン Web アプリ エクスペリエンス
Single Page Application Architecture

                                       Scripting
                                        Engine
                           HTML
       View
                           HTTP
       Async

       View
       Model               REST        Web API
                           JSON
      クライアント                XML        サーバー
アプリ開発のための "Web 技術"
マルチデバイス エクスペリエンスと Web 技術

• HTML5 / CSS3
  • クロス プラットフォームにおける共通 UI マークアップ
• JavaScript
  • 第一級のプログラミング言語としての進化と普及
  • JavaScript ライブラリの普及やサーバー サイドへの応用
• Web API
  • 進む HTTP サービス (REST API) の利用と開発ニーズ
• ネイティブ アプリ開発への応用
  • Windows ストア アプリ開発 (HTML5 + CSS3 + JavaScript + WinRT)
アプリケーション プラットフォームの変化
(Hardware + OS) ≒ (Browser + JavaScript)



       Memory    Graphics
                              Storage      Security
     Management Subsystems


      Threading    Events    Networking     APIs
アプリケーション プラットフォームの変化
(Hardware + OS) ≒ (Browser + JavaScript)
アプリケーション プラットフォームの変化
(Hardware + OS) ≒ (Browser + JavaScript)
アプリケーション プラットフォームの変化
(Hardware + OS) ≒ (Browser + JavaScript)




     .hoge {
         color: red;
         background-color: #b6ff00;
         border-radius: 8px;
     }
アプリケーション プラットフォームの変化
(Hardware + OS) ≒ (Browser + JavaScript)



     Memory        Graphics                       Storage               Security
       Memory
    Management    Subsystems
                   Graphics
                                                 Storage
                                                   Cookies,          Security SSL,
                                                                      Sandbox,
                 Subsystems
     Management HTML, CSS, Canvas,
   Garbage Collection   Web GL, Audio, Video   IndexedDb, File API        CORS


       Threading
      Threading               Events
                              Events              Network
                                               Networking               APIs
                                                                      APIs
     Web Workers           DOM Events,         WebSockets, XHR,        GeoLocation,
                            Callbacks          Offline, Realtime         Sensors
"JavaScript is the
Assembly Language of the Web"
                    by Scott Hanselman.
JavaScript      (ECMAScript 3)   の課題点など
Problems of JavaScript

• 大規模開発になるほどコードが複雑に

• デバッグ・テスト工数の増加

• プロトタイプベース OO 言語

• 変数スコープのへの理解

• 静的な型指定が不要

• ...
TypeScript
Any browser. Any host. Any OS. Open Source.
TypeScript
Any browser. Any host. Any OS. Open Source.
• JavaScript (ECMAScript 5) のスーパーセットとなる
 新しいプログラミング言語 (現在は 0.8.1.1 Preview)
 • TypeScript コードは JavaScript コードへコンパイル
 • コンパイラも TypeScript で書かれている (tsc.ts → tsc.js)

• 静的型付け、クラス、モジュールをサポート                             class Point {
                                                       x: number;
  • ECMAScript 6 (草案) をベース                             y: number;
                                                       constructor(x: number, y:number) {
                                                           this.x = x;
• コンパイラー及び開発環境                                         }
                                                           this.y = y;


  • Visual Studio 2012 プラグイン
                                                       dist() {
                                                           return Math.sqrt(
   http://go.microsoft.com/fwlink/?LinkID=266563                this.x * this.x +
                                                                this.y * this.y );
 • Node.js Package Manager (npm)                       }
                                                       static origin = new Point(0, 0);
 • WebMatrix 2
                                                   }
TypeScript : 2 つの入り口
Official Web Sites

 www.typescriptlang.org   typescript.codeplex.com




     クイック スタート                 ソースコード
       サンプル                    ドキュメント
TypeScript : Playground
ブラウザベースで手軽に体験
TypeScript の開発環境 #1
Compiler and Development Tool

  • node.js パッケージ (npm)

    • node.js のインストール: http://nodejs.org/
    • TypeScript のインストール:


    • TypeScript のコンパイル:


    • TypeScript コンパイラの実体
     • … ¥npm¥node_modules¥typescript¥bin¥tsc.js
TypeScript の開発環境 #2
Compiler and Development Tool

  • WebMatrix 2 (http://www.microsoft.com/web/)
    • 拡張機能ギャラリーから “TypeScript Tools” をインストール
TypeScript の開発環境 #3
Compiler and Development Tool

  • Visual Studio 2012 プラグイン
    • TypeScript for Visual Studio 2012
     http://go.microsoft.com/fwlink/?LinkID=266563
     ※ Visual Studio Express 2012 for Web でも利用可能
    • プロジェクト テンプレート
     • [新しいプロジェクト] – [Visual C#] –
       [HTML Application with TypeScript]


    • 新しい項目の追加
     • [新しい項目...] – [Visual C#] –
       [TypeScript File]
TypeScript Type System
動的型付けから静的型付けへ
TypeScript Type System
• 静的型付けシステムの導入
  • JavaScript のあいまいさを排除
  • 安全性・可読性・生産性の向上                         interface I { }
                                           class C { }
  • 型付けするか否かは自由                            module M { }
   • 動的型付けの利点も生かせる                         { s: string; }
                                           number[]
                                           () => bool
• any 型: すべての型の基本
• プリミティブ (基本) 型
 • number, string, bool, null, undefined
• オブジェクト型
 • class, module, interface, literal
• void 型: 戻り値なしの関数で使用
静的型付け記述例                                 (プリミティブ型)
TypeScript Type System Example

// Any                                              // Boolean
var x: any;         // 明示的                          var b: bool;       // 明示的
var y;              // y: any と同じ                   var yes = true;    // yes: bool = true と同じ
var z: { a; b; };   // z: { a: any; b: any; } と同じ   var no = false;    // no: bool = false と同じ

function f(x) {    // f(x: any): void と同じ
    console.log(x);                                 // Number
}                                                   var x: number;     // 明示的
                                                    var y = 0;         // y: number と同じ
                                                    var z = 123.456;   // z: number = 123.456 と同じ
// Null
var n: number = null;   // 基本型は Null 設定可
var x = null;           // x: any = null と同じ        // String
                                                    var s: string;     // 明示的
                                                    var empty = “”;    // empty: string = “” と同じ
// Undefined                                        var abc = ‘abc’;   // abc: string = “abc” と同じ
var n: number;     // n: number = undefined と同じ
var x = undefined; // x: any = undefined と同じ
TypeScript Classes, Modules
クラスとモジュール
TypeScript Classes and Modules
• モジュール化の利点                                interface I { }
  • 疎結合化と相互影響の低減、再利用性の向上                   class C { }
                                           module M { }
  • デバッグ、テスト、メンテナンスの容易性                    { s: string; }
  • 大規模開発への対応                              number[]
                                           () => bool
• ECMAScript 6 (草案) ベースの実装
  • Class, Module, Arrow Function 構文
  • オブジェクト指向プログラミングの導入

• ポピュラーなモジュールシステムもサポート                 (External Modules)
  • CommonJS / AMD modules
Interface, Class, Module 記述例
TypeScript Interface, Classes and Modules Example
// Interface                                    // Class
interface Mover {                               class Greeter {
  move(): void;                                   greeting: string;
  getStatus(): { speed: number; };                constructor (message: string) {
}                                                   this.greeting = message;
                                                  }
interface Shaker {                                greet() {
  shake(): void;                                    return "Hello, " + this.greeting;
  getStatus(): { frequency: number; };            }
}                                               }

interface MoverShaker extends Mover, Shaker {   var greeter = new Greeter(“world”);
  getStatus(): { speed: number;                 greeter.greet();
                 frequency: number; };
}
                                                // Module (Internal)
interface Person {                              module Sayings {
  FullName: string;                               export class Greeter {
  Age: number;                                      ...
}                                                 }
function greeter(person: Person) {              }
}                                               var greeter = new Sayings.Greeter(“world”);
TypeScript with jQuery
"No one writes JavaScript anymore.
They write jQuery."
型定義ファイル: *.d.ts
Typing for Libraries

• 各種ライブラリの変数, オブジェクト, API の定義ファイル
 • *.d.ts として環境毎に定義される
 • 現在用意されている主な定義ファイル (TypeScript Source Code より)
   • lib.d.ts – ECMAScript APIs, DOM APIs ...
   • jquery.d.ts – jQuery
   • jqueryui.d.ts – jQuery UI
   • winjs.d.ts – WinJS
   • winrt.d.ts – WinRT
   • node.d.ts – node.js
 • その他、NuGet ギャラリーからも入手可能
TypeScript で jQuery を使う
Typing for the jQuery
• TypeScript ソースコードから jquery.d.ts を入手
 • typings¥jquery.d.ts または samples¥jquery¥jquery.d.ts

• *.ts ファイルに jquery.d.ts 参照を追加
  /// <reference path="jquery.d.ts" />
  ...
• インテリセンス (コード補完) も有効                 (Visual Studio 2012)
Roadmap & Summary
TypeScript ロードマップ
Compiler and Language Improvements
• 0.8.1.1 (Alpha): 現在
• 0.8.2
  • Improve compiler performance
• 0.8.3
  • Generics
  • Improvements to type system to help model a larger variety of JS libraries
• 0.9.x
  • Align with ECMAScript 6
  • Community site for .d.ts files
  • Usability improvements to VS plugin
• 1.x
  • Async/Await, Mixins, Protected access
まとめ: TypeScript
Summary

Web アプリケーションをスケールさせるために ...

 • JavaScript 開発の必要性

 • JavaScript の OOP やモジュール化への対応

 • デバッグ・テスト工数の削減

 • C#, Java などの知識を生かした JavaScript 開発
まとめ: TypeScript
Summary

Web アプリケーションをスケールさせるために ...



               TypeScript
          Any browser. Any host. Any OS. Open Source.
関連リソース
Resources
• Welcome to TypeScript
  • http://www.typescriptlang.org/

• TypeScript Home: CodePlex
  • http://typescript.codeplex.com/

• TypeScript Language Specification
  • http://go.microsoft.com/fwlink/?LinkId=267121

• Build 2012: Introducing TypeScript:
  A language for application-scale JavaScript development
  • http://channel9.msdn.com/Events/Build/2012/3-012

• Facebook: TypeScript グループ (wTypeScript)
  • https://www.facebook.com/groups/wTypeScript/
Enjoy coding, Be happy with TypeScript.
© 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a
commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN
THIS PRESENTATION.

More Related Content

What's hot (20)

PPTX
C#の書き方
信之 岩永
 
PDF
イマドキC++erのモテカワリソース管理術
Kohsuke Yuasa
 
PDF
C# コーディングガイドライン 2013/02/26
Yoshihisa Ozaki
 
PPTX
LINQ 概要 + 結構便利な LINQ to XML
ShinichiAoyagi
 
PDF
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Shintarou Okada
 
PDF
ActionScriptを使わないFlash勉強会 #1(前日版)
libpanda
 
PPTX
Mvpvm pattern
Mami Shiino
 
PDF
大規模なギョームシステムにHaxeを採用してみた話
terurou
 
PDF
C++0x 言語の未来を語る
Akira Takahashi
 
PDF
C++ マルチスレッドプログラミング
Kohsuke Yuasa
 
PDF
Javaセキュアコーディングセミナー東京第1回 講義
JPCERT Coordination Center
 
PDF
規格書で読むC++11のスレッド
Kohsuke Yuasa
 
PDF
DoActionからJava VMバイトコードに変換する話
emorins
 
PPTX
Windows 8 ストア アプリ 開発 Tips
Fujio Kojima
 
PDF
知って得するC#
Shota Baba
 
PPTX
Orange Cube 自社フレームワーク 2015/3
信之 岩永
 
PDF
Ajax 応用
Katsuyuki Seino
 
PPTX
.NET Core 2.x 時代の C#
信之 岩永
 
PPT
Rpscala2011 0601
Hajime Yanagawa
 
PDF
基礎からのCode Contracts
Yoshifumi Kawai
 
C#の書き方
信之 岩永
 
イマドキC++erのモテカワリソース管理術
Kohsuke Yuasa
 
C# コーディングガイドライン 2013/02/26
Yoshihisa Ozaki
 
LINQ 概要 + 結構便利な LINQ to XML
ShinichiAoyagi
 
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Shintarou Okada
 
ActionScriptを使わないFlash勉強会 #1(前日版)
libpanda
 
Mvpvm pattern
Mami Shiino
 
大規模なギョームシステムにHaxeを採用してみた話
terurou
 
C++0x 言語の未来を語る
Akira Takahashi
 
C++ マルチスレッドプログラミング
Kohsuke Yuasa
 
Javaセキュアコーディングセミナー東京第1回 講義
JPCERT Coordination Center
 
規格書で読むC++11のスレッド
Kohsuke Yuasa
 
DoActionからJava VMバイトコードに変換する話
emorins
 
Windows 8 ストア アプリ 開発 Tips
Fujio Kojima
 
知って得するC#
Shota Baba
 
Orange Cube 自社フレームワーク 2015/3
信之 岩永
 
Ajax 応用
Katsuyuki Seino
 
.NET Core 2.x 時代の C#
信之 岩永
 
Rpscala2011 0601
Hajime Yanagawa
 
基礎からのCode Contracts
Yoshifumi Kawai
 

Similar to TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~ (20)

PDF
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
Akira Inoue
 
PDF
TypeScriptへの入口
Sunao Tomita
 
PDF
TypeScript と Visual Studio Code
Akira Inoue
 
PDF
TypeScript 勉強会
Masahiro Wakame
 
PDF
ng-japan 2015 TypeScript+AngularJS 1.3
Masahiro Wakame
 
PDF
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Masahiro Wakame
 
PDF
TypeScript 1.0 オーバービュー
Akira Inoue
 
PDF
JavaScript.Next
dynamis
 
PDF
"今" 押さえておきたい! Web アプリ開発の技術トレンドとツールの進化
Akira Inoue
 
PDF
TypeScript 言語処理系ことはじめ
Yu Nobuoka
 
PPTX
大人のお型付け
Nobuhisa Koizumi
 
PPTX
エンタープライズ分野での実践AngularJS
Ayumi Goto
 
PDF
JavaScript.Next Returns
dynamis
 
PDF
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
decode2016
 
PDF
TypeScriptは明日から使うべき
Masahiro Wakame
 
KEY
いまさらJavaScript
Naomichi Yamakita
 
PDF
TypeScript超入門
Narami Kiyokura
 
PDF
AngularJS+TypeScript - AngularJS 1周年記念勉強会
Masahiro Wakame
 
PDF
Kanazawa.js.Next
dynamis
 
PDF
JavaScript (ECMAScript) 2013
dynamis
 
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
Akira Inoue
 
TypeScriptへの入口
Sunao Tomita
 
TypeScript と Visual Studio Code
Akira Inoue
 
TypeScript 勉強会
Masahiro Wakame
 
ng-japan 2015 TypeScript+AngularJS 1.3
Masahiro Wakame
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Masahiro Wakame
 
TypeScript 1.0 オーバービュー
Akira Inoue
 
JavaScript.Next
dynamis
 
"今" 押さえておきたい! Web アプリ開発の技術トレンドとツールの進化
Akira Inoue
 
TypeScript 言語処理系ことはじめ
Yu Nobuoka
 
大人のお型付け
Nobuhisa Koizumi
 
エンタープライズ分野での実践AngularJS
Ayumi Goto
 
JavaScript.Next Returns
dynamis
 
DEV-011_TypeScript ~Any browser. Any host. Any OS. Open Source~
decode2016
 
TypeScriptは明日から使うべき
Masahiro Wakame
 
いまさらJavaScript
Naomichi Yamakita
 
TypeScript超入門
Narami Kiyokura
 
AngularJS+TypeScript - AngularJS 1周年記念勉強会
Masahiro Wakame
 
Kanazawa.js.Next
dynamis
 
JavaScript (ECMAScript) 2013
dynamis
 
Ad

More from Akira Inoue (20)

PDF
New Features in C# 10/11
Akira Inoue
 
PDF
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
Akira Inoue
 
PDF
.NET 6 と Blazor で作るクロスプラットフォームアプリ概要
Akira Inoue
 
PDF
~ Build と言えば やっぱり Developer! ~ Microsoft 開発ツール最新アップデート
Akira Inoue
 
PDF
.NET の過去、現在、そして未来 ~ .NET 最新アップデート
Akira Inoue
 
PDF
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Akira Inoue
 
PDF
.NET の過去、現在、そして未来
Akira Inoue
 
PDF
VS Code Live Share ~ 東京と大阪を繋いでみよう!
Akira Inoue
 
PDF
レガシー Web からの脱却 ~ 開発者が次に目指すべき Web アプリの姿とは?
Akira Inoue
 
PDF
.NET の今と今後に思うこと (Tokyo Ver.)
Akira Inoue
 
PDF
.NET の今と今後に思うこと
Akira Inoue
 
PDF
.NET 最新ロードマップと今押さえておきたい技術要素
Akira Inoue
 
PDF
VS Code & Flaskで作るCloud NativeアプリとDevOps
Akira Inoue
 
PDF
.NET Core と Docker コンテナー、そして Azure を使用したマイクロサービスのアーキテクチャ
Akira Inoue
 
PDF
本格化するクラウド ネイティブに向けて進化する開発プラットフォームと .NET
Akira Inoue
 
PDF
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
Akira Inoue
 
PDF
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
Akira Inoue
 
PDF
.NET の今 ~ 最新アップデートと 2019 年の展望
Akira Inoue
 
PDF
.NET today and tomorrow
Akira Inoue
 
PDF
.NET の今とミライ (.NET Conf 2018 Japan Keynote)
Akira Inoue
 
New Features in C# 10/11
Akira Inoue
 
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
Akira Inoue
 
.NET 6 と Blazor で作るクロスプラットフォームアプリ概要
Akira Inoue
 
~ Build と言えば やっぱり Developer! ~ Microsoft 開発ツール最新アップデート
Akira Inoue
 
.NET の過去、現在、そして未来 ~ .NET 最新アップデート
Akira Inoue
 
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Akira Inoue
 
.NET の過去、現在、そして未来
Akira Inoue
 
VS Code Live Share ~ 東京と大阪を繋いでみよう!
Akira Inoue
 
レガシー Web からの脱却 ~ 開発者が次に目指すべき Web アプリの姿とは?
Akira Inoue
 
.NET の今と今後に思うこと (Tokyo Ver.)
Akira Inoue
 
.NET の今と今後に思うこと
Akira Inoue
 
.NET 最新ロードマップと今押さえておきたい技術要素
Akira Inoue
 
VS Code & Flaskで作るCloud NativeアプリとDevOps
Akira Inoue
 
.NET Core と Docker コンテナー、そして Azure を使用したマイクロサービスのアーキテクチャ
Akira Inoue
 
本格化するクラウド ネイティブに向けて進化する開発プラットフォームと .NET
Akira Inoue
 
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
Akira Inoue
 
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
Akira Inoue
 
.NET の今 ~ 最新アップデートと 2019 年の展望
Akira Inoue
 
.NET today and tomorrow
Akira Inoue
 
.NET の今とミライ (.NET Conf 2018 Japan Keynote)
Akira Inoue
 
Ad

Recently uploaded (9)

PPTX
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
 
PPTX
色について.pptx .
iPride Co., Ltd.
 
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
 
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
 
PPTX
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
 
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
 
PDF
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
 
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
 
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
iPride Co., Ltd.
 
色について.pptx .
iPride Co., Ltd.
 
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
 
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
 
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
 
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
iPride Co., Ltd.
 
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
 
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
 
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
 

TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~

  • 1. TypeScript ファースト ステップ ~ Any browser. Any host. Any OS. Open Source. ~ 日本マイクロソフト株式会社 デベロッパー & プラットフォーム統括本部 エバンジェリスト 井上 章 (いのうえ あきら) blogs.msdn.com/chack twitter.com/chack411
  • 2. セッションのゴール Session Takeaways  JavaScript と Web 技術のこれまで を振り返る  TypeScript の全体像 を学ぶ
  • 4. モダン Web アプリ エクスペリエンス Single Page Application Architecture Scripting Engine HTML View HTTP Async View Model REST Web API JSON クライアント XML サーバー
  • 5. アプリ開発のための "Web 技術" マルチデバイス エクスペリエンスと Web 技術 • HTML5 / CSS3 • クロス プラットフォームにおける共通 UI マークアップ • JavaScript • 第一級のプログラミング言語としての進化と普及 • JavaScript ライブラリの普及やサーバー サイドへの応用 • Web API • 進む HTTP サービス (REST API) の利用と開発ニーズ • ネイティブ アプリ開発への応用 • Windows ストア アプリ開発 (HTML5 + CSS3 + JavaScript + WinRT)
  • 6. アプリケーション プラットフォームの変化 (Hardware + OS) ≒ (Browser + JavaScript) Memory Graphics Storage Security Management Subsystems Threading Events Networking APIs
  • 9. アプリケーション プラットフォームの変化 (Hardware + OS) ≒ (Browser + JavaScript) .hoge { color: red; background-color: #b6ff00; border-radius: 8px; }
  • 10. アプリケーション プラットフォームの変化 (Hardware + OS) ≒ (Browser + JavaScript) Memory Graphics Storage Security Memory Management Subsystems Graphics Storage Cookies, Security SSL, Sandbox, Subsystems Management HTML, CSS, Canvas, Garbage Collection Web GL, Audio, Video IndexedDb, File API CORS Threading Threading Events Events Network Networking APIs APIs Web Workers DOM Events, WebSockets, XHR, GeoLocation, Callbacks Offline, Realtime Sensors
  • 11. "JavaScript is the Assembly Language of the Web" by Scott Hanselman.
  • 12. JavaScript (ECMAScript 3) の課題点など Problems of JavaScript • 大規模開発になるほどコードが複雑に • デバッグ・テスト工数の増加 • プロトタイプベース OO 言語 • 変数スコープのへの理解 • 静的な型指定が不要 • ...
  • 13. TypeScript Any browser. Any host. Any OS. Open Source.
  • 14. TypeScript Any browser. Any host. Any OS. Open Source. • JavaScript (ECMAScript 5) のスーパーセットとなる 新しいプログラミング言語 (現在は 0.8.1.1 Preview) • TypeScript コードは JavaScript コードへコンパイル • コンパイラも TypeScript で書かれている (tsc.ts → tsc.js) • 静的型付け、クラス、モジュールをサポート class Point { x: number; • ECMAScript 6 (草案) をベース y: number; constructor(x: number, y:number) { this.x = x; • コンパイラー及び開発環境 } this.y = y; • Visual Studio 2012 プラグイン dist() { return Math.sqrt( http://go.microsoft.com/fwlink/?LinkID=266563 this.x * this.x + this.y * this.y ); • Node.js Package Manager (npm) } static origin = new Point(0, 0); • WebMatrix 2 }
  • 15. TypeScript : 2 つの入り口 Official Web Sites www.typescriptlang.org typescript.codeplex.com クイック スタート ソースコード サンプル ドキュメント
  • 17. TypeScript の開発環境 #1 Compiler and Development Tool • node.js パッケージ (npm) • node.js のインストール: http://nodejs.org/ • TypeScript のインストール: • TypeScript のコンパイル: • TypeScript コンパイラの実体 • … ¥npm¥node_modules¥typescript¥bin¥tsc.js
  • 18. TypeScript の開発環境 #2 Compiler and Development Tool • WebMatrix 2 (http://www.microsoft.com/web/) • 拡張機能ギャラリーから “TypeScript Tools” をインストール
  • 19. TypeScript の開発環境 #3 Compiler and Development Tool • Visual Studio 2012 プラグイン • TypeScript for Visual Studio 2012 http://go.microsoft.com/fwlink/?LinkID=266563 ※ Visual Studio Express 2012 for Web でも利用可能 • プロジェクト テンプレート • [新しいプロジェクト] – [Visual C#] – [HTML Application with TypeScript] • 新しい項目の追加 • [新しい項目...] – [Visual C#] – [TypeScript File]
  • 21. 動的型付けから静的型付けへ TypeScript Type System • 静的型付けシステムの導入 • JavaScript のあいまいさを排除 • 安全性・可読性・生産性の向上 interface I { } class C { } • 型付けするか否かは自由 module M { } • 動的型付けの利点も生かせる { s: string; } number[] () => bool • any 型: すべての型の基本 • プリミティブ (基本) 型 • number, string, bool, null, undefined • オブジェクト型 • class, module, interface, literal • void 型: 戻り値なしの関数で使用
  • 22. 静的型付け記述例 (プリミティブ型) TypeScript Type System Example // Any // Boolean var x: any; // 明示的 var b: bool; // 明示的 var y; // y: any と同じ var yes = true; // yes: bool = true と同じ var z: { a; b; }; // z: { a: any; b: any; } と同じ var no = false; // no: bool = false と同じ function f(x) { // f(x: any): void と同じ console.log(x); // Number } var x: number; // 明示的 var y = 0; // y: number と同じ var z = 123.456; // z: number = 123.456 と同じ // Null var n: number = null; // 基本型は Null 設定可 var x = null; // x: any = null と同じ // String var s: string; // 明示的 var empty = “”; // empty: string = “” と同じ // Undefined var abc = ‘abc’; // abc: string = “abc” と同じ var n: number; // n: number = undefined と同じ var x = undefined; // x: any = undefined と同じ
  • 24. クラスとモジュール TypeScript Classes and Modules • モジュール化の利点 interface I { } • 疎結合化と相互影響の低減、再利用性の向上 class C { } module M { } • デバッグ、テスト、メンテナンスの容易性 { s: string; } • 大規模開発への対応 number[] () => bool • ECMAScript 6 (草案) ベースの実装 • Class, Module, Arrow Function 構文 • オブジェクト指向プログラミングの導入 • ポピュラーなモジュールシステムもサポート (External Modules) • CommonJS / AMD modules
  • 25. Interface, Class, Module 記述例 TypeScript Interface, Classes and Modules Example // Interface // Class interface Mover { class Greeter { move(): void; greeting: string; getStatus(): { speed: number; }; constructor (message: string) { } this.greeting = message; } interface Shaker { greet() { shake(): void; return "Hello, " + this.greeting; getStatus(): { frequency: number; }; } } } interface MoverShaker extends Mover, Shaker { var greeter = new Greeter(“world”); getStatus(): { speed: number; greeter.greet(); frequency: number; }; } // Module (Internal) interface Person { module Sayings { FullName: string; export class Greeter { Age: number; ... } } function greeter(person: Person) { } } var greeter = new Sayings.Greeter(“world”);
  • 27. "No one writes JavaScript anymore. They write jQuery."
  • 28. 型定義ファイル: *.d.ts Typing for Libraries • 各種ライブラリの変数, オブジェクト, API の定義ファイル • *.d.ts として環境毎に定義される • 現在用意されている主な定義ファイル (TypeScript Source Code より) • lib.d.ts – ECMAScript APIs, DOM APIs ... • jquery.d.ts – jQuery • jqueryui.d.ts – jQuery UI • winjs.d.ts – WinJS • winrt.d.ts – WinRT • node.d.ts – node.js • その他、NuGet ギャラリーからも入手可能
  • 29. TypeScript で jQuery を使う Typing for the jQuery • TypeScript ソースコードから jquery.d.ts を入手 • typings¥jquery.d.ts または samples¥jquery¥jquery.d.ts • *.ts ファイルに jquery.d.ts 参照を追加 /// <reference path="jquery.d.ts" /> ... • インテリセンス (コード補完) も有効 (Visual Studio 2012)
  • 31. TypeScript ロードマップ Compiler and Language Improvements • 0.8.1.1 (Alpha): 現在 • 0.8.2 • Improve compiler performance • 0.8.3 • Generics • Improvements to type system to help model a larger variety of JS libraries • 0.9.x • Align with ECMAScript 6 • Community site for .d.ts files • Usability improvements to VS plugin • 1.x • Async/Await, Mixins, Protected access
  • 32. まとめ: TypeScript Summary Web アプリケーションをスケールさせるために ... • JavaScript 開発の必要性 • JavaScript の OOP やモジュール化への対応 • デバッグ・テスト工数の削減 • C#, Java などの知識を生かした JavaScript 開発
  • 33. まとめ: TypeScript Summary Web アプリケーションをスケールさせるために ... TypeScript Any browser. Any host. Any OS. Open Source.
  • 34. 関連リソース Resources • Welcome to TypeScript • http://www.typescriptlang.org/ • TypeScript Home: CodePlex • http://typescript.codeplex.com/ • TypeScript Language Specification • http://go.microsoft.com/fwlink/?LinkId=267121 • Build 2012: Introducing TypeScript: A language for application-scale JavaScript development • http://channel9.msdn.com/Events/Build/2012/3-012 • Facebook: TypeScript グループ (wTypeScript) • https://www.facebook.com/groups/wTypeScript/
  • 35. Enjoy coding, Be happy with TypeScript.
  • 36. © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.