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
200
控えめな App Router と持続可能な開発 - PWA Night vol.59
ahomu
11
2.9k
GPT 生成物の評価、運用 toC 企画でのハードルと勘所
ahomu
0
300
副業をきっかけに 切り拓くキャリア形成
ahomu
1
150
Webフロントエンドと アーキテクチャ事情の持論を喋る
ahomu
2
1.7k
SPA/MPA 議論の俯瞰と 現代における設計のポイント - #tfcon 2022 フロントエンド設計
ahomu
5
3.7k
#TECHPLAY Talk - 理想的な Web のため MUST 駆動で主語が大きくなったキャリア
ahomu
0
280
最近の Web パフォーマンス改善について知っておきたいコト
ahomu
50
20k
Web フロントエンドで大切なことはすべて Audits が教えてくれた
ahomu
1
620
Other Decks in Programming
See All in Programming
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
3
920
型付きアクターモデルがもたらす分散シミュレーションの未来
piyo7
0
760
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
200
CSC307 Lecture 17
javiergs
PRO
0
110
Elixir で IoT 開発、 Nerves なら簡単にできる!?
pojiro
1
120
2度もゼロから書き直して、やっとブラウザでぬるぬる動くAIに辿り着いた話
tomoino
0
160
eBPFを用いたAIネットワーク監視システム論文の実装 / eBPF Japan Meetup #4
yuukit
3
750
Blueskyのプラグインを作ってみた
hakkadaikon
1
520
Perplexity Slack Botを作ってAI活用を進めた話 / AI Engineering Summit プレイベント
n3xem
0
650
GoのGenericsによるslice操作との付き合い方
syumai
2
550
エラーって何種類あるの?
kajitack
5
140
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
1
660
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Facilitating Awesome Meetings
lara
54
6.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Gamification - CAS2011
davidbonilla
81
5.3k
Bash Introduction
62gerente
614
210k
Automating Front-end Workflow
addyosmani
1370
200k
How GitHub (no longer) Works
holman
314
140k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
The Invisible Side of Design
smashingmag
299
51k
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