SlideShare ist ein Scribd-Unternehmen logo
1 von 119
おっさん
ES6/ES2015,React.jsを学ぶ
2016JavaScript入門
2016/11/21 @BizReach D3
園田剛史
園田剛史 趣味:自転車 3児の父
2
はなすひと
自転車部あります執行役員
もうビズリーチに
小学校より長くいます
@katamuki
娘!娘!息子!
主な業務経験
2002 2004 2008 2010
VC++
富士フイルム
ソフトウエア OPT Become Bizreach
C#
Perl
PHP
Java
インフラ
Java
Scala
在籍企業
2015 2016
インフラ
JSJS
言語
マネジメントとかで
ほとんど開発してない期間
今回のお題
• おっさんES6/ES2015,React.jsを学ぶ
おっさんの定義(狭義)
• 狭義の意味でのおっさんは35歳以上
• ワカモノは20代と定義します
• 登壇者は37歳ですがまだまだ若いと思ってます。
• 弊社では「安定感のあるおっさん」などプラスの意味でも使わ
れます
今回何故か応募100名オーバー!!
• D3史上空前の応募数
• 何故?
参加者多くてビビって
\(^o^)/
パワポも100枚オーバー
背景&経緯
• 最近新しい技術的なのを触ってない気がする
• 新しい技術を自ら提案ではなく、ワカモノから提案されるよう
になった
• 提案されたところでよくわからなかったり(TOT)
背景&経緯
• 業務でメンバーAnguraJSとかReactJSとかでガンガン開発して
いる
• がっ自分は全く触ってない
• しかもReactはかなり来ている肌感はある
• 危機感をかんじるものの、触る機会(仕事)がない
• プライベートも忙しい(という言い訳)
• 重い腰を上げてReactを触ってみることに
Reactを触ろうとするものの
• ヤバイ!まず使われている単語がわからない
• 自分の知識はJQueryくらいで止まってる
• EcmaScriptってなに?
• トランスパイラって何? JSなのにコンパイルってどういうこ
と?
• Babelなにそれつよいの?大丈夫?神の怒りかっちゃわない?
• Gulp?タスクランナー?なにそれGruntみたいなヤツ?ごめん
そっちも知らない。最近はWebpack??もうお腹いっぱいです。
• React触るっつーか スタート地点にも立ててない
とりあえず最近のJavaScript動向から
• とりあえずReactの前に最近のJavaScript動向調べないと始まら
ない!!(始められない)
目次
• 最近のJavaScript動向
• 試験に出るJavaScript21年の歴史
• ES6/ES2015を学ぶ
• ES6/ES2015概要
• ES5を振り返る
• altjsの意義
• Reactを学ぶ
• DOCを読む
• Tutorialをやる
• 今回の学習を通じて感じたこと
試験に出るJavaScript21年の歴史
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』と
いう言語を開発・・ 部分的に互換があったりなかったり
• 開発者泣かせの状態に(ブラウザ依存はずっと開発者泣かせだけど
ね!)
JavaScriptの歴史 標準化へ
• 1997年
• JscriptとJavascriptというブラウザ互換性のない状態を解決しようと
NN社は,Javascriptを標準化しようと画策し,ECMAという標準化機
関にJavascriptの標準化を依頼.
• 1997年6月ECMA-262 初版ができる.世界に平和が訪れた!
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年である
• (あとで詳しく語ります)
JavaScriptの歴史 暗黒期2000年代前半
• 2000年代前半
• JSはOFFにするのがセキュリテーを守る意味でわりと一般的
だった。エンジニアはOFFにしてたような・・(登壇者肌感)
• ブラウザ側もセキュリティへの考慮が不十分で,Javascriptの
脆弱性をつくウィルスが登場したり,ブラウザに無理に負荷を
かける通称「ブラクラ」が作られていた。
• 動的なベージはFlashを使ったサイトが全盛
• JSこのまま歴史に埋もれた言語となるかと思われた!!
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が再評価される
JavaScriptの歴史 ライブラリの普及
• JavaScriptが見直され、様々な機能が実装されJSライブラリな
るものが登場し始める
• 2005年 Prototype.js初版リリース
• 2006年JQuery初版初版リリース
• 特にJQueryは一大ブームに、JSの標準じゃないかと思われるぐ
らいに普及する。 $を使うことで、簡単にDOMを扱えるように
なり、メソッドチェーンを使って適当に書いたらかっこよく動
く。数多のプラグインが作られ、当時世間を変えつつあったス
マホにも対応するjQuery Mobileなども登場
• 世界はJQueryによって包まれた!
JavaScriptの歴史 V8エンジン
• 2008年にGoogle chromeが公開、V8 JavaScriptエンジンが搭載
される
• V8エンジンはJIT(Just in time) Virtual Machine型の
JavaScript実行エンジン,JSが高速に動作した。
• 当時のJavaScriptは遅いという常識を覆しプラウザ環境を根底
から変えていく
• 補足:Firefoxはインタープリタで実行して、統計情報をとって、まず中間コードに変換し、その上
でJITコンパイルするが、V8では、中間コードもなく、インタープリタも搭載せずに最初の実行時
からコンパイルする。
JavaScriptの歴史 サーバーサイドjs
• 2009年 Node.js登場
• サーバーサイドJS、非同期、ノンブロッキングIO
• C10K問題への対応
• Google V8エンジン
• サーバーサイドだけでなくnpm gulpなどでフロントエンドJSも
恩恵を受ける
JavaScriptの歴史 フレームワーク編
• 世界はJQueryの天下が続くと思われたが、JSがより大規模開発
になるにつれてJQueryにも不満が溜まってくる。
• 一人でゴリゴリ書くのは良いが、テストが書きづらく集団メン
テナンスがわるい、高度化するWebアプリケーションにおいて、
jQueryだと設計とか保守性を担保するのが難しかった。
• そして時代はJSフレームワークを求める始める
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年)
JavaScriptの歴史 altJS
• AltJS(Alternative JavaScript)とは、その名の通りJavaScript
の代替言語
• 複数人数開発をするに伴い問題になってきた、言語仕様の柔軟
性(悪く言えば適当さ)を解決するために登場
• →動的型付けによりバグの混入 Classが無い等ため仮想的に
class概念を作ったりするなど。
• AltJSをコンパイル(トランスパイル)することでJavaScriptを
生成し、言語仕様が柔軟なJavaScriptの持っている問題を解決
します。
• JSを生成する言語という昔のおっさんにはびっくりな世界に
JavaScriptの歴史 altJS
• 2009年 CoffeeScript (Railsに標準でサポート)
• 2011年 Dart Google製
• 2012年10月 TypeScript マイクロソフト製
• ES6のスーパーセット
• いまはTypeScriptが主流な模様
EcmaScript ES5
• 2009年 ES5 10年ぶりの仕様更新
• ES4とES3.1の対立を長らく続けていたがES3.1をベースとする
ことで調整、実質的な初もESメジャーバージョンアップ
• ES4は破棄、ES3.1をES5としてリリース
EcmaScript - ES2015/ES6
• 2015年6月にリリースされたECMAScript 6th edition
• コードネームは「harmony」ES3.1とES4の対立を調和させた
らしい。
• 当初はES6という名称だったがこれ以降は1年毎にリリースして
いく計画となったためES2015が正式名称となった
• 今後の名称はES2015, ES2016,ES2017とうい名称になるとのこ
と
ES6/ES2015について学ぶ
及びEcmaScript AltJSについて
ES2015で追加となった機能(1)
• let・const変数宣言
• class構文
• アロー関数
• importとexportによるモジュール構文(Module)
• 分割代入
• Pythonスタイルのジェネレータ
• 関数のデフォルト引数、関数の可変長引数
ES2015で追加となった機能(2)
• テンプレート文字列
• Symbol
• Promise
• プロキシ型付き
• 配列Map、Set、WeekMap、WeekSet
• イテレータ、for/ofループ
• 2進数および8進数の整数リテラル
letとconst
• 今までは変数宣言はvarでしたがES6からletとconstが追加され
ている。
let
• letは代入できるが再宣言できない
let
• 関数スコープではなくブロックスコープ
varだと
意図せずX=1が出力される
letだと
ちゃんとエラーになる
スコープがブロック、関数の範囲になる!
const
• constは再代入できない
• 定数として利用できる
• Immutableなオブジェクトとして利用できる
const
所感:var,let,constどれを使うべきか?
• varはもう出番はない
• 基本はconst、必要に応じてlet
• コーディングミスを防ぐためにも、immutable(不変なオブ
ジェクト)なプログラミングの流れ的にも constベースでいい
のではないか?
class
• JSでclassっぽいものは関数を宣言することで実現してきました
が、Classが言語仕様となりました。
class
アロー関数
Promise
• Promiseはまだ完了していないが、いずれ完了する処理を表す
• callback地獄から脱却出来る、並列処理が書きやすくなる
• すごい大事なんですが、説明が難しので今回は割愛
• MDM promise
• https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/G
lobal_Objects/Promise
• ちなみにAsync/AwaitはES2016で入るっぽい予定だったのが入
ら無かったみたいです。(ES2017でほぼ入りそう)
ES6/ES2015の普及具合
出典:http://kangax.github.io/compat-table/es6/
ES6/ES2015の普及具合
• Chrome,Firefox,Edge,Safari(10)などのモダンブラウザのみを
ターゲットにする場合は、ES2015はほぼほぼいける
• IE11やそれ以前のブラウザのシェアを考慮すると互換性の面で
はまだちょっと不安
結局互換性の問題
• トランスパイラの登場
• トランスパイラはコードをコードに変換する
• JSの世界ではES6以降をES5に変換してくれる
Babel
Babel
• もとの名前は6to5, ES6をES5に変換するためのツールだった
• ES6以降もサポートしていくということでBabelという名前に
• ES6/ES2015のイケてるJSでコーディングしながらES5対応ブ
ラウザで動作させることが出来る
Babel ES6をES5に変換
Babelデモ
Webでデモが出来る
https://babeljs.io/repl/
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/ に上記を貼り付ける
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 策定中
ちょっとES5についても語っておこう
• 1999年のES3(ES4は破棄)より10年の時をへて2009年策定され
たバージョン
• まさかの復権を遂げたJSが使われ方が進化していく中で多くの
曖昧な部分、および仕様に準拠しつつも現実世界の実装の融通
の利く振る舞いを明確にした。
• Array.isArray Array.prototype.forEach Array.prototype.mapと
かArray系の機能拡張が多く行われてる
• Object系の拡張も目玉だがES6以降はclassでいいよね感
• 色々あるけど“use strict”とかはLL言語のよくある流れ
use strict
• “use strict”; と宣言することで使用可能に
• 具体的には次ようなミスがエラーとして処理されます
• 宣言されていない変数への代入
• 書き込み不可変数・getterのみの変数への代入
• 削除できないプロパティのdelete
• 引数名の重複
• 8進数表記
• with構文
use strict
今っぽいJS界隈だとコレを書いてないと石を投げられるらしい
use strict
• 既視感がある
• この道はいつか来た道
use strict の既視感
• Perl
• PHPもStrict modeがあるとか無いとか
• LL言語 型無し言語の通る道なのかなー
ES5ブラウザ対応状況
IE8NG
IE9 ミニマム行けそう
IE10以降が妥当
でもCSSとかの問題も
あるので
ES5でもIE11以降ベター
弊社HRMOSでは
IE11以降がサービス対象
(B向けだけど)
ESバージョン
• 現状のモダンJSを使うならES->Babel使うにしてもES5対応ブ
ラウザが最低ライン
• IE8対応必須とか言ってる状況なら、ES5/ES6/ES2015は諦め
たほうが無難
ちょっと脱線
ES6/ES2015以降altJSは必要か?
• 数年前であればaltJSの必要性は理解できる
• 現状ES6でclassの概念も入り今後もESは新しい概念を導入し
ながら毎年バージョンアップしていく中でaltJSの学習コストを
かけてまで使う必要はあるのか?
ES6/ES2015以降altJSは必要か?
• 弊社のフロントエンドエンジニアのイケてるワカモノに聞いて
みた。
• 補足弊社の人材採用管理システムHRMOSは
React+TypeScript+Scala/playで開発中
http://www.slideshare.net/itaruxkita/1spa
http://qiita.com/kitaly/items/85254fd346e2e575582b
ES6/ES2015以降 altJSは必要か?
• ES6/2015以降でも実現されてない機能はあるのでメリットは
有る(静的型付けなど)
• 大規模開発などで構文チェックなどメリットは大きい
• 今新たにHRMOSを作るとしてもTypeScriptを採用すると思う
• もう少し小さなプロダクトならES6でよいかと
ES6/ES2015以降 altJSは必要か?
• 学習コストもTypeScriptはES6のスーパーセットなのでそこま
でかからない
• 逆にTypeScriptはESのスーパーセットなのでES/Javascriptの
悪いところをまだ引きずられてる仕様もあるのでCoffeeScript
やDart のを使う意義もある(別のJSに詳しいおっさん談)
ES6/ES2015以降 altJSは必要か?
• 個人的にはES6でいいじゃんって感じ
• でも実際の現場ではニーズはある模様
ワカモノ聞いたファンキーな話
• TypeScriptを一旦ES6に出力してES5トランスパイルすること
もあるらしい
• TypeScriptにないツールとか(カバレッジツールとか)を使う
ために一旦ES6に出力してツールかましてES5にするとかする
こともあるらしい
• .....お前正気か?
現状はES5に変換するのが基本
• とりあえず現状はES6でもaltJSでもES5に変換して稼働させる
React
• ReactはFacebookの社員が作ったイケてるJSライブラリ
• 公式サイトに、「A JavaScript library for building user
interfaces」とあるように、React.jsはUIを構築するためのライ
ブラリ、フレームワークでなくあくまでUIを構築するだけのラ
イブラリで、MVCでいうところのVのみの機能を提供します。
• ー>なのでフレームワークではない
• Facebook InstagramはもちろんYahooやAirbnbなどでも使われ
ている
• 現状のJSフレームワークだと圧倒的1位 (弊社ワカモノ談)
React x Flux
• Reactと一緒にFluxについてよく語られますが今回は割愛
• Flux
• Architecture
• MVCのような設計手法
• 以下の4つからなる
• ActionCreators
• Dispatcher
• Store
• View (Reactはここを担当)
2015年末のReactTOP
現在のTOP
Reactの特徴を端的にいうと
• コンポーネントを組み合わせて構築するコンポーネント指向
FW(View ライブラリ)
• VirturalDOMを用いた画面の差分描画を行い高速な画面表示を
提供する
つまりUIをコンポーネント化しイベントハンドリングDOMの更新とをやってくれる
変更があった場所だけを更新
Component Component
Data Data
A
B C
E FD
A
B C
EE FD
ユーザーのActionで
データが変わった
差分部分のみ更新
JQueryと何が違うのか?
• JQueryの場合データをDOM自体に形になることが多い
• <li>に入ってる文字列がデータ!
• データの更新があった場合.detach()して.clone()して.text()し
て.appendTo()みたいになってかなり煩雑
• 機能を追加するときもめんどくさい
• データが変わるとDOMの値を書き換える必要がある
• DOMがどんな値を持っていて、どんなイベントを発火するのか制御
しないといけない
• Reactコンポーネントとデータを分けて考え、データが更新される
とコンポーネントが更新されるような機能を提供してくれる
DOM(Document Object Model)
• W3Cから勧告
• HTML文書やXML文書をアプリケーションから利用するための
API
• DOMツリーと呼ばれるツリー構造として扱う事ができる
• JSで言うところのdocument.getElementById(“jid_xx”)
VirtualDOM
• DOMを直接いじるとコストが大きい
• React.jsではVirtualDOMとしてメモリ上にDOM Treeのような
情報をもっていて前後の状態を比較し差分の部分だけを実際の
DOMに反映してくれます。必要最低限のDOMの更新ですみコ
ストがかからず表示も早い
DOM中心からデータ中心に
• 今まで
• DOMを作ってDOMを書き換えDOM自体がデータをもつ
• React
• データが主、データから動的にDOMを生成する
コンポーネント指向
• UIのパーツをコンポーネントして考える
• コンポーネントで管理しコンポーネントを極力ステートレスに
する(コンポーネントが情報を持たないようにする)
• コンポーネント単位での再利用性が高まる
とりあえず触ってみる
• 何はともあれ触ってみよう
構成(社内の開発構成 A)
ES6/2015 ES5
istanbul
①TypeScriptで記述
TSLint(TypeScript検証ツール)でチェック
②一旦ES6に書き出して
istanbul(カバレッジツール)でチェック
②BABELでES5へ
Webpacがこれらを
Module Bundler/ビルドツールとして処理
Webpack
webpack は 必要なリソースの依存関係を解決し、アセット(配布物)を生成す
るビルドツール JavaScript,CoffeeScript,TypeScript,CSS,画像などの取りまとめ
を行う
構成(社内開発環境2)
ES6/2015 ES5
①ES6で記述
ATOM(エディター)に
ESLintプラグインを入れて構文チェック
①BabelでES5に変換
Gulpがビルドシステムヘルパー
(タスクランナー)として
上記を自動で処理する
コードチェックとかもしてくれる
コードを書き換えたら
自動でブラウザ立ち上げとか
ビルドツール
• サーバーサイドプログラミングだとビルド環境など前からあっ
たが
• フロントエンド(JS/CSS/HTML/アセット)周りにもそういっ
た概念が入ってきている
とりあえず環境を作る
• とはいえ、React触りたいだけなのになんだかめんどくさそう
とりあえず開発環境つくる便利なものが
• create-react-appが便利!!
• https://facebook.github.io/react/docs/installation.html
• 始めるまで時間がかかるBabel/Webpack/gulp/jest/eslint周り
を旨いことやってくれる
• Facebookのエンジニアが手動して開発
• Reduxの作者Dan Abramov氏
• React Docのinstallationにも手順載ってます
https://facebook.github.io/react/docs/installation.html
create-react-app
• 詳しくは弊社ワカモノが書いた資料を御覧ください
THX!😘
https://speakerdeck.com/adwd/create-react-app-introduction
Hello World
• デモ
Helo world
• https://codepen.io/katamuki/pen/PGMGvY
Doc
JSX
• JSXはECMAScript(JavaScript)にXMLライクのシンタックス
を追加する言語拡張です。JSXを使うと、JavaScriptコード中に
HTMLタグを埋め込んでいるかのように記述できます。
JSX:Hello World
JSにHTMLみたいなのをかける
https://codepen.io/katamuki/pen/qqNLNp
JSX:classはClassName
• Jsxないでclassは使えないのでclassNameとする(JSの予約
後)
Rendering a Component
• http://codepen.io/gaearon/pen/YGYmEG?editors=0010
Welcomeという
コンポーネントを作って
タグとして記述、使用できる
Functional and Class Components
https://facebook.github.io/react/docs/components-and-props.html#functional-and-class-components
コンポーネントは
classでもかける
Composing Components
コンポーネントをまとめて
コンポーネントすることも可能
http://codepen.io/gaearon/pen/KgQKPr?editors=0010
propsとstateの概念
• props(プロパティ)
• 親コンポーネントから渡されたプロパティ
• 変わらない値
• state(状態)
• そのコンポーネントが持っている状態
• 変わることがある値
props
いままで使っていたのはprops
State and Lifecycle
http://codepen.io/gaearon/pen/KgQpJd?editors=0010
Stateで指定
時刻が更新されないバージョン
http://codepen.io/gaearon/pen/amqdNA?editors=0010
componentWillMount()
ComponentがDOMツリーに追加される前に
一度だけ呼ばれる。
初期化処理を行うのに使う
componentDidMount()
初期描画(rendering)が発生した直後に
一度実行されます。
時刻が更新されるバージョン
Tickを定期的に呼びstateを更新することで
画面上の日付も更新される
State and Lifecycle
• Lifecycleって名前になってるけど、ちょっとこの辺りGUIアプ
リのイベントハンドラに似てる
Handling Events
• ReactエレメントのイベントハンドリングはDOMエレメントと
同じように行える
http://codepen.io/gaearon/pen/xEmzGg?editors=0010
Handling Events
onClickとか
おっさんでも知ってるよ!
Lists and Keys
https://codepen.io/gaearon/pen/jrXYRR?editors=0011
表示内容には関係ないけど
ユニークなkeyを指定する
Lists and Keys
• Listなどでデータとしては必要ないがKeyを指定する必要があ
る
• IDを割り当てることで変更や追加削除などDomの変更を最小限
にすることが出来る
• 指定しないと警告が出る
Tutorial
Tutorial
https://codepen.io/ericnakagawa/pen/ALxakj
まとめ
• JS進化しすぎ。3-4年くらい目を話しただけで超絶進化しすぎ。
まとめ(JavaScript言語について)
• 誕生当時はちょっとWebページに動きをつけるための言語だっ
たJSも、Webアプリケーションに求められるUI/UXが高度化す
るの中で、JSのコードは肥大化し複雑化している。
• その中で言語としてコーディング、チーム開発の効率性などが
もとめられ、JSライブラリ、JSフレームワークなどの発想、発
展、言語としての進化(曖昧性の除外、機能強化)などは自然
な流れ
まとめ(JavaScript言語について)
• 言語的にはclassなど(遅すぎる気もするけど)ちゃんとした言
語に向かう方向性もありつつ、最近のプログラミング言語の潮
流(関数型、immutableとか)も取り入れながら進化している
印象
• 最近のプログラミング言語は他言語のいいところを取り入れて
進化している、JSもその流れを組んでいると感じた
まとめ (React)
• MVCのVを提供するライブラリというシンプルな位置づけだが
コンポーネント、VirtualDomによる開発メリットはかなり大き
い
• JQuery等でのDOM操作、イベント管理などを煩雑化しやす
かった部分を、コンポーネント概念によりコンポーネント単位
でイベントハンドリングなど管理をまとめて再利用性を高める、
データとDOMを分離してステートレスなコンポーネント管理を
実現するなど、複雑化するUI/UXを管理しやすくなる効果はか
なり大きいだろう
まとめ(UI/UX GUI)
• 個人的にReactを触る中で感じたことは、
Visual C++/C#/BasicあたりのGUIアプリ開発に考え方がにて
いると思った点(コンポーネント、イベントハンドラとか)
• Webに求められるUI/UXが「ページ」ではなく「アプリケー
ション」になってきている。
• 今までのページとしての発想でなく、GUIアプリなどで使って
いた概念が取り入れられているような印象を受けました。(コ
ンポーネントとかイベントハンドラとか)
• このあたり新しいけど古いみたいな
まとめ(UI/UX GUI)
• デザイナー・フロントエンドエンジニア・プログラマの切り分
けみたいなのは難しくなる気がする。
• コンポーネント化+イケてるUI/UX=情報設計(IA)をしっかりす
る
だと思うので
• デザイナーに対してIAはより求められると思う
まとめ(JSフレームワーク)
• まずはJSフレームワークを使う場合は本当に必要かを考えたほ
うがいいかも。
• 何のために使うのか?
• 新しいUI/UXを提供する必要がある?普通のUI/UXじゃだめなのか?
• SEO施策が必要か?
• ブラウザはどこまでサポートする必要があるのか?
まとめ
• JSフレームワークの進化に追従する意志がないと使うのは難し
い
• 作った後も更新、キャッチアップを続ける意志が必要
• 二年前作ったAngularのソース誰もメンテ出来ないよとかそう
いう状態になっちゃう。
• このあたりサーバーサイドの言語・フレームワークも同じだが
今は過渡期で進化が早いので意識しといたほうがいい
まとめ(JSの開発環境 ビルド周り)
• JSの開発環境 ビルド周りはちょっと複雑化しすぎ
• JS/CSS/HTML含めて複雑化してきている。
• 弊社でもビルド職人と呼ばれる人が一手にやっているらしい
• ただ現状のビルド周りの複雑化は過渡期なのかとも感じる
(Javaとかの歴史と一緒)もう少し待てばベストプラクティス
というか環境は整ってくると思う。
• とりあえず昔みたいにJQuery読み込んでちょっといじるとかそ
ういう感じではない
まとめ(Webアプリケーション)
• AltJS,webpack(ビルドツール)などをみていると、最後は
HTML/JS/CSS/アセット(imgとか)の形で書き出せば開発はど
んな言語でも開発しやすい用に作っちゃったほうがいいよね!
という世界観を感じました。
• HTML/JS/CSSはオープンなGUIプラットフォームとして地位
を確立したのかも?
まとめ
• JS界隈から離れて3-4年ぐらいだけど進化しすぎ
• パラダイムシフトが2回くらい起こってる印象
• ReactはJQuery登場くらいのインパクトだとおもう
• 正しい進化だと思うのでキャッチアップしていかないとヤバイ
• Web業界にいるならJSの土俵に立たなくてもいいので話くらい
は出来るようにはしておくべき
まとめ
• ただカーボーイのみなさんが地雷を踏みまくり屍の山を築き情
報共有をしてくれて、その上に高速道路が引かれるので後から
でも結構キャッチアップできる。
• カーボーイの皆さんありがとう
まとめ
• IT業界はほんとに変化が早い、正直つらいっす
• 2010年当時なら自分はフルスタックエンジニアと言えたが今は
言えない。周りがドンドン進むので学び続けないと取り残され
る。
• 新しいことを学ぶのに、過去の経験は役に立つそこはおっさん
のメリット(時には足を引っ張ることもありますが)
まとめ
• マネージャーとかやってても、自分のスペシャリティを意識す
ることは大事
• エンジニアとしてのスペシャリティを維持するためには頑張ら
ないと。
• 皆さん頑張っていきましょう
BizReachは優秀なエンジニアを募集してます
THANK YOU 😘

Weitere ähnliche Inhalte

Was ist angesagt?

オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
 
ダブル配列の実装方法
ダブル配列の実装方法ダブル配列の実装方法
ダブル配列の実装方法
Higashiyama Masahiko
 

Was ist angesagt? (20)

Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
 
Dokkuの活用と内部構造
Dokkuの活用と内部構造Dokkuの活用と内部構造
Dokkuの活用と内部構造
 
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
 
アジャイル開発はWhyから始まる
アジャイル開発はWhyから始まるアジャイル開発はWhyから始まる
アジャイル開発はWhyから始まる
 
Java によるクラウドネイティブ の実現に向けて
Java によるクラウドネイティブ の実現に向けてJava によるクラウドネイティブ の実現に向けて
Java によるクラウドネイティブ の実現に向けて
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
ダブル配列の実装方法
ダブル配列の実装方法ダブル配列の実装方法
ダブル配列の実装方法
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテスト
 
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
 
New Features of DotNet 6 Blazor WASM
New Features of DotNet 6 Blazor WASMNew Features of DotNet 6 Blazor WASM
New Features of DotNet 6 Blazor WASM
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
マスターデータの キャッシュシステムの改善の話
マスターデータの キャッシュシステムの改善の話マスターデータの キャッシュシステムの改善の話
マスターデータの キャッシュシステムの改善の話
 
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
 

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

What is java_se_7
What is java_se_7What is java_se_7
What is java_se_7
TakumiIINO
 
Glass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみたGlass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみた
Satoshi Kubo
 
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
Nobukazu Hanada
 

Ähnlich wie おっさんES6/ES2015,React.jsを学ぶ (20)

LT#8 乗るしかないこのECMA Script 2015に
LT#8 乗るしかないこのECMA Script 2015にLT#8 乗るしかないこのECMA Script 2015に
LT#8 乗るしかないこのECMA Script 2015に
 
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
 
⑳CSSでアニメーション!その1
⑳CSSでアニメーション!その1⑳CSSでアニメーション!その1
⑳CSSでアニメーション!その1
 
第八回 #渋谷Java 最近のjava PaaS事情
第八回 #渋谷Java 最近のjava PaaS事情第八回 #渋谷Java 最近のjava PaaS事情
第八回 #渋谷Java 最近のjava PaaS事情
 
What is java_se_7
What is java_se_7What is java_se_7
What is java_se_7
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
Learn ES2015
Learn ES2015Learn ES2015
Learn ES2015
 
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
 
Glass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみたGlass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみた
 
20150328 humansociria
20150328 humansociria20150328 humansociria
20150328 humansociria
 
ES6,7で書ける JavaScript
ES6,7で書ける JavaScriptES6,7で書ける JavaScript
ES6,7で書ける JavaScript
 
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
 
ObjectMapperでJSONマッピング
ObjectMapperでJSONマッピングObjectMapperでJSONマッピング
ObjectMapperでJSONマッピング
 
フロント作業の効率化
フロント作業の効率化フロント作業の効率化
フロント作業の効率化
 
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へオブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ
 
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open APIRESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
 
Java8から17へ
Java8から17へJava8から17へ
Java8から17へ
 
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingScalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive Programming
 
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
 

Mehr von dcubeio

Mehr von dcubeio (20)

AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」
AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」
AWS Summit Tokyo 2019登壇資料「DevOpsの劇的改善!古いアーキテクチャから王道のマネージドサービスを活用しフルリプレイス! 」
 
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
 
ビットコインとブロックチェーンを初めからていねいに(超基礎編)
ビットコインとブロックチェーンを初めからていねいに(超基礎編)ビットコインとブロックチェーンを初めからていねいに(超基礎編)
ビットコインとブロックチェーンを初めからていねいに(超基礎編)
 
20171206 d3 health_tech発表資料
20171206 d3 health_tech発表資料20171206 d3 health_tech発表資料
20171206 d3 health_tech発表資料
 
Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話
 
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
 
BizReach x Marketo連携
BizReach x Marketo連携BizReach x Marketo連携
BizReach x Marketo連携
 
Kinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみたKinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみた
 
Apiドキュメンテーションツールを使いこなす【api blueprint編】
Apiドキュメンテーションツールを使いこなす【api blueprint編】Apiドキュメンテーションツールを使いこなす【api blueprint編】
Apiドキュメンテーションツールを使いこなす【api blueprint編】
 
春の脆弱性祭り 2017/06/13
春の脆弱性祭り 2017/06/13春の脆弱性祭り 2017/06/13
春の脆弱性祭り 2017/06/13
 
DynamoDBを導入した話
DynamoDBを導入した話DynamoDBを導入した話
DynamoDBを導入した話
 
Play2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだことPlay2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだこと
 
すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー!
すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー! すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー!
すごーい!APIドキュメントを更新するだけでAPIが自動テストできちゃう!たのしー!
 
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
 
Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
Bitcoin x Slack でマイクロペイメントを実現! 〜生活の必要上割り勘botを作るまで〜
 
【freee】プロダクトマネージャーの仕事と魅力
【freee】プロダクトマネージャーの仕事と魅力【freee】プロダクトマネージャーの仕事と魅力
【freee】プロダクトマネージャーの仕事と魅力
 
【ビズリーチ】プロダクトマネージャーの仕事と魅力
【ビズリーチ】プロダクトマネージャーの仕事と魅力【ビズリーチ】プロダクトマネージャーの仕事と魅力
【ビズリーチ】プロダクトマネージャーの仕事と魅力
 
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botPython × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
 
HR Tech x 機械学習 導入事例紹介
HR Tech x 機械学習 導入事例紹介HR Tech x 機械学習 導入事例紹介
HR Tech x 機械学習 導入事例紹介
 
Scalaマクロ入門 bizr20170217
Scalaマクロ入門 bizr20170217 Scalaマクロ入門 bizr20170217
Scalaマクロ入門 bizr20170217
 

Kürzlich hochgeladen

Kürzlich hochgeladen (11)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

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