TypeScript の tsconfig.json を 考える - コンパイル・オプション編

TypeScript の tsconfig.json について検討 を 続けています. 今回はコンパイル・オプションについて考えます.

作業環境

  • Windows 10 64bit
  • Node.js 8.4.0 64bit
  • TypeScript 2.4

これまでの振り返り

TypeScript で Hello World では、Visual Studio Code の 公式ドキュメント の tsconfig.json を基に作成し、最小限のコンパイル・オプションを考え、ECMAScript の 最新に合わせた形になりました.

1
2
3
4
5
6
7
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
"sourceMap": true
}
}

続いて、TypeScript の tsconfig.json を 考える では、コンパイル対象のソースファイルを指定する方法として filesinclude/exclude を 考え、とりあえず TypeScript 公式ドキュメント の include/exclude サンプル を 使うことにしました.

1
2
3
4
5
6
7
8
9
10
{
"compilerOptions": { ... },
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}

コンパイル・オプションの検討

コンパイル・オプションは最小限の設定しか見ていなかったので、しっかりと確認したいと思います.
TypeScript 公式ドキュメント の Compiler Options は https://www.typescriptlang.org/docs/handbook/compiler-options.html に なります.
ざっと 70個ぐらいのオプションがあるようで… とりあえず 使いそう or 要検討 なところをピックアップしたいと思います.

tsc --init で 作られる tsconfig.json が カテゴリー別に整理されているので、それに合わせて検討します.

Basic Options

  • "target": "es2017" は、前回検討の通り 最新の es2017 にします.
  • "module": "commonjs" は、実行環境の Node.js に 合わせて commonjs にします
  • "lib": [] は、コンパイルに含めるライブラリー、必要になったら都度追加します
  • "declaration": true は、型定義ファイル *.d.ts を 生成するので使用します
  • "sourceMap": true は、デバッガー等のツール連携で使用します
  • "outDir": "./dist" は、コンパイル結果などの出力先ですが、命名に悩みつつ distributiondist かな…
  • "removeComments": true は、コンパイル後もコメントを保持する必要はないので、削除します.

outDir は 悩ましいところです. 一般的なルールが欲しい… GitHub を 見ていると OutDirout が 多いよう感じました.

Strict Type-Checking Options

  • "strict": true
    すべての strict タイプ・オプション(noImplicitAny, strictNullChecks, noImplicitThis, alwaysStrict) を 有効化するので使います.
    このカテゴリは strict だけで賄えます.

Additional Checks

基本厳しくチェックなので、すべて true に します.

  • "noUnusedLocals": true は、未使用のローカル変数 を エラー報告します
  • "noUnusedParameters": true は、未使用のパラメーター を エラー報告します
  • "noImplicitReturns": true は、不正確な return を エラー報告します
  • "noFallthroughCasesInSwitch": true は、 case 文 の フォールスルー を エラー報告します

Module Resolution Options

おそらく types で パッケージを指定するぐらいです.

Source Map Options

ソース・マッピングに関する設定を変更する場合に設定するようですが、使わなそうです.

Experimental Options

実験用. とはいえ、 experimentalDecorators は 使いたいです.
Decorators を 使えるようにするもので、 2017年8月現在で Stage 2 であり、今後仕様が変わるかもしれませんが、フレームワークなどで使ったりするので、 true に しておきます.

その他

tsc --init で 出力されていないけど、設定した方がよさそうなもの.

  • "newLine": "LF" は、デフォルトがプラットフォーム依存なので明示しておきます
  • "forceConsistentCasingInFileNames": true は、ファイルの大文字小文字の違いをエラー報告します

とりえずの設定

前回と合わせて、こんな感じでしょうか. まずは これで始めたいと思います.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
"declaration": true,
"sourceMap": true,
"outDir": "./dist",
"removeComments": true,
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"experimentalDecorators": true,
"newLine": "LF",
"forceConsistentCasingInFileNames": true
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}

List で チェックするような項目もコンパイラーでやってくれるのですね. 差異が分からないので、とりあえず厳しく設定してみました.
ディレクトリ系は相変わらずの悩みどころです. どこかにべスプラ的は話がないかなぁ…

TypeScript の tsconfig.json を 考える

TypeScript で Hello World が できたところで、TypeScript について深堀したいと思います. なにせ、初めて使うものですから… まず tsconfig.json に 何を設定しておいた方がいいのか、考えたいと思います.
今回の検討の前提として、TypeScript の コードはサーバーサイドで使うことを想定しています. ブラウザ内で動作する JavaScript は いったん考慮外としています. また既存のしがらみは無く、新しく作るものを想定しています.

作業環境

  • Windows 10 64bit
  • Node.js 8.4.0 64bit
  • TypeScript 2.4

前回 Hello World の 設定を振り返る

前回の Hello World では Visual Studio Code の 公式ドキュメント の tsconfig.json を基に作成しました. まずは、この内容について振り返りをしたいと思います.

1
2
3
4
5
6
7
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"sourceMap": true
}
}

設定したのはコンパイラーのオプションでだけになります. (よくトランスパイル/トランスパイラーって見聞きして真似てたけど、もしかしてコンパイル/コンパイラーが正しい? ^^;)

target は、TypeScript を トランスパイルする先の、ECMAScript の ターゲット・バージョンになります. es3 が デフォルトで、前回は es5 ECMAScript 5 に 設定していました. Hello World 的にはあまり関係はないのでサンプルのままです. 今後の設定としてはサーバーサイト前提なので 2017年8月現在 最新 の async/await が 使える es2017 になります.

module は、モジュールコードの生成方法になります. Hello World では、もちろん関係ありません… 後々使っていく場合の設定値としては、サーバー再度用途で Node.js で 動かすので commonjs に設定したいと思います.

sourceMap は、 .map ファイルを生成するオプションです. .map ファイルがないとデバッガーはトランスパイルされた .js ファイルを参照するため、 .ts を 見ているエンジニア側とミスマッチが発生します. デバッガーなどのツールに.map ファイルを参照してもらうことで、 .ts ファイルを参照してもらうことができるので、ほぼ必須のオプションでしょう.

tsconfig.json の 仕様について調査

つづいて tsconfig.json の 仕様はどうなっているのか、公式ドキュメント https://www.typescriptlang.org/docs/handbook/tsconfig-json.html から大筋を参照したいと思います.

Overview / Using tsconfig.json

まず、 tsconfig.json がある ディレクトリを TypeScript プロジェクトのルートとして認識するとのことです. tsc を 実行する際に、 tsconfig.json を 関連度ディレクトリから親ディレクトリ方向に探していき使うか、 -p (--project) オプションで tsconfig.json の パスを指定します.

Examples / Details

tsconfig.json の 記述形式は compilerOptions プロパティに続き、 files プロパティ を使用する形式と、 include/exclude プロパティを使用する形式に分かれます.

files プロパティの使用例 (公式ドキュメントから抜粋)

1
2
3
4
5
6
7
8
{
"compilerOptions": { ... },
"files": [
"core.ts",
"sys.ts",
"types.ts"
]
}

include/exclude プロパティの使用例 (公式ドキュメントから抜粋)

1
2
3
4
5
6
7
8
9
10
{
"compilerOptions": { ... },
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}

compilerOptions プロパティについては、省略した場合はコンパイラーのデフォルトが使われ、明示的に指定する場合は Compiler Options を 参照とのこと. 設定項目が多いので後日.

files プロパティは、相対または絶対のファイルパスのリストとのことで、たぶん使うのは面倒くさいので置いとき、 include/exclude プロパティを使うのがよいでしょう.

include/exclude プロパティは、glob のようなパターンで指定できます. glob、Linux などで *.txt* のような “ワイルドカードでファイル名のセットを指定するパターンのこと - グロブ - Wikipedia“ とのことで、こっちで指定する方が便利です. 以下のワイルドカードからパターンを作ります.

  • * 0個以上の文字
  • ? 任意の1文字
  • **/ 任意のサブディレクトリに再帰的にマッチ

files プロパティ と include/exclude プロパティ の 有無や、組み合わせなどの複雑なルールについての記載もあるけど、あまり頑張らないで簡単な構造にしたいのでパスします.

@types, typeRoots and types

@types パッケージは、すべてコンパイルに含まれるとのこと. その制御については compilerOptionstypeRootstypes で できる.
全部入って問題ないような気もします. 使うとしたら、 types で パッケージ (e.g. node, lodash, express) を 明示するのでよさそうです.

Configuration inheritance with extends

tsconfig.jsonextends プロパティを使って別ファイルから構成を継承できます. ベース(継承元) の 設定がロードされて、継承している設定が上書きロードします.
ある程度の規模で複数プロジェクトに分けて構成する場合に便利なので使う機会は結構ありそうです. すぐには使う機会はなさそうですが、このような設定ができることを覚えておくと、後で便利そうです.

compileOnSave

compileOnSave プロパティを設定すると、 tsconfig.json 保存時に すべてのファイルを再生成するように、この機能をサポートしている IDE へ 通知します.
tsconfig.json の 試行錯誤段階ではよさそうだけど、ある程度固まってきたら使わないのかもしれないです. ところで、今回使う Visual Studio Code の 記載がないが対応しているのだろうか?

Schema

スキーマは、ここだよ http://json.schemastore.org/tsconfig って、ことで後で眺める.

サマリ

compilerOptions を どう設定するかがメインになりそう.
後は include/exclude . これは、Java の Maven のように 定番があると嬉しいのですが、サンプル以外に特に具体的なパターンはなかったです. あまり独自のスタイルを作るよりも、定番に乗っかっていきたいところ.

TypeScript を 使っているプロジェクトを調査

Microsoft/TypeScript

TypeScript 自身のリポジトリ. テストケース用なのか tests ディレクトリ以下にかなりの tsconfig.json が あります.
その中から src 以下をいくつか参照したところ、/src/tsconfig-base.json を 継承して作られているようで、こちらは compilerOptions だけなので、後日参照.
継承してる側は files プロパティで列挙でした.

Microsoft/vscode

Visual Studio Code の ベースとなっているリポジトリ. (製品版とは異なるらしい → Visual Studio Code - Wikipedia)
src/tsconfig.json が あり、また extensions/ 以下に各拡張機能用の tsconfig.json があります. 継承関係は無いです..

/build/tsconfig.json では "node_modules/**"exclue 、拡張機能系はファイルが分かれているが大体同じで、 "src/**/*"include でした.

今のところの設定

compilerOptions は 改めて調査するとして、今までのところで作ると以下のような感じでしょうか. って、結局 公式ドキュメントのサンプル…

1
2
3
4
5
6
7
8
9
10
{
"compilerOptions": { ... },
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}

プロジェクトのディレクトリ構造にかかわる設定なので、いろいろと悩んでしまいます. とりあえず公式ドキュメントのサンプルに則って定義しておきたいと思います.
使い込んでみてわかることなのでしょう. きっと.

Visual Studio Code で Hello TypeScript!

TypeScript の インストールと設定ができました! さっそく Visual Studio Code から TypeScript で Hello World を!
Visual Studio Code の 公式ドキュメント が 詳しいので、ドキュメントに則って進めたいと思います.

作業環境

  • Windows 10 64bit
  • Node.js 8.4.0 64bit
  • TypeScript 2.4
  • Visual Studio Code

Visual Studio Code に TypeScript サポート の 拡張機能を追加

Visual Studio Code は 標準で TypeScript に 手厚いサポート “VS Code provides many features for TypeScript out of the box. - TypeScript Programming with Visual Studio Code“ がついています. ただし Lint については 拡張機能が必要なようで、今回は egamma さん の 拡張機能 を 使わせていただくことにしました.
レーティングが高く、インストール数も多く、また「ようこそ」画面で推薦されていることなどからの選定となります. Thank you for the great extension!, egamma-san!!

Visual Studio Code を 起動し「ようこそ」画面から、[カスタマイズする] - [ツールと言語] - [TypeScript] を クリックします.
※ 「ようこそ」 が 表示されない場合は、メニュー の [ヘルプ] - [ようこそ] を 選択します

「TypeScript に追加サポートをインストールしたあと、ウィンドウが再読み込みされます.」 が 表示されるので [OK] を クリックします.

Visual Studio Code が 再起動し、「ようこそ」の TypeScript の 色が変わり TypeScript サポートがインストールされました.

また、Ctrl + Shift + X で 拡張機能を表示するとインストール済みに TypeScript が 追加されていることからも確認できます.

プロジェクト・フォルダー の 作成 と 展開

例によって Ctrl + @ で 統合コンソールを表示. 下記コマンドを実行しフォルダーの作成 と Visual Studio Code で フォルダーを開きます. 今回は C:\Develop\workspace\hello-typescript に フォルダーを作成しました.

1
2
PS C:\Users\username> mkdir C:\Develop\workspace\hello-typescript
PS C:\Users\username> code C:\Develop\workspace\hello-typescript\

tsconfig.json と tslint.json の 作成

まず最初に tsconfig.json を 作成し、TypeScript プロジェクトの設定を行います.
Ctrl + Shift + P で コマンドパレットを表示、 new filetsconfig.json を 作成し、以下の内容で保存します.

1
2
3
4
5
6
7
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"sourceMap": true
}
}

Ctrl + Shift + Ptslint 絞り込み、[TSLint: Create a “tslint.json” file] を 選択します.

tslint.json ファイルが追加されます. このファイルがないと TSLint の 拡張機能が動作しないので要注意です. 今回は TSLint の 設定をデフォルトのままとしました.

TypeScript コーディング

Ctrl + Shift + P - new file - hello.ts を 以下の内容で作成します.

1
2
3
4
5
6
7
8
class Startup {
public static main(): number {
console.log('Hello TypeScript!');
return 0;
}
}
Startup.main();

ビルド & 実行

Ctrl + Shift + B で ビルドを実行します. ビルド・タスクを聞かれるので tsc: ビルド - tsconfig.json を 選択します.

tsc によって トランスパイルされ、 hello.jshello.js.map が 生成されます.

Ctrl + Shift + @ で 新しい統合ターミナルを開き、 node を 実行します.

1
2
PS C:\Develop\workspace\hello-typescript> node .\hello.js
Hello TypeScript!


Visual Studio Code で TypeScript の Hello World が できました!

Node.js 8 64bit & TypeScript の インストール

急遽 TypeScript を 使うことになり… インストールとか環境構築とか. ちょっと手を広げすぎている感があるけど、勉強する機会があるのはよいこと、と考えることにして Let’s Go!

作業環境

  • Windows 10 64bit
  • Node.js 8.4.0 64bit
  • TypeScript 2.4.2

バージョン と インストールする環境について検討

ブログ環境を構築する Hexo を インストールした際に、Node.js 6.9 LTS を インストールしました. その際には “開発用途ではないので LTS(Long Term Support) である v6.9.1 LTS” としてました. が、今回はバージョン指定があり Node.js 8.x に なります.
指定があるということは、考えることがないですね.

なお Hexo の 方も、この際バージョンアップしてしまうことにします. 2つのバージョンを管理したり行き来するのが手間ですし、そもそも v6 LTS の 選択は Hexo 以外に用途がなかったのでサポートが長い LTS にしていたという経緯になります. 今回開発に使うので、ちゃんと新しいバージョンへの追随やトラブルシュートもやる(たぶn)ので、あまり困らないかなぁと.

Node.js の インストール と 動作確認

Node.js の トップ・ページ https://nodejs.org/en/ へ アクセスします.
画面中ほどにダウンロードリンクがあります.
今回は、ちゃんと Windows の 64bit であることを認識して、[Download for Windows (x64)] で 表示してくれています. と、いうことで素直に [v8.4.0 Current] を クリックしてダウンロードします.

チェックサム は ダウンロード・ページ https://nodejs.org/en/download/current/ に [Signed SHASUMS for release files] が あります. 今回ダウンロードした node-v8.4.0-x64.msi は 8efbd1b94ff8338bd36a1c30a86aba4fae3b80b61e265401fa97e7a4c5478ab2 でした.
確認方法は Windows PowerShell 4.0 以降の Get-FileHash コマンドを使います.

1
2
3
4
5
c:\> powershell Get-FileHash -Algorithm SHA256 c:\node-v8.4.0-x64.msi
Algorithm Hash
--------- ----
SHA256 8EFBD1B94FF8338BD36A1C30A86ABA4FAE3B80B61E265401FA97E7A4C5478AB2

ダウンロードした node-v8.4.0-x64.msi を ダブルクリックして、インストーラーを起動します.

End-User License Agreement が 表示されます. 内容を確認し、同意できたら [I accept the terms in the Lisence Agreement] に チェックして [Next] を クリックします.

インストール先を指定します. 今回は C:\Develop\sdk\nodejs8\ と しました.

Custom Setup で オプションを聞かれます. 今回は特に変更なしで、すべて インストールしました.

インストール確認が表示されるので、[Install] ボタンをクリックしてインストールします.

インストールが完了しました.

動作確認としてコマンド プロンプト で バージョンを出力してみます. コマンドは node --version もしくは node -v です. インストール・オプションで [Add to PATH] に チェックした(変更しなかった)ので、パスが通っており、直接 node コマンドが実行できます.

1
2
3
4
5
6
7
8
c:\> echo %PATH%
C:\Develop\sdk\nodejs8\;C:\Users\username\AppData\Roaming\npm; ...(省略)
c:\> node --version
v8.4.0
c:\> node -v
v8.4.0

TypeScript の インストール と 動作確認

npm コマンドでインストールします. TypeScript の トランスパイラー に加え、Lint も 合わせて入れておきます.

1
2
3
4
c:\> npm install -g typescript tslint
+ tslint@5.6.0
+ typescript@2.4.2
added 31 packages in 4.277s

動作確認は TS コンパイラー の tsc コマンドで行います.

1
2
3
4
5
c:\> tsc --version
Version 2.4.2
c:\> tsc -v
Version 2.4.2


とりあえず、Node.js 8 と TypeScript が インストールできました. ついでに Hexo 環境もバージョンアップとなりましたが、今のところ特に困ったことはなさそうです. (そりゃ、そうだ)

Visual Studio Code で Hello Python3!

ようやく Visual Studio Code の 準備ができました! さっそく Python の コーディングに入りたいと思います. まずは基本の Hello World から!

作業環境

  • Windows 10 64bit
  • Python 3.6 64bit
  • Visual Studio Code

Python サポート の 拡張機能を追加

Visual Studio Code で Python の コード補完や、Lint、デバッグ を 行うには、Pyhton サポート の 拡張機能を追加します.
Python サポート の 拡張機能は かなりの数 登録されています. その中から、今回は Don Jayamanne さん の 拡張機能 を 使わせていただくことにしました.
レーティングが高く、インストール数も多く、また Visual Studio Code の 公式ドキュメントで紹介されていること、「ようこそ」画面で推薦されていることなどからの選定となります. Thank you for the great extension!, Don Jayamanne-san!!

Visual Studio Code を 起動し「ようこそ」画面から、[カスタマイズする] - [ツールと言語] - [Python] を クリックします.
※ 「ようこそ」 が 表示されない場合は、メニュー の [ヘルプ] - [ようこそ] を 選択します

「Python に追加サポートをインストールしたあと、ウィンドウが再読み込みされます.」 が 表示されるので [OK] を クリックします.

Visual Studio Code が 再起動し、「ようこそ」の Python の 色が変わり Python サポートがインストールされました.

また、Ctrl + Shift + X で 拡張機能を表示するとインストール済みに Python が 追加されていることからも確認できます.

プロジェクト・フォルダー の 作成 と 展開

さっそくプロジェクト用のフォルダーを作成し開きます. Ctrl + K Ctrl + O から フォルダー選択ダイアログを表示してもよいのですが、今回はフォルダーを作成する必要があるので “Being able to keep your hands on the keyboard when writing code is crucial for high productivity. VS Code has a rich set of default keyboard shortcuts as well as allowing you to customize them. - Basic Editing in Visual Studio Code - Keyboard shortcuts“ にならい、統合コンソールから開くことにします.

Ctrl + @ で 統合コンソールを表示. 下記コマンドを実行しフォルダーの作成 と Visual Studio Code で フォルダーを開きます. 今回は C:\Develop\workspace\hello-python3 に フォルダーを作成しました.

1
2
PS C:\Users\username> mkdir C:\Develop\workspace\hello-python3
PS C:\Users\username> code C:\Develop\workspace\hello-python3\

Python の 仮想環境 を 作成

Hello World なので、仮想環境を作成するほどでは無いのですが、Visual Studio Code の 設定確認もかねて.
Ctrl + @ で 統合コンソールを表示し、 venv を 実行します. フォルダーを開いているので、カレント・フォルダーが自動的にプロジェクト用のフォルダになっています.

1
PS C:\Develop\workspace\hello-python3> python -m venv venv

Visual Studio Code で 仮想環境を使うように設定します.
Ctrl + Shift + P で コマンドパレット、interp と 入力して、[Python: Select Workspace Interpreter] を 選択します.
続いて利用可能な python.exe の 候補が出るので、 venv - python.exe を 選択します.

続いて新しいファイルを作成します. Ctrl + N でもよいのですが、Visual Studio Code っぽく Ctrl + Shift + P で コマンドパレット、new file を 入力して、Visual Studio Code の エクスプローラーに直接ファイルを追加します. ファイル名は hello.py としました.

ファイル名を確定すると「Linter pylint is not installed」の エラーが表示されます. [Install pylint] を クリックしてインストールします.

新しい統合ターミナルが起動し Pylint が インストールされます. 先ほど仮想環境を選択しているので実行する python.exevenv の ものになっています. インストールできたら、統合ターミナルは不要なので Ctrl + @ で 閉じておきます.

Python コーディング

単純な Hello World ならぬ Hello Python3! なので print('Hello Python3!') 以上、なのですが Visual Studio Code を 使うからには入力補完を使うようなコードにしたいところです. ちょっと回りくどいですが main() から hello() を 呼ぶような構造にしました.

1
2
3
4
5
6
7
8
def hello(name):
print('Hello ' + name)
def main():
hello('Python3!')
if __name__ == '__main__':
main()

では早速. d と タイプすると入力補完が即時立ち上がりました! (間違えて消えてしまったら Ctrl + Space )
いくつかの候補があり迷いますが、コード・スニペット の def を 選択します.

ファンクション定義のスニペットが展開されました. funcname に フォーカスが当たっているので、ファンクション名 hello を 入力し、 Tab キーを押下します.

parameter_list へ フォーカスが移るので、今回のパラメーター name を 入力し、 Tab キーを押下します.

ファンクションのボディに展開されていた pass へ フォーカスが当たるので、 print文 を 入力します.

printprint の 文字列の入力補完が効きますが括弧はつかないようです. また、 name は パラメーター定義があるのを見てくれて入力補完のリストが表示されます.

print 文のパラメーター 'Hello ' + name まで入力し、 Ctrl + Enter すると行の途中(今回は閉じ括弧のが残っている状態)でも、残りを改行せずにカーソルだけ次行へ改行してくれます. Ctrl + S で ファイルを保存します.
def に 警告が表示されています. 「[pylint] C0111:Missing module docstring」と「[pylint] C0111:Missing function docstring」ですね…
マウス・カーソルを警告が出ている波線にのせるほか、 Ctrl + Shift + M で 問題ビューを表示できます.

とりあえず先に進んで、 main() を 実装します.
main() は、そのあとの if __name__ == '__main__': と ペアになります. そのため if 文の入力補完を期待して if から入力し、 if(main) の 入力補完を選択します.

期待通りの main()if __name__ == '__main__': を 補完してくれました! pass に フォーカスが当たっているので hello('Python3!') を 入力します.

実装できたので Ctrl + S で 保存します. 警告 を すべて無くしてから完成ですが、今回は Visual Studio Code で Python を 実行することが目的で、コードは残さないので、このまま進めます.

Python プログラム の 実行

まずは Python 拡張機能 の [Python: Run Python File in Terminal] から実行してみます. Ctrl + Shift + P で コマンドパレットを表示、 Python run と 入力して絞り込みます.

[Python: Run Python File in Terminal] を 選択し、実行します.

その他 - venv 仮想環境 の python.exe の パス

venv の 仮想環境 python.exe の パスは .vscode\settings.json"python.pythonPath" に フル・パスで記述されています. .vscode\settings.json を Git などへコミットし共有する場合は、絶対パスか"${workspaceRoot}/venv/scripts/python.exe" のように、プロジェクトのディレクトリをさす ${workspaceRoot} に 置き換えておきます. 詳細は こちら Relative Paths to Python Interpreter - Python Path and Version · DonJayamanne/pythonVSCode Wiki
.

その他 - 統合ターミナルから venv 仮想環境 の 実行

Ctrl + @ で 統合ターミナルを起動し、そこから Python および 関連コマンド(e.g. pip)を実行する場合、 venv を 有効化する必要があります. この場合は [Python: Select Workspace Interpreter] が 効いていないので注意が必要です.

1
2
3
PS C:\Develop\workspace\hello-python3> Set-ExecutionPolicy RemoteSigned -Scope Process
PS C:\Develop\workspace\hello-python3> .\venv\Scripts\Activate.ps1
(venv) PS C:\Develop\workspace\hello-python3>

.


Visual Studio Code で Hello World が できました!
これで Python プログラミングが始められます. 何を作ろうかなぁ~

Visual Studio Code 最初の設定変更

Visual Studio Code が インストールできGit も 使えるようになりました. まだ使いこんでいないので、よい設定や便利な拡張機能が見いだせていないですが、とりあえず必要最低限の最初の設定をしておきます.
Eclipse での設定と同様、各種設定については、お好みがあると思います. ご参考になれば、といったところでしょうか.

作業環境

  • Windows 10 64bit
  • Visual Studio Code

ユーザー設定の表示

Visual Studio Code を 起動します.

Ctrl + , で ユーザー設定 の settings.json を 表示します.
Visual Studio Code は GUI の 設定を持っておらず、JSON ファイルを編集して設定します. とはいえ、各設定に説明がついていこと、エディターによる支援もあるので、難しいことなく設定できます.

設定変更の方法概要

ユーザー設定が分割エディターで表示されています.
左側が既存の設定でデフォルトになります. そこから変更する項目を右側にコピーして値を変更します.
コピーと設定変更は、左側で変更したい項目にマウスをのせると、鉛筆アイコンが出てくるので、クリックします.
クリックすると、設定できる値に応じて選択肢が表示されたり、テキスト入力の場合はコピーするといったアクションが表示されます. アクションに応じて設定を変更していきます.
Visual Studio Code の 再起動が必要な場合は、ダイアログが表示されるので指示に従います.

フォントの変更

まずはフォントを例に設定変更します.
開発環境にとってフォントは大事、今回も Eclipse でも使っている M+とIPAの合成フォント さん の Migu 1M を 使わせていただきます.. 素晴らしいフォントをありがとうございます!!

分割されているユーザー設定の左側、既存の設定 から [エディター] を 開きます.

"editor.fontFamily": "Consolas, 'Courier New', monospace", の 行に マウスをのせると [鉛筆アイコン] が 表示されます.

[鉛筆アイコン] を クリックします.
今回はテキスト入力の設定項目のため [設定にコピー] が 表示されるので、クリックします.

右側にコピーされ、設定値 ここでは "Consolas, 'Courier New', monospace" に フォーカスがあたります.

右側にcopyされた設定を "'Migu 1M'" にし、 Ctrl + S で 保存します. エディターに表示されているフォントが即時に変更されます.

空白文字の表示方法を変更

続いて選択肢のある設定変更の例として、空白文字の表示方法を変更します.
左側から "editor.renderWhitespace": "none", を 探す or 設定の検索 をし、 [鉛筆アイコン] を クリックします.

設定値の選択肢が表示されるので選択します. 今回は "boundary" を 選択しました.
右側にコピーされ、値が "boundary" に なっています.

今回設定した項目

上記 フォント変更 や 空白文字の表示方法 の 設定変更のように、左側の [鉛筆アイコン] から アクションを選択し、右側で設定を変更していくことで、設定が変更できます.
これを Visual Studio Code 1.15.0 時点、354個 の 項目から変更する値を探して設定します. 凄い設定項目数ですね…

今回は以下の設定を行いました.

設定項目 設定値 設定内容
editor.fontFamily “‘Migu 1M’” フォント を Migu 1M
editor.rulers [80, 120] 垂直ルーラー は 標準の 80 と よく使う 120
editor.minimap.showSlider “always” ミニマップのスライダー を 常に表示
editor.cursorBlinking “smooth” カーソル・アニメーション を スムーズに
editor.renderWhitespace “boundary” 空白文字を単語間の単一スペース以外表示
files.autoGuessEncoding true ファイルを開くときに文字セット エンコードを推測
files.eol “\n” 既定の改行文字を LF に設定
files.trimTrailingWhitespace true ファイルの保存時に末尾の空白をトリミング
files.insertFinalNewline true ファイルの保存時に最新の行を末尾に挿入
terminal.integrated.scrollback 200000 ターミナルの最大行数

更新
2017年9月4日 editor.minimap.showSlider を 追加


とりあえず基本設定はできました. files.insertFinalNewline などは よい設定ですね. 私は習慣化しているのでエディターの支援が効く機会が少ないかもしれませんが、チーム開発ではチョイチョイ引っかかるケースがあるので、設定に入れてしまって自動でやってしまうのがよさそうです.

Visual Studio Code で Git を 使う

Git for Windows Portable を インストールし Git が 使えるようになったので、さっそく Visual Studio Code から使ってみます.

作業環境

  • Windows 10 64bit
  • Git for Windows Portable 64bit
  • Visual Studio Code
  • Git Hub

Visual Studio Code を 使って GitHub からの クローン

Visual Studio Code を 起動します.
※ GitHub の アカウント設定と公開鍵の登録などの設定ができている前提とします.

統合ターミナル を Ctrl + @ で 表示します.

統合ターミナルで以下を実行しクローンします.
※ 下記 azriton/test は クローンするリポジトリに置き換えます

1
2
3
4
5
6
7
8
9
10
11
PS C:\Users\username> cd C:\Temp\
PS C:\Temp> git clone git@github.com:azriton/test.git
Cloning into 'test'...
The authenticity of host 'github.com (192.30.255.113)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.255.113' (RSA) to the list of known hosts.
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
PS C:\Temp>

Git の 設定で user.useConfigOnly true している場合は、ここでユーザ名とメールアドレスを設定します.

1
2
3
PS C:\Temp> cd test
PS C:\Temp\test> git config --local user.email "you@example.com"
PS C:\Temp\test> git config --local user.name "Your Name"

Visual Studio Code で プロジェクトのように扱うため、 code コマンドにクローンしたリポジトリのディレクトリを渡してフォルダを開きます. (前回リポジトリのディレクトリに入っているので、ここでは . カレント・ディレクトリを渡しています)
(GUI から開く場合は Ctrl + K Ctrl + O)

1
PS C:\Temp\test> code .

クローンしたディレクトリが開いた状態の新しいウィンドウが表示されます.

Visual Studio Code から 変更 を プッシュ

README.md を ダブルクリックしてエディタに表示しします.

改行コードがあっていないので Ctrl + Shift + P で コマンドパレットを表示し line s と 入力すると絞り込みされるので、[改行コードの変更] を 選択し、続い改行コードの選択が表示されるので [LF] を 選択します.

ステータス・バー の 改行コード が LF に なっていることを確認し README.md を 編集
、保存すると ソース管理アイコンに変更されたファイル数がつきます.

ソース管理画面 を Ctrl + Shift + G で 表示します.

すべての変更をステージしたいので、 Ctrl + Shift + P で コマンドパレットを表示、 stage と 入力すると絞り込みされるので、[Git: すべての変更のステージング] を 選択します.
※ 個別に指定する場合は、各ファイルにマウス・フォーカスを与えると [+] アイコンが出るのでクリックして追加します.

[Message (press Ctrl+Enter to commit)] の テキスト・ボックスにフォーカスが外れてしまったので、再度 Ctrl + Shift + G で フォーカスを与え、コミットメッセージを入力し Ctrl + Enter します. これで変更がコミットされます.

ステータス・バー に 発信 [0↓ 1↑] が 出ているのでコミット済み、プッシュ前の変更があることが分かります.
Ctrl + Shift + P で コマンドパレットを表示、 push と 入力すると絞り込みされるので、[Git: プッシュ] を 選択します.

ステータス・バー が [0↓ 0↑] なので 無事、変更をプッシュすることができました! (ちょっと、わかりにくいかもw)


統合コンソールがあるので、もしかしたら Git コマンドを直接使った方が便利かもしれないですね.
とはいえ、Git の 準備もできました. いよいよ Visual Studio Code で コーディングが始められます. たのみー!

PortableGit for Windows 64bit の インストール

Visual Studio Code の 開発環境を整理し始めました. Visual Studio Code は Git を サポートしていますが別途インストールする必要があります. 今回は Git for Windows Portable を 導入します.

作業環境

  • Windows 10 64bit
  • PortableGit 64bit
  • Git Hub

Git for Windows Portable (“thumbdrive edition”) とは

Git 公式パッケージの1つで、ポータブル・アプリケーションと呼ばれる特定の環境にインストールする必要がなく、USB メモリーなどで持ち運び、任意の環境(OS は Windows版なら、Windows の 必要はありますが)で利用できるパッケージ の Git に なります.
今回は PC に インストールするので、Git の 実行環境だけを持ち出すことは無いのですが、git コマンドぐらいしか使わないので、いろいろインストールせずに済ませたいことからポータブル版にしました.

インストール手順

git-for-windows の GitHub 最新のリリース https://github.com/git-for-windows/git/releases/latest へ アクセスします. Git の ウェブサイト https://git-scm.com/ の ダウンロード・ページへ行ってもよいのですが、自動ダウンロードが動作することと、チェックサムが無いので、ダウンロード・ページが見ている GitHub の リリース・ページからダウンロードしました.

例によって Windows PowerShell の Get-FileHash コマンドでチェックサムを確認します.
先のリリースページに記載されている PortableGit-2.14.0.2-64-bit.7z.exe の チェックサムは 5236c21de3cdf52b538322de0b0444f6cd49a5bae6006ea89f0683598cbda7ac でした.

1
2
3
4
5
c:\> powershell Get-FileHash -Algorithm SHA256 c:\temp\PortableGit-2.14.0.2-64-bit.7z.exe
Algorithm Hash
--------- ----
SHA256 5236C21DE3CDF52B538322DE0B0444F6CD49A5BAE6006EA89F0683598CBDA7AC

ダウンロードした [PortableGit-2.14.0.2-64-bit.7z.exe] を ダブルクリックして、7-Zip の 自己解凍ウィザードを起動します.

解凍先を聞かれるので任意のフォルダを指定します. 今回は C:\Develop\tool\PortableGit に しました.

環境変数 PATH を 設定します. システムのプロパティから追加してもよいですし、以下のコマンドからも実行可能です.

1
powershell [Environment]::SetEnvironmentVariable('PATH', [Environment]::GetEnvironmentVariable('PATH', 'User') + ';' + 'C:\Develop\tool\PortableGit\cmd', 'User')

.gitconfig の 設定

とりあえず最小限の .gitconfig の 設定

  • core.autocrlf は、改行コードをエディタで明示するので変換なしにしました
  • core.excludesfile は、全体の .gitignore ファイルの指定で、先に作成したファイルを指定します
  • user.useConfigOnly は、リポジトリごとに user.nameuser.email を 指定する設定です
    チェックアウトした後に設定するのが面倒ではありますがアカウントが別なリポジトリがあったりすると便利です
  • credential.helper は、HTTPS で クローンする際にクレデンシャル情報を記憶してくれます (Caching your GitHub password in Git - User Documentation)
    1
    2
    3
    4
    c:\> git config --global core.autocrlf false
    c:\> git config --global core.excludesfile ~/.gitignore
    c:\> git config --global user.useConfigOnly true
    c:\> git config --global credential.helper wincred

全体の .gitignore 設定

.gitignore は 各リポジトリに配置するのとは別に、全体の設定ができます. 先の core.excludesfile で 設定したファイルが それにあたり、今回は ~/.gitignore ホームディレクトリにあるファイルに設定しています.

まずはファイルを作成します. Windows には touch コマンドが無いのですが、 type nul > ファイル名 で 空のファイルが作れます. つい null と 指が動きたくなりますが l は 1つになります. nul は Linux などで言うところの /dev/null でしょうかね. NUL デバイスにリダイレクトされたシェルは、MS-DOS のメッセージを表示しません。 - Microsoft サポート.

また、エクスプローラーから作成する場合は 自分のホーム・フォルダーを表示し [右クリック] - [新規作成] - [テキスト ドキュメント] から、ファイル名を .gitignore. と 最後に . を 付けて作成します. 拡張子に関する警告が出ますが [はい] を クリックすると、最後の . が 消えて .gitignore に なります.

余談ですが 日付とファイルのタイムスタンプを更新 - Microsoft サポートCOPY /B ファイル名 +,, らしいです.

1
type nul > %USERPROFILE%\.gitignore

作成したファイルに Git で 管理しないファイルの設定をします.
リポジトリにコミットしないので自分の環境ならではの指定もできるのでうれしいです. Windows なので、とりあえず Thumbs.db を. (このブログは GitHub Pages で 作っている ので、画像がソースツリーにあるから必要)
その他、ちょっとしたスニペットを入れておく自分用フォルダなどを追加してもよさそうです.

1
Thumbs.db

2017年9月10日 追記
もっと良い設定方法があったので、全体 .gitignore の 設定 を 見直しました.
詳しくは、こちら Git の 全体 gitignore を 再設定する を ご参照ください.

Proxy が 必要な環境での設定

たまに必要になってハマることがあるのでメモ.
※ 以下の例の [hostname]:[port] は 利用する HTTP Proxy の ホスト名 と ポート番号に置き換えてください.

https:// で クローンする場合

1
2
c:\Temp> git config --global http.proxy http://[hostname]:[port]
c:\Temp> git clone https://github.com/azriton/test.git

git:// で クローンする場合

ホーム・ディレクトリの .ssh ディレクトリに以下の内容で config ファイルを作成します.

1
2
3
4
Host github.com
HostName ssh.github.com
Port 443
ProxyCommand connect.exe -H [hostname]:[port] %h %p

後はいつも通りクローンします.

1
c:\Temp> git clone git@github.com:azriton/test.git

Eclipse と 混在して利用する場合

片方は HTTPS を 使うのが無難な気がしますが、両方とも git:// を 使うには細工が必要です. Eclipse が config を 参照して うまく動かなくなるので、 git コマンドで利用する側の設定を変更します.
Host の 文字列を任意の文字列に変更します. 今回は proxy.github.com としました.

1
2
3
4
Host proxy.github.com
HostName ssh.github.com
Port 443
ProxyCommand connect.exe -H [hostname]:[port] %h %p

クローンする際に、git@github.com:azriton/test.git:github.comHost に 設定した文字列に置き換えます. 今回の例では proxy.github.com に なります.

1
c:\Temp> git clone git@proxy.github.com:azriton/test.git

クローンする際に GitHub からコピーした文字列を変更する必要があり、ひと手間かかりますがクローン後は特に意識することは無いです.


Git の 準備ができました. Visual Studio Code で Git を 使って開発の準備に取り掛かりたいと思います.

Visual Studio Code の インストール

最近 Python に 手を出し始めました. 以前でしたら何でも Eclipse で~っと Plug-in を 入れるのですが、最近は AtomVisual Studio Code といった高機能エディターの流行が気になります. 今回は Visual Studio Code で Python を 始めてみようと思うので、さっそくセットアップをしたいと思います. (セットアップ話が続くなぁ…)

作業環境

  • Windows 10 64bit
  • Visual Studio Code

Visual Studio Code とは

マイクロソフト社によって開発された高機能エディタです. Windows だけではなく、Linux や Mac OS X でも動作します.
インテリセンスという高性能なコード入力補完機能があり、加えて Git クライアント統合 や ターミナル統合(PowerShell、コマンドプロンプト、WLS Bash、Git Bash)、リファクタリング、デバッグなどが行え、ソースコード向けの機能がそろっています.
多くの機能が GUI による メニューがなく、コマンドパレット から使うようになっています. マウスを使用せずにコーディングを継続するように操作できるのだとか.

Visual Studio Code の ウェブサイトの他に、マイクロソフト社のウェブサイトに日本語の製品紹介のサイト Visual Studio Code - Visual Studio もあります. こちらから Visual Studio Code Preview ファースト ステップ ガイド が ダウンロードできます. 2015年7月17日版なので、少し古いですが概要を理解するにはよいかもしれません.

インストール手順

Visual Studio Code の ウェブサイト https://code.visualstudio.com/ へ アクセスします.
[Download for Windows] の 右にある [∨] を クリックし、OS の 一覧が表示されるので、[Windows x32] の 下にある [64bit version] リンクをクリックして、[Windows x64] を 追加します.
[Windows x64] の 右にある [Installer] の [Stable] の [↓] リンクをクリックしてインストーラーをダウンロードします.
※ [Download for Windows] を 直接クリックすると 32bit 版がダウンロードされたので、プラットフォームを直接指定しました.

2017年9月19日 追記
https://code.visualstudio.com/download の 下に [See SHA-256 Hashes] が ありました.
チェックサムが見つからなかったので、そのままダウンロードされた [VSCodeSetup-x64-1.16.1.exe] を ダブルクリックして、インストーラーを起動します.
チェックサム、確認したいんだけどなぁ…

いつもの Windows PowerShell の Get-FileHash コマンドでチェックサムを確認します.
先のダウンロード・ページに記載されている Windows 64 bit の チェックサムは 62b6f28d0bd02c0193389fb1b716fed1a2e8d5aea7d38ed39c70e2c2d0b20797 でした.

1
2
3
4
5
c:\> powershell Get-FileHash -Algorithm SHA256 c:\temp\VSCodeSetup-x64-1.16.1.exe
Algorithm Hash
--------- ----
SHA256 62b6f28d0bd02c0193389fb1b716fed1a2e8d5aea7d38ed39c70e2c2d0b20797

ダウンロードされた [VSCodeSetup-x64-1.16.1.exe] を ダブルクリックして、インストーラーを起動します.

セットアップウィザードが表示されるので、[次へ] ボタンをクリックして進めます.

ライセンスの確認が表示されます. 内容を確認し同意できるようでしたら [同意する] を 選択して [次へ] ボタンをクリックします.
同意できなかったら終了なので、あきらめて同意できるエディタを探します.

インストール先を指定します.
本当は C:\Develop 以下にまとめたいところですが、インストーラー・モノなので、指定されたまま進めました.

プログラムグループを指定します. 特に何もせず進めます.

追加タスクを選択します. 以下を設定しました.

  • エクスプローラー の ファイル コンテキスト メニュー に [Code で 開く] アクションを追加する
  • エクスプローラー の ディレクトリ コンテキスト メニュー に [Code で 開く] アクションを追加する
  • サポートされているファイルの種類のエディターとして Code を 登録する

デフォルトのエディタとして使わない場合は、[ファイル コンテキスト] と [サポートされいるファイルの種類] は チェックしない方が良いです. 特に関連付けを持っていかれると大変です.

一方で Visual Studio Code は ディレクトリ を プロジェクトのように扱うので、[ディレクトリ コンテキスト] は、どのような使い方にしてもチェックしておいた方が便利です.

インストールの設定確認が表示されるので、確認し、問題なければ [インストール] ボタンをクリックします.

Visual Studio Code が インストールされました. せっかくなので [Visual Studio Code を 実行する] に チェックしたまま [完了] します.

Visual Studio Code が 起動しました!
「ようこそ」画面が表示されています. 次回から表示しないようにするには [起動時にウェルカム ページを表示] の チェックを外します. また明示的に自分で表示するにはメニューの [ヘルプ] - [ようこそ] を 選択します.


まずはインストールだけですが、使い心地がよさそうなのでデフォルトのエディタとして使ってみることにしました.
エディタとしては若干起動が遅いので、メモ用途にも使うデフォルトのエディタという観点からは他のエディタの方が良いかもしれないと思いつつも、まずは手足のようになるまで使い込んでみてから改めて考えてみます. (新しいものは、これまでの記憶、特にマッスル・メモリーが上書きされるまで使い込んでこそ、ようやく良し悪しについて考えられると思ったりも)

Eclipse 4.7 Oxygen に 3rd Party の Plug-in を 追加

ようやく Eclipse の 設定ができました. 最後に 3rd Party の Plug-in を 追加して完了となります.

作業環境

  • Windows 10 64bit
  • Java SE Development Kit 1.8.0_141
  • Eclipse 4.7 Oxygen

Plug-in の 追加

Eclipse の メニューから [ヘルプ] - [新規ソフトウェアのインストール] を クリックします. 以降、この [使用可能なソフトウェア] ウィンドウを使って追加していきます.

SpotBugs (FindBugs)

SpotBugs は 問題になるコードを検出してくれるツールです. Eclipse Plug-in を 入れることでリアルタイムに検出してくれるので便利です. 以前は FindBugs というプロダクトだったのですが、最近は SpotBugs に なったようです.

[作業対象] に https://spotbugs.github.io/eclipse/ を 入力し Enter キーを押下します.

しばらく待つとウィンドウ中央のツリーに SpotBugs が 追加されるのでチェックをつけ、[次へ] ボタンをクリックします.

インストールの詳細が表示されます. [次へ] ボタンをクリックして進めます.

ライセンスの確認画面が表示されます. ライセンスを確認し同意できたら [使用条件の条項に同意します] を 選択し、[完了] ボタンをクリックします.

セキュリティ警告が出ますが、[インストール] ボタンをクリックして進めます.

インストール後、再起動を確認されます. 再起動しないと Plug-in が 有効にならないので [今すぐ再起動] ボタンをクリックします.

再起動後 [ウィンドウ] - [設定] から Eclipse の 設定を表示し設定を行います.
[Java] - [SpotBugs] - [報告構成]

  • 分析力: 最大
  • 報告する最小ランク: 1
  • レポートする最低の信頼度: Low
  • 報告(可視) バグ・カテゴリー: 実験用 以外 すべてチェック

Eclipse の Java コンパイラー設定同様に、とにかく厳しくします.

[Java] - [SpotBugs] - [ディテクター構成]

  • 隠しディテクターを表示: チェック
  • ディテクター: すべてチェック

実際のチェックを行う設定は、ディテクターになるので、ここも厳しく設定します.

Eclipse Class Decompiler

Eclipse Class Decompiler は JD, Jad, FernFlower, CFR, Procyon といった Java の デコンパイラーを使えるようにする Plug-in です.
普段使うことは無いのですが、ソースがロスとされている古いライブラリがあり仕方なしにデコンパイルすることがあるので入ってます. そんなもの捨ててしまえばいいのに…

Eclipse の メニューから [ヘルプ] - [新規ソフトウェアのインストール] で [使用可能なソフトウェア] ウィンドウ を 表示し、[作業対象] に https://spotbugs.github.io/eclipse/ を 入力し Enter キーを押下します.

すべてにチェックをつけ [次へ] ボタンをクリックして進めます. 以降は SpotBugs の 手順同様に インストールの詳細を確認し、ライセンスの確認と同意、インストールして再起動します.

再起動後 [ウィンドウ] - [設定] から Eclipse の 設定を表示し設定を行います.
[Java] - [逆コンパイラー]

  • デフォルトのクラス逆コンパイラー: FernFlower
  • オリジナル行番号をコメントとして出力

いろいろな逆コンパイラーが使えるので好みの逆コンパイラーを設定します. 違いについては こちら Jadclipse (Jad + JD-Core) から Eclipse Class Decompiler プラグインへ変更 - Eclipse 4.6 Neon 新機能 TOP10!と Spring Boot STS - Qiitacypher256 さんが整理してくださっています. 逆コンパイル結果まで載せてくださっており、とても助かります. 素晴らしい まとめ ありがとうございます!


コードカバレッジが取れる EclEmma が デフォルトで入ってくれるようになったので、ここでの設定が減ってよかったです.
ようやく Eclipse の 設定が完了しました. 長かった~. 年1回とはいえなかなかヘビーですね.