SlideShare a Scribd company logo
JSのお勉強の話。
Toro_Unit@SACSS Special13
1
$whoami
2
Toro_Unit
占部 紘 (うらべ ひろし)
フリーランスr
Frontend Engineer / Web Designer
Github: @torounit
Twitter: @Toro_Unit
Facebook: fb.me/torounit
Blog: https://torounit.com
3
割とWordPressの人です。
• WordBench 長野 モデレーター
• プラグイン/テーマ作者
• WordCamp Kyoto 2017 セッション
チーム
4
Plugins
• Custom Post Type Permalinks
• 413,500 Downloads
• Active Install 80,000+
• Other...
Theme
• Vanilla
5
Others
• VCCW Team
• WordPress Core Contributor (4.3,4.4,4.5,4.7)
6
長野県松本市からきました。1
• 日本一美味しいらしいすいかがある
とか無いとか。
• ワイン美味い。
1
https://commons.wikimedia.org/wiki/File:
130608_Matsumoto_Castle_Matsumoto_Nagano_pref_Japan02bs4.jpg
Author: 663highland. License: CC BY 2.5
7
8
やってきたこと (2010 ~)
• HTML&CSS 開発 / たまにWebデザイン
• JavaScriptはjQueryでゴリゴリ系がわりと多め。
• CMS テーマ制作
• ( 9割方 WordPress or MovableType / たまにDrupalとか...etc )
• CMS カスタマイズ・プラグイン制作
• ( カスタムフィールドめっちゃ作ったり、PHPめっちゃ書いたり )
• 環境はほとんどレンタルサーバー (LAMP)
9
やってないこと
(手伝い程度ならある)
• スマホアプリ開発
• WEBサービス開発
• システム開発
10
今日の話のゴール
• 自分でググりながらJSの勉強が出来
るようになる。
• Qiita 等の文書がある程度理解できる
ようになる。
11
Do you know
JavaScript?
12
そもそもJavaScript ってなに?
13
• 1995年に、Netscape(後のFirefox)に搭載されたブラウザ
用のプログラミング言語。
• 元々はLiveScriptって名前だったけど、大人の事情で改名。
14
• 最近はNode.js等、ブラウザにとどま
らず汎用的なプログラミング言語と
しての利用も増えてきた。
• 言語としては、ちょっと変わった特
徴をいろいろ持ってる。
• プロトタイプベース
15
JavaScriptで何が出来るの?
16
WEBサイトでのユースケース。
• DOM (ブラウザ上でのHTML/CSS)の操作。
• https://codepen.io/torounit/pen/xLwjMB
• Ajax. サーバーとの通信。
• https://codepen.io/torounit/pen/Kvzdej
• more...
17
DEMO
18
このように、ちょっとしたことから、アプリケーションみたいなモノまで、様々なコトができます。
19
Usecase
• WEBサイト・ブラウザアプリケーション
• モバイルアプリ
• デスクトップアプリケーション
• Atom/Vscode/Slack/WordPress.com...etc
• Brackets
20
ちょっと楽しそうじゃないですか?
れっつとらい!
21
でも、いざググったり色んな資料をよむと・・・
22
ES3/ES5/ES6/ES7/
ECMAScript2015/
ECMAScript2016/Node.js/Babel/
Bable/Webpack/browserify/
Rollup/fusebox/CoffeeScript/
TypeScript/jQuery/underscore.js/
Backbone.js/Angular/React/Vue/
Riot…
23
(´°ム°`;)
24
• JavaScript の話が知りたいんだけ
ど。。。
• しかもコピペしても動かない。。。
25
というわけで、最初は、JS界に蔓延る の単語のざっくり解
説、そのツールが生まれた意味をお話ししようと思います。
26
よく聞く ES6 と
か ES2015 って
何?
27
ECMAScript (通称ES)
• 誕生してすぐに、JavaScriptっぽい言
語が生まれる。(IEのJScript)
• ECMAという標準化団体が標準規格
を定める。それがECMAScript.
• 要はJIS規格みたいなヤツ。
28
ES6 / ES2015
• ECMAScript 6 Edition. 6版.
• これの策定中に毎年リリースするようになったので、正式に
は、ECMAScript 2015。ただし以前からES6と呼んでいたの
で、ES6と呼び続けている。
• ES6はES5(2009年)とは別物になるレベルでの大きな変更があ
った。
29
ES2016
• ES2016: ECMAScript 2016。現在公開されている最新の仕
様。
ES.next, ES7
• 未来に実装予定or実装が議論されている仕様のこと。ES7は
無いけど、過去にそういう言い方をしていた頃の名残。
30
JavaScript / ECMAScript の歴史 1
• 1995年: JavaScript誕生。Netscapeに搭載。
• 1996年: JScript誕生。IE3に搭載。一気に普及。
• 1997年: ECMAScript初版。
• 1998年: ES2. 第2版。
• 1999年: ES3が策定。
31
JavaScript / ECMAScript の歴史 2
• 2000年~2003年頃: ES4の仕様策定が始まる。が、失敗。
• 2007年~2008年頃: 再びES4の仕様策定が始まる。が、失敗。そしてES4
はお蔵入りに...
• 2008年: 次世代のJSを考えるプロジェクト ECMAScript Harmony 発足。
• 2009年: Internet Explorer 8 (ES3準拠…)
• 2009年: Node.JSの登場。
• 2009年: ES5策定 (こちらはES3.1をちょっと改良したモノ)
32
進化は停滞するがその間、爆発的に需要が伸びる。
• パソコン、インターネットの普及。
• Ajaxに注目が集まる。
• スマートフォンの普及。
• 脱Flashの動き。
33
CommonJS / Node.JS
• サーバーサイドやブラウザ以外でもJavaScriptを使いたい!
V8エンジン(Google ChromeのJSエンジン)滅茶苦茶早い!
34
AltJS (Altnative Javascript)
• JavaScript はいろいろと他のプログラム言語とは違う特徴が
ある。いろいろ個性的。(thisとか...)
• それらの問題を解決するために、別の言語で書いて、それを
JSに変換しよう!という動きが生まれる。そいつらはAltJSと
呼ばれる。
35
ググると、TypeScriptとかCoffeeScriptという単語が出てくるけ
ど、「JSにへんかんするんだー、ふーん」って思ってればOK.
• AltJSの機能がES6に取り込まれたのでほとんど衰退したが、
TypeScript は順調にユーザー数が増えている。特に大規模か
つチームでの開発では、型が欲しいケースが多いとのこと。
36
などなどいろいろ紆余曲折がありまして。
37
ECMAScript 2015 ( 6 edition ) !!!
38
ECMAScript Harmony がついにリリース。 (約7年!!!)
• ES4で挫折した仕様も取り込まれている。
• 1999年以来の超大規模アップデート。(約16年!!!)
• ほぼ別の言語になったと思って差し支えない。
• CommonJS や AltJS 由来の機能なども一部取り込まれてい
る。
39
どんな風に変わったの?
大量にありすぎて全部は紹介できませんがいくつか。
40
定数
以前は変数しか無かった。
const ham = '(´°ム°`)'
ham = 'ハム' // <- エラー!!!
41
以前は。。。
定数として扱うモノは、大文字にしてコーディング規約で対
応。
そして破られる
var HAM = '(´°ム°`)'
HAM = 'ハム' // <- エラーにならない!!!
42
デフォルト引数
function multiply(a, b = 1) {
return a*b;
}
multiply(5); // 5
43
以前は。。。
function multiply(a, b) {
var b = typeof b !== 'undefined' ? b : 1;
return a*b;
}
multiply(5); // 5
44
Class 構文
class Human {
constructor(name) {
this.name = name;
}
say(){
console.log('私の名前は' + this.name + 'です!');
}
}
const ham = new Human('(´°ム°`)');
const torounit = new Human('とろゆに');
ham.say(); //'私の名前は(´°ム°`)です!'
torounit.say(); //'私の名前はとろゆにです!'
45
以前は。。。
function Human(name) {
this.name = name
}
Human.prototype.say = function () {
console.log('私の名前は' + this.name + 'です!');
}
const ham = new Human('(´°ム°`)');
const torounit = new Human('とろゆに');
ham.say(); //'私の名前は(´°ム°`)です!'
torounit.say(); //'私の名前はとろゆにです!'
46
ES6 Modules
JS から JSを取り込む仕組み。
import hoge from './hoge.js'
hoge.js
const hoge = 'ほげ';
export default hoge;
47
CommonJSにも似たような仕組みが。
var hoge = require('./hoge.js');
48
以前は...
window.hoge = {}
その他
• require.js
49
• scriptタグの読み込み順などをちょっと間違えると動かなか
った。
• window.hoge はグローバル変数なので、どこからでも書き換
えられる。また、var hoge と 関数などの外で書くと
window.hoge が書き換わる。
• 良く解らないところで突然のエラーが発生したり。
50
変数が影響しないように、即時関数で囲んだり。
(function(){
var hoge = 'ほげ';
})();
51
詳しくは
• いまからはじめるECMAScript 6
52
JSにおける様々な問題が解決!
簡単に書けるぞ!!
53
やったー!
54
みんなも JS 書こう!!
55
...
56
そうはかんたんにいかないのがこの世
57
JS(というかフロントエンド全般)の最大の辛み。
• 同一のコードで複数のブラウザ・バージョンに対応。
• IE / Edge / Safari / Chrome / Firefox / iOS / Android / ….
• ECMAScriptはあくまでも仕様。ブラウザにその機能が入っている
かどうかは別問題。
• 全ての機能を100%実装したブラウザは、Safariのみ。今年中に
は他のブラウザも?
• ES6 Modules にはまだまだ壁が・・・
58
全然楽になってない…
59
じゃぁどうしてる?
60
最近よくある手法。
1. ES6やそれ以降の仕様で書く。
2. ブラウザでも動くように変換。
• 変換するプログラムのことをトラ
ンスパイラという。Babel が有
名。(変換することをバベるって
言ったり)
61
ES6 Modules
• トランスパイラはJSの構文を変換し
てくれるが、import や require は別
の対応が必要。
• webpack / browserify / rollup.js あた
りが有名。
62
ここまでのまとめ
• ES/ECMAScript が仕様。 JavaScript が実装。
• つい最近まで 1999年の仕様から逃れられなかったのがJS。
• その反動で、ES2015 でほぼ別物の言語になってる。
• いろんな環境で同じコードを動かすために、バグが少なく読
みやすく管理しやすいJSのために、webpackとかでまとめた
り、Babel で変換したりしてる。
63
僕が感じる、最近のJS周りの雰囲気。
WEBアプリ・サービス、モバイルアプリ、WEBサイトなどで話
題・求められる技術レベルはそれぞれ異なりますが、ボーダー
レスになってきた部分も多い気がする。
• アプリなどでは、JSでHTMLやCSSも動的に生成するような
モノも多い。またリッチなUIが要求されるケースなどでも。
• RESTAPI等、JS(それ以外でも)からいろいろ触れる機能が
CMS/フレームワーク/サービスに搭載されたり。
64
たとえばこんなの
65
66
Good Morning Sunshine
• gms.life
• new barlance のWEBマガジン
• CMS(WordPress)が出力したJSONをAjaxで取ってきて、
Reactでレンダリング。
67
フレームワーク/ライブラリ
• リッチなUI、それなりの規模のJSを書く場合は、何らかのラ
イブラリ・フレームワークを使うことが多い。
• たぶん、最近のJS界隈のメインの話題。
68
jQuery
一強だった時代もあった。
69
• ちょろっと書くぶんには便利。
• 最近は、「とりあえずjQuery」は避けられる傾向。
• jQueryが提供してきた機能は最近のブラウザにはだいたい標準
装備。
• ブラウザの機能が標準化される前は良い感じにしてくれた。
• 実は結構トリッキーなことをやってるので組み合わせ足りする
のに難があることも。
• 取っつきやすさは素晴らしいけど、どちらにしろJSの知識は要る。
70
いくつか例。
71
use jQuery
var button = jQuery('.button');
button.on('click', function(){
jQuery(this).addClass('active');
});
Vanilla.js
var button = document.querySelector('.button');
button.addEventListener('click', (e) => {
e.currentTarget.classList.add('active');
});
72
use jQuery
jQuery.ajax('/api.json')
.then( data => console.log( data ) )
Vanilla.js
fetch('/api.json')
.then( response => response.json() )
.then( data => console.log( data ) )
73
所感
• 今でも便利なケースはあるのでほどほどに付き合えば良いの
かなと。
• jQuery そのものも標準化された仕様に合わせようとしている
雰囲気。(ver3系)
74
Angular/React/Vue/Riot
• JavaScript のライブラリ。Angularは
Google製、ReactはFacebook製。
• View、UIを構築するためのライブラ
リ。与えられたデータに応じてHTML
を生成したりが得意。
• これらのライブラリで見た目を構築
→ データはJSでAPIと通信して取
得。と言う流れも今後ますます増え
そう。
75
ひとつのフレームワークの上でと言う流れから、役割に特化し
たライブラリを組み合わせて使うようになってきた。
76
詳しく知りたい人は
JavaScriptフレームワーク選定の議論 -
Qiita
77
PWA
• プログレッシブウェブアプリ
• WEBサイトとアプリのいいとこ取りをしたようなモノ。
• オフラインファーストという考え方も。
• Yosuke Onoue: WORDPRESSユーザーのための
PROGRESSIVE WEB APPSの話 | WordPress.tv
78
どうやって付き合っていく? どうやって勉強する?
79
僕の場合。
• 僕自身はJSの案件はそこまで多くない。でも、突然WEBアプ
リじみたこと、複雑なフォームを作る案件がふってくる。
• jQuery でも良いけど、それしか知らないと適切な選択が出
来ないので、ちょこっと触ってみる。
• 画面遷移があるモノは状態の管理が辛いけど、JSだけでや
ると割とサクッと終わるケースが多い気がする。(多段式
のフォームとか)
80
たとえばこんなの。
81
• チュートリアルやサンプルアプリが整
備されているものが多いので、それの
写経はおすすめ。
写経
• 具体例を見ながら自分で同じモノを
書いていく行為。
• 小さいモノをじっくり考えながら書
いていく。何行か書くごとに動かして
みたり。ただ漠然と書いてもだめ。
82
Todoアプリ
• Todoアプリが基礎が一杯詰まっててオススメ。
• TodoMVCといういろんな技術で同じTodoアプリをつくって見ようという
プロジェクトもあるので、参考にはなるかも。
83
とりあえず動くモノを作るとテンション上がる!
• モチベーションを維持する上でだいじ。
• なんだかんだで動くモノ作るのは達成感あるでしょ?
• 凄いモノを作る必要は無い。
• torounit/one-day-onsen-in-asamaonsen
84
人に聞く。
• 身近にエンジニアがいる場合はいろいろ聞いてみる。
• 身近に居ない場合は、勉強会などに参加して仲間を増やす。
• 仲良くなる -> SNS で繋がる -> 情報が自然にに入ってくる
• 友達がやってることって結構気になるよね。
85
コードを公開する。
• コードを公開してSNSやブログでさらすと、いろいろ教えて
くれる人がその仲間の中から出現したりする。
• 人のコードを読むのも写経するのも勉強になるし、本人に聞
いたりできる。
• Githubおすすめ。フロントエンドだったら Codepen もおす
すめ。
86
• フレームワークの習得は言語一つ覚えるのと同じくらいの労
力がかかると言われるので、のんびりゆるゆると地道に付き
合って行くのが良いと思います。一日30分とか。
• 仕事でコピペしてるコードとかもちゃんと読んでみたりする
の大切。
87
とりあえず、今からJSを書い
てみるなら。
• codepen
• JSBin
あたりがブラウザでさくっとやれてお手
軽。
88
とりあえず、なにかつくってみるなら
89
Felt
• https://cognitom.github.io/felt/
• オープンソースカフェの河村さん作の
開発・ビルド環境。
• 要Node.js.
• コマンドをコピペすれば出来る。
( cd path/to/project は適宜読み
替えて。)
90
WebStarterKit
• https://developers.google.com/
web/tools/starter-kit/
• Google 作のスターターキット
• ES6 Modules には非対応
91
• HTML/CSS/JSだけなら、どちらも仕事でも普通に使える。
• PHPと組み合わせるとかだといろいろ大変ですが、著名な
フレームワークやCMSとかならひな形があったりする。
• これらに限らず、Node.js 製のツールが多いので、インストー
ルしておくといい。
• 著名なフレームワークなども、プロジェクトのひな形を配布
していたりするので、それからはじめるといい感じにJSを書
くことだけに集中出来る。
92
ちょっとできるようになったら
93
実戦投入。
• 実際に仕事や案件をこなす中で見えてくる部分も多い。
• 「こんなことにも気を遣うのかー」とか。
• 普段コピペしてるような10行程度のコードを自分で改めて書いてみ
たり。
• 短いコードをしっかりちゃんと考えて書くことがその後に繋が
る。
• ちょっとずつやってみるのがたいせつ。
94
もうすこしできるようになったら
95
他の言語も触ってみる
• プログラミング言語はいろいろ影響を与えあってるので、仕
事で触ってる他の言語とかも同時並行的に勉強してみる。
• 「JSのこれってPHPでいうところのあれか!」みたいな発
見があったり、いろいろ理解の助けになる。
• 他の言語の機能が輸入されるケースはJSに限らずよくあ
る。
96
まとめ
• 写経大事。量より質。
• 実戦投入も大事。ただ、ちいさくこつこつ。
• ひとりで頑張るのはたいへんなので、コードを公開していろ
んな人と一緒にべんきょうしていこう。
• とりあえず Codepen でなにか書こう。
• とりあえず Node.js はインストールしとこう。
97
さいごに
98
JSはまだまだ発展途上。市場のニーズによってどんどん進化し
ていく。これからもまだまだ進化は続く。
99
最新のモノだから良い!ってことはない。けどそれを用いると
簡単に解決出来ることもある。
• 新しい機能は何らかの問題を解決するために生まれる。
• 1,2年遅れくらいでいいのかなーというゆるい気持ちで。
• 概要くらいは押さえておくクセをつけるといいかも。
• 全部の機能を一度に使ってみよう!というのは大変。
• 試してみながら徐々に仲良くなって行ければ。
100
こつこつ地道につきあっていきましょう。
• 1日30分とかでもいい。飽きない程度に。
• 実戦投入と仲間を作ることはモチベーションの維持にとても
重要。
• 困って悩んだ時間は絶対無駄にならない。
101
@see
• いまからはじめるECMAScript 6
102
おわり。
Thanks!
Github: @torounit
Twitter: @Toro_Unit
Facebook: fb.me/torounit
WEB Site: https://torounit.com
103

More Related Content

PDF
Firefox Add-on SDK 入門
PPTX
「自動化...か、かっこいいタル」(憧れ)から始める自動化
PDF
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
PDF
モテる! Node.js でつくる twitter ボット制作
PPTX
Hubotを使ってbotをつくろう!
PDF
hubot-slack v4移行時のハマりどころ #hubot_chatops
PDF
Go言語によるwebアプリの作り方
PDF
プログラムの読み方
Firefox Add-on SDK 入門
「自動化...か、かっこいいタル」(憧れ)から始める自動化
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
モテる! Node.js でつくる twitter ボット制作
Hubotを使ってbotをつくろう!
hubot-slack v4移行時のハマりどころ #hubot_chatops
Go言語によるwebアプリの作り方
プログラムの読み方

What's hot (8)

PDF
Go言語で作る webアプリ@gocon 2013 spring
KEY
Go言語のスライスを理解しよう
PDF
[UE4]マテリアルの注意すべきこと!~テクスチャロードとSwitch~
PDF
Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!
PDF
PyCon APAC 2013 Web Secure Coding
PDF
ヒカルのGo 資料 Webアプリケーションの作り方
PDF
JSで対戦できるゲーム作った
PPT
YAPC Asia 2010 30days Albumの裏側 後日談
Go言語で作る webアプリ@gocon 2013 spring
Go言語のスライスを理解しよう
[UE4]マテリアルの注意すべきこと!~テクスチャロードとSwitch~
Case study to use MongoDB in middle-class SIer / (中規模) SIerだってMongoDBできたよ!
PyCon APAC 2013 Web Secure Coding
ヒカルのGo 資料 Webアプリケーションの作り方
JSで対戦できるゲーム作った
YAPC Asia 2010 30days Albumの裏側 後日談
Ad

Similar to JSのお勉強の話。 (20)

PPT
20090121 J QueryからはじめるJava Script~初級編~
PDF
JavaScript 研修
PDF
JavaScriptと共に歩いて行く決意をした君へ
PDF
JavaScript Basic 01
PDF
JavaScript入門
PPTX
ODP
webを飾る技術
KEY
春のJavaScript祭り
PDF
モダンJavaScript環境構築一歩目
PDF
JavaScript.Next
PDF
覚醒!JavaScript
PDF
JavaScript超入門 基礎
PDF
JavaScript (ECMAScript) 2013
PDF
第四回 JavaScriptから始めるプログラミング2016
PDF
Java scriptの進化
PPT
Lightning introduction to CoffeeScript 20131005
KEY
Webapp startup example_to_dolist
PPTX
2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」
PDF
JavaScript.Next Returns
PPTX
おっさんES6/ES2015,React.jsを学ぶ
20090121 J QueryからはじめるJava Script~初級編~
JavaScript 研修
JavaScriptと共に歩いて行く決意をした君へ
JavaScript Basic 01
JavaScript入門
webを飾る技術
春のJavaScript祭り
モダンJavaScript環境構築一歩目
JavaScript.Next
覚醒!JavaScript
JavaScript超入門 基礎
JavaScript (ECMAScript) 2013
第四回 JavaScriptから始めるプログラミング2016
Java scriptの進化
Lightning introduction to CoffeeScript 20131005
Webapp startup example_to_dolist
2014年メディア工房勉強会 第1章「Webの仕組みとHTML5」
JavaScript.Next Returns
おっさんES6/ES2015,React.jsを学ぶ
Ad

More from Hiroshi Urabe (6)

PDF
まだ間に合う「CSS設計」ことはじめ。CSSの闇に飲み込まれないための考え方。
PDF
カスタムフィールドの光と闇。 または、愛について。
PDF
WordPressで行う継続的インテグレーション入門編
PDF
使いやすいWordPressのためのCSSのつくりかた
PDF
自分のWordPressのブログをリニューアルした話
PDF
カスタム投稿タイプ&カスタムタクソノミーの使い方 #wbNagano
まだ間に合う「CSS設計」ことはじめ。CSSの闇に飲み込まれないための考え方。
カスタムフィールドの光と闇。 または、愛について。
WordPressで行う継続的インテグレーション入門編
使いやすいWordPressのためのCSSのつくりかた
自分のWordPressのブログをリニューアルした話
カスタム投稿タイプ&カスタムタクソノミーの使い方 #wbNagano

JSのお勉強の話。