SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
×
@mknkisk 2014/6/2

!
AngularJSを業務で使いたいけど今一歩踏み出せない方のための勉強会
牧野 圭将
@mknkisk
!
2013年09月 ブラケット 入社
STORES.jp 開発全般
!
一番JS歴が浅いですが一番ヒマそう
だったので今ここにいます
今日のおはなし
❖ STORES.jp と AngularJS
❖ Rails と AngularJS
❖ SEO対応
❖ Google Analytics
❖ リファクタ中のはなし
❖ かるいまとめ
最短2分で、驚くほど簡単に
オンラインストアがつくれる
https://stores.jp
x MARKET
STORES.jp と AngularJS
ローンチ時点でAngularJSを採用 (2012/09)
当時は今ほど日本で注目を集めていなかった
情報も少なかった
いつから使ってる?
STORES.jp と AngularJS
❖ ダッシュボード 

(ストアオーナー管理画面)
!
❖ 各ストアのコンテンツ

(メインコンテンツ)
どこで使ってる?
STORES.jp と AngularJS
アプリを見据えてサーバサイドは
APIとして使いたかった
どうしてAngularJS?
STORES.jp と AngularJS
デザイン編集機能でリアルタイムに変更を反映するために
データバインディングが魅力的だった
どうしてAngularJS?
STORES.jp と AngularJS
レイアウトやストア名などを
リアルタイムに反映
!
どんどん切り替わることで
デザインを楽しんでもらう
ストアデザイン編集機能
STORES.jp と AngularJS
ng-modle
ng-style
ng-show
STORES.jp と AngularJS
Rails, AngularJS とフルスタックのものを採用する

ことで学習すべき要素を明確にしたかった
どうしてAngularJS?
Rails と AngularJS
❖ Railsを完全にAPIとしてフロントはAngularJSに任せる
❖ RailsのViewに使いたいところだけ適応する
Rails, AngularJS で調べていくと
2タイプの構成を見かけると思います
Rails と AngularJS
❖ RailsのViewに使いたいところだけ適応する
❖ Railsのlayoutで共通部分をレンダリングしている(初回)
❖ 動的に変更する箇所に <ng-view> を設置してルーティング
❖ 必ずしもAngularJSが必要でない部分では使ってない

SEOなど考え試行錯誤した感じがある
STOERS.jp は今こっちです。完全分離はできていません
Rails と AngularJS
構成の参考
mkwiatkowski/todo-rails4-angularjs
!
AngularJS本家がRailsとの連携の参考にあげていた
サンプルコード
現在も開発が進められており、今はこの構成に近い
Google Analytics
SPAなのでGAのトラッキングコードを読む込むだけでは
各ページをトラッキングできません
!
routeが変わったのをトリガーにGAにURLを通知させました
Google Analytics
// ga('send', 'pageview');
GAのトラッキングコードから以下を削除
Google Analytics
$routeChangeSuccess を検知して
GAにトラッキング
Angulartics
前述のGAトラッキングと同じことができるモジュール
http://luisfarzati.github.io/angulartics/
!
GA以外にも mixpanel や chartbeat もサポート
クリックイベント用のディレクティブも提供
※ui-router を使っているとうまく動作しない?
SEO
_escaped_fragment_
SEO
❖ PhantomJSで返すとレスポンスが遅い
❖ エラーが起きていてもわかりづらい
❖ GoogleのbotがJSを実行できるようになった?
❖ PhantomJSで返却したHTMLからさらにAngularJSを

実行されると目的のページを返せなくなるかも?
SEO
❖ SEO対策は結構面倒
❖ SEOを重視しながらAngularJSを使うなら

ルーティングだけはRailsサイドにするのもありかも
リファクタ中のはなし
❖ jQueryプラグインをAngularJSと一緒に使う
❖ $http -> Service
❖ Controllerを分ける (データの共有)
ng-repeatの後に処理を走らせたい
サーバから商品情報を取得
ng-repeatで画像情報をループ
jQueryプラグインを適応
ng-repeatの後に処理を走らせたい
サーバから商品情報を取得
ng-repeatで画像を描画
binding前に実行されるため適応されない
ng-repeatの後に処理を走らせたい
サーバから商品情報を取得
ng-repeatで画像を描画
Controller内にView周りの
コードが混在してしまう
ng-repeatの後に処理を走らせたい
サーバから商品情報を取得
ng-repeatで画像を描画
Directiveでラップして
Controllerから追い出した
jQueryプラグインを使う前に
jQueryプラグインをカスタムディレクティブに

実装する前に以下を検討してみる
❖ AngularUI で実現できないか?

http://angular-ui.github.io/
❖ 公開されているディレクティブはないか?

http://ngmodules.org
❖ AngularJSで置き換えられないか?

参考: http://knightso.hateblo.jp/entry/2014/04/10/080207
ANGULAR MODULES
❖ http://ngmodules.org
❖ AngularJSの各種モジュールのまとめ
❖ STORES.jp でも以下を採用
❖ angular-file-upload
❖ ngInfiniteScroll
$http -> Service
❖ 処理をコントローラーに詰め込んでいくと

どんどんコントローラーが肥大化してしまう
!
❖ 処理上は問題ないが, テストがしにくい, 

使い回しができないといった問題が発生してくる
$http -> Service
商品一覧を取得する処理は
ダッシュボードでも各ストアでも共通で行われる
幾つかのコントローラーに同じような処理が書かれていた
Serviceに切り出して共通化する
$http -> Service
AngularJSの学習
JS初心者の自分がAngularJSの学習に参考にしたもの
❖ ドットインストール
❖ 公式チュートリアル
!
公式チュートリアルまでだと敷居は低く感じる (イケル!って思える)
!
ディレクティブやサービス, ファクトリーを作り始めたあたりから独特の
ルールで一気に敷居が上がる
AngularJSの学習
最近参考にさせて頂いてるサイト
❖ AngularJS Ninja
❖ http://angularjsninja.com/
❖ js STUDIO (日本語リファレンス)
❖ http://js.studio-kingdom.com/angularjs
❖ AngularJSアプリケーション開発ガイド
❖ O Reilly本 (v1.2.16)
まとめ
❖ 少ないコードで実装できている
❖ 学習対象はAngularJSのみで明確だった
❖ 実際にサービスで使ってみるとハマりどころは多い
❖ コントローラーは太らせない
❖ 面倒臭がらなければ結果的にハッピーになれる
❖ SEO対策は面倒。重要度が高い場合は素直に

サーバサイドMVCの方がいいかも
ありがとうございました

Weitere ähnliche Inhalte

Was ist angesagt?

Angular js開発事例
Angular js開発事例Angular js開発事例
Angular js開発事例Shun Takeyama
 
【ABC2014Spring LT】AngularJSでWEBアプリ開発
【ABC2014Spring LT】AngularJSでWEBアプリ開発【ABC2014Spring LT】AngularJSでWEBアプリ開発
【ABC2014Spring LT】AngularJSでWEBアプリ開発Hiroyuki Kusu
 
AngularJS入門の巻2
AngularJS入門の巻2AngularJS入門の巻2
AngularJS入門の巻2Toshio Ehara
 
Enterprise x AngularJS
Enterprise x AngularJSEnterprise x AngularJS
Enterprise x AngularJSKenichi Kanai
 
開発ライフサイクルから見たAngularJS
開発ライフサイクルから見たAngularJS開発ライフサイクルから見たAngularJS
開発ライフサイクルから見たAngularJSMizuho Sakamaki
 
スキスキIonic
スキスキIonicスキスキIonic
スキスキIonicKon Yuichi
 
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
今後のWeb開発の未来を考えてangular jsにしました(拡大版)今後のWeb開発の未来を考えてangular jsにしました(拡大版)
今後のWeb開発の未来を考えてangular jsにしました(拡大版)Mitsuru Ogawa
 
イベント駆動AngularJS / 今から書くAngular 2.0
イベント駆動AngularJS / 今から書くAngular 2.0イベント駆動AngularJS / 今から書くAngular 2.0
イベント駆動AngularJS / 今から書くAngular 2.0Okuno Kentaro
 
Angular jsの継続的なバージョンアップ
Angular jsの継続的なバージョンアップAngular jsの継続的なバージョンアップ
Angular jsの継続的なバージョンアップKazuyoshi Tsuchiya
 
AngularJS勉強会「そもそもwebって」@ツクロア勉強会(2015.09.10)
AngularJS勉強会「そもそもwebって」@ツクロア勉強会(2015.09.10)AngularJS勉強会「そもそもwebって」@ツクロア勉強会(2015.09.10)
AngularJS勉強会「そもそもwebって」@ツクロア勉強会(2015.09.10)tomonari takahashi
 
Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk
Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfkSpring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk
Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk学 松崎
 
エンジニアからデザイナーに贈るプロトタイピングのすすめ - 春のフロントエンド祭り 2015
エンジニアからデザイナーに贈るプロトタイピングのすすめ - 春のフロントエンド祭り 2015エンジニアからデザイナーに贈るプロトタイピングのすすめ - 春のフロントエンド祭り 2015
エンジニアからデザイナーに贈るプロトタイピングのすすめ - 春のフロントエンド祭り 2015Naoki Yamada
 
エンタープライヤーのためのWeb Componentsハンズオン
エンタープライヤーのためのWeb ComponentsハンズオンエンタープライヤーのためのWeb Componentsハンズオン
エンタープライヤーのためのWeb ComponentsハンズオンMitsuru Ogawa
 
フロントエンド初学者がSPAに手を出してみた
フロントエンド初学者がSPAに手を出してみたフロントエンド初学者がSPAに手を出してみた
フロントエンド初学者がSPAに手を出してみたKei Yagi
 
[社内勉強会]SPAのすすめ
[社内勉強会]SPAのすすめ[社内勉強会]SPAのすすめ
[社内勉強会]SPAのすすめhirooooo
 
喋って、DEMOで 伝える 僕がHerokuを使う理由
喋って、DEMOで 伝える 僕がHerokuを使う理由喋って、DEMOで 伝える 僕がHerokuを使う理由
喋って、DEMOで 伝える 僕がHerokuを使う理由Masaru Gushiken
 
smartFXにおけるApache Cordovaの活用について
smartFXにおけるApache Cordovaの活用についてsmartFXにおけるApache Cordovaの活用について
smartFXにおけるApache Cordovaの活用について剛志 森田
 
One-time Binding & $digest
One-time Binding & $digestOne-time Binding & $digest
One-time Binding & $digestHayashi Yuichi
 

Was ist angesagt? (20)

Angular js開発事例
Angular js開発事例Angular js開発事例
Angular js開発事例
 
【ABC2014Spring LT】AngularJSでWEBアプリ開発
【ABC2014Spring LT】AngularJSでWEBアプリ開発【ABC2014Spring LT】AngularJSでWEBアプリ開発
【ABC2014Spring LT】AngularJSでWEBアプリ開発
 
AngularJS入門の巻2
AngularJS入門の巻2AngularJS入門の巻2
AngularJS入門の巻2
 
Enterprise x AngularJS
Enterprise x AngularJSEnterprise x AngularJS
Enterprise x AngularJS
 
開発ライフサイクルから見たAngularJS
開発ライフサイクルから見たAngularJS開発ライフサイクルから見たAngularJS
開発ライフサイクルから見たAngularJS
 
スキスキIonic
スキスキIonicスキスキIonic
スキスキIonic
 
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
今後のWeb開発の未来を考えてangular jsにしました(拡大版)今後のWeb開発の未来を考えてangular jsにしました(拡大版)
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
 
イベント駆動AngularJS / 今から書くAngular 2.0
イベント駆動AngularJS / 今から書くAngular 2.0イベント駆動AngularJS / 今から書くAngular 2.0
イベント駆動AngularJS / 今から書くAngular 2.0
 
Angular2
Angular2Angular2
Angular2
 
Angular jsの継続的なバージョンアップ
Angular jsの継続的なバージョンアップAngular jsの継続的なバージョンアップ
Angular jsの継続的なバージョンアップ
 
AngularJS勉強会「そもそもwebって」@ツクロア勉強会(2015.09.10)
AngularJS勉強会「そもそもwebって」@ツクロア勉強会(2015.09.10)AngularJS勉強会「そもそもwebって」@ツクロア勉強会(2015.09.10)
AngularJS勉強会「そもそもwebって」@ツクロア勉強会(2015.09.10)
 
Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk
Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfkSpring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk
Spring Boot + Doma + AngularJSで作るERP 〜JavaQneバージョン〜 #jqfk
 
エンジニアからデザイナーに贈るプロトタイピングのすすめ - 春のフロントエンド祭り 2015
エンジニアからデザイナーに贈るプロトタイピングのすすめ - 春のフロントエンド祭り 2015エンジニアからデザイナーに贈るプロトタイピングのすすめ - 春のフロントエンド祭り 2015
エンジニアからデザイナーに贈るプロトタイピングのすすめ - 春のフロントエンド祭り 2015
 
エンタープライヤーのためのWeb Componentsハンズオン
エンタープライヤーのためのWeb ComponentsハンズオンエンタープライヤーのためのWeb Componentsハンズオン
エンタープライヤーのためのWeb Componentsハンズオン
 
フロントエンド初学者がSPAに手を出してみた
フロントエンド初学者がSPAに手を出してみたフロントエンド初学者がSPAに手を出してみた
フロントエンド初学者がSPAに手を出してみた
 
俺とAngular JS 2
俺とAngular JS 2俺とAngular JS 2
俺とAngular JS 2
 
[社内勉強会]SPAのすすめ
[社内勉強会]SPAのすすめ[社内勉強会]SPAのすすめ
[社内勉強会]SPAのすすめ
 
喋って、DEMOで 伝える 僕がHerokuを使う理由
喋って、DEMOで 伝える 僕がHerokuを使う理由喋って、DEMOで 伝える 僕がHerokuを使う理由
喋って、DEMOで 伝える 僕がHerokuを使う理由
 
smartFXにおけるApache Cordovaの活用について
smartFXにおけるApache Cordovaの活用についてsmartFXにおけるApache Cordovaの活用について
smartFXにおけるApache Cordovaの活用について
 
One-time Binding & $digest
One-time Binding & $digestOne-time Binding & $digest
One-time Binding & $digest
 

Ähnlich wie STORES.jp x AngularJS

フリーランスはじめました - 【初心者向けデザイン講座】デザインのスキルを身につけてお仕事をする方法!東洋美術学校×クラウドワークス
フリーランスはじめました - 【初心者向けデザイン講座】デザインのスキルを身につけてお仕事をする方法!東洋美術学校×クラウドワークスフリーランスはじめました - 【初心者向けデザイン講座】デザインのスキルを身につけてお仕事をする方法!東洋美術学校×クラウドワークス
フリーランスはじめました - 【初心者向けデザイン講座】デザインのスキルを身につけてお仕事をする方法!東洋美術学校×クラウドワークスYuki Suzuki
 
我が家のフロントエンド開発事情
我が家のフロントエンド開発事情我が家のフロントエンド開発事情
我が家のフロントエンド開発事情Naoki Yamada
 
How to develop a huge Single Page Application
How to develop a huge Single Page ApplicationHow to develop a huge Single Page Application
How to develop a huge Single Page ApplicationNaoki Yamada
 
普段Reactを触ってる僕が Angularを触ってみた感想を共有する
普段Reactを触ってる僕が Angularを触ってみた感想を共有する普段Reactを触ってる僕が Angularを触ってみた感想を共有する
普段Reactを触ってる僕が Angularを触ってみた感想を共有するkazuki matsumura
 
Innovation eggcloudnative
Innovation eggcloudnativeInnovation eggcloudnative
Innovation eggcloudnativeTakuro Sasaki
 
Our Track to Modern Angular
Our Track to Modern AngularOur Track to Modern Angular
Our Track to Modern AngularYuta Shimizu
 
2016 02-25-crawler-study-01
2016 02-25-crawler-study-012016 02-25-crawler-study-01
2016 02-25-crawler-study-01Hiroshi Oyamada
 
AngularJSを浅めに紹介します
AngularJSを浅めに紹介しますAngularJSを浅めに紹介します
AngularJSを浅めに紹介しますnkazuki
 
Rubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerRubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerTakuro Sasaki
 
20161125 米田 angular_jsを触ってみた
20161125 米田 angular_jsを触ってみた20161125 米田 angular_jsを触ってみた
20161125 米田 angular_jsを触ってみたTsuyoshi Saito
 
ボクたちのWWW Webクリエイターのこれからを考える
ボクたちのWWW Webクリエイターのこれからを考えるボクたちのWWW Webクリエイターのこれからを考える
ボクたちのWWW Webクリエイターのこれからを考えるMasakazu Muraoka
 
BACKBONE.JSによるWebアプリケーション開発について
BACKBONE.JSによるWebアプリケーション開発についてBACKBONE.JSによるWebアプリケーション開発について
BACKBONE.JSによるWebアプリケーション開発についてToshio Ehara
 
AngularJS で ハイスピードSI
AngularJS で ハイスピードSIAngularJS で ハイスピードSI
AngularJS で ハイスピードSIKoichiro Nishijima
 
angular X designer - デザイナからみたAngularJS #ten1club
angular X designer - デザイナからみたAngularJS #ten1clubangular X designer - デザイナからみたAngularJS #ten1club
angular X designer - デザイナからみたAngularJS #ten1clubsilvers ofsilvers
 
JavaScript祭りLTでmonacaを紹介
JavaScript祭りLTでmonacaを紹介JavaScript祭りLTでmonacaを紹介
JavaScript祭りLTでmonacaを紹介Yuki Okamoto
 

Ähnlich wie STORES.jp x AngularJS (20)

フリーランスはじめました - 【初心者向けデザイン講座】デザインのスキルを身につけてお仕事をする方法!東洋美術学校×クラウドワークス
フリーランスはじめました - 【初心者向けデザイン講座】デザインのスキルを身につけてお仕事をする方法!東洋美術学校×クラウドワークスフリーランスはじめました - 【初心者向けデザイン講座】デザインのスキルを身につけてお仕事をする方法!東洋美術学校×クラウドワークス
フリーランスはじめました - 【初心者向けデザイン講座】デザインのスキルを身につけてお仕事をする方法!東洋美術学校×クラウドワークス
 
Ng mtg#3
Ng mtg#3Ng mtg#3
Ng mtg#3
 
我が家のフロントエンド開発事情
我が家のフロントエンド開発事情我が家のフロントエンド開発事情
我が家のフロントエンド開発事情
 
How to develop a huge Single Page Application
How to develop a huge Single Page ApplicationHow to develop a huge Single Page Application
How to develop a huge Single Page Application
 
普段Reactを触ってる僕が Angularを触ってみた感想を共有する
普段Reactを触ってる僕が Angularを触ってみた感想を共有する普段Reactを触ってる僕が Angularを触ってみた感想を共有する
普段Reactを触ってる僕が Angularを触ってみた感想を共有する
 
Alt01-LT
Alt01-LTAlt01-LT
Alt01-LT
 
Innovation eggcloudnative
Innovation eggcloudnativeInnovation eggcloudnative
Innovation eggcloudnative
 
Our Track to Modern Angular
Our Track to Modern AngularOur Track to Modern Angular
Our Track to Modern Angular
 
2016 02-25-crawler-study-01
2016 02-25-crawler-study-012016 02-25-crawler-study-01
2016 02-25-crawler-study-01
 
AngularJSを浅めに紹介します
AngularJSを浅めに紹介しますAngularJSを浅めに紹介します
AngularJSを浅めに紹介します
 
Rubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerRubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawler
 
20161125 米田 angular_jsを触ってみた
20161125 米田 angular_jsを触ってみた20161125 米田 angular_jsを触ってみた
20161125 米田 angular_jsを触ってみた
 
ngJapan報告会
ngJapan報告会ngJapan報告会
ngJapan報告会
 
ボクたちのWWW Webクリエイターのこれからを考える
ボクたちのWWW Webクリエイターのこれからを考えるボクたちのWWW Webクリエイターのこれからを考える
ボクたちのWWW Webクリエイターのこれからを考える
 
BACKBONE.JSによるWebアプリケーション開発について
BACKBONE.JSによるWebアプリケーション開発についてBACKBONE.JSによるWebアプリケーション開発について
BACKBONE.JSによるWebアプリケーション開発について
 
AngularJS で ハイスピードSI
AngularJS で ハイスピードSIAngularJS で ハイスピードSI
AngularJS で ハイスピードSI
 
angular X designer - デザイナからみたAngularJS #ten1club
angular X designer - デザイナからみたAngularJS #ten1clubangular X designer - デザイナからみたAngularJS #ten1club
angular X designer - デザイナからみたAngularJS #ten1club
 
My cordovaprojectstory
My cordovaprojectstoryMy cordovaprojectstory
My cordovaprojectstory
 
2015 12-19-ruby rails
2015 12-19-ruby rails2015 12-19-ruby rails
2015 12-19-ruby rails
 
JavaScript祭りLTでmonacaを紹介
JavaScript祭りLTでmonacaを紹介JavaScript祭りLTでmonacaを紹介
JavaScript祭りLTでmonacaを紹介
 

STORES.jp x AngularJS