soyText -
ϓϩάϥϜͱσʔλΛҰॹʹಉظͯ͠
Ͳ͜Ͱಈ͘
Web
ΞϓϦέʔγϣϯϑϨʔϜϫʔΫ
৻
†ຊൃදͰɼWeb ΞϓϦέʔγϣϯϑϨʔϜϫʔΫ soyText ΛఏҊ͢ΔɽWeb ΞϓϦέʔγϣ ϯɼωοτϫʔΫʹଓ͍ͯ͠ͳ͍ͱ͖ɼWeb αʔόʹো͕͋ͬͨͱ͖ʹར༻Ͱ͖ͳ͘ͳΔɼ ͱ͍͏͕͋Δɽͦ͜ͰɼsoyText Ͱɼෳͷαʔόɼ͋Δ͍ϩʔΧϧͳڥͰ·ͬͨ͘ಉ ͡ڥΛՔಇͤ͞ΒΕΔΈΛ࣮ݱͨ͠ɽsoyText ɼϑϨʔϜϫʔΫ্Ͱಈ͘ϓϩάϥϜ͓Αͼ ͦΕΒͷϓϩάϥϜ͕ར༻͢ΔσʔλΛɼ୯ҰͷΈࠐΈσʔλϕʔε্ʹҰॹʹอଘ͍ͯ͠Δɽͦ ΕΒͷϓϩάϥϜ͓ΑͼσʔλΛଞͷίϯϐϡʔλ্ʹ͋Δ soyText ͷγεςϜͱಉظ͢Δ͜ͱʹ Αͬͯɼෳͷίϯϐϡʔλ্Ͱ·ͬͨ͘ಉ͡ڥΛ࠶ݱ͢Δ͜ͱ͕Ͱ͖Δɽ
soyText - The Web application framework, runs on
everywhere by synchronizing both programs and data
Cho Shinya
†This presentation proposes ”soyText”, Web application frame work. Web applications are not available when network is disconnected or servers failed. soyText solves this problem by copying server environment into client computers. Each system of soyText has single em-bedded database that contains all program and data needed to run the application. Two or more systems of soyText can easily ”sync” their database to work with the same environment between servers and clients.
1. ͡ Ί ʹ
චऀɼ͜Ε·ͰWebϒϥβ্Ͱಈ͘ϓϩάϥ
ϛϯάڥʢWeb-bases IDEɼҎԼWBIͱݺͿ)Λ ࡞ͬͯतۀͰ׆༻͖ͯͨ͠ɽ WBIͷརͱͯ͠ɼ࣍ͷΑ͏ͳ͜ͱ͕͋͛ΒΕΔɽ • ֶशऀʹΑΔڥͷηοτΞοϓ͕ෆཁͰɼେਓ ͷतۀʹ͓͚Δαϙʔτͷܰݮ͕Ͱ͖Δ • ֶशऀؒͷϓϩάϥϜͷڞ༗͕༰қͰ͋Δɼଞͷ ਓͷ࡞ΛݟͨΓධՁͨ͠Γ͢Δ͜ͱʹΑͬͯϞ νϕʔγϣϯΛ͋͛Δ͜ͱ͕Ͱ͖Δ • ֶशڥͷෆ۩߹όʔδϣϯΞοϓΛWebϒ ϥβΛ௨ͯ͡ಈతʹߦ͏͜ͱ͕Ͱ͖Δ ͜Ε·ͰʹɼPHPͷ։ൃڥ1)(ਤ1)JavaScript
ͱWeb APIΛ༻͍ͨ։ൃڥ2)(ਤ2)ͳͲΛWBI
Ͱ࡞Γɼ࣮ࡍͷतۀʹ༻͍͖ͯͨɽ ຊൃදͰɼ͜ΕΒͷ࣮शڥʹదͨ͠WebϑϨʔ ϜϫʔΫΛఏҊ͢Δɽ † ໌େֶ Meisei University ਤ1 PHP ͷ WBI Fig. 1 WBI in PHP
2. WBI ͷཁ݅
͜͜Ͱɼ͜Ε·ͰͷWBIͷ։ൃΛ௨ͯ͡ಘΒΕ ͨɼγεςϜ͕͖ͭཁ݅Λ·ͱΊΔɽਤ2 JavaScript ʴ Web API ʹΑΔ WBI Fig. 2 WBI in JavaScript and Web API
2.1 ༷ʑͳछྨͷݴޠͰॻ͔ΕͨϓϩάϥϜΛ҆ શʹಈ͔͢ WBIͰɼֶशऀ͕ॻ͍ͨϓϩάϥϜ͕Webαʔ όͳͲʹෆ۩߹Λى͜͢ՄೳੑΛഉআ͢Δඞཁ͕͋Δɽ ਤ1ͷPHPͷ࣮शڥͰɼֶशऀͷॻ͍ͨϓϩ άϥϜΛPHPͷΠϯλϓϦλΛͬͯͦͷ··ಈ࡞ ͍ͤͯͨ͞͠ͷͰɼWebαʔόͷॏཁͳϑΝΠϧΛ ಡΈॻ͖͞ΕΔՄೳੑɼ֎෦ͷωοτϫʔΫʹ· ͘͠ͳ͍ΞΫηεΛ͞ΕΔڪΕ͕͋ͬͨɽ Ұํɼਤ2ͷJavaScriptͷ࣮शڥɼֶशऀ͕ ॻ͍ͨͯ͢ͷϓϩάϥϜΛͯ͢ϒϥβͰಈ͔͠ ͨͷͰɼWebαʔόʹෆ۩߹Λ༩͑Δ͜ͱͳ ͔͕ͬͨɼαʔόαΠυͷϓϩάϥϛϯά͕Ͱ͖ͳ͘ ͳͬͨͨΊɼेͳԋश͕Ͱ͖ͳ͔ͬͨɽ ͜ΕΒͷ͜ͱ͔ΒɼαʔόαΠυͰ҆શͳϓϩάϥ ϜΛ࣮ߦ͢Δ͜ͱ͕ඞཁͰ͋Γɼ·ͨɼֶश͢Δ༰ ʹΑͬͯଟ͘ͷݴޠʹରԠͤ͞Δඞཁ͋Δͱ͍͑Δɽ 2.2 োʹΑΔఀࢭΛ͙ WBIʹΑΔ࣮शڥɼ௨ৗɼڭࣨ֎ͷWebαʔ όʹઃஔ͢Δ͜ͱ͕ଟ͍ɽ͜ͷͱ͖ɼαʔόͷো ωοτϫʔΫͷੇஅ͕͋Δͱڭ͔ࣨΒ࣮शڥ͕͑ ͳ͘ͳͬͯ͠·͏ɽ ී௨ͷ࣮शʹ͓͍ͯɼ࣮शʹ༻͍ΔॲཧܥͳͲ ڭࣨͷϩʔΧϧͳʹΠϯετʔϧ͞Ε͍ͯΔͷ Ͱɼສ͕ҰωοτϫʔΫ͕ΕͯɼϓϩάϥϜΛ࣮ ߦ͢Δ͕͜Ͱ͖Δɽ͔͠͠ɼWBIͰ࣮शͦͷͷ ΛWebͰߦͳ͍ͬͯΔͷͰɼωοτϫʔΫ͕Εͨ Β࣮श͕Ͱ͖ͳ͘ͳΔɽ͜ͷͨΊωοτϫʔΫαʔ όͷোக໋తͱͳΔɽ͜ͷͨΊɼωοτϫʔΫ͕ ͭͳ͕͍ͬͯͳ࣮ͯ͘श͕ଓ͚ΒΕΔڥ͕ඞཁʹ ͳΔɽ 2.3 ֶश݁ՌΛ౷߹తʹཧ͢Δ तۀͷਐߦதतۀऴྃޙʹɼֶ֤शऀͷֶश݁Ռ ʢֶशऀ͕࡞ͬͨϓϩάϥϜɼϨϙʔτʣͷղੳΛ ͢Δ߹͕͋ΔɽֶशऀʹΑͬͯɼෳͷWBIΛ ༻͍͍ͯΔ߹͋ΔͷͰɼֶश݁ՌΛԣஅతʹղੳ ͢Δʹͯ͢ͷWBIͷσʔλ͕౷߹తʹཧͰ͖ Δඞཁ͕͋Δɽ
3. soyText ͷಛ
લઅͰࣔͨ͠ཁ݅Λղܾ͢ΔͨΊɼWebϑϨʔϜ ϫʔΫsoyTextΛ։ൃͨ͠ɽsoyText࣍ͷΑ͏ͳಛ Λͭɽ • αϯυϘοΫεڥͰͷεΫϦϓτݴޠͷڥΛ ఏڙ͢Δ soyTextͷγεςϜʹɼ֤छεΫϦϓτݴޠͷ εΫϦϓτΤϯδϯΛࡌ͠ɼֶशऀ͕ॻ͍ͨϓ ϩάϥϜͯ͢εΫϦϓτΤϯδϯΛ௨࣮ͯ͡ ߦͤ͞Δɽ͜ΕʹΑΓɼֶੜ͕ෆ༻ҙʹॻ͍ͨة ݥͳಈ࡞Λ੍ͤ͞ΔΑ͏ʹ͢Δɽ·ͨɼଟͷ ݴޠʹରԠ͢Δ͜ͱʹΑͬͯɼ୯ҰͷγεςϜͰ ༷ʑͳतۀͷWBIΛ࡞Ͱ͖ΔͨΊɼֶश݁Ռ ͷ౷߹ཧ͕༰қʹͳΔɽ • αʔόͰಈ͍͍ͯΔڥΛͦͷ··μϯϩʔυ ͯ͠ɼ֤ϢʔβͷखݩͷPCͰWebαʔόͱ ͯ͠ಈ࡞͢Δ ωοτϫʔΫͷͳ͍ڥͰֶश͢Δ߹ɼωο τϫʔΫɾαʔό͕ࢭ·͍ͬͯΔঢ়ଶʹ͓͍ͯɼ ༧Ίखݩʹμϯϩʔυ͓͍ͯͨ͠αʔόͷڥ Λμϯϩʔυ͓ͯ͘͜͠ͱͰɼखݩͷPCͰ ಉ͡Α͏ʹֶश͕Ͱ͖Δɽ·ͨɼμϯϩʔυ͠ ͨڥɼಛผͳΠϯετʔϧઃఆͷ࡞ۀͳ͠ ʹ؆୯ʹىಈͰ͖ΔΑ͏ʹ͓ͯ͘͠ɽ • खݩͷPCͷϓϩάϥϜɾσʔλͱαʔόͷϓϩ άϥϜɾσʔλͷಉظ͕Ͱ͖Δ લ߲ͷΑ͏ʹɼखݩͷڥͰֶशΛߦͬͨ߹ɼ ͋ͱͰαʔόͱଓͰ͖Δঢ়ଶʹͳͬͨͱ͖ʹɼ खݩͷڥͱαʔόͷڥΛಉظͤ͞ɼ ֶश݁Ռ Λαʔόʹөͤ͞Δ͜ͱ͕Ͱ͖Δɽ·ͨɼαʔ όͷϓϩάϥϜσʔλʹมߋ͕͋ͬͨ߹ɼ खݩͷڥʹͦͷϓϩάϥϜσʔλΛөͤ͞ Δ͜ͱͰ͖Δɽ soyTextͷར༻ܗଶͷྫΛਤ3ʹࣔ͢ɽ • ௨ৗ࣌ʢਤ3ͷࠨଆʣɼωοτϫʔΫ্ͷαʔ όʹΠϯετʔϧ͞Ε͍ͯΔsoyTextͷγεςϜ ʢҎԼɼγεςϜʣ͚͕ͩՔಇ͓ͯ͠ΓɼϢʔβ ɼݸਓ͕ͭPC͔ΒWebϒϥβΛ௨ͯ͡䝸䝰䞊䝖䛾䝃䞊䝞 䝻䞊䜹䝹䛾PC soyText 䝅䝇䝔䝮 Web䝃䞊䝞 䝇䜽䝸䝥䝖䜶䞁䝆䞁 䝕䞊䝍䝧䞊䝇 䝥䝻䜾䝷䝮 (Javascript➼䠅 䝕䞊䝍 Web䝤䝷䜴䝄 䝻䞊䜹䝹䛾PC Web䝤䝷䜴䝄
䠄㏻ᖖ䠅
䝥䝻䜾䝷䝮䠇䝕䞊䝍䛾 䝞䝑䜽䜰䝑䝥 䝥䝻䜾䝷䝮䠇䝕䞊䝍䛾 䝞䝑䜽䜰䝑䝥 䝎䜴䞁䝻䞊䝗 䝎䜴䞁䝻䞊䝗 䝸䝰䞊䝖䛾䝃䞊䝞 䝻䞊䜹䝹䛾PC soyText 䝅䝇䝔䝮 Web䝃䞊䝞 䝇䜽䝸䝥䝖䜶䞁䝆䞁 䝕䞊䝍䝧䞊䝇 䝥䝻䜾䝷䝮 (Javascript➼䠅 䝕䞊䝍 soyText 䝅䝇䝔䝮 Web䝃䞊䝞 䝇䜽䝸䝥䝖䜶䞁䝆䞁 䝕䞊䝍䝧䞊䝇 Web䝤䝷䜴䝄 䝻䞊䜹䝹䛾PC soyText 䝅䝇䝔䝮 Web䝃䞊䝞 䝇䜽䝸䝥䝖䜶䞁䝆䞁 䝕䞊䝍䝧䞊䝇 Web䝤䝷䜴䝄 ྠᮇ 䠄ᪧᚋ) ྠᮇ 䠄ᪧᚋ)䠄㞀ᐖ䠅
㉳ື ㉳ື ਤ3 soyText ͷར༻ܗଶ Fig. 3 Assumed usage in soyTextγεςϜʹΞΫηε͢Δɽ • ఆظతʹʢຖճͷतۀͷऴΘΓͳͲʣʹɼγες Ϝ͔ΒϓϩάϥϜ͓ΑͼσʔλΛμϯϩʔυ͞ ͤɼ֤ࣗͷϩʔΧϧͳPCʹόοΫΞοϓͤͯ͞ ͓͘ɽ • ສ͕ҰɼωοτϫʔΫαʔόͷো͕͋ͬͨ ߹ʢਤ3ͷӈଆʣɼखݩʹόοΫΞοϓ͓ͯ͠ ͍ͨγεςϜΛϩʔΧϧͷPCͰىಈ͠ɼWebϒ ϥβ͔ΒlocalhostʹΞΫηε͢Δ͜ͱͰɼγ εςϜͷར༻Λܧଓ͢Δ͜ͱ͕Ͱ͖Δɽ • ো͕෮چͨ͠ޙɼαʔόʹ͋ΔϓϩάϥϜ͓Α ͼσʔλͱಉظΛ͢Δ͜ͱʹΑͬͯɼαʔόʹ োதʹมߋͨ͠σʔλΛөͤ͞Δ͜ͱ͕Ͱ ͖Δɽ 䝸䝰䞊䝖䛾䝃䞊䝞 Ꮫ⩦⪅D䛾 Ꮫ⩦ෆᐜ ᤵᴗA
䛾WBI 䛾WBIᤵᴗB ᤵᴗC䛾WBI Ꮫ⩦⪅E䛾 Ꮫ⩦ෆᐜ Ꮫ⩦⪅F䛾 Ꮫ⩦ෆᐜ Ꮫ⩦⪅D䛾PC Ꮫ⩦⪅E䛾PC Ꮫ⩦⪅F䛾PC Ꮫ⩦⪅D䛾 Ꮫ⩦ෆᐜ ᤵᴗA 䛾WBI Ꮫ⩦⪅E䛾 Ꮫ⩦ෆᐜ ᤵᴗA 䛾WBI ᤵᴗC
䛾WBI ᤵᴗB䛾WBI ᤵᴗC䛾WBI Ꮫ⩦⪅F䛾 Ꮫ⩦ෆᐜ ྠᮇ ྠᮇ ྠᮇ ਤ4 तۀʹ͓͚Δ soyText ͷσʔλஔྫ Fig. 4 Data deployment of soyText in classrooms.
͜ͷΑ͏ͳܗଶʹ͢Δ͜ͱʹΑͬͯɼWebΞϓϦ έʔγϣϯͱͯ͠ͷखܰ͞ʢWebϒϥβ͔ΒΞΫ ηεͰ͖ΔʣΛଛͳ͏͜ͱͳ͘ɼωοτϫʔΫ͕ෆ௨ ͷঢ়ଶͰ࠷ݶͷ࡞ۀ͕Ͱ͖ΔΑ͏ʹͳΔɽ ͳ͓ɼWebαʔόʹΠϯετʔϧ͞ΕͨγεςϜ ʹɼͯ͢ͷतۀͰ༻͍ΔWBIͷϓϩάϥϜ͓Α ͼͯ͢ͷֶशऀͷֶश݁ՌΛ֨ೲ͓͕ͯ͘͠ɼ֤ݸ ਓͷPCʹμϯϩʔυ͞ΕΔσʔλɼਤ4Ͱࣔ͠ ͍ͯΔΑ͏ʹɼ֤ϢʔβͷखݩͷPCʹɼ֤͕ࣗඞ ཁͱ͢ΔϓϩάϥϜ͓Αͼσʔλ͚ͩʹݶఆ͢Δ͜ͱ ͕Ͱ͖Δɽ͜ΕʹΑΓɼݸਓͷϗʔϜσΟϨΫτϦͷ Α͏ͳɼ༰ྔʹ੍ݶͷ͋ΔڥͰ࠷ݶͷ༰ྔͰಈ ͔͢͜ͱ͕Ͱ͖Δɽ
4. ࣮
4.1 ࣮ͷํ લઅͰड़ͨΑ͏ʹɼsoyTextֶ֤शऀͷखݩͷ ڥͰಈ࡞͢ΔΑ͏ͳܗଶʹͳ͍ͬͯΔɽֶशऀͷ खݩͷڥɼڭࣨͷPCͳͲɼΠϯετʔϧʹ ੍ݶͷ͋ΔڥͰ͋Δ߹͕ଟ͘ɼεΫϦϓτͷॲཧ ܥɼWebαʔόɼσʔλϕʔεͷγεςϜΛҰࣜΠ ϯετʔϧ͢ΔͷେมͰ͋ΔͨΊɼ࣍ͷΑ͏ͳํ Ͱ࣮Λߦͬͨɽ • JavaΛ༻͍࣮ͯ͢Δ Javaɼଟ͘ͷϓϥοτϑΥʔϜͰಈ͔͢͜ͱ ͕Ͱ͖ΔɽΞϓϦέʔγϣϯ࣮ߦՄೳͳjarܗ ࣜʹ·ͱΊͯͰ͖ΔͨΊىಈ͕؆୯ʹߦ͑Δɽ ·ͨɼRhino3)(JavaScript)ɼJRuby4) (Ruby)ɼJython5)(PythonʣɼQuercus6)(PHP)ͳͲɼଟ ͘ͷݴޠͷεΫϦϓτΤϯδϯ͕࣮͞Ε͍ͯΔɽ • αʔόσʔλϕʔεΛΈࠐΜͰ࣮͢Δ ڭࣨͳͲͷतۀڥͰɼΠϯετʔϧͰ͖Δι ϑτΣΞ͕ݶఆ͞Ε͍ͯΔͨΊɼDBMSαʔ ϒϨοτίϯςφΛผ్Πϯετʔϧ͢Δ͜ͱ ͍͠ɽ ͦ͜ͰɼσʔλϕʔεʹSqliteͷJava࣮Ͱ ͋ΔSqlJET7)ɼWebαʔόɼελϯυΞϩϯ ͳWebαʔόͰ͋ΔNanoHTTPD8)Λ༻͍ͨɽ
• ϓϩάϥϜσʔλؒͷࢀরؔΛอো͢Δ 3અͷ࠷ޙͰड़ͨΑ͏ʹɼಉظΛߦ͏ࡍʹɼख ݩͷڥ࠷ݶඞཁͳσʔλΛμϯϩʔυ͢ Δ͜ͱͰɼඞཁͳ༰ྔΛগͳ͘͢Δ͜ͱ͕Ͱ͖Δɽ ͜ͷͱ͖ɼ͋ΔϓϩάϥϜσʔλΛਖ਼͘͠ར༻ ͢ΔͨΊʹඞཁͳଞͷϓϩάϥϜσʔλʢ͜Ε Λɼʮࢀর͍ͯ͠ΔʯϓϩάϥϜσʔλͱݺͿʣ ͕ԿͰ͋Δ͔ΛɼϑϨʔϜϫʔΫͰ͋ΔsoyText ͕ࣗѲ͓ͯ͘͠ඞཁ͕͋Δɽͦ͜ͰɼsoyText Ͱɼͯ͢ͷϓϩάϥϜσʔλʹɼͦΕͧΕ ͕ࢀর͍ͯ͠ΔϓϩάϥϜσʔλͷใΛՃ ͢ΔΑ͏ʹ͍ͯ͠Δɽ 4.2 σʔλϕʔεͷߏ soyTextʹ͓͍ͯɼαʔόɾΫϥΠΞϯτؒͰϓ ϩάϥϜͱσʔλ͕ͯ͢ಉظ͞ΕΔɽಉظͷΈ Λ୯७ʹ࣮͢ΔͨΊɼϓϩάϥϜͱσʔλΛಉҰͷ ͷͱͯ͠ѻ͑ΔΑ͏ʹͨ͠ɽϓϩάϥϜͱσʔλΛ ͋ΘͤͯʮจॻʯͱݺͿɽ σʔλϕʔεʮจॻςʔϒϧʯͱ͍͏ςʔϒϧΛ ͭɽจॻςʔϒϧʹෳͷจॻ͕Ϩίʔυͱ͠ ͯ ೖ͍ͬͯΔɽ֤จॻɼ֤छεΫϦϓτݴޠͷΦϒδΣ Ϋτͱͯ͠දݱ͞ΕΔɽ จॻ࣍ͷଐੑΛͭɿ • id ͜ͷจॻͷIDΛ͋ΒΘ͢ɽଞͷγεςϜͷؒͰ IDҰҙͰ͋Δඞཁ͕͋Δɽ ݱ࣮Ͱʮ֤ γεςϜ͕ੜͨ͠௨͠൪߸@γεςϜIDʯͱ͍ ͏ܗࣜͰ͋ΔɽγεςϜIDɼ֤γεςϜʹৼ ΒΕͨIDͰ͋Γɼ͜ͷจॻΛ࠷ॳʹ࡞ͨ͠γ εςϜͷIDͱͳΔɽಉظΛߦ͏͜ͱʹΑΓɼଞ ͷγεςϜ͕࡞ͨ͠จॻͷෳ͕࡞ΒΕΔ͜ͱ ͕͋Δɽ͕ͨͬͯ͠ɼଞͷγεςϜͷIDΛͬ ͨจॻ͕֨ೲ͞ΕΔ͜ͱ͋Δɽ • lastUpdate ͜ͷจॻ͕࠷ޙʹ࡞·ͨมߋ͞Εͨ࣌Λ͋ ΒΘ͢ɽҎલʹಉظͨ͜͠ͱ͕͋ΔγεςϜͱ࠶ ಉظ͢Δࡍʹɼ͜ͷ࣌Λ༻͍ͯมߋ͕͋ͬ ͚ͨͩΛಉظ͢Δɽ • content ͜ͷจॻ͕͋ΒΘ͢ϓϩάϥϜ·ͨσʔλΛε ΫϦϓτݴޠͰهड़͢Δɽهड़ͷ༰ʹΑͬͯɼ จॻ͕ଞͷจॻΛࢀর͢Δ͜ͱ͋Δɽهड़ྫ 5ʹޙड़͢Δɽ • language contentΛهड़͢ΔεΫϦϓτݴޠΛද͢ɽݱࡏ ”JavaScript”ͷΈ͕ରԠ͍ͯ͠Δɽ 4.3 ಉ ظ ଞͷsoyTextγεςϜͱσʔλϕʔεͷಉظΛߦ͏ ͜ͱʹΑͬͯɼจॻͷ༰ΛͦΕͧΕಉ͡ঢ়ଶʹ͢Δ ͜ͱ͕Ͱ͖ΔɽσʔλϕʔεʹϓϩάϥϜͱσʔλ ͕྆ํؚ·ΕΔͨΊɼϓϩάϥϜͷߋ৽ؚΊͯΞϓ ϦέʔγϣϯΛಉ͡ঢ়ଶʹ͢Δ͜ͱ͕Ͱ͖Δɽ ಉظʹ࣍ͷ2ͭͷํ͕ࣜ͋Δɽ • શಉظ ಉظݩͷγεςϜͱɼಉظઌͷγεςϜ͕͓ޓ ͍ͷͯ͢ͷจॻΛอ࣋͢ΔํࣜͰ͋Δɽ࠷ॳʹ ಉظ͢Δ߹ɼಉظઌͷͯ͢ͷจॻ͕μϯ ϩʔυ͞ΕɼಉظݩͷγεςϜ͕ͭͯ͢ͷจ ॻΛΞοϓϩʔυ͢Δɽ2ճҠߦͷಉظʹ͓͍ ͯɼ࠷ޙͷಉظҎདྷߋ৽ͷ͋ͬͨจॻ͚ͩΛμ ϯϩʔυɾΞοϓϩʔυ͢Δɽ • ෦ಉظ ಛఆͷ݅ʹҰக͢ΔจॻͱɼͦΕΒͷจॻ͔Β ʢ࠶ؼతʹʣࢀর͞ΕΔจॻ͚ͩΛμϯϩʔυɾ Ξοϓϩʔυ͢ΔํࣜͰ͋Δɽ݅ಉظݩͱಉ ظઌͰҟͳ͍ͬͯͯΑ͍ɽྫ͑ɼϩʔΧϧͷ γεςϜ͔ΒɼϦϞʔτͷγεςϜɼͯ͢ ͷจॻΛΞοϓϩʔυ͢Δ͕ɼϦϞʔτ͔Βϩʔ ΧϧɼϩʔΧϧͷϢʔβͱؔ͢Δจॻʢͦ ͷϢʔβ͕࡞ͬͨจॻͳͲʣ͚ͩΛμϯϩʔυ ͢ΔΑ͏ʹઃఆ͢Δ͜ͱՄೳͰ͋Δɽ
5. จ ॻ ͷ ྫ
͜͜Ͱɼσʔλϕʔεʹ֨ೲ͞ΕΔσʔλɾϓϩ άϥϜͷྫΛࣔ͢ɽͳ͓ɼsoyTextʹඪ४ͷจॻΤ σΟλ͕Έࠐ·Ε͓ͯΓɼਤ5ͷΑ͏ʹWebϒϥ β͔ΒฤूՄೳͰ͋Δɽ ਤ5 soyText ඪ४ͷจॻΤσΟλ Fig. 5 Default editor embedded in soyText5.1 ୯७ͳจॻ ਤ6ʹɼ୯७ͳจࣈྻଐੑΛͭJavaScriptΦϒ δΣΫτΛɼจॻʹهड़ͨ͠ྫΛࣔ͢ɽ id: [email protected] content: $.extend( ,{ name: "hello.txt", body: "Hello, world"
});
ਤ6 ୯७ͳจॻ Fig. 6 a simple document
ม$͓Αͼ ม soyText͔Βࣗಈతʹ͞Ε Δɽม$σʔλͷߏஙΛखॿ͚͢ΔΦϒδΣΫτ Λ͍ࣔͯ͠Δɽม ʹจॻΛ͋ΒΘ͢ΦϒδΣΫ τʢจॻΦϒδΣΫτ)͕ॳظԽ͞Ε͍ͯͳ͍ঢ়ଶͰ ೖ͓ͬͯΓɼ$.extendϝιουΛ௨ͯ͡ ʹσʔλ Λॻ͖ࠐΜͰ͍Δɽ 5.2 ଞͷจॻΛࢀর͢Δจॻ ਤ7ʹɼଞͷจॻΛࢀর͢ΔจॻͷྫΛࣔ͢ɽଞ ͷจॻΛࢀর͢Δ߹ɼ$.byIdϝιουΛ༻͍ͯ ID͔ΒจॻΦϒδΣΫτΛऔಘ͠ɼจॻΦϒδΣΫ τʹॻ͖͜Ήɽcontent෦Ͱએݴ͞Ε͍ͯΔมͱ ͦͷɼจॻΦϒδΣΫτͷ”scope”ͱ͍͏ϓϩύ ςΟʹॻ͖͜·ΕΔɽ͜ΕɼϓϩάϥϜ͔Βͷσʔ λͷॻ͖͑(ޙड़)Λߦ͏ͱ͖ʹɼએݴ͞Ε͍ͯͨ มͷҰཡΛจॻΦϒδΣΫτʹॻ͖͢ͱ͖ʹ༻͍ ΒΕΔɽ id: [email protected] content: var hello=$.byId("[email protected]"); $.extend( ,{
scope: {hello: hello}, name: "my folder", hello: hello
});
ਤ7 ଞͷจॻΛࢀর͢Δจॻ
Fig. 7 a document which refers other document
5.3 ϓϩάϥϜʢؔʣΛؚΉจॻ จॻͷσʔλʹؔΛؚΉ͜ͱ͕Ͱ͖Δɽਤ8ʹɼ ؔΛؚΉจॻͷྫΛࣔ͢ɽ ਤ9ͷΑ͏ʹɼ֎෦ͷσʔλΛࢀর͢Δؔ࡞ ΕΔɽ 5.4 WebΞϓϦέʔγϣϯจॻ doGet ͱ͍͏ϓϩύςΟʹؔΛઃఆͨ͠จॻΛ WebΞϓϦέʔγϣϯจॻͱݺͿɽ͜ͷจॻʹWeb ϒϥβ͔ΒΞΫηε͢ΔͱɼdoGetʹઃఆͨؔ͠ id: [email protected] content: $.extend( ,{ name: "displayResult", display: function (s) { return "Result :"+s; } }); ਤ8 ؔΛؚΉจॻ Fig. 8 a document having a function
id: [email protected] content:
var hello=$.byId("[email protected]"); $.extend( ,{
scope: {hello: hello}, name: "displayHello", display: function () {
return "Result :"+hello.body;
} });
ਤ9 ֎෦ͷจॻΛ͔ؔΒࢀর͢Δ Fig. 9 a function refers other document ͕ݺΕͯɼWebϖʔδ͕ಈతʹੜ͞ΕΔɽਤ10
ʹɼWebΞϓϦέʔγϣϯจॻͷྫΛࣔ͢ɽdoGet
ɼServletʹ͓͚ΔrequestͱresponseΦϒδΣΫ τΛड͚औΓɼϖʔδͷੜΛߦ͏ɽ
id: [email protected] content:
$.extend( ,{
name: "changeHello",
doGet: function (request,response) { var w=response.getWriter(); w.println("Hello, world");
} });
ਤ10 Web ΞϓϦέʔγϣϯจॻ Fig. 10 a Web application document
5.5 ϓϩάϥϜ͔Βͷσʔλͷॻ͖͑ ਤ11ʹهड़͞ΕͨϖʔδΛ࣮ߦ͢Δͱɼ࣮ߦޙɼ [email protected]ͷจॻͷcontent͕ਤ12ͷΑ͏ʹ ࣗಈతʹॻ͖ΘΔɽ͜ͷྫͰɼจࣈྻͷΛॻ͖ ࠐΜͰ͍Δ͕ɼଞͷΦϒδΣΫτͷࢀরɼྻɼ ϋογϡɼؔͳͲΛॻ͖ࠐΉ͜ͱՄೳͰ͋Δɽ 5.6 ݕ ࡧ ਤ13ɼσʔλϕʔεͷจॻͷݕࡧΛ͢Δϓϩ άϥϜͷྫͰ͋ΔɽจॻΛݕࡧ͢Δʹɼdbͱ͍͏ม ͔Βࢀর͞ΕΔΈࠐΈΦϒδΣΫτʢdbΦϒδΣ ΫτʣΛ༻͍Δɽ͜͜Ͱɼݕࡧ݅ͱͯ͠nameͱ ͍͏ϓϩύςΟͷʹhelloͱ͍͏จࣈྻΛؚΉจॻ
id: [email protected] content:
var hello=$.byId("[email protected]"); $.extend( ,{
name: "world2japan",
doGet: function (request,response) { hello.body="Hello, Japan"; hello.save(); w.println("hello.body="+hello.body); } }); ਤ11 จॻΛॻ͖͑ΔϓϩάϥϜ Fig. 11 a program modifying other document
id:
[email protected] content:
$.extend( ,{
name: "hello.txt", body: "Hello, Japan"
});
ਤ12 ॻ͖͑ޙͷ༰
Fig. 12 changed content after modification
Λࢦఆ͍ͯ͠Δɽ݅ʹҰகͨͯ͢͠ͷจॻʹ͍ͭ ͯɼeach ϝιουʹࢦఆͨؔ͠Λݺͼग़ͯ͠ॲཧ Λߦ͏ɽ id: [email protected] content: $.extend( ,{ name: "changeHello",
doGet: function (request,response) { var w=response.getWriter(); db.q("name","hello").each(function (doc) { w.println("Found :<br>"); w.println("name="+doc.name+"<br>"); w.println("body="+doc.body+"<br>"); }); } }); ਤ13 จॻͷݕࡧ Fig. 13 searching documents
5.7 ΦϒδΣΫτࢦ JavaScript ͰɼؔΦϒδΣΫτΛ༻͍ͯΦϒ δΣΫτͷϓϩτλΠϓΛఆٛ͢Δɽ͜͜Ͱɼϓϩ τλΠϓΛఆٛ͢ΔͨΊͷؔΦϒδΣΫτΛศ্ٓ ʮΫϥεʯͱݺͿɽ soyTextͷจॻɼͯؔ͢ΦϒδΣΫτͱͯ͠ ݟͳ͢͜ͱ͕Ͱ͖ΔͷͰɼҙͷจॻͷprototypeϓ ϩύςΟʹඞཁͳϝιουΛఆٛ͢Δ͜ͱͰɼΫϥε ͕ఆٛͰ͖Δɽ ਤ14ɼΫϥεΛఆٛͨ͠ྫͰ͋Δɽ͜͜Ͱɼ RubyͷεΫϦϓτΛ͋ΒΘ͢ΫϥεΛఆ͍ٛͯ͠Δɽ initializeϝιουίϯετϥΫλͱͯ͠ఆٛ͞Εɼ ҾʹRubyͷϓϩάϥϜΛද͢จࣈྻΛड͚औͬͯ ॳظԽ͢Δɽ id: [email protected] content: var Ruby=$.byId("[email protected]"); $.extend( ,{ name: "RubyScript", prototype:{
initialize: function (body) { this.body=body;
},
eval: function () {
return Ruby.eval(this.body);
},
doGet: function (request,response) { var w=response.getWriter(); w.println(this.eval()); } } }); ਤ14 ΫϥεΛ͋ΒΘ͢จॻ Fig. 14 document represent a class
ਤ15ʹࣔͨ͠จॻɼਤ14ͷΫϥεͷΠϯελ ϯεͰ͋ΔɽconstructorϓϩύςΟʹɼ͜ͷจॻͷ ΫϥεͱͳΔจॻΛࢦఆ͍ͯ͠Δɽ͜ͷจॻɼਤ14 Ͱࢦఆ͞ΕͨdoGetؔΛ͍ͬͯΔͨΊɼWebΞ ϓϦέʔγϣϯจॻͱ࣮ͯ͠ߦՄೳͰ͋Δɽ࣮ߦ͢Δ ͱɼbodyϓϩύςΟʹॻ͔Ε͍ͯΔRubyͷεΫϦ ϓτͷ࣮ߦ݁ՌWebϒϥβʹදࣔ͢Δɽ ͳ͓ɼਤ 15 ʹॻ͔ΕͨRuby ͷϓϩάϥϜɼ JavascriptͷจࣈྻϦςϥϧͰهड़͞Ε͍ͯΔͨΊɼ ਤ5ͷΑ͏ͳඪ४ͷΤσΟλͰฤू͢Δͷ͍ͨ͠ ΊɼࣗͰΤσΟλΛ࡞ͯ͠ฤूํ๏ΛΧελϚΠ ζ͢Δ͜ͱͰ͖Δɽ
6. ࣮
ྫ
චऀ͕୲͍ͯ͠Δϓϩάϥϛϯάͷतۀʹ͓͍ͯ soyTextΛ༻͍ͯतۀࢧԉͷWebΞϓϦέʔγϣ ϯΛ։ൃ͠ɼतۀͰֶੜʹΘ͍ͤͯΔɽ ͜͜ͰɼϓϩάϥϛϯάݴޠʮυϦτϧ9)ʯΛ༻ ͍ͨWebΞϓϦέʔγϣϯ։ൃڥʮD-rails10)ʯͷ ྫΛࣔ͢ɽD-railsͷಈ࡞ը໘Λਤ16ʹࣔ͢ɽ͜ͷը ໘Webϒϥβ্Ͱಈ࡞͠ɼWebϒϥβ͔Βϓ ϩάϥϜʢϖʔδʣΛهड़͠ɼදࣔɾ࣮ߦΛߦ͏͜ͱ͕ Ͱ͖ΔɽD-railsʹΑΔϓϩάϥϜͷྫΛࣔ͢ɽਤ17 ɼσʔλϕʔεΛ৽͘͠࡞͢ΔྫͰ͋Γɼਤ18 ͓Αͼਤ19ɼσʔλϕʔεͷσʔλΛදࣔ͢Δྫਤ16 D-rails ͷಈ࡞ը໘ Fig. 16 Screenshot of D-rails
id: [email protected] content: var RubyScript=$.byId("[email protected]"); $.extend( ,{ constructor: RubyScript, name: "helloRuby", body: "class Test \n"+ " def hello(s)\n"+ " \"Hello, #{s} world\"\n"+ " end\n"+ "end\n"+ "Test.new.hello(\"soyText\")" /* #body ͷ༰࣍ͷ௨Γɿ class Test def hello(s) "Hello, #{s} world" end end Test.new.hello("soyText") */ }); ਤ15 ΫϥεͷΠϯελϯε Fig. 15 an instance of class
Ͱ͋Δɽ υϦτϧɼJavaͰ࣮͞Ε͓ͯΓɼsoyTextͷε ΫϦϓτΤϯδϯͱͯ͠औΓࠐΉ͜ͱ͕ՄೳͰ͋Δɽ <html><body> <% ৽͍͠هʹهςʔϒϧʂ࡞Δɽ ৽͍͠هɿ݄ʹ"10"ɽ ৽͍͠هɿʹ"12"ɽ ৽͍͠هɿ༰ʹ"େֶͰतۀΛड͚·ͨ͠"ɽ ৽͍͠هʂอଘɽ %> </body></html> ਤ17 D-rails ͷϨίʔυͷ࡞ Fig. 17 Creating a database record in D-rails
໊લɿهݕࡧ.html Ҿɿʢͳ͠ʣ
<h1>هΛදࣔ͢Δ</h1>
<% هςʔϒϧʂ ݕࡧ (هςϯϓϨʔτ) ࣮ߦɽ%>
ਤ18 D-rails ͷϨίʔυදࣔ Fig. 18 Searching record in D-rails
໊લɿهςϯϓϨʔτ.html Ҿɿه
<h2><% هɿ݄ %> ݄ <%هɿ %> ͷه</h2> <% هɿ༰ %><br>
ਤ19 Ϩίʔυͷදࣔʹ༻͍ΔςϯϓϨʔτ Fig. 19 A template used for displaying records
7. ࠓޙͷల։
7.1 JavaScriptҎ֎ͷݴޠΛ༻͍ͨจॻͷදݱ ݱঢ়ɼจॻͷهड़contentsଐੑʹJavaScriptͷ ϓϩάϥϜΛॻ͘͜ͱͰ࣮ݱ͍ͯ͠ΔɽͦΕҎ֎ͷݴޠ Ͱॻ͔ΕͨϓϩάϥϜɼ ਤ15ͷΑ͏ʹJavaScript ͷΦϒδΣΫτͷதʹจࣈྻσʔλͱͯ֨͠ೲ͢Δඞ ཁ͕͋ΔɽࠓޙɼRubyͳͲͷଞͷݴޠͰॻ͔Εͨ ΦϒδΣΫτΛจॻʹ֨ೲͰ͖ΔΑ͏ʹվྑͯ͠ ͍͘ɽ ͨͩ͠ɼJavaScriptؔͷ༰Λจࣈྻʹม͢ Δ͜ͱ͕༰қͰ͋ΔͨΊɼؔΛؚΜͩΦϒδΣΫτ Λɼ5.5߲ͷΑ͏ʹଞͷϓϩάϥϜ͔Βॻ͖͑ͯ ؔͷ༰͕อ࣋͞ΕΔɽҰํɼଞͷݴޠʹ͓͍ͯɼؔΛจࣈྻʹม͢ΔػೳΛͨͳ͍ͷ͕ଟ͍ͨ ΊɼͦͷΑ͏ͳػೳΛεΫϦϓτΤϯδϯʹՃ͢Δ ඞཁग़ͯ͘Δɽ 7.2 JavaͷґଘΛԼ͛Δ ݱঢ়ͷsoyTextͷ࣮ͰɼεΫϦϓτΤϯδϯ Webαʔόͷଞʹɼਤ5ͷΑ͏ͳWebΠϯλ ϑΣʔεɼݕࡧͷΈͳͲΛJavaͰ࣮͍ͯ͠ Δɽ͜ΕΒΛJavaScriptͳͲͷεΫϦϓτݴޠʹஔ ͖͍͑ͯ͘͜ͱͰɼ࠷ऴతʹγεςϜશମΛεΫ Ϧϓτݴޠ͚ͩͰ࣮͢Δ͜ͱΛࢦ͍ͯ͠Δɽ͜Ε ʹΑΓsoyTextΛJavaҎ֎ͷݴޠͰ࣮͞ΕͨεΫ ϦϓτΤϯδϯΛ࣮ͬͯ͢Δ͜ͱՄೳʹͳΓɼ Javaͷͳ͍ڥͰಈ͔ͤΔΑ͏ʹͳΔɽ
8. · ͱ Ί
ຊൃදͰɼWebϑϨʔϜϫʔΫ”soyText”Λఏ Ҋͨ͠ɽsoyTextͰɼσʔλͱϓϩάϥϜΛҰମԽ ͠ɼJavaͰಈ࡞͢ΔεΫϦϓτݴޠʹΑͬͯॻ͔Ε ͨϓϩάϥϜΛಈ࡞ͤ͞Δ͜ͱͰɼଟ͘ͷڥͰ؆୯ ʹಈ࡞ͤ͞Δ͜ͱ͕Ͱ͖Δɽ·ͨɼଞͷsoyTextڥ ͱಉظ͢Δ͜ͱʹΑͬͯɼॴΛબͣڥΛߏங͢ Δ͜ͱ͕Ͱ͖Δɽࢀ
ߟ
จ
ݙ
1) ݉फਐ,৻:จՊܥେֶʹ͓͚Δαʔόʔα ΠυϓϩάϥϛϯάतۀͷࢼΈ,ใॲཧֶձݚ ڀใࠂɼ2006-CE-83, pp. 141–148 (2006). 2) ৻:จՊܥେֶʹ͓͚ΔWebαʔϏεߏங ࣮श, ใॲཧֶձݚڀใࠂɼ2008-CE-97, pp. 61–68 (2008).3) foundation, M.: Rhino - Javascript for Java http://www.mozilla.org/rhino/.
4) jruby.org: JRuby http://jruby.org/.
5) jython.org: Jython: Python for the Java Plat-form
http://www.jython.org/. 6) resin: Quercus
http://quercus.caucho.com/.
7) Software, T.: SQLJet :: Pure Java SQLite http://sqljet.com/. 8) Elonen, J.: NanoHTTPD http://elonen.iki.fi/code/nanohttpd/. 9) ݉फਐ,ٱ༃:ϓϩάϥϛϯάݴޠʮυϦτϧʯ, http://dolittle.eplang.jp/. 10) ৻: D-rails - WebΞϓϦέʔγϣϯֶश༻ ϑϨʔϜϫʔΫ,ใॲཧֶձݚڀใࠂɼ 2011-CE-108, pp. 1–12 (2011).