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.5k
ビルドプロセスの自動化で効率アップ
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
なぜ「無責任な横軸」がうまくいかないのか 〜 組織の生産性にインパクトを与える振る舞いを考える
ahomu
17
19k
Web 開発の長距離走と持続可能性 - TechFeed Experts Night#31 〜 フロントエンドアーキテクチャの現状と未来
ahomu
1
290
控えめな App Router と持続可能な開発 - PWA Night vol.59
ahomu
12
3.1k
GPT 生成物の評価、運用 toC 企画でのハードルと勘所
ahomu
0
320
副業をきっかけに 切り拓くキャリア形成
ahomu
1
190
Webフロントエンドと アーキテクチャ事情の持論を喋る
ahomu
2
1.8k
SPA/MPA 議論の俯瞰と 現代における設計のポイント - #tfcon 2022 フロントエンド設計
ahomu
6
3.8k
#TECHPLAY Talk - 理想的な Web のため MUST 駆動で主語が大きくなったキャリア
ahomu
0
350
最近の Web パフォーマンス改善について知っておきたいコト
ahomu
50
20k
Other Decks in Programming
See All in Programming
これならできる!個人開発のすゝめ
tinykitten
PRO
0
150
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
3
770
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
450
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
210
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
7
4.3k
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.6k
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
5.1k
AI Agent Dojo #4: watsonx Orchestrate ADK体験
oniak3ibm
PRO
0
120
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
130
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
160
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
3
650
LLMで複雑な検索条件アセットから脱却する!! 生成的検索インタフェースの設計論
po3rin
4
1.1k
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
590
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
96
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
88
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.2k
Fireside Chat
paigeccino
41
3.8k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.5k
Ethics towards AI in product and experience design
skipperchong
1
170
Optimizing for Happiness
mojombo
379
70k
Faster Mobile Websites
deanohume
310
31k
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