SlideShare a Scribd company logo
1 of 84
フロントエンドの
技術を刷新した話し
本日の内容
内容
フロントエンド
の技術刷新について
INDEX
• 背景
• ES6
• React.js
• Redux(Flux)
• テスト&構文チェック
• キャッチアップ
• 今後の課題
の7本です。
自己紹介
自己紹介
• 堀川 豊(31)
• Webアプリエンジニア
• フロントエンドからサーバーサイドまで
• ランサーズPFと周辺システムの開発
• 好きな言語Python
• 前職ではソーシャルゲーム開発
背景
背景
メッセージ機能リニューアル
背景
様々な問題
• テスト無い
• module化されていない
• 処理が追いにくい
• DOMとビジネスロジックが密結合
背景
解決するには。。。
• テスト書く
• module化
• 処理フローの明確化
• DOMとロジックの分離
背景
新技術を導入
色々入れました。
ES6導入
ES6
次期JavaScriptの仕様
• Class
• Promise
• Generator
• Arrow Function
• let/const
ES6
ES6 to ES5
ES6
Browserify + babelify
• babelifyでtranspile
• Browserifyで依存関係の解決
• ファイルの結合も
ES6
変換できない機能もある
• WeakMap
• WeakSet
• Proxy
• SubClassing
• Symbol
各ブラウザの対応状況はこちら http://kangax.github.io/compat-table/es6/
ES6 機能紹介
import/export
ES6 機能紹介
Class
ES6 機能紹介
Arrow function
ES6 機能紹介
Arrow function
ES6 機能紹介
let / const
ES6 機能紹介
Default Parameter
ES6 機能紹介
Template strings
ブラウザ上で簡単に試せるツールも
ブラウザで簡単に試せる
https://babeljs.io/repl/
トランスパイル後も意識
どんなコードが出力
されるかを意識する
• strict modeで出力
• ES5の機能をフルに使って表現される
• 変換出来ない機能もある
ページクラス
導入
PageClass
処理フローの明確化
発火するイベントや
読み込まれるリソースを管理するクラス
例えば
マイページ
さらに…
Element毎に色んな処理が
oh
処理を追っかけるのしんどい
PageClass
イベントとリソースを一元管理
PageClass
PageClassのイベント
• onBeforeRender - ページがレンダリングされる前に呼ばれる
• onShow - ページがレンダリングされた後に呼ばれる
• onBeforeunload - ページ離脱時によばれる
• onPopstate
PageClassの生成ロジック
URLを元に生成する
インスタンスを決定している
/mypage/message
new MypageMessagePage();
PageClassの生成ロジック
URLを元に保存ディレクトリ
も決定
/mypage/message
gulp/src/js/mypage/mypage_message_page.js
LancersPage
PageClassの基底クラス
全てのページで必要な共通処理を持っている
• リソースの読み込み処理
• エラーハンドリング
• PHPの実行環境取得
Redux
(Flux)
Flux…??
アーキテクチャです
• Facebookが提唱
• 特定のモジュールやFWの話じゃない
• 設計パターンの一つ
概念図
https://github.com/facebook/flux
特徴
• データの流れが単一方向
• 各要素がイベントの発火と監視を行う
• 要するにObserverパターン
Redux
Redux
• Fluxフレームワーク
• Storeは一つ
• Storeが状態を持たない
• 状態はReducerが持つ
Reduxの特徴は?
状態管理に特化した
フレームワーク
Fluxと同じ所
Fluxと同じ点
• 更新ロジックを一カ所にまとめている
• アプリケーションが状態を直接変更しない
• データの流れが単一方向
3原則
Redux3原則
• Single source of truth(Storeは1つだけ)
• State is read-only(状態は読み取り専用)
• Mutations are written as pure functions(変更はすべてpureな関数で書かれる)
reduxの変更を伝える
react-redux
ActionCreatorやReduxのstateを
React.jsのpropsにbindさせる。
https://github.com/rackt/react-redux
テスト
&
構文チェック
テスト
テスト
厨二っぽいネーミングセンス。。。(結構好き)
• テストランナー
• この子だけではテストはできない
• テストを簡単に実行するための機能
テスト
• テストフレームワーク
• テストを記述できる。
• TDD & BDDどちらにも対応
テスト
• アサーションライブラリ
• アサーション結果が分かりやすい
• 記述がシンプル
新日のロゴを思い出す
50サンプル
ES6で書いております
分かりやすい
ES6で書いております
構文チェック
ESLint
構文チェック
特徴
• 検証ルールのon/off
• カスタムルールが作成出来る
• 豊富なプラグイン
• ES6 & ES7をサポート
• jsxのサポート
構文チェック
.eslintrc
設定ファイルに適応するルールや
その詳細を設定していく。
airbnb等が自社のルールを
プラグインとして公開している
構文チェック
無理はしない
他社のルールをそのまま適応しても
エラーが大量に出て、
おおかみ少年になる可能性がある。
構文チェック
gulpと組み合わせる
トランスパイルの直前にlintを走らせて
エラーが存在する場合は、トランスパイルを
行わない。
構文チェック
lintの結果を通知
構文チェック
レポートを自動で表示
React.js
React.js
Facebookが開発した
UIライブラリ
component?
jsとマークアップの融合
component?
onClickイベントを追加
仮想DOM
仮想DOM
props
props
state
state
ライフサイクル
ライフサイクル
解放
DOM操作からの解放
• DOMをこねくり回す世界から解放
• UIパーツとして再利用出来る
• コンポーネントを再利用可能に
• 開発スピードがあがった
キャッチアップ
キャッチアップ
経験者などいない!
React。ES6。Reduxを
やったことある人間は0!
キャッチアップ
ES6
• Exploring ES6
• そもそもES5
• es6features
キャッチアップ
Exploring ES6
http://exploringjs.com/
キャッチアップ
es6features
https://github.com/lukehoban/es6features
キャッチアップ
React.js
• 入門React
• チュートリアル
速度がバラバラ
キャッチアップの速度が
バラバラ
• メンバーの経験値はバラバラ
• js初心者の人もいた
• チームのReact力があがらない
キャッチアップ
輪読会
キャッチアップ
• 前半15分はメンバー全員で黙読
• 後半15分は持ち回りで解説
• 毎日30分やる
輪読会のルール
キャッチアップ
• 体系的な知識が付く
• メンバー同士でサポートし合える
メンバー一丸となって
学ぶ
キャッチアップ
• 新技術導入の先頭に立って引っ張る人
• 問題が起きても、 最後の砦となって解決する
• 仮に一人になってもやりきるという強い意志
最後の砦(人柱)
も必要
キャッチアップ
redux
• まずFluxについて学ぶ
• 公式ドキュメント
• サンプルコード
今後の課題
課題
課題色々
• CSSとの連携
• 今回導入した技術の普及
• CI導入
まとめ
まとめ
まとめ
• ES6でより構造化されたプログラミング
• ページクラスでイベント&リソース管理
• Redux & React.jsで複雑なSPAも作れる!
• テスト&構文チェックで幸せ
• キャッチアップはチーム一丸となってやる
• とは言え最後の砦は必要
ES6楽しいよ
ご静聴
ありがとう
ございました

More Related Content

What's hot

フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugItsuki Kuroda
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ増田 亨
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案樽八 仲川
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014Takuto Wada
 
限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)
限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)
限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)NTT DATA Technology & Innovation
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方Shohei Koyama
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門Preferred Networks
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計Yoshinori Matsunobu
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則増田 亨
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
goで末尾再帰最適化は使えるか?
goで末尾再帰最適化は使えるか?goで末尾再帰最適化は使えるか?
goで末尾再帰最適化は使えるか?mori takuma
 
エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~
エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~
エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~hiroki tanaka
 
人は1ヶ月でエンジニアになれるのか
人は1ヶ月でエンジニアになれるのか人は1ヶ月でエンジニアになれるのか
人は1ヶ月でエンジニアになれるのかYamaura Kiyoto
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 

What's hot (20)

フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
 
限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)
限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)
限界性能試験を自動化するOperatorを作ってみた(Kubernetes Novice Tokyo #14 発表資料)
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
goで末尾再帰最適化は使えるか?
goで末尾再帰最適化は使えるか?goで末尾再帰最適化は使えるか?
goで末尾再帰最適化は使えるか?
 
エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~
エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~
エンタープライズRuby on Rails ~エンプラでぶち当たった2つの壁と突破法~
 
人は1ヶ月でエンジニアになれるのか
人は1ヶ月でエンジニアになれるのか人は1ヶ月でエンジニアになれるのか
人は1ヶ月でエンジニアになれるのか
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 

Viewers also liked

ゆるく学ぼう!現在のフロントエンドまとめ
ゆるく学ぼう!現在のフロントエンドまとめゆるく学ぼう!現在のフロントエンドまとめ
ゆるく学ぼう!現在のフロントエンドまとめ将一 深見
 
BABELで、ES2015(ES6)を学ぼう!
BABELで、ES2015(ES6)を学ぼう!BABELで、ES2015(ES6)を学ぼう!
BABELで、ES2015(ES6)を学ぼう!Toshio Ehara
 
エフスタ会津 - フロントエンドエンジニアの話 -
エフスタ会津 - フロントエンドエンジニアの話 -エフスタ会津 - フロントエンドエンジニアの話 -
エフスタ会津 - フロントエンドエンジニアの話 -thedesignium Inc.
 
LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築Hayashi Yuichi
 
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインWebフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインShumpei Shiraishi
 
とりあえず始めるAngular2
とりあえず始めるAngular2とりあえず始めるAngular2
とりあえず始めるAngular2Hayashi Yuichi
 
デザイナさんにGithubでpr投げてもらうまで
デザイナさんにGithubでpr投げてもらうまでデザイナさんにGithubでpr投げてもらうまで
デザイナさんにGithubでpr投げてもらうまでHideharu Okuma
 
実務導入に向けたAngularの始め方@Angular入門者の会
実務導入に向けたAngularの始め方@Angular入門者の会実務導入に向けたAngularの始め方@Angular入門者の会
実務導入に向けたAngularの始め方@Angular入門者の会Hayashi Yuichi
 
Dockerとフロントエンド
DockerとフロントエンドDockerとフロントエンド
DockerとフロントエンドHayashi Yuichi
 
ng-mtg#6 AngularJS ディレクティブ・パターン
ng-mtg#6 AngularJS ディレクティブ・パターンng-mtg#6 AngularJS ディレクティブ・パターン
ng-mtg#6 AngularJS ディレクティブ・パターンHayashi Yuichi
 
フロントエンド開発環境
フロントエンド開発環境フロントエンド開発環境
フロントエンド開発環境Masaki Kawaguchi
 
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについてNobukazu Hanada
 
Webアプリケーションをもっと楽しく! 〜フロントエンドのお仕事〜
Webアプリケーションをもっと楽しく! 〜フロントエンドのお仕事〜Webアプリケーションをもっと楽しく! 〜フロントエンドのお仕事〜
Webアプリケーションをもっと楽しく! 〜フロントエンドのお仕事〜Yusuke Amano
 
Angularおじさんの1年
Angularおじさんの1年Angularおじさんの1年
Angularおじさんの1年Hayashi Yuichi
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~leverages_event
 
Rubyとクラウドサービスで実現したEC決済共通基盤@Ruby Association ビジネスセミナー201401
Rubyとクラウドサービスで実現したEC決済共通基盤@Ruby Association ビジネスセミナー201401Rubyとクラウドサービスで実現したEC決済共通基盤@Ruby Association ビジネスセミナー201401
Rubyとクラウドサービスで実現したEC決済共通基盤@Ruby Association ビジネスセミナー201401Shota Onishi
 
開発ライフサイクルから見たAngularJS
開発ライフサイクルから見たAngularJS開発ライフサイクルから見たAngularJS
開発ライフサイクルから見たAngularJSMizuho Sakamaki
 
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4アシアル株式会社
 

Viewers also liked (20)

ゆるく学ぼう!現在のフロントエンドまとめ
ゆるく学ぼう!現在のフロントエンドまとめゆるく学ぼう!現在のフロントエンドまとめ
ゆるく学ぼう!現在のフロントエンドまとめ
 
BABELで、ES2015(ES6)を学ぼう!
BABELで、ES2015(ES6)を学ぼう!BABELで、ES2015(ES6)を学ぼう!
BABELで、ES2015(ES6)を学ぼう!
 
エフスタ会津 - フロントエンドエンジニアの話 -
エフスタ会津 - フロントエンドエンジニアの話 -エフスタ会津 - フロントエンドエンジニアの話 -
エフスタ会津 - フロントエンドエンジニアの話 -
 
LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築
 
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインWebフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
 
とりあえず始めるAngular2
とりあえず始めるAngular2とりあえず始めるAngular2
とりあえず始めるAngular2
 
デザイナさんにGithubでpr投げてもらうまで
デザイナさんにGithubでpr投げてもらうまでデザイナさんにGithubでpr投げてもらうまで
デザイナさんにGithubでpr投げてもらうまで
 
実務導入に向けたAngularの始め方@Angular入門者の会
実務導入に向けたAngularの始め方@Angular入門者の会実務導入に向けたAngularの始め方@Angular入門者の会
実務導入に向けたAngularの始め方@Angular入門者の会
 
Dockerとフロントエンド
DockerとフロントエンドDockerとフロントエンド
Dockerとフロントエンド
 
ng-mtg#6 AngularJS ディレクティブ・パターン
ng-mtg#6 AngularJS ディレクティブ・パターンng-mtg#6 AngularJS ディレクティブ・パターン
ng-mtg#6 AngularJS ディレクティブ・パターン
 
フロントエンド開発環境
フロントエンド開発環境フロントエンド開発環境
フロントエンド開発環境
 
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
 
Webアプリケーションをもっと楽しく! 〜フロントエンドのお仕事〜
Webアプリケーションをもっと楽しく! 〜フロントエンドのお仕事〜Webアプリケーションをもっと楽しく! 〜フロントエンドのお仕事〜
Webアプリケーションをもっと楽しく! 〜フロントエンドのお仕事〜
 
Angularおじさんの1年
Angularおじさんの1年Angularおじさんの1年
Angularおじさんの1年
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
 
Rubyとクラウドサービスで実現したEC決済共通基盤@Ruby Association ビジネスセミナー201401
Rubyとクラウドサービスで実現したEC決済共通基盤@Ruby Association ビジネスセミナー201401Rubyとクラウドサービスで実現したEC決済共通基盤@Ruby Association ビジネスセミナー201401
Rubyとクラウドサービスで実現したEC決済共通基盤@Ruby Association ビジネスセミナー201401
 
開発ライフサイクルから見たAngularJS
開発ライフサイクルから見たAngularJS開発ライフサイクルから見たAngularJS
開発ライフサイクルから見たAngularJS
 
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
 
kontainer-js
kontainer-jskontainer-js
kontainer-js
 
jQuery勉強会#4
jQuery勉強会#4jQuery勉強会#4
jQuery勉強会#4
 

Similar to フロントエンドの技術を刷新した話し。

The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugThe seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugSAKURUG co.
 
今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJavaTakashi Ito
 
DEV-003_新しく生まれ変わったデータ アクセス テクノロジ ~Entity Framework Core 1.0 の全貌~
DEV-003_新しく生まれ変わったデータ アクセス テクノロジ ~Entity Framework Core 1.0 の全貌~DEV-003_新しく生まれ変わったデータ アクセス テクノロジ ~Entity Framework Core 1.0 の全貌~
DEV-003_新しく生まれ変わったデータ アクセス テクノロジ ~Entity Framework Core 1.0 の全貌~decode2016
 
XPagesジャンプスタート
XPagesジャンプスタートXPagesジャンプスタート
XPagesジャンプスタートMitsuru Katoh
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説Daisuke Nishino
 
.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在TomomitsuKusaba
 
増加するコアを使い切れ!!
増加するコアを使い切れ!!増加するコアを使い切れ!!
増加するコアを使い切れ!!guestc06e54
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたItaru Kitagawa
 
第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料Naoki Shibata
 
ADO.NET Entity Framework
ADO.NET Entity Framework ADO.NET Entity Framework
ADO.NET Entity Framework Microsoft
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
 
Daisukei vsug ef
Daisukei vsug efDaisukei vsug ef
Daisukei vsug efvsug_jim
 
RDRA DDD Agile
RDRA DDD AgileRDRA DDD Agile
RDRA DDD Agile増田 亨
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-PE-BANK
 
20170804 IOS/IOS-XE運用管理機能アップデート
20170804 IOS/IOS-XE運用管理機能アップデート20170804 IOS/IOS-XE運用管理機能アップデート
20170804 IOS/IOS-XE運用管理機能アップデートKazumasa Ikuta
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計Tadayoshi Sato
 

Similar to フロントエンドの技術を刷新した話し。 (20)

Kaleidox
KaleidoxKaleidox
Kaleidox
 
20201127 .NET 5
20201127 .NET 520201127 .NET 5
20201127 .NET 5
 
The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurugThe seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurug
 
今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
DEV-003_新しく生まれ変わったデータ アクセス テクノロジ ~Entity Framework Core 1.0 の全貌~
DEV-003_新しく生まれ変わったデータ アクセス テクノロジ ~Entity Framework Core 1.0 の全貌~DEV-003_新しく生まれ変わったデータ アクセス テクノロジ ~Entity Framework Core 1.0 の全貌~
DEV-003_新しく生まれ変わったデータ アクセス テクノロジ ~Entity Framework Core 1.0 の全貌~
 
XPagesジャンプスタート
XPagesジャンプスタートXPagesジャンプスタート
XPagesジャンプスタート
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
 
.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在
 
増加するコアを使い切れ!!
増加するコアを使い切れ!!増加するコアを使い切れ!!
増加するコアを使い切れ!!
 
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみたサーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
 
第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料
 
ADO.NET Entity Framework
ADO.NET Entity Framework ADO.NET Entity Framework
ADO.NET Entity Framework
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
Daisukei vsug ef
Daisukei vsug efDaisukei vsug ef
Daisukei vsug ef
 
RDRA DDD Agile
RDRA DDD AgileRDRA DDD Agile
RDRA DDD Agile
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
 
IOS/IOS-XE 運用管理機能アップデート
IOS/IOS-XE 運用管理機能アップデートIOS/IOS-XE 運用管理機能アップデート
IOS/IOS-XE 運用管理機能アップデート
 
20170804 IOS/IOS-XE運用管理機能アップデート
20170804 IOS/IOS-XE運用管理機能アップデート20170804 IOS/IOS-XE運用管理機能アップデート
20170804 IOS/IOS-XE運用管理機能アップデート
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 

フロントエンドの技術を刷新した話し。

Editor's Notes

  1. JQuery一本でごりごりフロントエンド開発から React.js ES6 reduxへの移りかわった。
  2. 新メッセージの概要と今回導入する予定の技術について javascript周りのライブラリや仕組みについて
  3. 昨年12月にチャット機能のリニューアルを行いました。 ランサーさんとクライアントさんが仕事のやりとりをするのに使っています。 メッセージチームはこれで仕事のやりとりしてるよ
  4. クラスや新たなデータ構造が使用可能に より構造化されたプログラミングが可能となる。 ブラウザによって実装にバラつきがあり ES6のコードをそのまま使用することは出来ない。
  5. BabelとはJavaScriptの新規格であるES6 ( ECMAScript 6th Edition/ECMAScript 2015 ) で書かれたJavaScriptコードを古いブラウザでも解釈できるようにES5の書式に変換し てくれるツール(JavaScriptトランスパイラ)です。 Babelを使ってES6をブラウザで使用する際に1つ問題があってexport/import構文が使えない。 正確にはBabelはimport / export構文をrequire構文に変換してくれるのですが、ブラウザがrequire構文に対応していないため利用できません。
  6. babelifyはBrowserifyのtransformでBrowserifyの処理の中にbabelの処理を組み込めるモジュールです。 ちなみに、Browserifyはrequire構文をブラウザでも利用できるようにするためのパッケージです。 Browserrifyを通してトランスパイルとファイルの連結&難読化を行ってる。
  7. TranspilerやPolyfillでも再現出来ない。
  8. 変数、オブジェクト、クラスをexport/importできます。 ここではFileListClassをExportしている。 システムの規模がある程度の大きさになると 機能毎にプログラムをmodule化していき それらを組み合わせて、システムを構築する っていうのは定石の一つだと思います。 しかしjavascriptでは言語レベルでimport/exportがサポートされていなかったたので、細かくモジュールに分けるのが非常に面倒でした。
  9. 皆さん大好きなclass構文です。 現段階ではシンタックスシュガーに過ぎませんが 今までのクラスの書き方よりは分かりやすいです。 継承、getter/setter staticメソッドのサポートをしています。
  10. アロー関数が登場する前は、それぞれの関数がそれ自身の this の値を定義していました。
  11. アロー関数はthisの値を束縛するので setIntervalのコールバックで指定された関数のthisはPerson となります。
  12. 今までのECMAScriptにはグローバルスコープと関数スコープしかありませんでしたが、ES6からは新たにブロックスコープと定数が追加されました。 そのブロック内でのみ有効な変数を宣言する際に用いるのがletとなります。
  13. PHPで良く使ってるあれ。 undefinedを渡すと指定したデフォルト値が使用される
  14. バッククオート『 ` 』で囲んだ文字が、文字列リテラル同様に文字列として評価される。 リテラル中の『${』と『}』で囲まれた部分は式として評価される。
  15. strict モー ブラウザ上でES6が実行できるツールです。
  16. strict モー ブラウザ上でES6が実行できるツールです。
  17. Lancers独自の仕組み 1ページにつき1つ存在する。 そのページ内で使用されるリソースや イベント等をこのクラスにまとめる。 全てのページクラスはLancersPageクラスを継承します。
  18. マイページ、依頼詳細、依頼フォーム 機能が多くて大きいページは表示要素ごとに CakePHPのElementで区切ることが多いと思います。 マイページは20個以上のElementで構成されています。 恐らくElement内でさらに別のElementを読み込んでいるので、実際に読み込まれている数はもっと多いです。
  19. しんどいよね。。。。 なので、ページで発火するイベントや使用するリソースは PlageClassで一元管理してしまおう!という魂胆の元に作られました。
  20. PageClassを生成するPageClassFactoryなるFactoryクラスが存在する。 そのクラスにlocation.pathnameを渡すと pathを分解して適切なPageClassのインスタンスを生成する。
  21. PageClassを生成するPageClassFactoryなるFactoryクラスが存在する。 そのクラスにlocation.pathnameを渡すと pathを分解して適切なPageClassのインスタンスを生成する。
  22. リソースの読み込み処理 エラーハンドリング PHPの実行環境取得等
  23. View MVCの「view」と同じユーザーインタラクションに応じて Action Creatorsを叩く。 Storeの監視して、変更を検知する。 ReactのComponent。 Action Creators MVCのController的な役割 ViewとStoreの仲介役。 viewから呼び出されてStoreに通知 Dispatcher Storeに向けてメッセージを発行する場合は必ずココを介する Store間の処理順序の依存性を解決している Store ビジネスロジックと「状態」を持つ シングルトン Action Creatorsと同数あるはず
  24. 1処理が追っかけやすい。viewから順番に見ていけばいい。 2疎結合なので、変更に強いしテスタブルでもある。
  25. Javascriptのシングルページアプリケーションは複雑になってきてstate(状態)を管理するのはしんどくなってきた。新機能開発するのもバグ修正するのもかなり辛い。 根本的に、「変化」と「非同期」を"同時"にコントロールするのは人間には無理がある。Reactはその問題に対してViewレイヤーで非同期と直接DOM操作を取り除くことで解決したけども、state(状態)の管理は開発者に委ねられたままなので、Reduxはそこを解決するためにある。 Reduxは3原則に則って状態変化の流れを制限することで、状態を管理できるようにしている。
  26. (FluxならStore, ReduxならReducer)
  27. 1. Single source of truth(ソースは1つだけ) アプリケーション全体の状態(state)はツリーの形で1つのオブジェクトで作られ、1つのストアに保存される stateが保存しやすいので、ユニバーサルアプリケーションがつくりやすい stateが一つだから、デバッグしやすい、開発しやすい 2. State is read-only(状態は読み取り専用) 状態を変更する手段は、変更内容をもったactionオブジェクトを発行して実行するだけ ビューやコールバックが状態を直接変更させることはできない 変更は一つずつ順番に行なわれる actionはオブジェクトなので、保存可能であり、テストしやすい 3. Mutations are written as pure functions(変更はすべてpureな関数で書かれる) アクションがどのように状態を変更するかを「Reducer」で行う。 「Reducer」は状態とアクションを受けて、新しい状態を返す関数である。 現在のstateオブジェクトを変更することはせずに、新しいstateオブジェクトを作って返すというのがポイント。 開発するときは、最初はアプリケーションで一つのReducerを用意して、巨大化してきたらReducerを分割していく
  28. これを使用することで、Reduxの変更をViewへ通知することが可能。 Reducerで変更が発生すると変更内容を propsに渡してくれる。
  29. このツールは元々AngularJSのための作られたそうで、 クライアントサイドのJavascriptコードのテストを簡単に実行することができます。 このツール自体 はテストランナーで、テストフレームワークを使用してテストを行います。 テストフレームワークを簡単に実行するための機能。 実行するブラウザやテストフレームワーク、テストファイルのディレクトリを指定すると。指定したディレクトリを監視して、変更があれば即テスト実行してくれる。 browserrifyと連動できるので、ES6でテスト記述することも可能
  30. Expressの開発者が作ったテストフレームワーク テストフレームワーク。 テストを記述する関数群を提供し、それらの関数を使って書かれたテストの結果を判定、集計した上で結果を表示する機能を持ちます。 TDD(テスト駆動開発)とBDD(振る舞い駆動開発)の記述方法に対応していま シェア http://blog.jetbrains.com/webstorm/2015/04/dailyjs-survey-results-2014/
  31. twadaさんが作ったアサーションライブラリ 実行結果を判定するにはアサーションライブラリが必要です。引数にメソッドの実行結果と、想定する戻り値を指定することにより、その結果が満たされていなければExceptionを発行してテスティングフレームワークに伝えます。 記述がシンプルかつアサーション失敗時の情報が分かりやすく表示される
  32. わかりやす!!! 使用されている変数の情報等を分かりやすく表示してくれる。
  33. ESLint は JavaScript の静的検証ツールです。コードを実行する前に明らかなバグを見つけたり、括弧やスペースの使い方などのスタイルを統一したりするのに役立ちます。同様のツールとしては JSLint, JSHint, JSCS 等があります。
  34. ESLint は JavaScript の静的検証ツールです。コードを実行する前に明らかなバグを見つけたり、括弧やスペースの使い方などのスタイルを統一したりするのに役立ちます。同様のツールとしては JSLint, JSHint, JSCS 等があります。 コーディングスタイルの統一が主目的。 browseryfiと連携して、lintでチェックをかけてエラーがある場合はビルドしない
  35. 警告がたくさん出てるのはきにすんな
  36. 警告がたくさん出てるのはきにすんな
  37. コンポーネントと言われる機能を実装して 画面を構成していく。 Redux or Fluxのviewの部分を担う
  38. 最小限コンポーネント構成です。 Reactはrenderコンポーネントが必須のメソッドとなり これがあれば動作します。 renderでreturnされているHTMLはjsxというシンタックスで記述されます。 renderメソッドはピュアであることが求められるので この中でstateや自身を更新するような記述をしるのはNG
  39. クリックイベントを追加してみました。 onclickイベントがインラインで記述されるわけではない
  40. 生DOMの操作は激重くんですね DOMの状態を持つ構造体をDOMとは別に持つことで 高速な差分計算が可能になり、描画速度が向上する。 この差分計算に必要なのがkeyです。 keyはVirtualDOMのdiffから実際のDOMに反映させるときに最小限の変更にするために使われます。
  41. コンポーネントのアトリビュートとして渡されたものがpropsとなります。 propsは外部から渡されたものなので、変更を加えてはダメです。
  42. Immutableな値であったのに対してMutableな値を定義することが出来ます。 ただし、現状原則使用していません。 状態は基本reduxに置くようにしています。
  43. React.jsではComponentの状態の変化に合わせて色々メソッドを呼んでくれるのでそれに合わせて初期化や後始末な処理を書くことが出来ます。 コンポーネント更新前 コンポーネント更新後 render描画前 render描画直後
  44. 電子書籍版とオンライン版があってオンライン版は無料で読める 内容は適宜改正されている。 たくさん書籍を読んだわけではないが、これは良かった。
  45. 機能とコード例が豊富に載っているので非常に参考になる。 ここに載ってるコードを写経して実行するだけでも勉強になる。