ひゃたさんはエンジニアに戻りました

肩書がエンジニアに戻った人が書く技術トピック

Typescriptでnamespace使うとimportができない

Typescriptでハマったのでメモ

namespace内のクラスでEventEmitterを使おうとしたところエラーになった

namespace Example {
  import * as events from "events";
  //Error: Import declarations in a namespace cannot reference a module.

  export class Test {
    constructor(){}
  }
}

ぐぬぬ、ならばnamescape外に書けばいいんだな

import * as events from "events";
namespace Example {
  export class Test {
    constructor(){}
  }
}

これで一安心……と思ったら参照先でエラーになっている……

import Test = Example.Test//ここがエラーになる

ど、どうすればいいんだ???

悩みに悩んだ結果、namespace を勘違いしていた模様 (javaの感覚で使っていた……)

そもそも、TypeScriptは1ファイル1モジュール。namespaceは1ファイル内でモジュールの構造を作るために使うもの(内部モジュール) よって、namespaceなんて書かなければ問題はした。TypeScriptなれるまでまだもうちょっと時間かかりそう……

import * as events from "events";
export class Test {
  constructor(){}
}
import * as test from "./test.ts"

追記(2016/03/27)

id:ConquestArrow さんから指摘があったので修正

namescapeもexportをつけることで外部から参照できるようになるそうだ

つまり、このように書けば参照できる。なるほど。勉強になった

export namespace Example {
  //中略
}

参考:TypeScriptのクラスをnamespaceで拡張する(クラス定数、拡張メソッド、他) - Qiita

msys2+zsh+git+preztoの環境を作る

会社のPCはUnity3DでShader書くためにWindowsにほぼ固定された*1

とはいえ、zshとか使いたいのでmsys2を導入した。ついでにzshrcの編集とかなるべくやりたくないのでpreztoを導入してMacを使っていた頃と似たようなコマンドライン環境を手に入れる

msys2

MSYS2 installer

上記のURLからインストーラーを入手できので、それでインストール(ここでは64bit版)。デフォルトならc:\msys64にインストールされる

終わったら、プログラムグループにMSYS2 64bitというフォルダができるのでMSYS2 SHELLをクリックする

これでシェルが起動するので、公式サイトの説明に従いコマンドを実行

update-core

これでシステムがアップデートされる

メモとして、Mactype*2が起動していると、証明書エラーが出てアップデートできなくなるので、Mactypeをアンインストールするか、msys2でMactypeを使わないように無視設定をする

pacman -Su

これでインストールされているパッケージの更新ができる

msys2ではArch Linuxで使われているpacmanでパッケージ管理をする

これが終わったら、一旦ターミナルを終了する(bashなどが更新されるため)

各種コマンド

git

まずはgitからインストール

pacman -S git

これでインストール完了

git --version

とコマンドを実行すれば

git version 2.7.2

Gtiのバージョンが表示されるはず

winpty

msys2で標準でついてくる端末エミュレータのminttyはGitのような対話型のコマンドラインWindowsアプリをうまく扱えない問題があるので、winptyを入れて対策をする

pacman -S winpty-git

でインストール完了。-gitとあるが、別にGit以外にもNode.jsなどにも使える

今後Gitを使う場合は

winpty git

と使うと、正常に対話型のインタフェースが使えるはず

また、Windowsの通常のコマンドラインアプリを使う場合もそのまま実行すると文字化けすることがあるので、winpty使って回避することができる

winpty ipconfig

zsh

pacman -S zsh

念願のzshをインストール

インストールが終わったら、ターミナルを一旦終了し、C:\msys64\msys2_shell.batを書き換える

現状だと39行目

start %WD%mintty -i /msys2.ico /usr/bin/bash --login %*

bashzshに変更する

start %WD%mintty -i /msys2.ico /usr/bin/zsh --login %*

メモとして、ここにwinptyを追加してどのコマンドラインアプリもwinpty経由で使うという方法もある

start %WD%mintty -i /msys2.ico /usr/bin/winpty /usr/bin/zsh --login %*

ただし、後述のpreztoがうまく動かなかったり、zshの場合だと「%」が何故かコマンドを実行するたびに出てくるというバグにあたってしまうのでおすすめできない

必要によってはmingw64_shell.batやmingw32_shell.batも同様に書き換える

prezto

GitHub - sorin-ionescu/prezto: The configuration framework for Zsh

preztoも公式サイト通りにインストールする

git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"

gitで取得し

setopt EXTENDED_GLOB

for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do

ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"

done

をコピペして、コマンドラインで実行。必要なファイルが生成される

ターミナルを再起動すればpreztoがインストールされるはず

参考URL

*1:Compute shadersはまだMac OS Xで動かない Unity - マニュアル: コンピュートシェーダー

*2:Windowsのフォントレンダリングをなんとかしてくれるソフト

TypeScriptを快適にかける環境を求めて

アーティストなのでAmazonWebServiceとNode.jsとTypeScriptは必須の道具である*1

そんなわけでTypeScriptを快適に書くための環境を探したところ、Visual Studioはうまく使えず、Atomも微妙だったので、Visual Studio Code(以下、vscode)にすることにした

設定方法は公式サイトが詳しい

code.visualstudio.com

コード補完もいけるし、TypeScriptが出力したjsファイルをファイルツリーから消しておくとかもできる 何より各プロジェクトの設定を.vscodeフォルダ内に記述するの便利! Gitのリポジトリにも登録しておけば各PCで設定を共有できるのがありがたい

あと、Taskの設定が面白そう

Tasks in visual Studio Code

Glupで管理するのもいいけど、うまくやればnpmとvscodeだけで快適になりそう

デバッガーの設定もしてみた。設定からNode.jsと選ぶだけで、.vscodeにlaunch.jsonが出力されるのでそこの設定を少し書き換える(書き換えたのはファイル名くらい)

Debugging in Visual Studio Code

良さ気な設定できたら晒そう……

*1:実際、スマートフォンとの連携等で使うことが多い