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
RubyKaigi 2014 mod_mruby ngx_mruby
Search
MATSUMOTO Ryosuke
PRO
September 19, 2014
Technology
5
22k
RubyKaigi 2014 mod_mruby ngx_mruby
なぜ僕はmod_mrubyを作る必要があったのか、そこからどう応用させたのかについて、自分が作った、mrubyによるWebサーバの新しいリソース制御を軸にお話します。
MATSUMOTO Ryosuke
PRO
September 19, 2014
Tweet
Share
More Decks by MATSUMOTO Ryosuke
See All by MATSUMOTO Ryosuke
問いを起点に、社会と共鳴する知を育む場へ
matsumoto_r
PRO
0
650
さくらインターネット研究所 アップデート2025年
matsumoto_r
PRO
0
750
リモートワークにおけるパッシブ疲労
matsumoto_r
PRO
6
5.3k
エンジニアのキャリアパスはどう描く? まつもとりーさんと考える後悔しないキャリア選択
matsumoto_r
PRO
10
2.3k
まつもとりーのこれまでとCOGNANOのこれから
matsumoto_r
PRO
0
320
2022年の研究所の評価制度振り返りと今後
matsumoto_r
PRO
0
790
VUCAワールドから紐解く組織や評価制度の変遷と再設計
matsumoto_r
PRO
9
26k
コンテナの研究開発から学ぶLinuxの要素技術
matsumoto_r
PRO
2
1.5k
開発者体験をさらに向上させる 事業と研究との連携
matsumoto_r
PRO
2
2.4k
Other Decks in Technology
See All in Technology
Git in Team
kawaguti
PRO
3
330
いまさら聞けない ABテスト入門
skmr2348
1
230
Large Vision Language Modelを用いた 文書画像データ化作業自動化の検証、運用 / shibuya_AI
sansan_randd
0
130
なぜAWSを活かしきれないのか?技術と組織への処方箋
nrinetcom
PRO
1
290
from Sakichi Toyoda to Agile
kawaguti
PRO
1
110
生成AIで「お客様の声」を ストーリーに変える 新潮流「Generative ETL」
ishikawa_satoru
1
370
Vibe Coding Year in Review. From Karpathy to Real-World Agents by Niels Rolland, CEO Paatch
vcoisne
0
120
『OCI で学ぶクラウドネイティブ 実践 × 理論ガイド』 書籍概要
oracle4engineer
PRO
3
170
小学4年生夏休みの自由研究「ぼくと Copilot エージェント」
taichinakamura
0
590
空間を設計する力を考える / 20251004 Naoki Takahashi
shift_evolve
PRO
4
460
SwiftUIのGeometryReaderとScrollViewを基礎から応用まで学び直す:設計と活用事例
fumiyasac0921
0
150
ユーザーの声とAI検証で進める、プロダクトディスカバリー
sansantech
PRO
1
110
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
Into the Great Unknown - MozCon
thekraken
40
2.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Side Projects
sachag
455
43k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.6k
Building an army of robots
kneath
306
46k
Fireside Chat
paigeccino
40
3.7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
Six Lessons from altMBA
skipperchong
28
4k
Site-Speed That Sticks
csswizardry
11
890
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
Done Done
chrislema
185
16k
Transcript
ԾతʹίϯϐϡʔλϦιʔεΛՄೳͳ NSVCZʹΑΔ 8FCαʔόͷϦιʔε੍ޚΞʔΩςΫνϟ ژେֶদຊ྄հ 5XJUUFS!NBUTVNPUPSZ
ࣗݾհ • ژେֶͷത࢜՝ఔֶੜ – Πϯλʔωοτج൫ٕज़ͷݚڀ – ୈճຊ044ྭड – ത࢜՝ఔͷલϑΝʔεταʔόͰӡ༻ •
NSVCZίϯτϦϏϡʔλ – NPE@NSVCZɾOHY@NSVCZɾBCNSVCZ – ࠷ۙͰ5SVTUFSE)5518FC4FSWFS – NHFNMJTUʹొࡁͷNHFNݸͰੈքҐ 3VCZ,BJHJ
NHFNMJTU3BOLJOH 3VCZ,BJHJ $ mgem info | grep Author |
sort | uniq -‐c | sort -‐nr | head 26 Author: MATSUMOTO Ryosuke 25 Author: maCn 12 Author: ppibburr 10 Author: iij 7 Author: ksss 6 Author: Internet IniJaJve Japan., Inc. 5 Author: Takeshi Watanabe 3 Author: h2so5 2 Author: kyab 2 Author: crimsonwoods
ຊͷ༰ ཉ͔ͬͨ͠8FCαʔόͷϦιʔε੍ޚ ͦ͜ͰNPE@NSVCZΛ։ൃͨ͠ NPE@NSVCZ͔ΒDHSPVQTΛ੍ޚ Ϧιʔε੍ޚΛಈ͔ͯ͠Έͨ ·ͱΊ 3VCZ,BJHJ
͕ཉ͔ͬͨ͠ 8FCαʔόͷϦιʔε੍ޚ 3VCZ,BJHJ
8FCαʔόͷϦιʔε੍ޚͱ • طଘͷϦιʔε੍ޚΞʔΩςΫνϟ – ίϯϐϡʔλϦιʔεΛᮢॲཧͰ੍ޚ – ᮢΛ͑ΔͱϦΫΤετॲཧΛڧ੍அɾڋ൱ – ड͚Δ͔ड͚ͳ͍͔ͷ୯७ͳ੍ޚ •
– ΫϥΠΞϯτͷҹ͕ѱ͍ɾ͍߹Θͤࡴ౸ – αʔόͷ࣭ΛอͭͨΊͩͱઆ໌͢Δ͕ɾɾɾ – ࣭Λ্͛ΔͨΊͷϦιʔε੍ޚ͕શମͱͯ͠ αʔϏε࣭͕Լ͍ͤͯ͞Δ߹͕͋Δ 3VCZ,BJHJ
͕ཉ͔ͬͨ͠Ϧιʔε੍ޚ • ཧऀ͕ϓϩάϥϚϒϧʹ੍ޚϧʔϧΛهड़ – ॊೈͰՄಡੑͷߴ੍͍ޚϧʔϧΛදݱ͍ͨ͠ – αʔόϓϩηεͷ࠶ىಈͳ͘ϧʔϧΛมߋ͍ͨ͠ – ϧʔϧ͕ΦʔόʔϔουʹͳΒͳ͍Α͏ʹ͍ͨ͠ •
ϦΫΤετ୯ҐͰϦιʔεΛׂΓͯΔ – ϦΫΤετͷதஅͰͳ͘ܧଓతʹॲཧ͍ͤͨ͞ – ಛఆͷϦιʔεൣғͰॲཧ͍ͤͨ͞ – ಛʹ੍ޚࠔͳ$16%*4,*0Λ੍ޚ͍ͨ͠ 3VCZ,BJHJ
͕ཉ͔ͬͨ͠Ϧιʔε੍ޚ • ཧऀ͕ϓϩάϥϚϒϧʹ੍ޚϧʔϧΛهड़ – ॊೈͰՄಡੑͷߴ੍͍ޚϧʔϧΛදݱ͍ͨ͠ – αʔόϓϩηεͷ࠶ىಈͳ͘ϧʔϧΛมߋ͍ͨ͠ – ϧʔϧ͕ΦʔόʔϔουʹͳΒͳ͍Α͏ʹ͍ͨ͠ •
ϦΫΤετ୯ҐͰϦιʔεΛׂΓͯΔ – ϦΫΤετͷதஅͰͳ͘ܧଓతʹॲཧ͍ͤͨ͞ – ಛఆͷϦιʔεൣғͰॲཧ͍ͤͨ͞ – ಛʹ੍ޚࠔͳ$16%*4,*0Λ੍ޚ͍ͨ͠ 3VCZ,BJHJ
ͦ͜ͰNPE@NSVCZΛ։ൃͨ͠ 3VCZ,BJHJ
NPE@NSVCZ • "QBDIFIUUQEͷ%4-੍ޚΤϯδϯ • ߴ͔ͭলϝϞϦʹ8FCαʔόΛ੍ޚՄೳ 3VCZ,BJHJ # mrubyTranslateNameFirst “/path/to/proxy.rb”!
! backends = [! "http://192.168.0.101:8888/",! "http://192.168.0.102:8888/",! "http://192.168.0.103:8888/",! ]! ! r = Apache::Request.new! backend = backends[rand(backends.length)] ! r.reverse_proxy backend + r.unparsed_uri!
NPE@NSVCZ • "QBDIFͷػೳ֦ுʹಛԽ – 8FCίϯςϯπ։ൃΛతͱ͠ͳ͍ – ίϯύΠϧίετΛ͍ͨ͘͠ – ػೳ͕ͩίετͰಈ࡞͍ͤͨ͞ • "QBDIFͱNSVCZ – ίΞ͕ඇৗʹখ͘͞ݴޠࣗମͷ࠷దԽ͕༻ҙ – -VBΑΓ8FCܥ։ൃऀͱੑ͕ߴ͍
– طଘख๏ͷվम࠷৽ͷ"QBDIFରԠେม 3VCZ,BJHJ
NPE@NSVCZͷϑοΫϞσϧ 3VCZ,BJHJ ɾ ɾ ɾ αʔόϓϩηε ࢠαʔόϓϩηε" ϦΫΤετॲཧ༻ΠϯλϓϦλ
ىಈ࣌ॲཧ༻ΠϯλϓϦλ ϦΫΤετҎ֎ͷॲཧ༻ΠϯλϓϦλ εΫϦϓτ εΫϦϓτ εΫϦϓτ εΫϦϓτ εΫϦϓτ ੑೳ͕ཁٻ͞ΕΔϑοΫ ΠϯλϓϦλΛڞ༗
NPE@NSVCZΞʔΩςΫνϟʢ௨ৗʣ 3VCZ,BJHJ ߏจղੳ όΠτίʔυੜ 7.্Ͱ࣮ߦʢ"QBDIFΛ੍ޚʣ ϦΫΤετຖʹαʔόϓϩηε͕εΫϦϓτΛϑοΫ εΫϦϓτಡΈࠐΈ ΠϯλϓϦλͱ ϥΠϒϥϦΛڞ༗
όΠτίʔυɺάϩʔόϧมɾΫϥεɺྫ֎ϑϥάΛ։์ • αʔόϓϩηεىಈ࣌ ʹΠϯλϓϦλΛ֬อ • ෳͷεΫϦϓτͰಉ ҰͷΠϯλϓϦλΛ࠶ ར༻ • εΫϦϓτؒͰͰ͖Δ ͚ͩঢ়ଶ͕ׯব͠ͳ͍ Α͏ʹ͢Δ ഉଞॲཧ ϚϧνεϨου8FC αʔόΞʔΩςΫνϟ ʹରԠ
NPE@NSVCZΞʔΩςΫνϟʢΩϟογϡʣ 3VCZ,BJHJ ߏจղੳ όΠτίʔυੜ 7.্Ͱ࣮ߦʢ"QBDIFΛ੍ޚʣ ϦΫΤετຖʹαʔόϓϩηε͕εΫϦϓτΛϑοΫ εΫϦϓτಡΈࠐΈ ΠϯλϓϦλͱ ϥΠϒϥϦΛڞ༗
άϩʔόϧมɾΫϥεɺྫ֎ϑϥάΛ։์ αʔόϓϩηεىಈ࣌ ʹίϯύΠϧ όΠτίʔυςʔϒϧ ʹอଘ όΠτίʔυ*%͔Β औΓग़͠ όΠτίʔυ ςʔϒϧ
NPE@NSVCZ NPE@NSVCZ DBDIF BQBDIIUUQE JOEFYIUNM OHY@NSVCZ OHJOY JOEFYIUNM OHY@NSVCZ DBDIF 3&26&4544&$ NPE@NSVCZOHY@NSVCZ)FMMP8PSME1FSGPSNBODF BCLDOIUUQ
"QBDIFIUUQEઃఆྫ ʢNPE@NSVCZʣ 3VCZ,BJHJ # Normal hook! <Location /mruby-test>! mrubyHandlerMiddle
/path/to/test.rb! </Location>! ! # ByteCode Caching at Start up! <Location /mruby-test-cache>! mrubyHandlerMiddle /path/to/test.rb cache! </Location>
OHJOYઃఆྫ ʢOHY@NSVCZ 3VCZ,BJHJ # Normal hook! location /mruby-test
{! mruby_content_handler /path/to/test.rb;! }! ! # ByteCode Caching at Start up! location /mruby-test-cache {! mruby_content_handler /path/to/test.rb cache;! }
OHJOYઃఆྫ ʢOHY@NSVCZ 3VCZ,BJHJ # Inline code hook! location
/mruby-hello {! mruby_content_handler_code ‘! r = Nginx::Request.new! c = Nginx::Connection.new! ! r.content_type = “text/plain”! Nginx.echo “Hello #{c.remote_ip} World”! ‘;! }
3FWFSTF1SPYZ NPE@NSVCZ 3VCZ,BJHJ # mrubyTranslateNameFirst “/path/to/proxy.rb”! ! backends
= [! "http://192.168.0.101:8888/",! "http://192.168.0.102:8888/",! "http://192.168.0.103:8888/",! ]! ! r = Apache::Request.new! backend = backends[rand(backends.length)] ! r.reverse_proxy backend + r.unparsed_uri!
3FWFSTF1SPYZ OHY@NSVCZ 3VCZ,BJHJ # location /proxy {! #
mruby_set $backend "/path/to/proxy.rb";! # proxy_pass http://$backend;! # }! ! backends = [! "http://192.168.0.101:8888/",! "http://192.168.0.102:8888/",! "http://192.168.0.103:8888/",! ]! ! backends[rand(backends.length)]!
#BTJD"VUIXJUI3FEJT NPE@NSVCZ 3VCZ,BJHJ # <Location /basic/>! # AuthType
basic! # AuthName "Message for clients"! # AuthBasicProvider mruby! # mrubyAuthnCheckPassword /path/to/authn_basic.rb! # require valid-user! # </Location>! ! anp = Apache::AuthnProvider.new! redis = Redis.new "127.0.0.1”, 6379! ! if redis.get(anp.user) == anp.password! Apache.return Apache::AuthnProvider::AUTH_GRANTED! else! Apache.return Apache::AuthnProvider::AUTH_DENIED! end
$POUSPMOHJOYWBSJBCMFT OHY@NSVCZ 3VCZ,BJHJ # http://example.com/vars?name=matsumotory! # location /vars
{! # set $hoge ”100";! # mruby_set_code $foo ‘! # r = Nginx::Request.new! # r.var.hoge.to_i * 2 #=> 200! # ’;! # mruby_content_handler /path/to/var.rb;! # }! r = Nginx::Request.new! Nginx.echo “name: #{r.var.arg_name}” #=> “matsumotory” ! Nginx.echo “hoge: #{r.var.hoge}” #=> “100”! Nginx.echo “foo : #{r.var.foo}” #=> “200”! Nginx.echo “uri : #{r.var.uri}” #=> “/vars”! r.var.hoge = “ngx_mruby”!
NPE@NSVCZͱOHY@NSVCZ • Ͱ͖Δ͚ͩಉ͡هड़Ͱ֦ுͰ͖ΔΑ͏ʹઃܭ • ओཁͳ8FCαʔόͷ࣮ͷҧ͍Λ3VCZ%4-Ͱٵऩ • "QBDIF5SBGpD4FSWFSͷUT@NSVCZ • 3VCZͷΞϓϦέʔγϣϯ։ൃऀ͕։ൃͷԆͰ8FC αʔόͷػೳ֦ுߦ͑Δ
3VCZ,BJHJ
NPE@NSVCZͱOHY@NSVCZ 3VCZ,BJHJ "QBDIF "1* 3VCZTDSJQU NPE@NSVCZ 3VCZTDSJQU ɾ ɾ
ɾ ɾ 3VCZTDSJQUO /HJOY "1* OHY@NSVCZ 3VCZTDSJQU "QBDIF $PSF /HJOY $PSF 3VCZ %4- GPS8FC "QBDIF 5SB⒏D 4FSWFS "1* UT@NSVCZ "QBDIF 5SB⒏D 4FSWFS $PSF SFGIUUQTHJUIVCDPNTZVDSFBNUT@NSVCZ
ಉҰͷهड़ྫʢ)FMMP8PSMEʣ 3VCZ,BJHJ # Output Hello World! if server_name ==
"NGINX"! Server = Nginx! elsif server_name == "Apache"! Server = Apache! elsif server_name == "ApacheTrafficServer"! Server = ATS! end! ! Server.rputs "Hello #{Server.module_name}/ #{Server.module_version} world!"! # mod_mruby => "Hello mod_mruby/1.9.3 world!"! # ngx_mruby => "Hello ngx_mruby/1.3.2 world!"! # ts_mruby => "Hello ts_mruby/0.0.1 world!"
ಉҰͷهड़ྫʢ0VUQVU'JMUFSʣ 3VCZ,BJHJ SFGIUUQICNBUTVNPUPSKQFOUSZ # Markdown convert! if server_name =
“NGINX”! Server = Nginx! elsif server_name == “Apache”! Server = Apache! end! ! f = Server::Filter.new! css = “https://example.com/style.css”! title = “markdown file”! md = Discount.new css, title! ! f.body = md.md2html f.body
ͦͷଞͷԠ༻ • ίʔυͷγϯλοΫεϋΠϥΠτ – 0VUQVUϑΟϧλʔ • ଓʹԠͨ͡ॲཧͷΓସ͑ – ಉ࣌ଓ੍ݶ – ϦόʔεϓϩΩγͷΓସ͑ • %PDLFSͱͷ࿈ܞ
– NPPLKQQPPM – ಈతʹίϯςφݕग़͢ΔϦόʔεϓϩΩγ 3VCZ,BJHJ
͕ཉ͔ͬͨ͠Ϧιʔε੍ޚ • ཧऀ͕ϓϩάϥϚϒϧʹ੍ޚϧʔϧΛهड़ – ॊೈͰՄಡੑͷߴ੍͍ޚϧʔϧΛදݱ͍ͨ͠ – αʔόϓϩηεͷ࠶ىಈͳ͘ϧʔϧΛมߋ͍ͨ͠ – ϧʔϧ͕ΦʔόʔϔουʹͳΒͳ͍Α͏ʹ͍ͨ͠ •
ϦΫΤετ୯ҐͰϦιʔεΛׂΓͯΔ – ϦΫΤετͷதஅͰͳ͘ܧଓతʹॲཧ͍ͤͨ͞ – ಛఆͷϦιʔεൣғͰॲཧ͍ͤͨ͞ – ಛʹ੍ޚࠔͳ$16%*4,*0Λ੍ޚ͍ͨ͠ 3VCZ,BJHJ
NPE@NSVCZ͔ΒDHSPVQTΛ੍ޚ 3VCZ,BJHJ
NPE@NSVCZ NSVCZDHSPVQ • NPE@NSVCZ͔ΒDHSPVQΛ੍ޚ͢Δ – ࢦఆͷ$16ൣғͰॲཧΛܧଓతʹॲཧ 3VCZ,BJHJ r = Apache::Request.new!
! # CPU使用量を1コア10%に制御したい場合! if r.hostname == “matsumoto-r.jp”! cpu = Cgroup::CPU.new “httpd-limited”! cpu.cfs_quota_us = 10000! cpu.create ! cpu.attach! end
৽͍͠Ϧιʔε੍ޚ֓ཁ 3VCZ,BJHJ "QBDIF1SPDFTT NPE@NSVCZ NSVCZ MJCNSVCZB NSVCZDHSPVQ MJCDHSPVQ
-JOVYDHSPVQT • ֤ػೳ୯ମͰಈ࡞Մೳʢૄ݁߹ʣ • NPE@NSVCZ"QBDIFΛNSVCZͰ੍ޚ • NSVCZDHSPVQMJCDHSPVQΛNSVCZͰ੍ޚ • NSVCZ NSVCZDHSPVQ • 3VCZ$ίʔυͰϦιʔεΛ੍ޚՄೳ • ͜ͷϧʔϓ$16Ͱ • ͜ͷॻ͖ग़͠%*4,ॻࠐ.#TFDͰ
৽͍͠Ϧιʔε੍ޚ࣮ 3VCZ,BJHJ "QBDIF4FSWFS1SPDFTT $MJFOU
DHSPVQT DQVDHJ $16 3VCZ%4- $POpH 5BSHFUDQVDHJ $16 $POpH 5BSHFUJPDHJ $16 %JTL8SJUF.#TFD $SFBUF "UUBDI NPE@NSVCZ NSVCZ 3FRVFTU DQVDHJ NSVCZDHSPVQ 3VO 3FTQPOTF %FUBDI
3VCZ%4-ʹΑΔ੍ޚϧʔϧྫ 3VCZ,BJHJ r = Apache::Request.new! ! if r.filename ==
“/path/to/cpu.cgi”! cpu = Cgroup::CPU.new “cpu_group”! # CPUを10%に制御したい場合! cpu.cfs_quota_us = 10000! cpu.create ! cpu.attach! end
3VCZ%4-ʹΑΔ੍ޚϧʔϧྫ 3VCZ,BJHJ r = Apache::Request.new! ! if r.hostname ==
“example.com”! cpu = Cgroup::CPU.new “cpu_group”! # CPUを10%に制御したい場合! cpu.cfs_quota_us = 10000! cpu.create ! cpu.attach! end
3VCZ%4-ʹΑΔ੍ޚϧʔϧྫ 3VCZ,BJHJ r = Apache::Request.new! ! if r.user== “matsumotory”!
cpu = Cgroup::CPU.new “cpu_group”! # CPUを10%に制御したい場合! cpu.cfs_quota_us = 10000! cpu.create ! cpu.attach! end
3VCZ%4-ʹΑΔ੍ޚϧʔϧྫ 3VCZ,BJHJ r = Apache::Request.new! ! if r.method== “POST”!
cpu = Cgroup::CPU.new “cpu_group”! # CPUを10%に制御したい場合! cpu.cfs_quota_us = 10000! cpu.create ! cpu.attach! end
3VCZ%4-ʹΑΔ੍ޚϧʔϧྫ 3VCZ,BJHJ r = Apache::Request.new! ! if r.finfo.user ==
500! cpu = Cgroup::CPU.new “cpu_group”! # CPUを10%に制御したい場合! cpu.cfs_quota_us = 10000! cpu.create ! cpu.attach! end
3VCZ%4-ʹΑΔ੍ޚϧʔϧྫ 3VCZ,BJHJ r = Apache::Request.new! ! if r.finfo.group ==
300! cpu = Cgroup::CPU.new “cpu_group”! # CPUを10%に制御したい場合! cpu.cfs_quota_us = 10000! cpu.create ! cpu.attach! end
3VCZ%4-ʹΑΔ੍ޚϧʔϧྫ 3VCZ,BJHJ r = Apache::Request.new! ! if r.finfo.size >
3000! cpu = Cgroup::CPU.new “cpu_group”! # CPUを10%に制御したい場合! cpu.cfs_quota_us = 10000! cpu.create ! cpu.attach! end
3VCZ%4-ʹΑΔ੍ޚϧʔϧྫ 3VCZ,BJHJ if resource.most_heavy_hosts.include? r.hostname! # 1コアの100%固定でしか使えない、全タスクが1コア内で処理 c =
Cgroup::CPU.new "httpd-static-limited"! c.cfs_quota_us = 100000! Apache::Resource.attach_cgroup c, "httpd-static-limited"! elsif resource.heavy_hosts.include? r.hostname! # 全CPUの25%(コア含む)のリソースを分配、コアが24個の場合最大6コア内で分配 # httpd グループと競合しない場合は100%(全コア)使用 c = Cgroup::CPU.new "httpd-limited"! c.shares = 25! Apache::Resource.attach_cgroup c, "httpd-limited"! else! # 全CPUの75%(コア含む)のリソースを分配、コアが24個の場合最大18コア内で分配 # httpd-limited グループと競合しない場合は100%(全コア)使用 c = Cgroup::CPU.new "httpd"! c.shares = 75! Apache::Resource.attach_cgroup c, "httpd"! end SFGIUUQTHJUIVCDPNNBUTVNPUPSNPE@NSVCZDPOUSPMDQVGPSWIPTU
Ϧιʔε੍ޚΛಈ͔ͯ͠Έͨ 3VCZ,BJHJ
࣮ݧڥ ΫϥΠΞϯτ $16 *OUFM$PSF%VP&()[ .FNPSZ (# /*$ 3FBMUFL35-#(CQT 04 'FEPSB-JOVYLFSOFM
3VCZ,BJHJ αʔό $16 *OUFM$PSFJ,()[ .FNPSZ (# /*$ *OUFM*7(CQT 04 'FEPSB-JOVYLFSOFM .JEEMF8BSF 8FCTFSWFS "QBDIF
ධՁʢ̍ʣ • Ϧιʔε੍ޚಋೖʹΑΔΦʔόʔϔουͷධՁ – l)FMMP8PSMEzΛग़ྗ͢Δ͚ͩͷ)5.-ϑΝΠϧ – Ϧιʔε੍ޚΛಋೖ͠ͳ͍߹ – Ϧιʔε੍ޚΛಋೖ͢Δ͕Ϧιʔε੍ޚ͠ͳ͍߹ –
BCίϚϯυͰಉ࣌ଓɺ૯ଓສ • ݁Ռ – ఏҊख๏Λະಋೖ࣌ɿ SFRVFTUTFD – ఏҊख๏Λಋೖ࣌ ɹ SFRVFTUTFD 3VCZ,BJHJ
ධՁʢ̎ʣ • Ϧιʔε੍ޚͷਫ਼ධՁ – $(*Λ$16༻ʹϦιʔε੍ޚ – $16ˋ༻͢Δϧʔϓ$(*Λ༻ – ϦΫΤετॲཧ͕࣌ؒ$16༻࣌ؒͱݟͳͤΔ –
ϧʔϓճʹΑͬͯϦΫΤετॲཧ࣌ؒΛมԽ – ϦΫΤετॲཧ࣌ؒΛมಈͤ͞ੑೳ੍ޚΛଌఆ ˞ੑೳ੍ޚɿ ϦΫΤετॲཧ࣌ؒ ੍ޚແ͠ ϦΫΤετॲཧ࣌ؒ ੍ޚ༗Γ 3VCZ,BJHJ
ੑೳ੍ޚ
ੑೳ੍ޚʢʣ $(*ͷ$16༻࣌ؒʹϦΫΤετॲཧ࣌ؒʢNTFDʣ ੑೳ੍ޚ 3VCZ,BJHJ
ߟ • Ϧιʔε੍ޚΑΓ੍͘ޚ͞ΕΔ߹ – ϦΫΤετॲཧ͕࣌ؒNTFDҎԼ – ϓϩηεΛԾϦιʔεྖҬʹ͢Δॲཧ͕ Φʔόʔϔου • దʹϦιʔε੍ޚͰಈ࡞͢Δʹ
– ൺֱతॲཧ࣌ؒͷ͍ίϯςϯπ – ຊ࣮ݧڥͰNTFDҎ্ ʢ$16༻࣌ؒʹϦΫΤετॲཧ࣌ؒͷ߹ʣ – ͱ͍͑ҎԼͳͷͰؾʹ͠ͳͯ͘ྑ͍ʁ 3VCZ,BJHJ
·ͱΊ 3VCZ,BJHJ
·ͱΊ • ϦΫΤετ୯ҐͰϦιʔε੍ޚ – MJCDHSPVQΛNSVCZͰ੍ޚ͢ΔͨΊͷNHFN – ͦͷNHFNΛNPE@NSVCZʹϦϯΫ͢Δ • ཧऀ͕ϓϩάϥϚϒϧʹ੍ޚϧʔϧΛهड़ –
ͦͷͨΊʹNPE@NSVCZ͕ඞཁͩͬͨ • NPE@NSVCZͱOHY@NSVCZ – Ϣʔεέʔε͕ͪ´ – ϗεςΟϯάେखࣾͰͷ࠾༻ࣄҊ – ͕ࣗब৬ͯ͠ӡ༻ͯ͠ΈΔ 3VCZ,BJHJ
࠷ޙʹ։ൃৼΓฦΓͱ͜Ε͔Β 3VCZ,BJHJ
ٕज़ऀ͔Βݚڀऀ • େࡕͷখ͞ͳϚϯγϣϯͰਓͰݚڀ – ձࣾʹߦ͔ͣاۀͱͷͳ͍ – େֶʹߦ͔ͣʹͻͨ͢Βࢠҭͯ – ՈͰͻͨ͢ΒݚڀɾϒϩάΛॻ͍ͯ –
ਓͩͱࢥ͍ͬͯͨ • Πϯλʔωοτͷӟຊͩͬͨ – ίʔυΛެ։͠ϒϩάΛॻ͘ – ͍͔ͭ୭͔͕ؾ͍ͮͯ͘ΕΔ – ϒϩάͷڞ༗ϑΟʔυόοΫΛͯ͘͠ΕΔ – ਓͰͳ͔ͬͨ 3VCZ,BJHJ
ٕज़ऀͱݚڀऀͷڱؒ • ݚڀͷΞΠσΞਐΛϒϩάʹॻ͘ – Ұ෦ͷݚڀऀ͔ΒආΛड͚Δ – ॴɾॴ྆ํ͕͋ΔͷͰΜͩ • ݚڀࣨͷϘε͜͏ݴͬͯԼͬͨ͞ ʮੲͷΓํʹनΘΕͳͯ͘ྑ͍Ͱ͢ɻদຊ͞Μ͕ྑ͍
ͱࢥ͏ΓํͰ͖ͳΑ͏ʹͬͯԼ͍͞ɻࠓͷΓ ํɺྑ͍ͱࢥ͍·͢Αɻʯ • ٹΘΕͨ – ͜Ε͕ແ͚Ε͜͜ʹ͍ͳ͔ͬͨ – اۀ͔Βେֶʹ࠷ॳͷҰาΛ౿Έग़ͯ͠ྑ͔ͬͨ 3VCZ,BJHJ
ฏຌͳࣄͷੵΈॏͶ • ͍͠ࣄ΄ͱΜͲ͍ͬͯͳ͍ – ฏຌͳՌͷެ։ΛڪΕ͍͚ͯͳ͍ – ฏຌͳύονϒϩάΛίπίπॻ͘ – ͋·Γߟ͑ͣʹͱΓ͋͑ͣॻ͍ͯΈΔ • ฏຌͳࣄͷੵΈॏͶ͕ྑ͍ʹ – ࣌ؒͱڞʹྑ͍ʹมΘ͍ͬͯΔࣄʹؾͮ͘ – Πϯλʔωοτؾ͍ͮͯ͘ΕΔ
– ͳΜͰͳ͍ࣄΛੵΈॏͶܧଓ͢Δࣄ͕େࣄ 3VCZ,BJHJ
͜Ε͔Β • NPE@NSVCZͱOHY@NSVCZ – Ϣʔεέʔε͕ͪ´ – ϗεςΟϯάେखࣾͰͷ࠾༻ࣄҊ – ͕ࣗब৬ͯ͠ӡ༻ͯ͠ΈΔ • ͱʹ͔͘࠷ॳͷҰาΛ౿Έग़ͯ͠ΈΔ • ͳΜͰͳ͍ࣄΛੵΈॏͶ͍ͯ͘
• େֶΛमྃ͢Δ 3VCZ,BJHJ