SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
Drupal 8 におけるTypeScript を使用する
JavaScript 開発の現状
Tom Konda (@tom_k_en)
TypeScript とは
JavaScript に型制約を与え、誤ったコードを書きづらくするAltJS
PHP で言うと、下記のコードのような型宣言
ライブラリの型制約はnpmの @types/* からもダウンロード可
マイナーなライブラリは自力で型制約を書く必要あり
Microsoft 製
function checkArray(int $a, array $b) :bool {
return count($b) === $a;
}
Drupal 8 とTypeScript
DrupalCon Barcelona (2015)で発表があった
TypeScriptize your next D8 site
テーマで使用するJavaScriptをTypeScriptで作成する内容
ES class などモダンな構文を使用して変換などの紹介
これ以外にもDrupal 8 向けのTypeScript 型定義のプロジェクトが
存在
Drupal 8 向けのTypeScript 型定義
TypeScript definitions というプロジェクトが存在
リリースされていないため、ダウンロードは不可
URL はhttps://www.drupal.org/project/typings
TypeScript definitions の中身
レポジトリのURL はhttp://cgit.drupalcode.org/typings/tree/
2017/01/21現在の最新コミットは2016‑07‑17
TypeScript definitions のpackage.json
npm の依存関係は以下の通り
TypeScript がちょっと古い(現在は2.1.5)
typings を使ってライブラリの型制約を得る辺りが懐かしい
{
"devDependencies": {
"minimatch": "^3.0.2",
"tslint": "^3.8.0",
"tslint-config-typings": "^0.2.3",
"typescript": "^1.8.10",
"typings": "^1.3.1"
}
}
TypeScript definitions に貢献すべきか
あまり必要性を感じない
TS2.0から依存関係に @types/* があると型制約を自動で読む
JS 関係なのに、npm エコシステムに入っていない
他のツールとの連携で辛そう
npm に移すことを働きかけた方がよいかもしれない
このプロジェクトの有無とは別にTypeScript での開発には課題あり
変換前のTypeScript ファイルの例
インデントはスペースとタブが混在
 foo のみタブ、他はスペース
const somethingNew = {
'hogehoge' : 'foobar',
'foo' : 'xyzzy',
'doe' : 'jane'
}
TypeScript のコンパイラ(tsc コマンド)で変換すると…
変換後のJavaScript ファイルの例
インデントはスペース4文字に統一される
Drupal のインデントのコーディング規約を破ることになる
Drupal のコーディング規約ではインデントのスペースは2文字
tsc コマンドやtsconfig.json でインデントの設定は不可
const somethingNew = {
'hogehoge': 'foobar',
'foo': 'xyzzy',
'doe': 'jane'
};
ESLint でも‑‑fix オプションで変換できるが…
ESLint による修正の例
 eslint --fix ./js/hogehoge/**.js でlint 時に修正
インデントの間違いなどは自動で修正
下記のように修正しきることは難しい( == を変換できない)
drupal.org に公開しない場所でしか使い道がなさそう
> tstest@1.0.0 eslintfix /Users/TKonda/Documents/jsapps/hoge/ts
> eslint --fix ./out/test3.js
/Users/TKonda/Documents/jsapps/hoge/tstest/out/test3.js
6:27 error Expected '===' and instead saw '==' eqeqeq
7:3 error Unexpected console statement no-console
✖ 2 problems (2 errors, 0 warnings)
drupal.orgで公開するJSをTSで書きたいなら
tsc による変換後コーディング規約に合致するように変換が必要
下記のようにタスク定義をする感じ?
変換の実装はしんどい
{
"build" : "npm-run-all tsc convertD8JS lint",
"tsc" : "tsc -p ./src/hogehoge",
"convertD8JS" : "d8convert ./js/hogehoge",
"lint" : "eslint"
}
この問題はJavaScript をES の最新版で書いても同様に生じる
トランスパイル後のコードが規約への準拠を保証していない
まとめ
Drupal 8 へTypeScript の型制約を付けるプロジェクトは存在
drupal.org よりnpm にある方が有用と思われる
TypeScript を用いて公開プロジェクトのソースを書くのは厳しい
コーディング規約に合致させる難易度が大
コーディング規約に関しては、ES の最新版で書いたJS も同様
ブラウザサポートしんどそう
公開しないならTypeScript とかES の最新版も使用可能
今後Drupal JavaScript コーディング規約の変更希望
#2809281 や#2809735 を見ると希望あり

Contenu connexe

Tendances

Tendances (10)

An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to Objects
 
Rustのテストやエコシステム
RustのテストやエコシステムRustのテストやエコシステム
Rustのテストやエコシステム
 
Drawing Dataflow On Dalvik Bytecodes
Drawing Dataflow On Dalvik Bytecodes Drawing Dataflow On Dalvik Bytecodes
Drawing Dataflow On Dalvik Bytecodes
 
C# FileSystemWatcherコントロールを使用したアプリケーションの作成
C# FileSystemWatcherコントロールを使用したアプリケーションの作成C# FileSystemWatcherコントロールを使用したアプリケーションの作成
C# FileSystemWatcherコントロールを使用したアプリケーションの作成
 
SPA×Auth0
SPA×Auth0SPA×Auth0
SPA×Auth0
 
入門ClojureScript
入門ClojureScript入門ClojureScript
入門ClojureScript
 
MenohにおけるC++実装 / C API / C++API
MenohにおけるC++実装 / C API / C++APIMenohにおけるC++実装 / C API / C++API
MenohにおけるC++実装 / C API / C++API
 
Live Coding で学ぶ C# 7
Live Coding で学ぶ C# 7Live Coding で学ぶ C# 7
Live Coding で学ぶ C# 7
 
jQuery+TypeScriptやってみた
jQuery+TypeScriptやってみたjQuery+TypeScriptやってみた
jQuery+TypeScriptやってみた
 
The History of LINQ
The History of LINQThe History of LINQ
The History of LINQ
 

Similaire à Drupal 8 における TypeScript を使用する JavaScript 開発の現状

Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Akira Inoue
 
CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14
Takako Miyagawa
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Ayumi Goto
 
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
Akira Inoue
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Atsushi Kambara
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
 

Similaire à Drupal 8 における TypeScript を使用する JavaScript 開発の現状 (20)

Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口
 
CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14CodeIgniter東京勉強会 2011.05.14
CodeIgniter東京勉強会 2011.05.14
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
What is template
What is templateWhat is template
What is template
 
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
 
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWINHow to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
 
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
jQuery 対応ライブラリと TypeScript
jQuery 対応ライブラリと TypeScriptjQuery 対応ライブラリと TypeScript
jQuery 対応ライブラリと TypeScript
 
C#勉強会
C#勉強会C#勉強会
C#勉強会
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
 
Mvc conf session_2_shibamura
Mvc conf session_2_shibamuraMvc conf session_2_shibamura
Mvc conf session_2_shibamura
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
LT駆動開発04 5分では分からないTypeScriptのなんとか
LT駆動開発04 5分では分からないTypeScriptのなんとかLT駆動開発04 5分では分からないTypeScriptのなんとか
LT駆動開発04 5分では分からないTypeScriptのなんとか
 
ASP.NET vNextの全貌
ASP.NET vNextの全貌ASP.NET vNextの全貌
ASP.NET vNextの全貌
 

Drupal 8 における TypeScript を使用する JavaScript 開発の現状