Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TypeScriptでKnockoutを書いてみた
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
shmurakami
May 21, 2014
Programming
1.3k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TypeScriptでKnockoutを書いてみた
http://connpass.com/event/6237/
の資料
shmurakami
May 21, 2014
More Decks by shmurakami
See All by shmurakami
レガシーなPHPの限界とレガシーからの脱却 / phpcon2019
shmurakami
2
3.9k
サーバーサイドから見るChatworkの現状と未来 / Now and future of Chatwork from server side perspective
shmurakami
3
1.4k
php grpc-client in phpcon2018
shmurakami
0
1.8k
lumen e2e test
shmurakami
0
1.2k
decoded_php.pdf
shmurakami
3
820
良心的にまじめに開発するための心構え
shmurakami
0
210
社内勉強会資料 PHPプロジェクトでのJavaScript
shmurakami
0
720
社内勉強会資料 JavaScriptの基本 その1
shmurakami
5
1.9k
Other Decks in Programming
See All in Programming
Loosening the Reins: Go Generics Get More Flexible
kuro_kurorrr
0
350
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
310
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
160
プロポーザルを書いてもらう
pvcresin
0
590
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
670
仕様駆動開発の消費期限
watany
20
9.1k
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.3k
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
460
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
200
源内ハンズオン概要編
hideg
0
220
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
110
Flow は今どうなっているか
mizdra
PRO
0
760
Featured
See All Featured
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
310
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.3k
Leo the Paperboy
mayatellez
8
2.2k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
RailsConf 2023
tenderlove
30
1.5k
The Invisible Side of Design
smashingmag
301
52k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
57k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
370
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
240
WENDY [Excerpt]
tessaabrams
12
39k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
560
Transcript
TypeScriptͰ KnockoutΛͬͯΈͨ
自己紹介 ଜ্ढ़հ ࣾͰ։ൃڥͷߏஙΛ ͬͯ͘ΕΔਓͬͯݴΘΕͯ·͢ TL@NSLN TINVSBLBNJ
宣伝タイム
モニプラ for Facebook
ギフト
Allied Architects Engineer Blog
Allied Architects Engineer Blog Knockout.jsೖ http://tech.aainc.co.jp/archives/5346 Knockout.jsೖ ͦͷ2 http://tech.aainc.co.jp/archives/6743
宣伝タイムおわり
TypeScript + Knockoutで 作っています
ギフト ཁٻ༷ 'BDFCPPLͷ༑ୡҰཡΛද ࣔ͢Δ ༑ୡΛબͯ͠ϝοηʔδ Λೖྗ͢Δ ೖྗͨ͠ϝοηʔδΛ༑ୡ ʹૹΔ શͯΛϖʔδͰߦ͏
ギフト ཁٻ༷ 'BDFCPPLͷ༑ୡҰཡΛද ࣔ͢Δ ༑ୡΛબͯ͠ϝοηʔδ Λೖྗ͢Δ ೖྗͨ͠ϝοηʔδΛ༑ୡ ʹૹΔ શͯΛϖʔδͰߦ͏
ギフト ཁٻ༷ 'BDFCPPLͷ༑ୡҰཡΛද ࣔ͢Δ ༑ୡΛબͯ͠ϝοηʔδ Λೖྗ͢Δ ೖྗͨ͠ϝοηʔδΛ༑ୡ ʹૹΔ શͯΛϖʔδͰߦ͏
ギフト ཁٻ༷ 'BDFCPPLͷ༑ୡҰཡΛද ࣔ͢Δ ༑ୡΛબͯ͠ϝοηʔδ Λೖྗ͢Δ ೖྗͨ͠ϝοηʔδΛ༑ୡ ʹૹΔ શͯΛϖʔδͰߦ͏
ギフト ཁٻ༷ 'BDFCPPLͷ༑ୡҰཡΛද ࣔ͢Δ ༑ୡΛબͯ͠ϝοηʔδ Λೖྗ͢Δ ೖྗͨ͠ϝοηʔδΛ༑ୡ ʹૹΔ શͯΛϖʔδͰߦ͏
ギフト +BWB4DSJQUͰෳࡶͳ͜ͱΛ͢ΔͨΊͷڥ͕ ͋·Γඋ͞Ε͍ͯͳ͍
ギフト ͖উखͬͯจ۟ΛݴΘΕͳ͍
ギフト ҎԼͷߏʹ͠·ͨ͠ 5ZQF4DSJQU ,OPDLPVU +BTNJOF HSVOU DPODBUͱNJOJGZ͘Β͍
TypeScript
TypeScript .JDSP4PGU͕։ൃ͍ͯ͠ΔBMU+4 +BWB4DSJQUͷεʔύʔηοτ ʹ͕ϦϦʔε͞Ε·ͨ͠ ࠷৽7FSTJPO ಋೖ࣌Ͱͨ͠
TypeScript ಛ ίϯύΠϧͯ͠+4Λੜ͢Δ ੜ͞ΕΔ+4͕៉ྷͰՄಡੑ͕ߴ͍ ੩తܕ͚Ͱهड़ DMBTTϕʔεͰॻ͚Δ &4ͷ༷Λଟ͘औΓೖΕ͍ͯΔ 4PVSDF.BQରԠ
TypeScript ಛ ίϯύΠϧͯ͠+4Λੜ͢Δ ੜ͞ΕΔ+4͕៉ྷͰՄಡੑ͕ߴ͍ ੩తܕ͚Ͱهड़ DMBTTϕʔεͰॻ͚Δ &4ͷ༷Λଟ͘औΓೖΕ͍ͯΔ 4PVSDF.BQରԠ
TypeScript class Greeter { name: string; constructor(name: string) { this.name
= name; } greet(): string { return "Hello, " + this.name; } }
JavaScriptだとこうなる var Greeter = (function(){ function Greeter(name) { this.name =
name; }; Greeter.prototype.greet = function() { return “Hello, ” + this.name }; return Greeter; })();
TypeScript DMBTTϕʔε DMBTT&DNB4DSJQUͰಋೖ༧ఆ ܕਪ͕͋Γ੩తܕݴޠ ಈతܕݴޠ͕ۤखͳਓ΄Ͳخ͍͠ͷͰ +BWBɺ$Ϣʔβͷํ͕ೃછΈͦ͢͏
TypeScript ੩తܕݴޠ ܕʹΑΔόάʹؾ͖͍ͮ͢ ϦϑΝΫλ͕͍͢͠
TypeScript 4PVSDF.BQରԠͳͷͰ5ZQF4DSJQUͷ·· ϒϥβͰσόοάͰ͖Δ 4PVSDF.BQ 5ZQF4DSJQU4BTTͷΑ͏ʹ+4$44Λੜ ͢ΔݴޠͱมલͷίʔυͱͷରԠؔ Λද͢ϑΝΠϧ
TypeScript {"version": 3,"file":"ts_ko.js","sourceRoot":"","sources": ["ts_ko.ts"],"names": ["Sample","Sample.ViewModel","Sample.ViewModel.c onstructor","Sample.ViewModel.arraySortByValue"] ,"mappings":"AAAA,uDAAuD;;AAOvD,IAAO,MAAM;AAoEZ, CApED,UAAO,MAAM;IArD,EAAE,CAAC,aAAa,CAAC,MAAM,CA AC;AAC5B,CAAC,CAAC,CAAC,CAAC"} 4PVSDF.BQͷத͜Μͳײ͡
None
None
TypeScriptの採用理由 ίϯύΠϥ͕͋Δ ࣌+BWB4DSJQUʹ͍ͭͯશ͘ৄ͘͠ͳ ͔ͬͨͷ࣮͋ͬͯߦલʹΤϥʔΛࣔͯ͠ ͘ΕΔͱخ͔ͬͨ͠ ͰͪΐͬͱίϯύΠϧ͕͍
TypeScriptの採用理由 class Hoge { num: number; constructor() { this.num =
“string!!!”; } }
TypeScriptの採用理由 ៉ྷͳ+4͕ੜ͞ΕΔ ԿΒ͔ͷཧ༝Ͱ5ZQF4DSJQU͕͑ͳ͘ͳ ͬͯܧଓͯ͠ϝϯς͕͍͢͠
TypeScriptの採用理由 var Greeter = (function(){ function Greeter(name) { this.name =
name; }; Greeter.prototype.greet = function() { return “Hello, ” + this.name }; return Greeter; })();
TypeScript ಋೖϝϦοτ ૉͷ+BWB4DSJQUΑΓॻ͖͘͢։ൃޮ ্͕ ίϯύΠϥʹΤϥʔݕͯ͠Β࣮ͬͯߦ ͯ֬͠ೝ͢Δख͕ؒݮͬͨ
TypeScript ಋೖϝϦοτ ៉ྷͳ+BWB4DSJQU͕ੜ͞Εͯ 5ZQF4DSJQU͕͑ͳ͘ͳͬͯϝϯς͠ ͍͢ͷͰউखʹಋೖͰ͖Δ +4ͷهड़ํ๏ʹ׳Ε͍ͯͳͯ͘औͬ ͖қ͍ +4Λ֮͑ͳ͍͍ͯ͘Θ͚͡Όͳ͍
TypeScript ಋೖϝϦοτ 5ZQF4DSJQU͔Βੜ͞ΕΔ+BWB4DSJQUΛ ࢀߟʹͯ͠ྑ͍+BWB4DSJQUͷॻ͖ํͷํ ͕͔ͬͨ
TypeScript ಋೖσϝϦοτ 5ZQF4DSJQUࣗମͷมߋͷӨڹ͕େ͖͍ ్தͰܥʹΞοϓσʔτ͞Εͯվम ͕େมͰͨ͠ ܥʹͳͬͨͷͰ͜ͷ৺͋·Γແ͍ ։ൃڥͷҧ͍ͰࠔΔ ίϯύΠϧڥͷҧ͍ͰΤϥʔʹͳͬͨ Γɺͦͦ։ൃڥ͕ແ͍ਓ͕͍Δ
TypeScript ࢀߟϦϯΫ ຊՈ IUUQXXXUZQFTDSJQUMBOHPSH ΫΠοΫΨΠυ ߋ৽ࢭ·ͬͯΔʁ IUUQQIZ[LJUOFUUZQFTDSJQU 5ZQF4DSJQUϦϑΝϨϯε
TypeScriptリファレンス TypeScript 1.0ରԠ TypeScript͚ͩͰͳ͘ JavaScriptʹ͍ͭͯղઆ ͞Ε͍ͯΔ͔ͳΓΦεε ϝͳ1 ஶऀ: Θ͔Ί·͞ͻΖ ͞Μ
Knockout
フレームワークの選定 ओͳϑϨʔϜϫʔΫ "OHVMBS+4 #BDLCPOFKT ,OPDLPVU
フレームワークの選定 #BDLCPOFKT େن͚ͳΠϝʔδ σʔλόΠϯυ͕ͮ͠Β͍ ݸਓతʹॻ͖ํ͕ۤख
"OHVMBS+4 ,OPDLPVUͷॲཧ͕͍ܰ ͱࢥ͍ͬͯͨ ಋೖ࣌ʹ"OHVMBSͷॲཧεϚϗͰ ॏ͍ͱ͍͏ӟ͕͋ͬͨ ϑΝΠϧαΠζ͕େ͖͍ ଟػೳͰࠓճͷཁ݅ʹΦʔόʔεϖοΫ フレームワークの選定
Knockout ϑϩϯτΤϯυ+BWB4DSJQUϑϨʔϜϫʔΫ .77.ϞσϧΛ࠾༻ͯ͠ํόΠϯυΛ ࣮ݱ͢Δ .PEFM 7JFX 7JFX.PEFM Α͘"OHVMBS+4#BDLCPOFKTͱൺֱ͞Ε Δ͕ਓؾ͍ҹ
MVVM .PEFM +4ͷσʔλߏ 7JFX )5.- 7JFX.PEFM 7JFXͱ.PEFMΛ૬ޓʹόΠϯυͯ͠ͷ มߋૢ࡞Λࢹɾө͢Δ
MVVM View View Model Model )5.- +BWB4DSJQU 0CKFDUT ૢ࡞ Λߋ৽
ॲཧ )5.-Λ ߋ৽
Knockout ಛ "OHVMBS #BDLCPOFʹൺͯଞͷϥΠϒ ϥϦͷґଘ͕ແܰ͘ྔ ϧʔςΟϯάWBMJEBUFͳͲͷػೳແ͍ ͋Δఔຊޠʹ༁͞ΕͨυΩϡϝϯτ ͋Δ ެࣜαΠτ͚ͩͰେମͷ͍ํ͕ѲͰ ͖Δ
Knockoutの採用理由 ํόΠϯυ͕ศར ෆཁͳػೳ͕গͳ͍ ϖʔδʹͷΈಋೖ͢ΔͷͰɺϧʔςΟϯ άػೳෆཁͳͲ ֶशίετ͕ൺֱత͍
Knockoutの採用理由 ϑΝΠϧαΠζ͕খ͍͞ αΠτͷߏ্ɺK2VFSZ͕ඞਢͩͬͨͷ ͰϑϨʔϜϫʔΫ͍ܰͷ͕ྑ͔ͬͨ
Knockout ,OPDLPVUͷαϯϓϧ ಈ͘ͷ͕ϒϩάʹ্͕͍ͬͯ·͢ IUUQUFDIBBJODDPKQBSDIJWFT ͕ɺόά͕͋Γ·ͨ͠PS[
var ViewModel = function() { this.taroPoint = ko.observable(60); this.jiroPoint =
ko.observable(50); this.hanakoPoint = ko.observable(40); var data = [ {name: 'ଠ', value: this.taroPoint}, {name: 'ೋ', value: this.jiroPoint}, {name: 'Ֆࢠ', value: this.hanakoPoint} ]; var self = this; this.sortList = ko.computed(function() { return arraySortByValue(data); }, self, {name: true}); };
<table> <thead> <tr> <th>໊લ</th> <th>ಘ</th> </tr> </thead> <tbody data-bind="foreach: sortList">
<tr> <td data-bind="text: name"></td> <td data-bind="text: value"></td> </tr> </tbody> </table>
Knockout ಋೖϝϦοτ ํόΠϯυͰշద هड़͕؆୯Ͱཧղͯ͠Β͍͍͢ αϙʔτϒϥβ͕͍ *&͔Βαϙʔτ͍ͯ͠Δͦ͏Ͱ͢
Knockout ಋೖσϝϦοτ ଟগֶशίετ͕͔͔Δ 0CTFSWFSͷΈΛ͔ͭΉ·Ͱ͕࣌ؒ ͔͔ͬͨ )5.-ʹEBUBCJOE͕ҲΕΔ K2VFSZͷJE DMBTTΑΓϚγͰ͢Ͷ
Knockout ࢀߟϦϯΫ ,OPDLPVUKTDPOUFYUEFCVHHFS $ISPNFͷ&YUFOTJPO ͘͢͝ศརͦ͏ʂ ,OPDLPVUΦϑΟγϟϧ IUUQLOPDLPVUKTDPN ,OPDLPVUຊޠυΩϡϝϯτ IUUQLPKTTVLPCVUPDPN
,OPDLPVUKTDPOUFYUEFCVHHFS
TypeScript + Knockout ͜ͷϒϩάͷαϯϓϧιʔεΛ5ZQF4DSJQU Ͱॻ͍ͯΈͨ
interface dataType { name: string; value: KnockoutObservable<number>;} class ViewModel {
taroPoint: KnockoutObservable<string>; jiroPoint: KnockoutObservable<string>; hanakoPoint: KnockoutObservable<string>; sortList: KnockoutComputed<dataType>; constructor() { this.taroPoint = ko.observable(“60“); this.jiroPoint = ko.observable(“50“); this.hanakoPoint = ko.observable(“40“); var data: Array<dataType> = [/*লུ*/]; var self = this; this.sortList = ko.computed((): dataType => { return self.arraySortByValue(data); }, self, {deferEvaluation: true}); } }
TypeScript + Knockout ,OPDLPVU0CTFSWBCMF5 ,OPDLPVU$PNQVUFE5Ͱࢹ͢Δ ͷܕ͕ೖΓ·͢ ͦͷลΓ͕ཧղͰ͖Ε݁ߏॻ͖͍͢ͷ Ͱͳ͍͔ͳʁͱࢥ͍·͢
grunt 5ZQF4DSJQUͷϑΝΠϧΛDMBTT͝ͱʹ͚ͨ ͍ɻ +BWB4DSJQUͷϑΝΠϧ͕ෳͰ͖Δ API ViewModel Util
grunt ϑΝΠϧͷ࿈݁ ࿈݁ͨ͠ϑΝΠϧͷNJOJGZ
grunt UTDI
grunt HSVOUͰ࿈݁͢Δඞཁ͕ແ͔ͬͨʋ ʔʆ ϊ
grunt Ϗϧυ*%&ʹͤͬͺͳ͠Ͱ͕ͨ͠ HSVOUUZQFTDSJQUͳͲΛ͏ͱϏϧυΦϓγϣϯ ͕ڞ༗Ͱ͖ͨΓͱศརͦ͏Ͱ͢Ͷ IUUQTXXXOQNKTPSHQBDLBHFHSVOUUZQFTDSJQU
altJS ૉͷ+BWB4DSJQUΛॻࣗ͘৴͕ແ͍ਓBMU+4 ʹཔΔͱྑ͍ 5ZQF4DSJQU៉ྷͳ+BWB4DSJQUΛੜͯ͠ ͘Ε·͢ɻDMBTTϕʔεͷॻ͖ํ͕͔Δਓ ͳΒ+BWB4DSJQUͷॻ͖ํΛֶͼ͍ͨऔֻͬ ͔ΓʹΦεεϝ
フレームワーク +4͔ͳΓࣗ༝ͳهड़͕ՄೳͰϧʔϧΛઃ ͚ͳ͍ͱഁ͍͢͠ ͋ΔఔͷنʹͳΔ߹ϑϨʔϜϫʔ ΫͷಋೖΛݕ౼ͨ͠ํ͕ྑ͍ "OHVMBS+4#BDLCPOF 7VFKTͳͲͳͲ ϓϩδΣΫτʹ߹ͬͨͷΛ͍·͠ΐ͏