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
6
5k
エンジニアのキャリアパスはどう描く? まつもとりーさんと考える後悔しないキャリア選択
matsumoto_r
PRO
10
2k
まつもとりーのこれまでとCOGNANOのこれから
matsumoto_r
PRO
0
290
2022年の研究所の評価制度振り返りと今後
matsumoto_r
PRO
0
710
VUCAワールドから紐解く組織や評価制度の変遷と再設計
matsumoto_r
PRO
9
26k
コンテナの研究開発から学ぶLinuxの要素技術
matsumoto_r
PRO
2
1.5k
開発者体験をさらに向上させる 事業と研究との連携
matsumoto_r
PRO
2
2.3k
企業研究の価値と事業との連携
matsumoto_r
PRO
0
1.3k
誇りを持って研究していくために
matsumoto_r
PRO
1
1.5k
Other Decks in Technology
See All in Technology
リクルートのエンジニア組織を下支えする 新卒の育成の仕組み
recruitengineers
PRO
2
180
OCI Success Journey OCIの何が評価されてる?疑問に答える事例セミナー(2025年2月実施)
oracle4engineer
PRO
2
220
困難を「一般解」で解く
fujiwara3
8
2.4k
20250304_赤煉瓦倉庫_DeepSeek_Deep_Dive
hiouchiy
2
130
20250307_エンジニアじゃないけどAzureはじめてみた
ponponmikankan
2
190
完璧を捨てろ! “攻め”のQAがもたらすスピードと革新/20250306 Hiroki Hachisuka
shift_evolve
0
130
Aurora PostgreSQLがCloudWatch Logsに 出力するログの課金を削減してみる #jawsdays2025
non97
1
250
CSPMとのつきあい方
nantokanare
0
100
30→150人のエンジニア組織拡大に伴うアジャイル文化を醸成する役割と取り組みの変化
nagata03
0
360
AWSではじめる Web APIテスト実践ガイド / A practical guide to testing Web APIs on AWS
yokawasa
8
800
DevinでAI AWSエンジニア製造計画 序章 〜CDKを添えて〜/devin-load-to-aws-engineer
tomoki10
0
220
クラウド関連のインシデントケースを収集して見えてきたもの
lhazy
9
2k
Featured
See All Featured
Visualization
eitanlees
146
15k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.3k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
390
The Pragmatic Product Professional
lauravandoore
32
6.4k
Agile that works and the tools we love
rasmusluckow
328
21k
How STYLIGHT went responsive
nonsquared
99
5.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Making Projects Easy
brettharned
116
6k
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