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
ビルドプロセスの自動化で効率アップ
Search
Ayumu Sato
November 10, 2012
Programming
25
3.4k
ビルドプロセスの自動化で効率アップ
Grunt.jsの紹介スライドです。package.jsonの扱いや、grunt自身の0.4.0対応が弱い部分が残りますが、数ヶ月前というところでご容赦くだされば、おおまかな概要を示しています。
Ayumu Sato
November 10, 2012
Tweet
Share
More Decks by Ayumu Sato
See All by Ayumu Sato
Web 開発の長距離走と持続可能性 - TechFeed Experts Night#31 〜 フロントエンドアーキテクチャの現状と未来
ahomu
1
150
控えめな App Router と持続可能な開発 - PWA Night vol.59
ahomu
11
2.7k
GPT 生成物の評価、運用 toC 企画でのハードルと勘所
ahomu
0
250
副業をきっかけに 切り拓くキャリア形成
ahomu
1
110
Webフロントエンドと アーキテクチャ事情の持論を喋る
ahomu
2
1.6k
SPA/MPA 議論の俯瞰と 現代における設計のポイント - #tfcon 2022 フロントエンド設計
ahomu
4
3.5k
#TECHPLAY Talk - 理想的な Web のため MUST 駆動で主語が大きくなったキャリア
ahomu
0
210
最近の Web パフォーマンス改善について知っておきたいコト
ahomu
50
19k
Web フロントエンドで大切なことはすべて Audits が教えてくれた
ahomu
1
580
Other Decks in Programming
See All in Programming
みんなでプロポーザルを書いてみた
yuriko1211
0
280
C++でシェーダを書く
fadis
6
4.1k
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
260
CSC509 Lecture 13
javiergs
PRO
0
110
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
120
OSSで起業してもうすぐ10年 / Open Source Conference 2024 Shimane
furukawayasuto
0
110
.NET のための通信フレームワーク MagicOnion 入門 / Introduction to MagicOnion
mayuki
1
1.8k
ローコードSaaSのUXを向上させるためのTypeScript
taro28
1
630
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
170
TypeScript Graph でコードレビューの心理的障壁を乗り越える
ysk8hori
3
1.2k
Contemporary Test Cases
maaretp
0
140
Micro Frontends Unmasked Opportunities, Challenges, Alternatives
manfredsteyer
PRO
0
110
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
GraphQLとの向き合い方2022年版
quramy
43
13k
Designing for Performance
lara
604
68k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
900
Happy Clients
brianwarren
98
6.7k
Designing for humans not robots
tammielis
250
25k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Fireside Chat
paigeccino
34
3k
Transcript
Ϗϧυϓϩηεͷ 1 ࣗಈԽͰ ޮΞοϓ (SVOUKTΛར༻ͨࣗ͠ಈԽ !BIPNV
ࣗݾհ ͞ͱ͏͋ΏΉ !BIPNV αΠόʔΤʔδΣϯτ ϚʔΫΞοϓ ΤϯδχΞͰ͢ ໊ݹग़͕ͩͶ ৄ͘͠IUUQBIPNV 2
࣍ Ϗϧυϓϩηεͱࠇ͍ը໘ (SVOUKT ઃఆϑΝΠϧͱ͍ํ ϓϥάΠϯͷհͱࣗ࡞
·ͱΊ 3
Ϗϧυϓϩηεͱࠇ͍ը໘ 4
Ϗϧυϓϩηεʁ 5
͞·͟·ͳϏϧυ 6 $44 ϓϦϓϩηοα $PNQJMF $PGGFF4DSJQUͳͲ BMU+4ͷ$PNQJMF ϑΝΠϧͷ݁߹ $PODBUFOBUF ը૾ͷ
ϩεϨεѹॖ $PNQSFTTJPO %BUB63*ม *OMJOF&NCFE ίʔυ࠷খԽ .JOJGZ 0QUJNJ[F
खஈɾత૿͑Δ͔Γ ࠓ͜͜·Ͱհ͞Εͨ༰͚ͩͰɺ ଟ͘ͷ࡞ۀΛٻΊΒΕ͍ͯΔ 7
7 υΩϡϝϯτ ੜ Ωϟογϡ ϚχϑΣετ ཧ +BWB4DSJQUͷ ςετ࣮ߦ ڥʹϑΝΠϧ Ξοϓϩʔυ
$44 ϓϦϓϩηοα $PNQJMF $PGGFF4DSJQUͳͲ BMU+4ͷ$PNQJMF ϑΝΠϧͷ݁߹ $PODBUFOBUF ը૾ͷ ϩεϨεѹॖ $PNQSFTTJPO %BUB63*ม *OMJOF&NCFE ίʔυ࠷খԽ .JOJGZ 0QUJNJ[F
ΞϨίϨ ·ͱΊͯࣗಈԽ͍ͨ͠ ࢄͨ͠࡞ۀͱखؒΛͻͱ·ͱΊʹ͢Δ 8
ͳͥࣗಈԽͳͷ͔ʁ 9
܁Γฦ͠ΛݮΒ͍ͨ͠ 10 ώϡʔϚϯΤϥʔΛ܁Γฦͨ͘͠ͳ͍ खಈίϯύΠϧΛ܁Γฦͨ͘͠ͳ͍ $44Ͱಉ͡هड़Λ܁Γฦͨ͘͠ͳ͍ )551ϦΫΤετΛ܁Γฦͨ͘͠ͳ͍
ͯ͢ ܁Γฦ͠ͷ࠷దԽ %PO`U3FQBU:PVSTFMG 11
ࣗಈԽʹΑͬͯ ੜ·ΕΔ͕࣌ؒେ ͷલͷ࡞ۀΛ࠷దԽ͢Δ͜ͱͰ ຊʹඞཁͳ͜ͱʹ࣌ؒΛ͔ͭ͏͜ͱ͕Ͱ͖Δ 12
ͳͥࠇ͍ը໘ͳͷ͔ʁ 13
'PS6TJOH7BMVJOH5PPMT 14 Ձ͋Δπʔϧɺ͡Ί$-*πʔϧ (6*πʔϧʹͳΔͷɺ΄ΜͷҰѲΓ $-*πʔϧɺҰॠͰେͳࣄΛ͢Δ ͍͜ͳͤ࠷ޮԽͰ͖Δखஈ
͍ͬͯΕɺͦΕ͚ͩͰثʹͳΔ
ւͷ͜͏ͷτϨϯυײ 15
5IF$PNNBOE-JOF ίϚϯυϥΠϯར༻ͷඞཁੑ͕ ͘ೝ͞Ε࢝Ί͍ͯΔ 16
ࠇ͍ը໘ඞܞ࣌ ͕ɺ͘Δ͔͠Εͳ͍ 17
ࠇ͍ը໘͔ͬ͜Α͘ͳΔʂ 18
·ͣઃఆΛ։͘ͱ͜Ζ͔Β 19
'PS8JOEPXT $ZHXJO ͍·͙͢ίϚϯυϓϩϯϓτΛࣺͯͯɺ $ZHXJOΛ͏͖̍̌ ͷཧ༝ (FUUJOHHSVOUUPXPSLPOXJOEPXTXJUI DZHXJOBOEHJU
20
(SVOUKT 21
OPEF+4Ͱಈ͘Ϗϧυπʔϧ ϏϧυϓϩηεͷࣗಈԽɾҰݩԽͷ΄͔ʹɺ ϩʔΧϧ։ൃڥͷߏஙͳͲ 22
5BTL#BTFE#VJME5PPM 23 OPEF+4 (SVOU 5BTL 5BTL 5BTL
5BTL#BTFE#VJME5PPM 23 OPEF+4 (SVOU 5BTL 5BTL 5BTL ϓϥάΠϯ෦
5BTL#BTFE#VJME5PPM 23 OPEF+4 (SVOU 5BTL 5BTL 5BTL ίϚϯυϥΠϯͰ ࣮ߦ 5BTLͷ
࣮ߦ݁ՌΛಘΔ ‣֤छίϯύΠϧͷ࣮ߦ ‣ॲཧࡁΈϑΝΠϧͷ࡞ ‣ͳͲͳͲ
(SVOUKTͷಛ IUUQHSVOUKTDPN ઃఆϓϥάΠϯͯ͢+BWB4DSJQU ઃఆ෦ͷ+4؆ܿʹهड़Ͱ͖Δ ϓϥάΠϯ͕ଟެ։͞Ε͍ͯΔ
ΤσΟλʹґଘͤͣར༻Ͱ͖Δ ઃఆϑΝΠϧ͕͋Ε؆୯ʹڥڞ༗Ͱ͖Δ 24
։ൃΞΫςΟϏςΟ TUBCMFEFWFMPQB ඇৗʹΜʹߋ৽͞Ε͍ͯΔ ։ൃίϛϡχςΟ͕͕͍ͬͯΔ K2VFSZͷϏϧυπʔϧͱͯ͠࠾༻ 25
Πϯετʔϧํ๏ εςοϓͰ͙͢Ͱ͖·͢ 26
OPEF+4ͷΠϯετʔϥʔ 27
ΠϯετʔϥʔΛ࣮ߦ 28
(SVOUKTΛΠϯετʔϧ 29 npm install -g grunt
͜ΕͰ४උ0, 30
ઃఆϑΝΠϧͱ͍ํ 31
࡞ϑΝΠϧ HSVOUKT QBDLBHFKTPO
σϞϑΝΠϧެ։த IUUQTHJUIVCDPNBIPNVGSPOUSFOE HSVOUEFNP 33
HSVOUKT 34 ϝΠϯͷઃఆϑΝΠϧ
ϑΝΠϧͷ݁߹ 35
+4ͱ$44ͷ݁߹ઃఆ 36 grunt.initConfig({ concat: { js: { src: [ 'js/lib/jquery.js',
'js/app/main.js', 'js/app/sub.js' ], dest: 'js/all.js' }, css: { src: ['css/main.css', 'css/sub.css'], dest: 'css/all.css' } }, } HSVOUKT
+BWB4DSJQUͷϏϧυ 37
+BWB4DSJQUͷϏϧυઃఆ module.exports = function(grunt) { grunt.initConfig({ concat: { dist: {
src: ['js/jquery.js', 'js/app/main.js', 'js/app/sub.js'], dest: 'js/all.js' } }, min: { dist: { src: 'js/all.js', dest: 'js/all.min.js' } } }); grunt.registerTask('jsbuild', ['concat', 'min']); }; 38 HSVOUKT
39 λεΫΛෳ߹ͯ͠ࢦఆ // Alias Task // grunt.registerTask(taskName, taskList) grunt.registerTask('jsbuild', ['concat',
'min']); concat + min = jsbuild HSVOUKT
40 AHSVOUKTCVJMEAͷ࣮ߦ݁Ռ % grunt jsbuild # concat λεΫ͕ߦΘΕͯɺjs/all.js ͕ੜ͞Εͨ Running
"concat:dist" (concat) task File "js/all.js" created. # ͞Βʹ min λεΫͰɺѹॖ͕ߦΘΕͨ Running "min:dist" (min) task File "js/all.min.js" created. Uncompressed size: 56545 bytes. Compressed size: # ͓͠·͍ Done, without errors. ࠇ͍ը໘
41 ϑΝΠϧͷߋ৽ݕ
ϑΝΠϧͷߋ৽ݕͱΞΫγϣϯ watch: { css: { // ͜ΕΒͷϑΝΠϧ͕ߋ৽͞ΕͨΒ files: ['css/*.less'], //
ҎԼͷλεΫΛ࣮ߦ͢Δ tasks: 'less' }, js: { files: ['js/app/*.js', 'index.html'], tasks: 'lint concat min' } } 42 HSVOUKT
43 AHSVOUXBUDIAͷ࣮ߦ݁Ռ % grunt watch # ϑΝΠϧͷߋ৽ࢹΛ։࢝ Running "watch" task
Waiting...OK # ݕʂ File "css/main.less" changed. # lessλεΫ͕࣮ߦ͞ΕͯɺίϯύΠϧ Running "less:dist" (less) task File css/main.css created. ࠇ͍ը໘
44 ϩʔΧϧ։ൃڥ
45 ։ൃڥͱͯ͠Έ߹Θͤͨઃఆ grunt.initConfig({ /*ʢલུɾ͜Ε·Ͱͷwatch֤λεΫͷઃఆʣ*/ server: { port: 8000, // ੩తϩʔΧϧαʔόΛཱͯΔϙʔτ
base: '.' }, reload: { port: 35729 // LiveReloadαʔόͷϙʔτ }, }); // develop λεΫͱͯ͠ෳ߹ grunt.registerTask( 'develop', ['server', 'reload', 'watch'] ); HSVOUKT
46 AHSVOUXBUDIAͷ࣮ߦ݁Ռ % grunt devlop # localhost:8000Λىಈ Running "server" task
Starting static web server on port 8000. # LiveReloadαʔόʔΛىಈ Running "reload" task Proxying http://localhost:8000/ reload server running at http://localhost:35729 # ϑΝΠϧͷߋ৽Λ։࢝ Running "watch" task Waiting.. ࠇ͍ը໘
ϓϥάΠϯͷಋೖ 47 OQNΛར༻ͯ͠Πϯετʔϧ͢Δ
OQNͬͯʁ 48
/PEF1BDLBHF.BOBHFS 49 OPEFͰಈ͘ύοέʔδ͕ଟొ͞Ε͍ͯΔ OQNίϚϯυΛ௨ͯ͠ར༻Ͱ͖Δ 3VCZͰ͍͏HFNͱ͔ͷΠϝʔδ
ͷϓϥάΠϯ ݱࡏOQNʹ͓͍ͯ AHSVOUQMVHJOAλά͕͍ͭͨύοέʔδͷ 50
͜ΕεςοϓͰ͙͢Ͱ͖Δ 51 ϓϥάΠϯͷར༻ํ๏
HSVOUKTDPNͰݕࡧ 52
ϓϥάΠϯΛΠϯετʔϧ 53 # ݟ͚ͭͨϓϥάΠϯΛnpmͰΠϯετʔϧ % npm install grunt-data-uri npm http
GET https://registry.npmjs.org/grunt-data-uri npm http 200 https://registry.npmjs.org/grunt-data-uri npm http GET https://registry.npmjs.org/mime npm http 200 https://registry.npmjs.org/mime
[email protected]
node_modules/grunt-data-uri !""
[email protected]
ࠇ͍ը໘
ϓϥάΠϯΛϩʔυ // grunt.loadNpmTasks(packageName) grunt.loadNpmTasks('grunt-data-uri'); // ͦͷλεΫͷઃఆΛॻ͖ͤok grunt.initConfig({ dataUri: { dist:
{ src: ['css/raw/*.css'], dest: 'css' } } }); 54 HSVOUKT
QBDLBHFKTPO 55 ڥͷڞ༗
56 QBLDBHFKTPOΛ࡞ QBLDBHFKTPOʹอଘ ઃఆϑΝΠϧΛڞ༗͢Δ QBLDBHFKTPO͔Β෮ݩ
// ͜ΜͳJSONΛίϐϖͯ͠ϑΝΠϧ࡞ { "name": "ABCϓϩδΣΫτ", "description": "ϓϩδΣΫτ։ൃڥͷఆٛͰ͢", "version": "1.0.0", "author":
"࠽ɹଠ", "main": "grunt.js", "dependencies": {}, "optionalDependencies": { "grunt": "~0.3.16" } } 57 QBDLBHFKTPOΛ࡞ QBDLBHFKTPO
QBDLBHFKTPOʹอଘ # install --saveͰ # ϓϥάΠϯͷΠϯετʔϧ࣌ʹɺpackage.jsonͷґଘఆٛʹՃ % npm install --save
grunt-xxxxx # remove --saveͰ # ΞϯΠϯετʔϧͱಉ࣌ʹɺpackage.jsonͷґଘఆ͔ٛΒআ % npm remove --save grunt-xxxxx 58 ࠇ͍ը໘
ઃఆϑΝΠϧΛڞ༗͢Δ HSVOUKT QBDLBHFKTPO ϑΝΠϧ͋Ε0, 59
QBDLBHFKTPO͔Β෮ݩ # package.json͕͋ΔσΟϨΫτϦͰ࣮ߦ͢Δͱ # ه͞Ε͍ͯΔϓϥάΠϯΛɺͦͷʹࣗಈͰ෮ݩ(Πϯετʔϧ)͢Δ % npm link 60 ࠇ͍ը໘
͜͜·Ͱ͕ઃఆํ๏ HSVOUKTࣗମ+BWB4DSJQUͱ͍͏ΑΓɹɹɹɹɹ ɹ ͘͘͝͝؆୯ͳઃఆϑΝΠϧ QBDLBHFKTPOΛ͏·͘͏ͱɹɹɹɹɹɹɹ ڥڞ༗͕͘͢͠ɺϙʔλϏϦςΟྑ͍ ࣍ϓϥάΠϯͷհ
61
ϓϥάΠϯͷհͱࣗ࡞ 62
ϓϥάΠϯͷհ 63 େ(JU)VCʹϦϙδτϦ͕͋ΔͷͰ 3&"%.&ΛಡΊ͔ΔΑ͏ʹͳ͍ͬͯΔ
ϏϧτΠϯλεΫ 64 DPODBUςΩετϑΝΠϧͷ݁߹ NJO+BWB4DSJQUͷ.JOJGZ TFSWFSϩʔΧϧαʔόʔ XBUDIϑΝΠϧͷߋ৽ݕ
ͳͲͳͲ
HSVOUDPOUSJC IUUQTHJUIVCDPNHSVOUKTHSVOUDPOUSJC ΦϑΟγϟϧཧ͞Ε͍ͯΔ٧Ί߹Θͤ ެࣜϝϯςφϯε͞Ε͍ͯΔͷͰࢀߟʹͳΔ CVNQɾDMFBOɾDPGGFFɾDPNQSFTTɹɹɹ DPQZɾIBOEMFCBSTɾKBEFɾKTUɾMFTTɹ
NJODTTɾTUZMVTɾZVJEPD 65
HSVOUDPNQBTT IUUQTHJUIVCDPNLBIMJMHSVOUDPNQBTT $PNQBTTΛ(SVOU͔Βར༻͢Δ $44ϓϦϓϩηοαܥ֤छ͋Δ ˞ -&44HSVOUDPOUSJCMFTT ˞
4UZMVTHSVOUDPOUSJCTUZMVT 66
HSVOUJNH IUUQTHJUIVCDPNIFMESHSVOUJNH ը૾ϦιʔεͷϩεϨεѹॖ ACSFXJOTUBMMPQUJQOHKQFHA͕ඞཁ ߴѹॖઃఆͰ*NBHF0QUJNͱಉ͘͡Β͍
BIPNVHSVOUJNH KQFHѹॖߴΊͨ൛ 67
HSVOUDTTP IUUQTHJUIVCDPNULHSVOUDTTP $44ϑΝΠϧͷ.JOJGZ ѹॖʹ༏Εͨ$440ͱ͍͏ϥΠϒϥϦ BVUIPS!UL ˞
$440ͱHSVOUDTTP].0- 68
HSVOUEBUBVSJ IUUQTHJUIVCDPNBIPNVHSVOUEBUBVSJ $44ͷը૾ύεΛ%BUB63*ʹࣗಈม VSM QBUIUPJNH Λରʹͯ͠ஔ
BVUIPS!BIPNV ˞ σʔλ63*εΩʔϜ].0- 69
HSVOUSFMPBE IUUQTHJUIVCDPNXFCYMHSVOUSFMPBE ϒϥβͷࣗಈϦϩʔυ ͍ΘΏΔ-JWF3FMPBEͷ࣮ -JWF3FMPBEͷ$ISPNF֦ுͱซ༻Ͱ͖Δ ˞
લग़ͷ%&.0Ͱར༻͍ͯͨ͠ͷ 70
HSVOUGUQEFQMPZ IUUQTHJUIVCDPN[POBLHSVOUGUQEFQMPZ '51Λར༻ͨ͠ϑΝΠϧͷΓऔΓ ؆қͳσϓϩΠϓϩηεʹͳΔϓϥάΠϯ ˞ )FSPLVHSVOUIFSPLVEFQMPZ ˞
"NB[PO4HSVOUT 71
HSVOUUFNQMBUFS IUUQTHJUIVCDPNSPDLXPPEHSVOUUFNQMBUFS +BWB4DSJQUςϯϓϨʔτΛίϯύΠϧ FKTɾNVTUBDIFɾVOEFSTDPSFͳͲ ܭछྨͷςϯϓϨʔτΤϯδϯʹରԠ ˞
ίϯύΠϧؔΦϒδΣΫτͷม 72
HSVOUSFRVJSFKT 3FRVJSF+40QUJNJ[FS SKT ʹରԠ ".%ϞδϡʔϧΛղܾͯ͠࠷దԽ͢Δ BMNPOEͱ͍͏ϥΠϒϥϦʹରԠͯ͠༏ल ˞
3FRVJSFKT ˞ 3FRVJSF+4ʹΑΔίʔυͷׂͱ࠷దԽ 73
HSVOUNPDIB IUUQTHJUIVCDPNLNJZBTIJSPHSVOUNPDIB .PDIBͷ)FBEMFTTςετ࣮ߦ 1IBOUPN+4ʹґଘ͍ͯ͠Δ ˞ ͪΖΜ26OJU+BTNJOFͷϓϥάΠϯ ˞
ςετܥXBUDIͱΈ߹ΘͤͯࣗಈԽ 74
ϓϥάΠϯͷࣗ࡞ 75 ݪଇɺΑ͘ࣅͨϓϥάΠϯΛվ͢Δͷ͕ϥΫ OPEF+4Λॻ͘͜ͱʹͳΓ·͢
ࣗ࡞ϓϥάΠϯͷઃఆͱϩʔυ grunt.initConfig({ sample: { dist: { src: ['js/**/*.js'], // ೖྗݩ
dest: 'js/all.js', // ग़ྗઌ option: { // ΦϓγϣϯͳͲʢҙʣ hoge: 'fuga', peke: 'piyo' } } } }); // grunt.jsϑΝΠϧʹهड़ // tasksσΟϨΫτϦͷதΛͯ͢ಡΈࠐΈ grunt.loadTasks('tasks'); 76 HSVOUKT
UBTLTTBNQMFKT module.exports = function(grunt) { grunt.registerMultiTask('sample', 'own task', function() {
var option = this.data.option, src = this.file.src, dest = this.file.dest, // ඇಉظॲཧ͕ඞཁͳͱ͖ʹ༻ doneΛcallbackʹ͢Δ // var done = this.async(); // path/to/**/*.js Λղܾͯ֘͠ϑΝΠϧΛྻͰฦ͢ srcFiles = grunt.file.expandFiles(src); /*...λεΫͷॲཧ...*/ }); }; 77 TBNQMFKT
ࢀߟૉࡐ σϞαϯϓϧUBTLTTBNQMFKT ศརϔϧύʔूHSVOUMJCDPOUSJC ൣίʔυྫHSVOUDPOUSJCDPGGFF EPDTQMVHJOTNE
EPDTBQJ@UBTLNE EPDTBQJ@pMFNE 78
ิBʹ͍ͭͯ ଟ͘ͷ"1*͕มߋ͞ΕΔ ϓϥάΠϯͷϝϯςφϯεঢ়گʹҙ͕ඞཁ ઃఆϑΝΠϧ໊͕(SVOUpMFKTʹมߋ $PGGFF4DSJQUͰઃఆλεΫΛॻ͚ΔΑ͏ʹ ˞
ৄ͘͠HSVOUEPDTNJHSBUJPO@HVJEFNE 79
·ͱΊ 80
ϏϧυͷࣗಈԽ (SVOUϏϧυπʔϧͱͯ͠ศརʂ OQNʹଞͷͻͱ͕࡞ͬͨɺɹɹɹɹɹɹɹɹ ࣗಈԽͷͨΊͷϓϥάΠϯ͕ࢁ͋Γ·͢ʂ շదʹ։ൃͰ͖Δڥ͕μΠδʂ ࠇ͍ը໘ͱྑ͘͠·͠ΐ͏ʂ
ԿΑΓ 81
࣮ફ͢Δ͜ͱ͕େࣄ πʔϧਅʹͩ͜ΘΔ͖Ͱͳ͍ ແཧͳ͘ͷલͷ܁Γฦ͠ΛݮΒͦ͏ 82
-JWF3FMPBE 83
$PEF,JU 84
ຊʹ େࣄͳ͜ͱʹ࣌ؒΛʂ 85
࣍ੈπʔϧ 86 $-*ͷੈքͰɺ͞Βʹ࣍ͷಈ͖͕࢝·͍ͬͯͨΓ
:FPNBO#SVODI 87 4LFMFUPOͷ࡞4DBGGPMEJOH ύοέʔδίϯϙʔωϯτཧ ϩʔΧϧ։ൃڥͷఏڙ ΑΓߴͳࣗಈϏϧυͷఏڙɹͳͲͳͲ
$PNQBSF5BCMF 88
͖ͭͮ8FCͰʂ 89 :FPNBO.PEFSOXPSLqPXTGPSXFCBQQT #SVODI])5.-BQQMJDBUJPOBTTFNCMFS :FPNBOϤʔϚϯϋϒΖ͙ :FPNBOͱ#SVODIΛ͞Θ͞Θͨ͠ϋϒΖ͙
͋Γ͕ͱ͏͍͟͝·ͨ͠ http:/ /aho.mu 90
91 IUUQXXXqJDLSDPNQIPUPTKVSWFUTPO IUUQXXXqJDLSDPNQIPUPTKBTPOXSZBO IUUQXXXqJDLSDPNQIPUPTCJOBSZBQF IUUQXXXqJDLSDPNQIPUPTKVIBOTPOJO
IUUQXXXqJDLSDPNQIPUPTLFWJO .BOZ5IBOLT 1IPUP$SFEJUT