AngularでAmebaコミュニティサービス開発

Preview:

DESCRIPTION

AngularJS と Ameba コミュニティサービス フロントエンド開発の相性の良さについて

Citation preview

Angularで

Amebaコミュニティサービス開発

アメーバ事業本部

フロントエンドディベロッパー 五藤 佑典

自己紹介@ygoto3_

ygoto3.com

フロントエンドディベロッパー @

http://simplog.jp/

ぜひお使いください!

Amebaコミュニティサービス 開発の特徴

フロントは比較的少人数(2、3人)で開発フロント専任じゃない人も開発

SP版とPC版を平行運用・開発している

サービス横断で似たUIを実装することが多い

AngularとAmebaコミュニティサービスは 相性が良いんです

AngularとAmebaコミュニティサービスの 相性の良さ

フロントエンドの複数人開発に効く

SP版とPC版の平行運用・開発に効く

横軸展開に効く

フロントエンドの複数人開発に効きます

フロントエンド4人体制

マークアップ得意

マークアップ得意

サーバサイド得意self

小さなコンポーネントを たくさん作ってモジュール量産

infinite scroll

lazyload

google analytics

button- follow

modal

<si-button-follow></si-button-follow>

<img si-lazyload=“tn.img” />

<ul ng-repeat=“item in list” si-infinite-scroll=“addItem()”> <li>{{item.name}}</li> </ul>

<a href=“photo.img” si-modal> <img lazyload=“photo.img” /> </a>

マークアップの感覚で がしがし実装

1ストーリーに対して分業しやすい

テンプレート作成

共通コンポーネント作成

コントローラーで繋げる平行開発しやすい

フロントの開発手順を共有しやすい

1. ここは Controller で~~作る

2. この処理は Service で~~作る

3. この処理は Filter を作る

4. ここの処理は~~という Directive と組み合わせる

Angular特有の概念も多いが、それゆえに共通言語が増え、 実装手順の示し方が明確になる。

SP版とPC版の 平行運用・開発に効きます

PC版開発からジョイン

Angular導入

PC版リリース後はSP版と平行運用

PC版に入ってるあのモジュールを

SP版に入れましょう!

すぐリリースしましょう!

Producer

SP版とPC版で同じモジュールを実装

UIデザインが違うだけでロジックはほぼ同じ

photo by Melissa Ann Barrett

JS

DOMを直接いじらない利点を活かしてJSは1ソース

PC tmpl SP tmpl

(テンプレートだけ別々)

Browserifyで必要なモジュールだけ各々require

SPとPCでコントローラー部分に多少の差異が出ることがあるが、基礎コントローラーを作って各々angular.extend()してやるとコードの差異は最小限

横軸展開に効きます

Angularと横軸展開AnuglarJS人気なおかげでAngularを使う新規サービスが増えてきた

Amebaサービス横断で同じようなUIを実装をすることも多い

今まで同様の実装を各々のサービスで実装してきた

AngularJS Working Group 活動中

• Ameba でよくあるパターンの共有モジュール化

• 勉強会したり、欲しい機能を列挙して、開発中

• 誰かが実装した機能をモジュールとして共有しやすい場に

余談

途中から導入しても怖くない

ラッキーだった点SP版はほぼjQueryだけで開発していたので、とてもピュア

マルチページアプリケーション

サーバサイドのAPIの設計がイケてた

とはいえ、既存のサービスにAngular入れるのはそこそこ大変。。

jQueryとは併用する

jQueryに慣れた開発者はjqLiteだけだとじわりと辛い

jqLiteではなくjQueryを使う

jQueryとは併用する

既存のコードをできる限り再利用

ディレクティブでラップしておいてあげれば綺麗にAngularに組み込める

jQueryで書かれた既存処理をディレクティブでラップする

jQueryとは併用する

カスタムディレクティブなどを組み込むときにコンパイルされないので

jQueryでDOMを生成している箇所を$compileする処理に置き換える

既存処理とAngularの連携

新規モジュール用のスコープを直接取る

ルートスコープを取得してブロードキャストする

ng-appを設定する要素を無闇に変えない

既存処理との連携も少なくない

photo by LeonArts.at