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
エフスタ in Aizu 「やっててよかったこの仕事」と言えるようにやってきたこと
Search
Yasutaka KOUNO
May 17, 2014
Technology
0
180
エフスタ in Aizu 「やっててよかったこの仕事」と言えるようにやってきたこと
2014/05/17に行われた「エフスタ!! in Aizu 〜やっててよかったこの仕事〜」でセッションした際に使用したスライドです。
Yasutaka KOUNO
May 17, 2014
Tweet
Share
More Decks by Yasutaka KOUNO
See All by Yasutaka KOUNO
はじめてのIT勉強会 #1 Readable Code Part 1
ykono
0
660
Readable Code 勉強会 in 仙台 Part 1: 名前を改善する
ykono
0
110
Other Decks in Technology
See All in Technology
カオナビの利用実績をアウトカムへつなげる旅 / example-of-data-management-startup-in-kaonavi
kaonavi
0
120
コンテナセキュリティの基本と脅威への対策
kyohmizu
3
700
入社後初めてのタスクでk8sアップグレードした話.pdf
kkato1
1
380
Google Cloud の AI を支える裏側のインフラを垣間見る!
maroon1st
0
200
HEXA OSINT CTF V3 作戦会議
meow_noisy
0
110
元インフラエンジニアに成る / Human Resources to Human Relations
bobtani
3
810
Tebiki株式会社 エンジニア採用資料
tebiki
0
4.1k
レガシーをぶっ壊せ。AEONで始めるDevRelの話 / Qiita Night 2024-2-22
aeonpeople
3
150
テストプロセスで大事にしていること #jasstnano
makky_tyuyan
0
130
疲弊しない!AWSセキュリティ統制の考え方 #devio_osakaday1
masahirokawahara
6
5.9k
人間の尊厳、幸福、アクセシビリティ / 第116回「WEB TOUCH MEETING」アクセシビリティSP
nulabinc
PRO
2
180
長期間TiDBを使ってきた話 @ 私たちはなぜNewSQLを使うのかTiDB選定5社が語る選定理由と活用LT / Experiences with TiDB Over Time
chibiegg
2
710
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
31
12k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
1
3.4k
How to name files
jennybc
64
92k
The Cost Of JavaScript in 2023
addyosmani
14
3.8k
Reflections from 52 weeks, 52 projects
jeffersonlam
344
19k
Principles of Awesome APIs and How to Build Them.
keavy
120
16k
4 Signs Your Business is Dying
shpigford
175
21k
Producing Creativity
orderedlist
PRO
336
39k
What’s in a name? Adding method to the madness
productmarketing
PRO
15
2.6k
The Pragmatic Product Professional
lauravandoore
24
5.8k
Become a Pro
speakerdeck
PRO
10
4.5k
How GitHub (no longer) Works
holman
304
140k
Transcript
ʮͬͯͯΑ͔ͬͨ͜ͷࣄʯ ͱݴ͑ΔΑ͏ʹ͖ͬͯͨ͜ͱ גࣜձࣾηΧΠωοτ Տ߁ོ
ࣗݾհ • ໊લɿՏ߁ོʢ͜͏ͷ͔ͨ͢ʣ • גࣜձࣾηΧΠωοτ • ओʹGoogle App Engine /
JavaͰͷ ։ൃΛ͍ͯ͠·͢ɻ • Facebook: kouno.yasutaka
ུྺ • ̍̔ࡀ·Ͱౡݝ܊ࢁࢢͰաͯ͝͠·ͨ͠ɻ • ̎̓ࡀ·Ͱ౦ژͰSIܥͷձࣾʹॴଐ • ʙݱࡏ ઋͰىۀ
AGENDA 1. ॳʹൃ֮ͨ͠ةݥͳஹީ 2. νʔϜΛͻͬ͘Γฦ͢ 3. ೲظͰ։ൃ͢ΔͨΊʹ 4. ·ͱΊ
ҙࣄ߲ • ଞͷํϚδϝͳ͓ͷ༷Ͱ͢ͷͰɺ ͢͜͠ࡅ͚ͨײ͡ʹ͠·ͨ͠ɻ • ϑΟΫγϣϯͰ͢ɻ • ͋͑ͯѱ͕ొ͠·͢ɻ • ࣸਅͷਓΠϝʔδͰ͢ɻ
• সͬͯฉ͍͍͚ͯͨͩΕ͍Ͱ͢ɻ
1. ॳʹൃ֮ͨ͠ةݥͳஹީ
̎̌̍̏ ݄̍̌ ϓϩάϥϚͷืू͕དྷΔ
ϓϩδΣΫτʹ͍ͭͯ • ͷࡂൃੜ࣌ʹɺ৬һͷ ҆൱ঢ়گΛใࠂɾ֬ೝ͢ΔͨΊͷαʔϏεͷ࡞ • ϚϧνςφϯτɾWebαʔϏεͱͯ͠ఏڙ͢Δ • ࡂ࣌ͷٸܹͳΞΫηε૿ՃʹରԠ͢ΔͨΊɺ εέʔϧΞτͯ͠ࢄॲཧΛߦ͏ඞཁ͕͋Δ
໘ஊʹߦͬͯΈΑ͏
ϓϩδΣΫτࢀೖ࣌ͷલใ • Java EEʹΑΔWebγεςϜͷ։ൃ • ։ൃϦʔμʔJava EEͷܦݧ͕๛ • Ϋϥελߏͷઃܭɾ͕Ͱ͖Δ •
طଘϝϯόʔJavaͷεΩϧ͕͋Δ • جຊઃܭ΄΅ऴ͍ྃͯ͠Δ • ̎̑ਓ݄ఔͷݟࠐΈ
Α͋͘ΔϓϩδΣΫτΈ͍ͨͩ͠ ແ͍ͩΖ͏
͍͟ɺࢀೖʂ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
͔͠͠ɺૣ͘ॳʹ ൃ֮͢Δਅࣄ࣮ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
ࢀೖޙʹൃ֮ͨ͠ࣄ࣮ɿ̍ جຊઃܭ΄΅ऴ͍ྃͯ͠Δ ← ͕ͣͩͬͨ ࣮࣭ཁ݅ఆٛॻ(5p)ͷΈ
ࢀೖޙʹൃ֮ͨ͠ࣄ࣮ɿ̎ ։ൃϦʔμʔJava EEͷܦݧ͕๛ ← ͕ͣͩͬͨ ҎલʹJavaͰͲΜͳγεςϜ࡞ͬͯͨΜͰ͔͢ʁ ……·͊ɺ͍Ζ͍Ζͱ ϑϨʔϜϫʔΫͱ͔Կͬͯ·ͨ͠ʁ ……ಛʹ Javaॻ͚·͢ʁ
ॻ͍ͨΓ͠ͳ͍͔ͳ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ νʔϜɾϦʔμʔ
ͳΜ͔ո͍͠
ࢀೖޙʹൃ֮ͨ͠ࣄ࣮ɿ̎ طଘϝϯόʔJavaεΩϧ͕͋Δ ← ͕ͣͩͬͨ COBOLҰے̎̌ʂ ΈࠐΈͷCΛ COBOLͱVBΛগ͠ɺJava̍पؒݚम͠·ͨ͠ʂ
εΩϧ͕ͥΜͥΜ Ϛονͯ͠ͳ͍ʂ
ࢀೖޙʹൃ֮ͨ͠ࣄ࣮ɿ̎ શһHTMLJavaͷεΩϧ͕ͳ͍ʂ
ࢀೖޙʹൃ֮ͨ͠ࣄ࣮ɿ̏ ̎̑ਓ݄ఔͷݟࠐΈ ← ͕ͣͩͬͨ ओʹΔ͜ͱ • ϏδωεɾϩδοΫͷઃܭɾ • UIͷσβΠϯɾ࣮ •
ෳͷαʔόʔʹΑΔࢄγεςϜઃܭɾߏங • αʔόʔͷࢮ׆ࢹɾӡ༻ํ๏ͷཱ֬ɾจষԽ • ϝʔϧͷҰ੪৴ɾड৴ • ϚϧνςφϯτରԠ ͜ͷͰΓͯΔͷʁ
ࢀೖޙʹൃ֮ͨ͠ࣄ࣮ɿ̏ ࣮࣭༧ࢉ͔Βٯࢉͨ͠ਓ݄ ̎̑ਓ݄ఔͷݟࠐΈ ← ͕ͣͩͬͨ
ଞʹɺॻ͚ͳ͍͜ͱ͕ଟ…
ͳʹΑΓɺͳͷ ୭ةػײΛ๊͍͍ͯͳ͍͜ͱ
͜ͷঢ়گΛݟͯɺײ͡·ͨ͠
σεϚͷष͍͕͢Δ… ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
σεϚʔνͱ ࣍ͷ͍ͣΕ͔ʹ֘͢Δͷ 1. ༩͑ΒΕͨظ͕ؒɺৗࣝతͳظؒͷҎԼͰ͋Δ 2. ΤϯδχΞ͕௨ৗඞཁͳਓͷҎԼͰ͋Δ 3. ༧ࢉͦͷଞͷϦιʔε͕ඞཁʹରͯ͠Ͱ͋Δ 4. ػೳੑೳͳͲͷཁٻ͕ഒҎ্Ͱ͋Δ
※ Wikipedia͔ΒͷҾ༻
σεϚʔνͱ ฏͨ͘ݴ͑໌Β͔ʹࣦഊͦ͠͏ͳͷʹɺ ܧଓ͍ͯ͠Δʢͤ͟ΔΛಘͳ͍ʣϓϩδΣΫτͷ͜ͱ
ॳʹͯ͠ɺઈ
͔͠͠
ύϯυϥͷശͷఈʹ ͻͱͭͷر͕… ϓɹɹϩɹɹδɹɹΣɹɹΫɹɹτ
ͦΕ
·ͩɺԿ࡞͍ͬͯͳ͍ʂ
ੲɺࣦഊͨ͠σεϚҊ݅ɺ ϓϩδΣΫτظͰରॲͰ͖ͳ͔ͬͨɻ
ࠓճͷϓϩδΣΫτ ࢝·͔ͬͨΓɻ
͜Ε͔Βͷઃܭཧ࣍ୈͰ Ͳ͏ʹ͔Ͱ͖ͳ͍͔ʁ
໘ന͍ʂ
ͬͯΖ͏͡Όͳ͍͔ʂ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
2. νʔϜΛͻͬ͘Γฦ͢
ͱ͍͑ɺࠓͷࣗʹ ൃݴݖ͋·Γͳ͍ɻ
ϓϩδΣΫτମ੍ ←ΠϚίί ϓϩδΣΫτɾϚωʔδϟʔ ϓϩμΫτɾΦʔφʔ ։ൃνʔϜɾϦʔμʔ ։ൃνʔϜɾϝϯόʔ Aࣾ Bࣾ Cࣾ
Ͳ͏ݟͯ֎༷Ͱ͢ɻ ຊʹ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ
ͱɺఘΊͨΒࢼ߹ऴྃͳͷͰ
ϓϩδΣΫτମ੍ ϓϩδΣΫτɾϚωʔδϟʔ ϓϩμΫτɾΦʔφʔ ։ൃνʔϜɾϦʔμʔ ։ൃνʔϜɾϝϯόʔ Aࣾ Bࣾ Cࣾ ←ΠϚίί
Ғ͍ਓͷ৴པΛউͪऔΔ ࡞ઓΛ։࢝
࡞ઓ̍ɿతΛ֬ೝ͢Δ
εςʔΫϗϧμʔ͕ ԿΛؾʹ͍ͯ͠Δ͔֬ೝ͢Δ
AࣾͷϓϩδΣΫτɾϚωʔδϟʔͱ૬ஊ ࠓճͷҊ݅Ͱؾʹͯ͠Δ͜ͱͬͯԿͰ͔͢ʁ ϦϦʔεޙͷӡ༻ͱ͔อकͩͶɻ ͋·Γେ͖ͳମ੍ͱΕͳ͍͔Β ͋ͱɺཧΞδϟΠϧͱ͔ ͬͯΈ͍ͨΜ͚ͩͲɺ ܦݧ͕ͳ͍͔Βߟ͑தͩͶ ͳΔ΄Ͳ Aࣾ ϓϩδΣΫτɾϚωʔδϟʔ
※ ࣸਅͷਓΠϝʔδͰ͢ɻ
BࣾͷϓϩμΫτɾΦʔφʔʹ૬ஊ ࠓճͷҊ݅Ͱؾʹͯ͠Δ͜ͱͬͯԿͰ͔͢ʁ ݄̏ʹϓϨθϯΔ͔Βɺ ͦΕ·ͰʹσϞ͕ग़དྷΔΑ͏ʹͯ͠΄͍͠ ݄̏Ҏ֎ͳʹ͔͋Γ·͢ʁ Bࣾ ϓϩμΫτɾΦʔφʔ ಛʹແ͍ΑɻٯʹϦϦʔε ܾ·ͬͯͳ͍͔Βগ͘͠Β͍ͳΒ ௐͰ͖Δ͔ͳ
※ ࣸਅͷਓΠϝʔδͰ͢ɻ
͜ͷใΛݩʹɺ ఏҊࢿྉͷ࡞Λ։࢝
࡞ઓ̎ɿةػײΛڞ༗͢Δ
ॏཁͳΛ ೝࣝͯ͠Β͏
BࣾͷϓϩμΫτɾΦʔφʔʹ૬ஊ ϝϯόʔͬͯશһJava։ൃཁһͳΜͰ͢ΑͶʁ CࣾͷӦۀ͞Μ͔Βͦ͏આ໌͏͚ͯΔ͚Ͳ ΈΜͳJavaͰ͖ͳ͍Β͍͠Ͱ͢Αʁ Bࣾ ϓϩμΫτɾΦʔφʔ ͑ͬʁ ͪΐͬͱ֬ೝͯ͠Έ·͔͢ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
શһͰJavaίʔσΟϯάن ಡΈ߹ΘͤձΛ࣮ࢪ
વɺϘϩ͕ग़Δ
ͪΐͬͱCࣾӦۀͱ ͯ͘͠Δ… ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
AࣾͷϓϩδΣΫτɾϚωʔδϟʔͱ૬ஊ εέδϡʔϧʹ͍ͭͯɺ֬ೝ͍ͨ͜͠ͱ͕… Ͳ͏ͨ͠ͷʁ աڈͷܦݧ͔ΒΈͯɺεέδϡʔϧʹ ͔ͳΓແཧ͕͋Γͦ͏Ͱ͢ …Θ͔ͬͨɺ֬ೝͯ͠ΈΔ ࠜڌ͚ͩͰ֬ೝͯ͠Β͑·ͤΜ͔ʁ Aࣾ ϓϩδΣΫτɾϚωʔδϟʔ ※
ࣸਅͷਓΠϝʔδͰ͢ɻ
̎࣌ؒޙ
ͳΜͷࠜڌͳ͔ͬͨ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
ͦͯ͠
ϓϩδΣΫτং൫Ͱૣ͘ ۓுঢ়ଶʹʂ
͜ΕͰ࣍ͷ࡞ઓͷ ͕ͬͨʂ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
࡞ઓ̏ɿղܾࡦΛఏҊ͢Δ
ͻͱ͖͠Γڞ༗ͨ͠ ͱ͜ΖͰ
ࠓޙͷํʹ͍ͭͯ ݕ౼͠Α͏ Aࣾ ϓϩδΣΫτɾϚωʔδϟʔ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
ͬͯ·ͨ͠ʂ
ࠓճͷཁٻʹ߹Θͤͯ ఏҊॻΛ༻ҙ͠·ͨ͠ ※ ৄࡉ࣍ষͰઆ໌͠·͢ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
ͦͷ݁Ռ
ͦΕΛϕʔεʹਐΊΑ͏ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
ͦͯ͠ɺମ੍มԽ
ϓϩδΣΫτମ੍ ϓϩδΣΫτɾϚωʔδϟʔ ϓϩμΫτɾΦʔφʔ ։ൃνʔϜɾϦʔμʔ ։ൃνʔϜɾϝϯόʔ Aࣾ Bࣾ Cࣾ
ϓϩδΣΫτମ੍ ϓϩδΣΫτɾϚωʔδϟʔ ϓϩμΫτɾΦʔφʔ ։ൃνʔϜɾϦʔμʔ ։ൃνʔϜɾϝϯόʔ Aࣾ Bࣾ Cࣾ ↑ΠϚίί ΞʔΩςΫτ
ͦͷ࣌ɺࣄ͕݅
ϝϯόʔΛͯ͠ ·͔͞ͷ ग़ࣾڋ൱ Cࣾ νʔϜɾϦʔμʔ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
͔͠͠
͜Ενϟϯεʂ
ΑΖ͚͠Ε ͍͍Ϧʔμʔ հ͠·͢Α ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
ࣗࣾϝϯόʔͷࢀೖʹޭ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
ϓϩδΣΫτମ੍ ↑ΠϚίί ϓϩδΣΫτɾϚωʔδϟʔ ϓϩμΫτɾΦʔφʔ ։ൃνʔϜɾϦʔμʔ ։ൃνʔϜɾϝϯόʔ Aࣾ Bࣾ Cࣾ ΞʔΩςΫτ
New! →
͔͠͠ɺ·ͨࣄ͕݅
։ൃϝϯόʔ શһఫୀͤ͞·͢ʂ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
ͦͷ݁Ռ
ϓϩδΣΫτମ੍ ↑ΠϚίί ϓϩδΣΫτɾϚωʔδϟʔ ϓϩμΫτɾΦʔφʔ ։ൃνʔϜɾϦʔμʔ Aࣾ Bࣾ ։ൃνʔϜɾϝϯόʔ Cࣾ ΞʔΩςΫτ
New! →
ϓϩδΣΫτମ੍ ↑ΠϚίί ϓϩδΣΫτɾϚωʔδϟʔ ϓϩμΫτɾΦʔφʔ ։ൃνʔϜɾϦʔμʔ Aࣾ Bࣾ ΞʔΩςΫτ New! →
……
ͻͬ͘Γฦ͗ͨ͢͠ʁ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
3. ೲظͰ։ൃ͢ΔͨΊʹ
͍લৼΓࣦྱ͠·ͨ͠
͔͜͜Β ΘΓͱϚδϝͳͰ͢
ίϯτϩʔϧݖಘ·͕ͨ͠ɺ ·ͩɺෆ҆ཁૉ͕ࢁੵΈͰ͢
ݱঢ়ͷओͳ՝ 1. ։ൃɾӡ༻ίετΛݮΒͨ͢Ίͷݕ౼ 2. ։ൃϝϯόʔͷௐୡɾڭҭ 3. ݄̏·ͰʹσϞ͕Ͱ͖ΔΑ͏ʹ͢Δ 4. ೲظ͕࣭ͩམͱͨ͘͠ͳ͍
ෆ҆Λղফ͢ΔͨΊʹ ϦεΫΛऔΔ
՝̍ɿ։ൃɾӡ༻ίετΛݮΒ͢
ํࡦ̍ɿPaaS / IaaSΛར༻͢Δ
ॳظஈ֊ͷߏͱ͔ཁٻͱ͔ • αʔόʔͷϗεςΟϯάαʔϏεΛར༻͢Δ • োੑΛߟྀͯ͠Ϋϥελߏʹ͢Δ • αʔόʔͷࢮ׆ࢹ͕ߦ͑Δ ※ ͨͩ͠ɺΠϯϑϥΤϯδχΞ͍·ͤΜɻ
αʔόʔߏͷΠϝʔδ DBαʔόʔ APαʔόʔ ϩʔυόϥϯαʔ ࢮ׆ࢹ
࣌ؒ༧ࢉແ͍ΜͩΑ
͍ͥͬͨແཧʂ
ͳͷͰ
Google App EngineΛ༻͢Δ
Google App Engineͷಛ • উखʹεέʔϧΞτ͢Δ • ࣗಈͰෳσʔλϕʔεɾαʔόʔʹอଘ • ಉ͡ڥ͕͙͢ʹɺ͍ͭ͘Ͱ࡞ΕΔ •
͍͍͢ཧίϯιʔϧ͕͋Δ
ͳʹΑΓɺ͕ࣗͨͪಘҙ
Πϯϑϥͷ͜ͱ Կߟ͑ͳ͍͍ͯ͘
͕ɺ࣮Ͱ͖ͳ͍ػೳ
ͦΕΒAWSΛ༻
AWSΛ༻࣮ͯͨ͠͠ػೳ • ؾி͔ΒใΛड৴͢ΔͨΊͷ FTPαʔόʔػೳ • ܞଳΩϟϦΞϝʔϧͷҰ੪৴
PaaS / IaaS Λ༻ͨ݁͠Ռ • Πϯϑϥͷઃܭɾߏஙίετ͕΄΅̌ʹ • جຊతʹӡ༻ࢹର EC2Πϯελϯε͚̍ͭͩʹ
՝̎ɿ։ൃϝϯόʔͷௐୡ
͍Ζ͍Ζ͋ͬͯফ໊͑ͨ̏ ϝϯόʔΛूΊΔඞཁ͕͋Γ·͢
ํʑʹืूΛͨ݁͠Ռ Javaٕज़ऀ໊̎࠾༻Ͱ͖·ͨ͠
ϝϯόʔڭҭͷ՝ • ϑϨʔϜϫʔΫͱ Google App Engine σʔλϕʔεͷशಘ • HTML /
JavaScriptͷεΩϧෆ
ํࡦ̍ɿ̍पؒϖΞϓϩάϥϛϯά
ͳͥɺ̍िؒͳͷ͔
ϓϩδΣΫτɾϚωʔδϟʔͱͷձ ϖΞϓϩͰͬͯΈΑ͏ͱࢥ͏ͷͰ͕͢… ࡞ۀޮ͕ʹͳΓͦ͏Ͱා͍ͳɻ ظ͍ؒ͠ɺϦεΫͱΕͳ͍Α ͰɺڭҭͷͨΊʹҰि͚ؒͩ Β͍ͤͯͩ͘͞ Aࣾ ϓϩδΣΫτɾϚωʔδϟʔ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
ڭҭϨϏϡʔͷίετͱτϯτϯ ͳͷ͔͠Εͳ͍͚Ͳ…
̍पؒϖΞϓϩάϥϛϯά • ࢀೖޙ̍प͚ؒͩϖΞϓϩ͢Δ • ڭ͑ΔଆɺπʔϧɺϑϨʔϜϫʔΫͷ͍ํ ͳͥ͜ͷΑ͏ʹ࡞Δͷ͔ͳͲͷഎܠ આ໌͠ͳ͕ΒίʔσΟϯά͢Δ • ͦͷਓͷΫηಛΛΔ •
̍पؒͰྃͰ͖ΔετʔϦʔʢػೳʣ※Λબ͢Δ
ͬͯΈͨײ νʔϜʹૣ͘ೃછΉ͜ͱ͕Ͱ͖ͨ υΩϡϝϯτΛಡ·͞ΕΔΑΓཧղ͕ૣͯ͘ਂ͍ ίʔσΟϯάͷํͱ͔ϧʔϧ͕ڞ༗Ͱ͖ͨ ৽ϝϯόʔͷεΩϧϨϕϧ͕͔ͬͨ ̍ػೳΛ௨ͯ͠࡞ͷաఔ͕ݟ͑ͨͷͰɺෆ͕҆ݮͬͨ ৽ϝϯόʔ طଘϝϯόʔ
ͳ͔ͳ͔ධ
ϖΞϓϩάϥϛϯά͕ ೝΊΒΕͳ͍߹ʹޮՌత
ํࡦ̎ɿ࡞ۀൣғͷݶఆ
৽ϝϯόʔ HTML / JavaScript εΩϧ͕ແ͍
ษڧͯ͠Β͏࣌ؒͳ͍ ϖΞϓϩͰ͖ͳ͍
ͿͬͪΌ͚
JavaScriptΛଟਓͰ ͍͡Γͨ͘ͳ͍
ͳͷͰ
JavaͰϏδωεϩδοΫ͚ͩ ࡞ͬͯΒ͏͜ͱʹ
UIͱϏδωεϩδοΫͷ UI : HTML / JavaScript Logic: Java JSON-RPC ϏδωεϩδοΫͷݺग़
↑ ϝιουΛݺͿ͚ͩ ϏδωεϩδοΫͷఏڙ ↑ ϝιουΛ࡞Δ͚ͩ
ૄ݁߹ʹ͢Δ͜ͱͰ ࡞ۀΛγϯϓϧʹ
ϩάΠϯใҎ֎ εςʔτϨεͳʢঢ়ଶΛ࣋ͨͳ͍ʣ ػೳͱͯ͠ఏڙ͢Δɻ POINT
՝̏ɿ݄̏·Ͱʹ σϞ͕Ͱ͖ΔΑ͏ʹ͢Δ
ϓϩμΫτɾΦʔφʔͷཁٻ ݄̏ʹϢʔβʔ͕ ࣮ࡍʹૢ࡞͢ΔσϞΛߦ͏ ϓϩμΫτɾΦʔφʔ ϦεέෆՄ σϞͰ༻͢Δػೳʹ όά͕ͳ͍͜ͱ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
࣮ࡍͷϦϦʔε༧ఆ݄̑ͳͷͰ ݄̏։ൃͷத൫ͱͳΔ
ΥʔλʔϑΥʔϧܕͩͱ ΄΅࣮֬ʹͰ͖ͳ͍ʂ
ϓϩδΣΫτɾϚωʔδϟʔ͕ લʹݴͬͯͨ͜ͱ ཧΞδϟΠϧͱ͔ ͬͯΈ͍ͨΜ͚ͩͲɺ ܦݧ͕ͳ͍͔Βߟ͑தͩͶ ϓϩδΣΫτɾϚωʔδϟʔ ※ ࣸਅͷਓΠϝʔδͰ͢ɻ
ΞδϟΠϧ։ൃͰߦ͜͏ʂ
Scrumʁ XPʁ
……
ܦݧऀ͕Ұਓ͍ͳ͍ʂ
……ࣦഊͦ͠͏ɻ
ͳͷͰɺ
ϓϥΫςΟεΛҰ෦͚ͩద༻
։ൃΠςϨʔγϣϯ ʢ̍िؒʙ̎िؒͷظؒʣ • • '( • • •
!1-87 • PG/.,0 • ! • *.58+47/3 &(#"( • • 26+.) • $%
ద༻ϓϥΫςΟε No fjY`W] $1 1 3*[og ?I2,V0:7%X`lo\inH" CS]bokoV(CS8 2
" '"rs +H7PFE@I7PS@I75V !CS8 3 OR=<R X`lo\inL K7X`lo\inKCSOR=<RV0;8 4 `]b/ JUnit-V)B7`]bL/ V0;8 5 DONE ]bokoP^]YM KBG:J?TNI2JAJ:8 p&#>9SM7DL^]YM.UFG:J:q 6 X`lo\inah X`lo\inL K7BEfmZjgLahV0:7" 6=QLeWocd_YVS 7 rt4 &#BJ:8
͜Ε͚ͩ
େͳͷࠞཚ͠ͳ͍͜ͱ • ࠓɺԿΛ͖͔͢໌֬ʹ͢Δ • ࠓɺग़དྷΔ࡞ۀྔΛ໌֬ʹ͢Δ • ࠓɺͲ͜·Ͱग़དྷ͍ͯΔ͔໌֬ʹ͢Δ • ࠓɺରॲ͖͕͋͢Δ͔໌֬ʹ͢Δ
՝̐ɿೲظ͕ͩ ࣭མͱͨ͘͠ͳ͍
࣭ΛอͭͨΊʹ • ςετͷࣗಈԽ͢Δ • ϝϯςφϯεͰ͖ΔίʔυΛॻ͘
ํࡦ̍: Spockͷಋೖ
JUnit ॻ͘ͷεΰ͘μϧ͍
͕͜͜ΠϠͩΑJUnit • ࣮ίʔυҎ্ʹɺಡΈ͍͢ίʔυΛ ॻ͘ͷ͕େมɻϝϯςͮ͠Β͍ɻ • ύλʔϯςετσʔλ४උͷ ڽͬͨςετΛॻ͘ͷ͕େมɻ • ७ਮʹهड़ྔ͕ଟ͗͢Δɻ
த൫μϨͯ͘ΔͱJUnitΛ ॻ͔ͳ͍ɾखൈ͖͢Δਓ͕ଓग़
ͦ͜Ͱ
SpockΛಋೖʂ
Spockͱ • JavaɾGroovyΞϓϦέʔγϣϯ͚ͷ ςετɾ༷ϑϨʔϜϫʔΫ • ඒ͘͠දݱྗͷߴ͍༷هड़ݴޠ • JUnitͱͯ͠ಈ࡞͢Δɻ طଘͷJUnitͷػೳશͯ͑Δɻ
SpockʹΑΔςετίʔυ class Math extends Specification { def “̎ͭͷ͔Βɺେ͖͍ΛऔಘͰ͖Δ͜ͱ" { expect:
Math.max(a, b) == c ! where: a | b | c 1 | 3 | 3 0 | 0 | 0 7 | 4 | 4 } } ݅ϛε ʢc7͕ਖ਼ղʣ
SpockʹΑΔΤϥʔ௨ ̎ͭͷ͔Βɺେ͖͍ΛऔಘͰ͖Δ͜ͱ FAILED ! Condition not satisfied: ! Math.max(a, b)
== c | | | | 7 4 | 4 false
Groovyͷशಘʹؔͯ͠ • Javaͷίʔυ͕΄΅ͦͷ··ಈͨ͘Ίɺ ͱΓ͋͑ͣɺ͙͢͏͜ͱ͕Ͱ͖ͨ • ͳΕͯ͘ΔͱɺGroovyΒ͍͠ίʔυ͕ ॻ͚ΔΑ͏ʹͳΓɺίʔυྔ͕গͳ͘ ݟ͍͢ςετ͕ॻ͚ΔΑ͏ʹͳͬͨ
ຊʹ͢Β͍͠ͷͰ ͥͻ࣮ફͯ͠Έ͍ͯͩ͘͞
ํࡦ̎: Ϧʔμϒϧίʔυಡॻձ
͠Β͘։ൃ͍ͯͯ͠ ൃ֮ͨ͠
ίʔυϨϏϡʔͷ Ռ͕ग़ͳ͍
ਖ਼͘͠ಈ͚͘ͲɺಡΈͮΒ͍ɺ มͳઃܭͷίʔυ͕૿͍͑ͯ͘
͜ͷ··ͩͱ ϝϯςͰ͖ͳ͘ͳͬͯ͠·͏
ͳͷͰ
None
ಡॻձͷํ • ຖɺఆ࣌ޙʹ̍ষͣͭʢҰ࣌ؒఔʣ • ࣋ͪճΓͰ୲ऀΛܾΊͯɺղઆͯ͠Β͏ • ಡΜͩষʹ͍ͭͯɺσΟεΧογϣϯ͢Δ
ಡॻձͷޮՌ • ֤ϝϯόʔ͕ࣗͰಡΈ͍͢ίʔυΛ ߟ͑ΔΑ͏ʹͳͬͨ • ϨϏϡʔͷࢦఠͷҙਤࠜڌ͕ ΘΓ͘͢ͳͬͨ • ֶशҙཉͷ্
4. ·ͱΊ
ͦͷޙ͍Ζ͍Ζͳ͕ ൃੜ͠·͕ͨ͠
ۀτϥϒϧͳ͘ ແࣄɺ݄̑ʹϦϦʔε Ͱ͖ͦ͏Ͱ͢ɻ
͍Ζ͍Ζ͝հ͠·͕ͨ͠
ͬͯͯΑ͔ͬͨ ͱݴ͏ͨΊʹ
ੵۃతʹಈ͘͜ͱʂ
ׂʹറΒΕΔඞཁແ͍
ੵۃతʹಈ͘ͱ ͔Γ૿͑ΔͷͰʁ
μϝͩͱΘ͔ͬͯͯ ์ஔ͢Δ΄͏͕ແ
Ͱɺ͕Μͬͨͬͯ څྉมΘΒͳ͍Α
ࣄͷใु ͓͚ۚͩ͡Όͳ͍
ͦΕ
৴པ
࣍ͷࣄ
ѱ͍ࣄɺ৴པΛ࣭ʹͯ͠ ͓ۚΛआΓ͍ͯΔΑ͏ͳͷ
Ͱɺࣦഊͨ͠ΒͲ͏͢Δͷʁ
ࣦഊͨͬͯ͠ 100%μϝʹͳΔ༁͡Όͳ͍
࣮ࡍͷͱ͜Ζ 100%ͷޭࣦഊͳ͍
େࣄͳͷ࿈ഊ͠ͳ͍͜ͱ
ϓϩδΣΫτͷվળʹ େᭊΛৼΔ͏ඞཁͳ͍
࠷ॳ͔ΒᘳΛࢦ͢ͱ େɺࣦഊ͢Δ
·ͣɺখ͞ͳ৴པΛ ಘΔͱ͜Ζ͔Β࢝ΊΑ͏
͝ਗ਼ௌɺ͋Γ͕ͱ͏͍͟͝·ͨ͠
ࣸਅૉࡐʹ͍ͭͯ ͜ͷࢿྉɺͺͨͦ͘(http://pakutaso.comʣͷࣸਅૉࡐΛҰ෦ར ༻͍ͯ͠·͢ɻ͜ͷࣸਅΛܧଓͯ͠ར༻͢Δ߹ɺͺͨͦ͘ ެࣜαΠτ͔Βࣗ͝Ͱμϯϩʔυ͍͔ͯͨͩ͘͠ɺͺͨ͘ ͦͷ͝ར༻ن(http://pakutaso.comʣʹಉҙ͍ͯͨͩ͘͠ඞཁ͕ ͋Γ·͢ɻಉҙ͠ͳ͍߹ࣸਅͷ͝ར༻Ͱ͖·ͤΜͷͰ͝ ҙ͍ͩ͘͞ɻ