Upgrade to Pro — share decks privately, control downloads, hide ads and more …

おっさんES6/ES2015,React.jsを学ぶ

 おっさんES6/ES2015,React.jsを学ぶ

おっさんES6/ES2015,React.jsを学ぶ
2016JavaScript入門

2016/11/21 @BizReach D3イベント登壇資料

最近のJavaScript動向
・試験に出るJavaScript21年の歴史
ES6/ES2015を学ぶ
・ES6/ES2015概要
・ES5を振り返る
・altjsの意義
Reactを学ぶ
・DOCを読む
・Tutorialをやる
まとめ
・今回の学習を通じて感じたこと

Takeshi Sonoda

November 22, 2016
Tweet

Other Decks in Programming

Transcript

  1. 主な業務経験 2002 2004 2008 2010 VC++ 富⼠フイルム ソフトウエア OPT Become

    Bizreach C# Perl PHP Java インフラ Java Scala 在籍企業 2015 2016 インフラ JS JS ⾔語 マネジメントとかで ほとんど開発してない期間
  2. Reactを触ろうとするものの • ヤバイ!まず使われている単語がわからない • ⾃分の知識はJQueryくらいで⽌まってる • EcmaScriptってなに? • トランスパイラって何? JSなのにコンパイルってどういうこ

    と? • Babelなにそれつよいの?⼤丈夫?神の怒りかっちゃわない? • Gulp?タスクランナー?なにそれGruntみたいなヤツ?ごめん そっちも知らない。最近はWebpack??もうお腹いっぱいです。 • React触るっつーか スタート地点にも⽴ててない
  3. ⽬次 • 最近のJavaScript動向 • 試験に出るJavaScript21年の歴史 • ES6/ES2015を学ぶ • ES6/ES2015概要 •

    ES5を振り返る • altjsの意義 • Reactを学ぶ • DOCを読む • Tutorialをやる • 今回の学習を通じて感じたこと
  4. JavaScriptの歴史 誕⽣ • 1995年-誕⽣ • 12⽉,Netscape Navigator 2.0に,ブレンダン・アイク(Brendan Eich)が開発した『LiveScript』が実装されるNetscape Navigator社

    とSun Microsystems(現Oracle)は当時提携関係にあり,Javaの勢いに 便乗しようとLiveScriptから『JavaScript』に改名. • こんな名前にしたせいで多くの混乱と誤解を⽣む • 1996年 • MSはIEにJavaScriptを搭載しようとしたが,NN社はライセンスを供 与しなかった.そのため,Javascriptに似た⾔語として『JScript』と いう⾔語を開発・・ 部分的に互換があったりなかったり • 開発者泣かせの状態に(ブラウザ依存はずっと開発者泣かせだけど ね!)
  5. JavaScriptの歴史 標準化したものの・・ • 1998年 ECMA-262 第2版、1999年 ECMA-262 第3版までは標 準化は順調に進む •

    ECMA-262 第4版のときに4版をおすAdobe,Mozira(旧NN社)と 3.1版をおすダグラス・クロックフォード(Douglas Crockford)、 MSやYahoo!で意⾒が別れて最終的には第4版は破棄 • その後第5版がリリースされるのは10年後の2009年である • (あとで詳しく語ります)
  6. JavaScriptの歴史 Ajax登場JS復権へ • 2005年2⽉8⽇ Google Map登場 ⽇本版は7⽉14⽇ • Gmail、GoogleサジェストなどでもAjax技術が使われる •

    Ajaxとうい概念が誕⽣( AjaxはAsynchronous JavaScript + XML の略で、2005年2⽉18⽇に⽶国のインフォメーションアー キテクトであるJesse James Garrettにより名付けられた) • JavaScriptが再評価される
  7. JavaScriptの歴史 ライブラリの普及 • JavaScriptが⾒直され、様々な機能が実装されJSライブラリな るものが登場し始める • 2005年 Prototype.js初版リリース • 2006年JQuery初版初版リリース

    • 特にJQueryは⼀⼤ブームに、JSの標準じゃないかと思われるぐ らいに普及する。 $を使うことで、簡単にDOMを扱えるように なり、メソッドチェーンを使って適当に書いたらかっこよく動 く。数多のプラグインが作られ、当時世間を変えつつあったス マホにも対応するjQuery Mobileなども登場 • 世界はJQueryによって包まれた!
  8. JavaScriptの歴史 V8エンジン • 2008年にGoogle chromeが公開、V8 JavaScriptエンジンが搭載 される • V8エンジンはJIT(Just in

    time) Virtual Machine型の JavaScript実⾏エンジン,JSが⾼速に動作した。 • 当時のJavaScriptは遅いという常識を覆しプラウザ環境を根底 から変えていく • 補⾜:Firefoxはインタープリタで実⾏して、統計情報をとって、まず中間コードに変換し、その上 でJITコンパイルするが、V8では、中間コードもなく、インタープリタも搭載せずに最初の実⾏時 からコンパイルする。
  9. JavaScriptの歴史 サーバーサイドjs • 2009年 Node.js登場 • サーバーサイドJS、⾮同期、ノンブロッキングIO • C10K問題への対応 •

    Google V8エンジン • サーバーサイドだけでなくnpm gulpなどでフロントエンドJSも 恩恵を受ける
  10. JavaScriptの歴史 フレームワーク編 • Backbone.js、Angular.js,React.js,Riot.jsなどが出てくる • 2009年 Angular.js - Google製フレームワーク •

    2010年 BACKBONE.js • 2013年 3⽉ React.js ‒ Facebook製 • Viewだけなのでフレームワークでは無くライブラリ • 2013年 11⽉ Riot.js • 2016年 Angular2 (betaは2015年)
  11. JavaScriptの歴史 altJS • AltJS(Alternative JavaScript)とは、その名の通りJavaScript の代替⾔語 • 複数⼈数開発をするに伴い問題になってきた、⾔語仕様の柔軟 性(悪く⾔えば適当さ)を解決するために登場 •

    →動的型付けによりバグの混⼊ Classが無い等ため仮想的に class概念を作ったりするなど。 • AltJSをコンパイル(トランスパイル)することでJavaScriptを ⽣成し、⾔語仕様が柔軟なJavaScriptの持っている問題を解決 します。 • JSを⽣成する⾔語という昔のおっさんにはびっくりな世界に
  12. JavaScriptの歴史 altJS • 2009年 CoffeeScript (Railsに標準でサポート) • 2011年 Dart Google製

    • 2012年10⽉ TypeScript マイクロソフト製 • ES6のスーパーセット • いまはTypeScriptが主流な模様
  13. EcmaScript - ES2015/ES6 • 2015年6⽉にリリースされたECMAScript 6th edition • コードネームは「harmony」ES3.1とES4の対⽴を調和させた らしい。

    • 当初はES6という名称だったがこれ以降は1年毎にリリースして いく計画となったためES2015が正式名称となった • 今後の名称はES2015, ES2016,ES2017とうい名称になるとのこ と
  14. ES2015で追加となった機能(1) • let・const変数宣⾔ • class構⽂ • アロー関数 • importとexportによるモジュール構⽂(Module) •

    分割代⼊ • Pythonスタイルのジェネレータ • 関数のデフォルト引数、関数の可変⻑引数
  15. ES2015で追加となった機能(2) • テンプレート⽂字列 • Symbol • Promise • プロキシ型付き •

    配列Map、Set、WeekMap、WeekSet • イテレータ、for/ofループ • 2進数および8進数の整数リテラル
  16. Promise • Promiseはまだ完了していないが、いずれ完了する処理を表す • callback地獄から脱却出来る、並列処理が書きやすくなる • すごい⼤事なんですが、説明が難しので今回は割愛 • MDM promise

    • https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/G lobal_Objects/Promise • ちなみにAsync/AwaitはES2016で⼊るっぽい予定だったのが⼊ ら無かったみたいです。(ES2017でほぼ⼊りそう)
  17. Babelデモ class Person { constructor(name) { this.name = name; }

    hello() { console.log('My name is ' + this.name); } } const alice = new Person('kotaro'); alice.hello() https://babeljs.io/repl/ に上記を貼り付ける
  18. ECMAScript Edition 公開⽇ 1 1997年6⽉ 初版 2 1998年6⽉ EditionはそのままISO/IEC 16262

    international standardへの対応 3 1999年12⽉ 正規表現、よりよい⽂字列の取り扱い、新しいコントロール構⽂、 try/catch例外処理、より厳格なエラー処理、数字のその他の書式化フォー マット 4 廃棄 政治的な理由により廃棄 5 2009年12⽉ 10年分の負債の精算 "strictモード"、初期化時に発⽣しがちなエラーを回 避するための追加仕様の追加。多くの曖昧な部分、および仕様に準拠しつ つも現実世界の実装の融通の利く振る舞いを明確にした。いくらかの新機 能、getterやsetter、JSONライブラリのサポート、より完全なオブジェク トの属性のリフレクション 5.1 2011年6⽉ ISO/IEC 16262:2011への対応 6/2015 2015年6⽉ クラス、モジュール、イテレータ、for/ofループ、Pythonスタイルのジェ ネレータ、アロー関数、2進数および8進数の整数リテラル、Map、Set、 WeekMap、WeekSet、プロキシ、テンプレート⽂字列、let、const、型 付き配列、デフォルト引数、Symbol、Promise、分割代⼊、可変⻑引数 2016 2016年6⽉ 冪乗演算⼦、Array.prototype.includes 2017 策定中
  19. use strict • “use strict”; と宣⾔することで使⽤可能に • 具体的には次ようなミスがエラーとして処理されます • 宣⾔されていない変数への代⼊

    • 書き込み不可変数・getterのみの変数への代⼊ • 削除できないプロパティのdelete • 引数名の重複 • 8進数表記 • with構⽂
  20. React • ReactはFacebookの社員が作ったイケてるJSライブラリ • 公式サイトに、「A JavaScript library for building user

    interfaces」とあるように、React.jsはUIを構築するためのライ ブラリ、フレームワークでなくあくまでUIを構築するだけのラ イブラリで、MVCでいうところのVのみの機能を提供します。 • ー>なのでフレームワークではない • Facebook InstagramはもちろんYahooやAirbnbなどでも使われ ている • 現状のJSフレームワークだと圧倒的1位 (弊社ワカモノ談)
  21. React x Flux • Reactと⼀緒にFluxについてよく語られますが今回は割愛 • Flux • Architecture •

    MVCのような設計⼿法 • 以下の4つからなる • ActionCreators • Dispatcher • Store • View (Reactはここを担当)
  22. 変更があった場所だけを更新 Component Component Data Data A B C E F

    D A B C EE F D ユーザーのActionで データが変わった 差分部分のみ更新
  23. JQueryと何が違うのか? • JQueryの場合データをDOM⾃体に形になることが多い • <li>に⼊ってる⽂字列がデータ! • データの更新があった場合.detach()して.clone()して.text()し て.appendTo()みたいになってかなり煩雑 • 機能を追加するときもめんどくさい

    • データが変わるとDOMの値を書き換える必要がある • DOMがどんな値を持っていて、どんなイベントを発⽕するのか制御 しないといけない • Reactコンポーネントとデータを分けて考え、データが更新される とコンポーネントが更新されるような機能を提供してくれる
  24. Doc

  25. まとめ(UI/UX GUI) • 個⼈的にReactを触る中で感じたことは、 Visual C++/C#/BasicあたりのGUIアプリ開発に考え⽅がにて いると思った点(コンポーネント、イベントハンドラとか) • Webに求められるUI/UXが「ページ」ではなく「アプリケー ション」になってきている。

    • 今までのページとしての発想でなく、GUIアプリなどで使って いた概念が取り⼊れられているような印象を受けました。(コ ンポーネントとかイベントハンドラとか) • このあたり新しいけど古いみたいな
  26. まとめ(JSの開発環境 ビルド周り) • JSの開発環境 ビルド周りはちょっと複雑化しすぎ • JS/CSS/HTML含めて複雑化してきている。 • 弊社でもビルド職⼈と呼ばれる⼈が⼀⼿にやっているらしい •

    ただ現状のビルド周りの複雑化は過渡期なのかとも感じる (Javaとかの歴史と⼀緒)もう少し待てばベストプラクティス というか環境は整ってくると思う。 • とりあえず昔みたいにJQuery読み込んでちょっといじるとかそ ういう感じではない