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
なぜ「無責任な横軸」がうまくいかないのか 〜 組織の生産性にインパクトを与える振る舞いを考える
ahomu
5
2.2k
Web 開発の長距離走と持続可能性 - TechFeed Experts Night#31 〜 フロントエンドアーキテクチャの現状と未来
ahomu
1
210
控えめな App Router と持続可能な開発 - PWA Night vol.59
ahomu
11
3k
GPT 生成物の評価、運用 toC 企画でのハードルと勘所
ahomu
0
300
副業をきっかけに 切り拓くキャリア形成
ahomu
1
160
Webフロントエンドと アーキテクチャ事情の持論を喋る
ahomu
2
1.7k
SPA/MPA 議論の俯瞰と 現代における設計のポイント - #tfcon 2022 フロントエンド設計
ahomu
5
3.7k
#TECHPLAY Talk - 理想的な Web のため MUST 駆動で主語が大きくなったキャリア
ahomu
0
290
最近の Web パフォーマンス改善について知っておきたいコト
ahomu
50
20k
Other Decks in Programming
See All in Programming
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
340
Result型で“失敗”を型にするPHPコードの書き方
kajitack
4
560
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
270
5つのアンチパターンから学ぶLT設計
narihara
1
140
明示と暗黙 ー PHPとGoの インターフェイスの違いを知る
shimabox
2
390
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
350
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.5k
PHPでWebSocketサーバーを実装しよう2025
kubotak
0
240
プロダクト志向なエンジニアがもう一歩先の価値を目指すために意識したこと
nealle
0
120
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
2
330
“いい感じ“な定量評価を求めて - Four Keysとアウトカムの間の探求 -
nealle
0
470
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
50
32k
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Producing Creativity
orderedlist
PRO
346
40k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Why Our Code Smells
bkeepers
PRO
337
57k
Building an army of robots
kneath
306
45k
The World Runs on Bad Software
bkeepers
PRO
69
11k
RailsConf 2023
tenderlove
30
1.1k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Agile that works and the tools we love
rasmusluckow
329
21k
Code Reviewing Like a Champion
maltzj
524
40k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
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