Movatterモバイル変換


[0]ホーム

URL:


大樹 小倉, profile picture
Uploaded by大樹 小倉
PDF, PPTX16,453 views

モダンJavaScript環境構築一歩目

JavaScriptの現状を支えるエコシステム群を軽く紹介して、モジュールについて少し掘り下げた勉強会

Embed presentation

Download as PDF, PPTX
第二回JavaScript勉強会小倉 大樹
JavaScript道1. 必須の基礎知識2. モダンJavaScript 初級編3. JavaScript最新事情4. 以後未定ECMAScript今日はここやります修
JavaScriptの基礎知識jQuery その前に前回のあらすじ
strict mode変数宣言関数定義スコープクロージャプロトタイプ指向CoursesJavaScriptの基礎知識
strict mode"use strict"; // global!function() {"use strict"; // innner only}エラーを出やすくする
変数の巻き上げ(function () {console.log(a);var a = 'aaaa';console.log(a);})();(function () {var a;console.log(a);var a = 'aaaa';console.log(a);})();BeforeAfter
変数宣言のルール変数の宣言は全部関数の先頭でダサいけど、そういう言語だから諦める
関数宣言と関数式// statementfunction hoge() {}!// expressionvar hoge = function() {};宣言の方では宣言の巻き上げが発生する。式では関数に名前が付かない(つけることも出来る)。Function関数? なんですかそれ?
関数の定義方法巻き上げによる意図せぬ動作の防止基本は関数式!この辺は今後説明します関数宣言nameプロパティが必要になる、オブジェクトのコンストラクターとか
スコープ超重要基礎var globar = 'global desu';!function scope1() {var locar = 'local desu';console.log(globar); // global desufunction scope2() {var locarSecond = 'local mark2 desu';console.log(locar); // local desu}console.log(locarSecond); // ReferenceError: locarSecondis not defined}console.log(locar); // ReferenceError: locar is notdefined
必須知識です関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数で実現している。引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする。関数とそれを評価する環境のペアであるともいえる。この概念は少なくとも1960年代のSECDマシンまで ることができる。from wikipediaクロージャとは
クロージャの例var incrementGenerator = function (start) {var inc = function () {start += 1;return start;}return inc;};!var inc1 = incrementGenerator(0);var inc2 = incrementGenerator(0);!inc1(); // 1inc2(); // 1inc1(); // 2inc2(); // 2
プロトタイプ指向クラスとは違うのだよ
JavaScriptはオブジェクト指向言語ここまでやりました
次回の予定オブザーバーパターンjshintPromiseモジュール化いろいろでしたが
ModernJavaScript DevThe Beginners' CourseEcosystem Node, npm, glup……jshint Lint, Style FormatModularize Rule StyleTool
Server-side JavaScriptProcessorNode.js (fork: io.js) and othersPackageManager npm, bowerBuildTool Grunt or GulpModule DependencyManagement RequireJS, browserify, component,WebPackecosystemon
乱立しすぎww挙げた以外にも色々あって、とても説明しきれない説明してもどうせすぐ陳腐化する名前と概要だけ出して流していきます!
Node.js## install nodebrew$ curl -L git.io/nodebrew | perl - setup!## set $PATH$ export PATH=$HOME/.nodebrew/current/bin:$PATH## install stable version as binary$ nodebrew install-binary stable
npm## install globally$ npm install -g hogehoge!## install locally and save package.json$ npm install --save-dev hogehoge!## install from package.json$ npm install
bowerフロント向けのパッケージマネージャーCSSとかも入ってるnpmよりもフロント向けライブラリが充実してるなので両方使わざるを得ないことがあったりしてつらい
Grunt & Gulpビルドツール。Rakeみたいなものファイル監視&やることの多いJavaScriptの強い味方AltJSのコンパイル、依存性の管理、ファイルの結合、圧縮テスト……Gulpの方が新しく、使いやすい(らしい)
RequireJS…etcJavaScriptにモジュールシステムを組み込むツールいくつかの仕様、ツールが入り乱れていてヤバい結合、圧縮、依存性管理もやったりするので複雑RequireJSが最初(筆者の知る限り)最近また増えてきた一番新しいのはWebPack とてもつらい
TestToolsTest Framework Jasmine, QUnit, Mocha, ChaiHeadLess Browser PhantomJS and moreTest Runner Karmaブラウザ環境のシミュレーターのせいでちょっと煩雑
複雑、乱立、陳腐化JavaScriptで実現することに対する要求が高まった!学習コストの高まりでも中規模以上なら使わないと破綻する!トレードオフを考慮した設計、チームビルディングが必要UXを意識したモダンなJavaScriptはもはや片手間で扱えるものではなくなったっぽい
文化JavaScriptのツール周りは、枯れているかよりも現在どれだけ開発が活発かで判断したほうが良さそう。!枯れていると廃れつつあるがほぼイコールになりかねない印象
JSHint•detect errors and potential problems•enforce your team's coding conventions•very flexibleNo check, No commit!
たいへんなのでじっくりせつめいします
The History and Futureそして、次のバージョンであるECMAScript6には
言語の機能そのものにモジュールの仕組みが……!当初のJavaScriptにはモジュールや名前空間にあたる仕組みがなかったそれを補うためにいくつかのツールやライブラリが考案された代表的な仕様がCommonJSであるCommonJSとはサーバ、クライアント、その他環境での標準的な仕様を定めるものその中でモジュールの仕様も策定された
Present day, Present time未だ黎明期。ライブラリやツールの力を借りつつ、きたるECMAScript6になるべく移行しやすい方法をとるべき。
JavaScript Module Pattern• グローバルに投げ込む• jQueryプラグイン• フルセットツールキットによる独自実装 ◦DojoToolkit ◦Ext.js• CommonJS ◦RequireJSとか先に紹介したやつら• AMD(Modules/AsynchronousDefinition)• TypeScript、Haxe、Scala.jsなどのモジュール機能• ECMAScript6
全部グローバルパターン(function(win, undefined) {!function MyClass() {}!MyClass.prototype.method = function(name) {console.log("Hello " + name);};!win.MyClass = MyClass;!})(window);<script src="MyClass.js"></script><script>new MyClass().method("JavaScriptModule");</script>昔使われてたやつ
全部グローバルパターンどこがダメだったかグローバル汚染を起こしているので名前が衝突する可能性があるモジュール化とは言えないブラウザでしか動作しない(NodeやWebWorkerが考慮されていない)undefinedの上書きはuse strictで防げるのでダサい
jQueryPlugin全部グローバルとだいたい同じ問題を抱える
CommonJSNode.js使ったことがある人は見覚えがあるはずvar MyClass = require("./MyClass.js");
AMD各モジュールを非同期に読み込むための仕組み依存ライブラリが超大量な場合に高速化が望める一応CommonJSの一部!define(['jquery', 'underscore'], function ($, _) {function a(){}; // publicfunction b(){}; // privatereturn a;});
AMDの問題点• Node.js、WebWorkerで使いどころがない• クライアントサイドでの動的な依存性解決のコストが無視できない• コードが複雑化する• ES6が実用化されれば出番はない手間やデメリットの割にリターンが少ない
AltJS言語ごとに違うが、相互運用性やロックインに注意すれば十分に選択肢相互運用性で言えばTypeScriptが最良かもしれない
DemonstrationCommonJS!Webpack!GulpWebpackによるCommonJSスタイルのモジュール化
Webpack今あるツールで一番新しく、万能だとおもわれる
Why Webpack?ほぼ全てのモジュールシステムに対応 AMD, CommonJS, ES6 etcetc……複数ファイルでの出力を当初から考慮 Browserifyとの比較一番新しいっぽい JS文化Instagramが使ってくれてる 知見ありがとうございます
Installation!$ npm install -g webpack!$ touch entry.js index.html
Codemodule.exports = "BOO!";content.jsvar MESSAGE = require('./content.js');document.write(MESSAGE);entry.jsとりあえずCommonJSスタイルでの例
Codeindex.html<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title></title></head><body><script type="text/javascript" src="bundle.js" charset="utf-8"></script></body></html>
Build!$ webpack entry.js bundle.js!$ open index.html
Dependency Resolutionhello.js(function(global) {"use strict";!var Greeter = (function () {function Greeter(message) {this.greeting = message;}Greeter.prototype.greet = function () {return "Hello, " + this.greeting;};return Greeter;})();!if (typeof module !== "undefined") {module.exports = Greeter;}!})((this || 0).self || global);
Dependency Resolutiongreet.jsvar MESSAGE = require('./content.js');var Greeter = require('./hello.js');var g = new Greeter(MESSAGE);!module.exports = g;document.write(require('./greet.js').greet());entry.js
Webpackまとめ• 割と簡単にブラウザにモジュール機能を導入出来た• CommonJS以外の書き方にも対応してる• 複数ファイルへの出力、CSSや画像への依存関係などにも対応• webpack.config.jsで複雑なモジュールのビルドの設定を行える• Gulpとの連携も考慮しておく様々なモジュールシステム、ブラウザ以外の環境、ClojureCompilerへの対応……などを考えるとモジュール化の書き方はもっともっと洗練する必要がある。が、それはまたの機会に。
JavaScript Moduleまとめ• ES6が標準化するまでの辛抱(IE?)• 中規模以上ならモジュール化は必須、小規模でも必須• 規模感や求めるクオリティが標準程度なら学習コストはペイする(はず)• 複数環境や高圧縮Minifierに耐えるコードを書く場合はさらに大変• もっとよく知りたい人はgithubのリポジトリやuupa氏のドキュメントを読む
次回予告
アーキテクチャMMVM入門MVC モナドの価値PromiseパターンShadow DOMObserverリアクティブプログラミング

Recommended

PDF
JavaScript MVC入門
PDF
JavaScriptユーティリティライブラリの紹介
PDF
JavaScript基礎勉強会
PDF
大規模なJavaScript開発の話
PPTX
モテる JavaScript
PDF
覚醒!JavaScript
PDF
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
PDF
Javascriptのあれやこれやをまとめて説明してみる
PDF
JavaScriptことはじめ
PDF
キメるClojure
PDF
JVMの中身を可視化してみた
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
PPT
第4回勉強会 Groovyの文法からSpockまで
PDF
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
PDF
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
PDF
Node.jsでブラウザメッセンジャー
PDF
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
PDF
TypeScriptへの入口
PDF
これからのJavaScriptの話
PDF
俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略
PDF
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
PDF
クライアントサイドjavascript簡単紹介
PDF
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
PDF
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
PDF
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
PDF
Node.js を選ぶとき 選ばないとき
PDF
コンパイラ指向ReVIEW
PPTX
TypeScriptをオススメする理由
PDF
JavaScript入門
PPTX
Java scriptの基礎

More Related Content

PDF
JavaScript MVC入門
PDF
JavaScriptユーティリティライブラリの紹介
PDF
JavaScript基礎勉強会
PDF
大規模なJavaScript開発の話
PPTX
モテる JavaScript
PDF
覚醒!JavaScript
PDF
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
PDF
Javascriptのあれやこれやをまとめて説明してみる
JavaScript MVC入門
JavaScriptユーティリティライブラリの紹介
JavaScript基礎勉強会
大規模なJavaScript開発の話
モテる JavaScript
覚醒!JavaScript
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
Javascriptのあれやこれやをまとめて説明してみる

What's hot

PDF
JavaScriptことはじめ
PDF
キメるClojure
PDF
JVMの中身を可視化してみた
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
PPT
第4回勉強会 Groovyの文法からSpockまで
PDF
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
PDF
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
PDF
Node.jsでブラウザメッセンジャー
PDF
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
PDF
TypeScriptへの入口
PDF
これからのJavaScriptの話
PDF
俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略
PDF
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
PDF
クライアントサイドjavascript簡単紹介
PDF
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
PDF
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
PDF
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
PDF
Node.js を選ぶとき 選ばないとき
PDF
コンパイラ指向ReVIEW
JavaScriptことはじめ
キメるClojure
JVMの中身を可視化してみた
Java開発の強力な相棒として今すぐ使えるGroovy
第4回勉強会 Groovyの文法からSpockまで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
Node.jsでブラウザメッセンジャー
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
TypeScriptへの入口
これからのJavaScriptの話
俺のコードがどこでつかわれているのかわからない問題 あるいはマイナーOSSの生存戦略
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
クライアントサイドjavascript簡単紹介
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
Node.js を選ぶとき 選ばないとき
コンパイラ指向ReVIEW

Similar to モダンJavaScript環境構築一歩目

PPTX
TypeScriptをオススメする理由
PDF
JavaScript入門
PPTX
Java scriptの基礎
PDF
JSX / Haxe / TypeScript
PDF
JavaScript.Next
PDF
Kanazawa.js.Next
PDF
JavaScript.Next Returns
KEY
いまさらJavaScript
PDF
JSer Class #3
PDF
JavaScript Tips 2015(PDF 版)
 
PDF
Harmoware-VIS Tutorial
PDF
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
PPT
20090121 J QueryからはじめるJava Script~初級編~
PDF
Java scriptの進化
PDF
JavaScript (ECMAScript) 2013
PDF
JSer Class #1
PPTX
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
PDF
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
PPTX
Nds meetup8 lt
PPTX
Javascriptのデザインパターン【勉強会資料】
TypeScriptをオススメする理由
JavaScript入門
Java scriptの基礎
JSX / Haxe / TypeScript
JavaScript.Next
Kanazawa.js.Next
JavaScript.Next Returns
いまさらJavaScript
JSer Class #3
JavaScript Tips 2015(PDF 版)
 
Harmoware-VIS Tutorial
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
20090121 J QueryからはじめるJava Script~初級編~
Java scriptの進化
JavaScript (ECMAScript) 2013
JSer Class #1
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
Nds meetup8 lt
Javascriptのデザインパターン【勉強会資料】

モダンJavaScript環境構築一歩目


[8]ページ先頭

©2009-2025 Movatter.jp