Soumettre la recherche
Mettre en ligne
RESTful開発フロントエンド編(SPA・AltJS・フレームワーク)
•
8 j'aime
•
4,285 vues
K Tsukada
Suivre
社内向けにフロントエンドの説明を行いました。SPAを軸にAltJs・MVC系フレームワーク、導入で気をつける点などをまとめています。
Lire moins
Lire la suite
Logiciels
Affichage du diaporama
Signaler
Partager
Affichage du diaporama
Signaler
Partager
1 sur 45
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
What's new! TwentyThirteen + WordPress3.6
What's new! TwentyThirteen + WordPress3.6
Takashi Uemura
これからのpre_get_postsの話をしよう
これからのpre_get_postsの話をしよう
Hishikawa Takuro
WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法
regret raym
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
Takashi Uemura
はじめてのCouch db
はじめてのCouch db
Eiji Kuroda
脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_Query
Hidekazu Ishikawa
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
Yohei Sasaki
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
Kazuki Nakajima
Recommandé
What's new! TwentyThirteen + WordPress3.6
What's new! TwentyThirteen + WordPress3.6
Takashi Uemura
これからのpre_get_postsの話をしよう
これからのpre_get_postsの話をしよう
Hishikawa Takuro
WordPressで投稿記事情報の取得方法
WordPressで投稿記事情報の取得方法
regret raym
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
Takashi Uemura
はじめてのCouch db
はじめてのCouch db
Eiji Kuroda
脱コピペ!デザイナーにもわかるPHPとWP_Query
脱コピペ!デザイナーにもわかるPHPとWP_Query
Hidekazu Ishikawa
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
Yohei Sasaki
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
Kazuki Nakajima
XPagesで検索してみよう
XPagesで検索してみよう
Masahiko Miyo
XPagesでRESTを使ってみたら、こんなんだった
XPagesでRESTを使ってみたら、こんなんだった
Masahiko Miyo
Rails SQL Injection Examplesの紹介
Rails SQL Injection Examplesの紹介
Hiroshi Tokumaru
Ruka 20191212
Ruka 20191212
RukaMenda
XPagesDay 2015 RESTの総復習
XPagesDay 2015 RESTの総復習
Masahiko Miyo
Rの初歩: 5. 入出力
Rの初歩: 5. 入出力
Teiko Suzuki
Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用
stomita
AppExchangeパートナー&デベロッパー第2部:20070523版
AppExchangeパートナー&デベロッパー第2部:20070523版
Junichiro Tasaki
2012 11 29 groonga 勉強会 発表資料
2012 11 29 groonga 勉強会 発表資料
Yoshiyuki ONISHI
ブログの枠を超える?ためのWordPressカスタマイズ入門
ブログの枠を超える?ためのWordPressカスタマイズ入門
muracchi
文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?
Hiroshi Tokumaru
WordPressプラグイン作成入門
WordPressプラグイン作成入門
Yuji Nojima
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017
Shigeru Hanada
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
Shinsuke Sugaya
【18-C-4】Google App Engine - 無限の彼方へ
【18-C-4】Google App Engine - 無限の彼方へ
Developers Summit
アジャイルマネジメントとは?
アジャイルマネジメントとは?
Kiro Harada
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
Atsuo Yamasaki
初めての REST - Representational State Transfer
初めての REST - Representational State Transfer
Tatsumi Naganuma
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
ウェブから情報をあつめる
ウェブから情報をあつめる
Shuhei Iitsuka
Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)
VOYAGE GROUP
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習
x1 ichi
Contenu connexe
Tendances
XPagesで検索してみよう
XPagesで検索してみよう
Masahiko Miyo
XPagesでRESTを使ってみたら、こんなんだった
XPagesでRESTを使ってみたら、こんなんだった
Masahiko Miyo
Rails SQL Injection Examplesの紹介
Rails SQL Injection Examplesの紹介
Hiroshi Tokumaru
Ruka 20191212
Ruka 20191212
RukaMenda
XPagesDay 2015 RESTの総復習
XPagesDay 2015 RESTの総復習
Masahiko Miyo
Rの初歩: 5. 入出力
Rの初歩: 5. 入出力
Teiko Suzuki
Tendances
(6)
XPagesで検索してみよう
XPagesで検索してみよう
XPagesでRESTを使ってみたら、こんなんだった
XPagesでRESTを使ってみたら、こんなんだった
Rails SQL Injection Examplesの紹介
Rails SQL Injection Examplesの紹介
Ruka 20191212
Ruka 20191212
XPagesDay 2015 RESTの総復習
XPagesDay 2015 RESTの総復習
Rの初歩: 5. 入出力
Rの初歩: 5. 入出力
Similaire à RESTful開発フロントエンド編(SPA・AltJS・フレームワーク)
Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用
stomita
AppExchangeパートナー&デベロッパー第2部:20070523版
AppExchangeパートナー&デベロッパー第2部:20070523版
Junichiro Tasaki
2012 11 29 groonga 勉強会 発表資料
2012 11 29 groonga 勉強会 発表資料
Yoshiyuki ONISHI
ブログの枠を超える?ためのWordPressカスタマイズ入門
ブログの枠を超える?ためのWordPressカスタマイズ入門
muracchi
文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?
Hiroshi Tokumaru
WordPressプラグイン作成入門
WordPressプラグイン作成入門
Yuji Nojima
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017
Shigeru Hanada
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
Shinsuke Sugaya
【18-C-4】Google App Engine - 無限の彼方へ
【18-C-4】Google App Engine - 無限の彼方へ
Developers Summit
アジャイルマネジメントとは?
アジャイルマネジメントとは?
Kiro Harada
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
Atsuo Yamasaki
初めての REST - Representational State Transfer
初めての REST - Representational State Transfer
Tatsumi Naganuma
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
ウェブから情報をあつめる
ウェブから情報をあつめる
Shuhei Iitsuka
Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)
VOYAGE GROUP
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習
x1 ichi
Webで役立つRDBの使い方
Webで役立つRDBの使い方
Soudai Sone
実動するIot&hadoopから学ぶ会_資料
実動するIot&hadoopから学ぶ会_資料
FwardNetwork
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術
Koichi Fujikawa
Shizuokapy4_データヴィジュアライズのための簡単なWeb API開発まめ知識
Shizuokapy4_データヴィジュアライズのための簡単なWeb API開発まめ知識
Nao Oec
Similaire à RESTful開発フロントエンド編(SPA・AltJS・フレームワーク)
(20)
Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用
AppExchangeパートナー&デベロッパー第2部:20070523版
AppExchangeパートナー&デベロッパー第2部:20070523版
2012 11 29 groonga 勉強会 発表資料
2012 11 29 groonga 勉強会 発表資料
ブログの枠を超える?ためのWordPressカスタマイズ入門
ブログの枠を超える?ためのWordPressカスタマイズ入門
文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?
WordPressプラグイン作成入門
WordPressプラグイン作成入門
PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
【18-C-4】Google App Engine - 無限の彼方へ
【18-C-4】Google App Engine - 無限の彼方へ
アジャイルマネジメントとは?
アジャイルマネジメントとは?
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
初めての REST - Representational State Transfer
初めての REST - Representational State Transfer
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
ウェブから情報をあつめる
ウェブから情報をあつめる
Phpではじめるオブジェクト指向(公開用)
Phpではじめるオブジェクト指向(公開用)
広告配信現場で使うSpark機械学習
広告配信現場で使うSpark機械学習
Webで役立つRDBの使い方
Webで役立つRDBの使い方
実動するIot&hadoopから学ぶ会_資料
実動するIot&hadoopから学ぶ会_資料
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術
Shizuokapy4_データヴィジュアライズのための簡単なWeb API開発まめ知識
Shizuokapy4_データヴィジュアライズのための簡単なWeb API開発まめ知識
RESTful開発フロントエンド編(SPA・AltJS・フレームワーク)
1.
RESTful開発 (フロントエンド編)
2.
スライド総数は45ページぐらい 今回は座学です。
3.
これから話すことは当分続く、 今の時代のトレンドについてです。 話を聞きながら、どう取り組むか、難しそうだからスルーするか、 何を勉強しないといけないか、仕事にどうつなげるか、 など各自色々考えながら聞いてください。質問も随時受け付けます。 最後に数名に感想を聞きたいと思います。
4.
おさらい
5.
● RESTは規約 ● RESTfulはRESTの規約にしたがって実装しているシステム → WebAPIの実装方式で流行ってるもの
6.
RESTとは 実際に、RESTで設計したAPIはどの様になるの? 例)会社リソースに対するAPI メソッド URL 役割 GET
/companies 会社リソース全体(一覧)の取得 GET /companies/1 会社IDが1のリソースを取得 POST /companies 会社リソースの新規作成 PUT /companies/1 会社IDが1のリソースを更新 DELETE /companies/1 会社IDが1のリソースを削除
7.
モバイルファースト時代の構成 今回はここ バックエンド フロントエンド
8.
ここでRESTfulなAPIを要求
9.
1画面ごとに1HTML上で動作するアプリケーションは SPASinglePageApplication と呼ばれてます
10.
SPAで特に大事な技術って? Javascript
11.
Javascriptは みなさんどのぐらい使えますか?
12.
SPAをjQueryで書く
13.
通信について // 会社一覧の取得 $.ajax({ url: '/companies',
// URLに id は指定しない type: 'GET', // 取得のため GET を指定 dataType: 'JSON', data: null, // 検索条件があれば data に格納 success: function(data){ var companies = []; $.each(data, function(){ companies.push( new Company( this ) ); }); callback(companies); }, error: function(data){ // 例外処理 } }); // 会社の取得 var id = 1; $.ajax({ url: '/companies/' + id.toString(), // URLに id を指定 type: 'GET', // 取得のため GET を指定 dataType: 'JSON', success: function(data){ var company = new Company( data ) ; callback(company); }, error: function(data){ // 例外処理 } });
14.
通信について // 会社の追加 var companyData
= company.requestData(); $.ajax({ url: '/companies', // URLに id は指定しない type: 'POST', // 追加のため POST を指定 dataType: 'JSON', data: companyData, // 会社情報 success: function(data){ // 新規の場合は新しくインスタンスを生成 var company = new Company( data ) ; callback(company); }, error: function(data){ // 例外処理 ( バリデーションエラーなどが返ってくる ) } }); // 会社の更新 var id = company.id; var companyData = company.requestData(); $.ajax({ url: '/companies/' + id.toString(), // URLに id を指定 type: 'PUT', // 更新のため PUT を指定 dataType: 'JSON', data: companyData, // 会社情報 success: function(data){ // 更新成功 callback(true); }, error: function(data){ // 例外処理 ( バリデーションエラーなどが返ってくる ) } });
15.
通信について // 会社の削除 var company
= companies[0] var id = company.id; $.ajax({ url: '/companies/' + id.toString(), // URLに id を指定 type: 'DELETE', // 削除のため DELETE を指定 dataType: 'JSON', success: function(data){ var temp_companies = []; $.each(companies, function(){ if( this.id != id) temp_companies.push(this); }); companies = tmp_companies; // 削除したインスタンスは除く }, error: function(data){ /* 例外処理 */ } });
16.
コード紹介 $("#companies tbody tr").remove(); $.each(companies,
function(){ var tr = $("<tr>"); tr.append($("<td>").addClass('id text-center').html(this.id)); tr.append($("<td>").html(this.name)); tr.append($("<td>").html('〒' + this.postal_code + '<br/>' + this.address)); tr.append($("<td>").html(this.mail)); tr.append($("<td>").html('電話:' + this.tel + '<br/>FAX:' + this.fax )); tr.append($("<td>").addClass("text-center").append( $("<a>").addClass('edit btn btn-primary').attr('href', 'javascript: void(0)').text('編集') ).append( $("<a>").addClass('destroy btn btn-danger').attr('href', 'javascript: void(0)').text('削除') ) ); $("#companies tbody").append(tr); }); ◆jQueryで要素を書き換える
17.
コード紹介 // 新規ボタン click $('body').delegate('.new',
'click', function(){ dialog_open(new Company()); }); // 編集ボタン click $('body').delegate('.edit', 'click', function(){ // ボタンが押された要素のIDを取得する var id = $('td.id', $(this).closest("tr")).text(); var company = get_company(id); dialog_open(company); }); ◆クリックイベント
18.
コード紹介 // クラス宣言 window.Company =
function(attrs){ // 属性 this.id = attrs.id; this.name = attrs.name; // 以下 省略 }; // インスタンスメソッド window.Company.prototype = { save: function(callback){ // 保存 // 処理内容 省略 }, destroy: function(callback){ // 削除 // 処理内容 省略 } } ◆Javascriptでモデルを作って みる
19.
コード紹介 // 存在確認 if( this.id
=== null || typeof this.id === 'undefined' ){ // this.idがない場合の処理 }else{ // this.idがある場合の処理 } // 変数と文字列を結合する var url = '/companies/' + this.id.toString() ◆その他
20.
なんか。。。 大変じゃない?
21.
JavaScriptが苦手 ソースコードがぐちゃぐちゃになりそう リッチな表現が難しそう 大変だと思うこと → AltJS → MVC系フレームワーク → テンプレート系フレームワーク
22.
AltJS
23.
CoffeeScript → Rubyっぽく書ける。Classも使える。 Script# → C#っぽく書ける。でも更新されてない。 TypeScript
→ JavaScriptを拡張して使いやすく。 Scala.js → Javaの拡張言語の位置づけであるScalaっぽく書ける。 Dart → Google製。Classも書ける。 これらはコンパイルするとjavascriptに変換されて配布される AltJS → javascriptの代替言語 でもJavaScriptの方が人口は多い。 BPさんが来た時に学習コストが必要。
24.
基本フレームワーク
25.
基本フレームワーク 無数に乱立している! 色々なフレームワーク AngularJS React.js Knockout.js Backbone.js vue.js Ember.js Ractive.js Aurelia.js ・ ・ ・ フレームワークごとに特有の機能 MVC/MVVMモデル HTML/JavaScriptのバインディング HTMLテンプレート URLルーティング RESTful API呼び出し カスタムタグ(ディレクティブ) DI(Dependency Injection,
依存性の注入)
26.
5大フレームワーク(2016年) AngularJs ・・・Google製。MVC全般をサポート。めちゃめちゃ流行ってる。 ReactJs ・・・Facebook製。MVCのViewだけを担当。めちゃめちゃ流行ってる。 KnockoutJs ・・・Microsoft製。MVCのViewだけを担当。 ※うちはコレつかってます BackbornJs ・・・大規模向けMVCフレームワーク。 vue.js ・・・MVCのViewだけを担当。
27.
どれを使えばいいの? わかりません!!
28.
どれを選定するかはチームやオーナーが考える 学習コスト 流行り フレームワーク の寿命 カバー範囲 メンバーの スキル 案件状況
29.
ちなみにうちではこうしてます
30.
採用した構成 バックエンド Ruby + Ruby on Rails → DB周りやビジネスロジックをRESTAPIで提供。あと各画面の初回HTMLも提供。 フロントエンド ♦AltJS CoffeeScript → RubyっぽくJavaScriptを書ける。Class定義も使用可。アプリ実行時にJSに変換される。
Rubyを書ける人がメンバーに多く、学習コストが低かったので採用。 ♦基本フレームワーク KnockoutJs → Microsoft製。MVCのView部分を担うフレームワーク。 CoffeeScriptで書いたClassの属性とHTMLのタグ内容を双方向で更新できる。 View周りにjQueryを使うのが大変だったので、比較的、学習コストが低いので思い切って採用。
31.
コード紹介 # クラス宣言 class Models.Company constructor:
(item) -> ko.mapping.fromJS item, {}, @ # インスタンスメソッド saveRequest: (callback) => # 保存 # 処理内容 省略 deleteRequest: (callback) => # 削除 # 処理内容 省略 ◆Javascriptでモデルを作って みる
32.
コード紹介 class Models.Company constructor: (item)
-> ko.mapping.fromJS item, {}, @ class Models.CompanyList constructor: -> @items = ko.observableArray() @search = =># 取得 # 処理内容 省略 class ViewModels.Companies_Index constructor: -> @companyList = ko.observableArray() @companyListModel = new Models.CompanyList @companyListModel.items.subscribe (items) => newList = items.map (item, index) -> new Models.Company item @companyList newList ◆画面にバインド <tbody data-bind="foreach: companyList"> <tr> <td><div data-bind="text: id"></div></td> <td><div data-bind="text: name"></div></td> <td> <div data-bind="text: postal_code"></div> <div data-bind="text: address"></div> </td> ・ ・ ・
33.
コード紹介 show: (obj) => obj.showRequest
@callbackDone delete: (obj) => confirm '削除してもよろしいですか?' .ok => obj.deleteRequest @callbackDeleteDone newCreate: => (new Models.Company). newRequest @callbackDone ◆クリックイベント ・ ・ ・ <td> <button data-bind="click: $parent.show"> 編集 </button> <button data-bind="click: $parent.delete"> 削除 </button> </td> </tr> </tbody> <button data-bind="click: newCreate"> 新規 </button>
34.
コード紹介 # 存在確認 if @id? #
@idがある場合の処理 else # @idがない場合の処理 // 変数と文字列を結合する url = '/companies/#{ @id }' ◆その他
35.
導入効果 バックエンド Ruby + Ruby on Rails → ビジネスロジックやAPIに集中できた。 インターフェース(JSON)だけを意識すればよくなった。 フロントエンド ♦AltJS CoffeeScript → 記述ミスが大きく減った。 余計なデバッグ時間の短縮。 クラスや継承が使いやすくなり、ソースコード量も減った。 ♦基本フレームワーク KnockoutJs → DOMを操作するjQueryが完全にいらなくなった。AJAX通信の箇所だけjQuery。 HTMLとJavascriptが完全に切り離されたのでデザイン変更や仕様変更に強くなった。 HTMLとModelの役割が明確化したので、修正箇所がわかりやすくなった。ソースもみやすい。 でも最初はハマりました。。。
36.
Web系エンジニア
37.
今までのWebエンジニア C#/VB .NET FW HTML CSS Javascript Ruby RoR HTML CSS Javascript JAVA Spring OtherFW HTML CSS Javascript
38.
これから C#/VB .NET FW HTML CSS Javascript Ruby ROR HTML CSS Javascript HTML CSS Javascript Other FW Java AndroidFW Other
FW Swift ObjectiveC CocoaTouch Other FW JAVA Spring OtherFW HTML CSS Javascript バックエンド フロントエンド やることが増える!
39.
分業も考えないと厳しい! ※求人、案件募集などでも既にこうなっている バックエンドエンジニア → ビジネスロジックAPIに専念 フロントエンジニア
→ PCのUI実装に専念 モバイルエンジニア → アプリのUI実装に専念 デザイナー → PC,アプリのUI・UXに専念 フルスタックエンジニア → 全てやれる人(理想)
40.
まとめ
41.
・RESTfulにすればクロスプラットフォームに対応できる ・SPAは単一HTML上で動く画面構成 ・SPAでインタラクティブなアプリが作れる ・SPAはJavascriptが大事 ・jQueryだけだと煩雑になるので、フレームワークなどを活用 Javascriptを簡単に書けるAltJS JavascriptでMVCなどを書けるフレームワーク ・コスト、効果などを考えてチームやオーナーが導入の検討を するのがよい ・エンジニアに求められる技術が増えてきた → 分業も
42.
ユーザーがインタラクティブなものを求めている、 スマホ対応やアプリ化も当たり前の時代になった。 最近のWebサービスはこれらで作られている。 数年もしないうちにこれらの技術で我々にも受託依頼が増えるはず。 ※実際にフロントエンド側の依頼はある(モバイルアプリ、SPA) やるかどうかは状況次第。 やるなら、一度に導入は難しいので、部分的に取り組んでいくのがベスト。 やらなくても、知識として持っておくと良いかと。 一つのフレームワークは中長期的に使えるかはわからない。 ただ、SPAの考えやエッセンスを学ぶことはとても良いことだと考える。 最後に
43.
質問があればどうぞ!
44.
なければ 感想を聞かせて ください!
45.
ご静聴ありがとうございました。
Télécharger maintenant