#author("2018-04-17T16:19:46+09:00","default:kyo-in","kyo-in")
#author("2018-04-17T16:20:30+09:00","default:kyo-in","kyo-in")
**概要 [#n2829d24]
タイトル通り,Visual Studio Codeでthree.jsプログラムをTypeScriptで記述し,また実行+デバッグをChromeで行う手順を示します.

全てのソフトがマルチプラットフォームですので,OSを問わない(はず)です.

**準備 [#n469e705]
当然Visual Studio Code(以下VSCode)は必須.

-https://www.microsoft.com/ja-jp/dev/products/code-vs.aspx

パッケージマネージャー,npmを使用してTypeScriptのビルド環境を作るので,node.jsをインストールする必要があります.

-https://nodejs.org/ja/


Chromeも必須.

-https://www.google.co.jp/chrome/browser/desktop/

VSCode上から拡張機能で,「Debugger for Chrome」をインストールしておきます.

-https://github.com/Microsoft/vscode-chrome-debug

#ref(chrome.png);

**TypeScript環境のセットアップ [#p15522d2]
以下を参考に.

https://code.visualstudio.com/docs/languages/typescript

まず,好みの場所に作業(プロジェクト)フォルダを作り,VSCodeでそのフォルダを開きます.

#ref(./openfolder.png,50%);

次にTypeScriptの設定ファイル,tsconfig.jsonを作成します.新しいファイルは,ファイル一覧の右上のアイコンから作成可能です.

#ref(./newfile.png,50%);

内容は以下にします.上記ページのサンプルから"target"を「es2017」変更していることに注意します.''「es5」のままでは後でコンパイルエラーが出ます.''

 {
     "compilerOptions": {
         "target":"es2017",
         "module": "commonjs",
         "sourceMap": true
     }
 }

とします.

次に,VSCodeのTask Runnerという機能を使ってTypeScriptファイルのビルド設定を行います.

[表示]⇒[コマンド パレット]

#ref(./cp.png,50%);

もしくは Ctrl+Shift+P(Windowsの場合)でコマンドパレットを開き,

#ref(./command.png,50%);
 
>Tasks:Configure Default Build Task

↓

>tsc:ビルド-tsconfig.json

を選択(文字を入力すると補完されて表示されます).

選択するとtasks.jsonが自動生成されるのでそのままでOK.

VSCode上の統合ターミナルを開き,

#ref(./terminal2.png,50%);

ターミナルに以下を打ち込み,TypeScriptビルドのためのモジュールをインストール.

 >npm install -g typescript

Windows以外は管理者権限で,

 >sudo npm install -g typescript

じゃないとたぶんエラー.

#ref(terminal.png);

**three.js周りのセットアップ [#g93b0da6]
ひとまず動くプログラム(+html)を用意する.VSCode上で以下の名前でファイルを新規作成し,内容を以下にする.

index.html:
 <!DOCTYPE html>
 <html lang="ja">
 <head>
     <meta charset="utf-8" />
     <title>TypeScript HTML App</title>
     <script src="./node_modules/three/build/three.js"></script>
     <script src="app.js"></script>
 </head>
 <body>
     <div id="viewport"></div>
     <h1>TypeScript HTML</h1>
 </body>
 </html>

app.ts:
 ///<reference path="./node_modules/@types/three/index.d.ts"/>
 
 class ThreeJSTest {
     private scene: THREE.Scene;
     private camera: THREE.Camera;
     private renderer: THREE.WebGLRenderer;
     private geometry: THREE.Geometry;
     private material: THREE.Material;
     private cube: THREE.Mesh;
     private light: THREE.Light;
     private screenWidth: number = 640;
     private screenHeight: number = 480;
 
     constructor() {
         this.createRenderer();
         this.createScene();
     } 
 
     private createRenderer() {
         this.renderer = new THREE.WebGLRenderer();
         this.renderer.setSize(this.screenWidth, this.screenHeight);
         this.renderer.setClearColor(new THREE.Color(0x495ed));
         document.getElementById("viewport").appendChild(this.renderer.domElement);
     }  
 
     private createScene() {
         this.scene = new THREE.Scene();
         this.geometry = new THREE.BoxGeometry(1, 1, 1);
         this.material = new THREE.MeshLambertMaterial({ color: 0x55ff00 });
         this.cube = new THREE.Mesh(this.geometry, this.material);
         this.scene.add(this.cube);
         this.camera = new THREE.PerspectiveCamera(75, this.screenWidth /   
  this.screenHeight, 0.1, 1000);
         this.camera.position.x = 3;
         this.camera.position.y = 3;
         this.camera.position.z = 3;
         this.camera.lookAt(new THREE.Vector3(0,0,0));
         this.light = new THREE.DirectionalLight(0xffffff);
         var lvec = new THREE.Vector3(1, 1, 1).normalize();
         this.light.position.set(lvec.x, lvec.y, lvec.z);
         this.scene.add(this.light);
     } 
 
     public render() {
         this.cube.rotation.x += 0.02;
         this.cube.rotation.y += 0.02;
 
         this.renderer.render(this.scene, this.camera);
 
         requestAnimationFrame(this.render.bind(this));
     }
 
 }
 
 window.onload = () => {
     var threeJSTest = new ThreeJSTest();
     threeJSTest.render(); 
 };

必要なモジュールをVSCodeのターミナルからインストール.

three.js:
 >npm install three

three.jsの型定義ファイル:
 > npm install @types/three

ここでapp.tsを開きShift+Ctrl+Bでビルドし,エラーがでず,app.jsとapp.js.mapが生成されれば成功です.

**デバッグ設定 [#l4030b77]
VSCodeのデバッグを選択し,歯車をクリックしてChromeを選択します.

#ref(debug.png);

デバッグ用の設定ファイルが生成されますが,ローカルファイルのデバッグ設定がないので,launch.jsonに以下を追記します.

        {
            "name": "Launch index.html",
            "type": "chrome",
            "request": "launch",
            "file": "${workspaceRoot}/index.html"
        },

以上を追記したlaunch.json全体は例えば以下のようになります.

 {
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch index.html",
            "type": "chrome",
            "request": "launch",
            "file": "${workspaceRoot}/index.html"
        },
        {
            "type": "chrome",
            "request": "launch",
            "name": "localhost に対して Chrome を起動",
            "url": "http://localhost:8080",
            "webRoot": "${workspaceFolder}"
        }
    ]
 }

**実行,デバッグ [#a3364ee0]
あとは,構成から「Launch index.html」を選択し,実行してみましょう.
#ref(./debug2.png,50%);

#ref(break.png);

VSCode上でブレイクポイントの利用も可能です.

-http://www.mlab.im.dendai.ac.jp/~tomoriya/CGMP/sample01/
#ref(link.png);

↑スマートフォンで読み取ってみよう.

Javascriptベースなので,ブラウザが対応していれば,jsファイル一式とhtmlファイルをWebスペースに配置しアクセスすることでiPhone(iOS),Android端末でも実行,表示できます.

#ref(break.png);

VSCode上でブレイクポイントの利用も可能です.


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS