ã³ãŒãçæã«ãããäžé衚çŸïŒIRïŒã®äžçãæ¢æ±ããŸãããã®çš®é¡ãå©ç¹ããããŠå€æ§ãªã¢ãŒããã¯ãã£åãã«ã³ãŒããæé©åããäžã§ã®éèŠæ§ã«ã€ããŠåŠã³ãŸãããã
ã³ãŒãçæïŒäžé衚çŸã®è©³çŽ°è§£èª¬
ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã®é åã«ãããŠãã³ãŒãçæã¯ã³ã³ãã€ã«ããã»ã¹ã«ãããéèŠãªæ®µéã§ããããã¯ãé«ã¬ãã«ããã°ã©ãã³ã°èšèªãããã·ã³ãçè§£ãå®è¡ã§ããäœã¬ãã«ã®åœ¢åŒã«å€æããæè¡ã§ãããããããã®å€æã¯åžžã«çŽæ¥çãªãã®ã§ã¯ãããŸãããå€ãã®å Žåãã³ã³ãã€ã©ã¯äžé衚çŸïŒIRïŒãšåŒã°ãããã®ã䜿çšããŠãäžéçãªã¹ããããèžã¿ãŸãã
äžé衚çŸãšã¯äœãïŒ
äžé衚çŸïŒIRïŒã¯ãã³ã³ãã€ã©ããœãŒã¹ã³ãŒããæé©åãã³ãŒãçæã«é©ãã圢ã§è¡šçŸããããã«äœ¿çšããèšèªã§ãããœãŒã¹èšèªïŒäŸïŒPythonãJavaãC++ïŒãšã¿ãŒã²ããã®ãã·ã³ã³ãŒããã¢ã»ã³ããªèšèªãšã®éã®æ©æž¡ã圹ãšèããŠãã ãããããã¯ããœãŒã¹ç°å¢ãšã¿ãŒã²ããç°å¢ã®äž¡æ¹ã®è€éããåçŽåããæœè±¡åã§ãã
äŸãã°ãPythonã³ãŒããx86ã¢ã»ã³ããªã«çŽæ¥å€æãã代ããã«ãã³ã³ãã€ã©ã¯ãŸããããIRã«å€æããŸãããã®IRã¯ãã®åŸãæé©åãããç¶ããŠã¿ãŒã²ããã¢ãŒããã¯ãã£ã®ã³ãŒãã«å€æãããŸãããã®ã¢ãããŒãã®åã¯ãããã³ããšã³ãïŒèšèªåºæã®è§£æãšæå³è§£æïŒãããã¯ãšã³ãïŒãã·ã³åºæã®ã³ãŒãçæãšæé©åïŒããåé¢ããããšã«ãããŸãã
ãªãäžé衚çŸã䜿çšããã®ãïŒ
IRã®äœ¿çšã¯ãã³ã³ãã€ã©ã®èšèšãšå®è£ ã«ãããŠããã€ãã®äž»èŠãªå©ç¹ãæäŸããŸãã
- ç§»æ€æ§ïŒIRã䜿çšãããšãããèšèªã®åäžã®ããã³ããšã³ãããç°ãªãã¢ãŒããã¯ãã£ãã¿ãŒã²ãããšããè€æ°ã®ããã¯ãšã³ããšçµã¿åãããããšãã§ããŸãã äŸãã°ãJavaã³ã³ãã€ã©ã¯JVMãã€ãã³ãŒããIRãšããŠäœ¿çšããŸãã ããã«ãããJavaããã°ã©ã ã¯åã³ã³ãã€ã«ããããšãªããJVMãå®è£ ãããŠããä»»æã®ãã©ãããã©ãŒã ïŒWindowsãmacOSãLinuxãªã©ïŒã§å®è¡ã§ããŸãã
- æé©åïŒIRã¯ããã°ã©ã ãæšæºåããåçŽåãããåœ¢ã§æäŸããããšãå€ããæ§ã ãªã³ãŒãæé©åãå®è¡ãããããªããŸããäžè¬çãªæé©åã«ã¯ã宿°ç³ã¿èŸŒã¿ããããã³ãŒãåé€ãã«ãŒãå±éãªã©ããããŸããIRãæé©åããããšã¯ããã¹ãŠã®ã¿ãŒã²ããã¢ãŒããã¯ãã£ã«çããå©çããããããŸãã
- ã¢ãžã¥ãŒã«æ§ïŒã³ã³ãã€ã©ã¯æç¢ºãªãã§ãŒãºã«åå²ãããä¿å®ãšæ¹åã容æã«ãªããŸããããã³ããšã³ãã¯ãœãŒã¹èšèªã®çè§£ã«ãIRãã§ãŒãºã¯æé©åã«ãããã¯ãšã³ãã¯ãã·ã³ã³ãŒãã®çæã«éäžããŸãããã®é¢å¿ã®åé¢ã¯ãã³ãŒãã®ä¿å®æ§ãå€§å¹ ã«åäžãããéçºè ãç¹å®ã®åéã«å°éç¥èãéäžãããããšãå¯èœã«ããŸãã
- èšèªã«äŸåããªãæé©åïŒæé©åã¯IRã«å¯ŸããŠäžåºŠèšè¿°ããã°ãå€ãã®ãœãŒã¹èšèªã«é©çšã§ããŸããããã«ãããè€æ°ã®ããã°ã©ãã³ã°èšèªããµããŒãããéã«å¿ èŠãªéè€äœæ¥ã®éãæžããããšãã§ããŸãã
äžé衚çŸã®çš®é¡
IRã«ã¯æ§ã ãªåœ¢åŒããããããããã«é·æãšçæããããŸãã以äžã«äžè¬çãªçš®é¡ãããã€ã玹ä»ããŸãã
1. æœè±¡æ§ææšïŒASTïŒ
ASTã¯ããœãŒã¹ã³ãŒãã®æ§é ãæšã®ããã«è¡šçŸãããã®ã§ãã åŒãæã宣èšãªã©ãã³ãŒãã®ããŸããŸãªéšåéã®ææ³çãªé¢ä¿ãæããŸãã
äŸïŒåŒ `x = y + 2 * z` ãèããŠã¿ãŸãããã ãã®åŒã®ASTã¯æ¬¡ã®ããã«ãªããŸãïŒ
=
/ \
x +
/ \
y *
/ \
2 z
ASTã¯ãæå³è§£æãåãã§ãã¯ãªã©ã®ã¿ã¹ã¯ã®ããã«ãã³ã³ãã€ã«ã®åææ®µéã§äžè¬çã«äœ¿çšãããŸãããããã¯ãœãŒã¹ã³ãŒãã«æ¯èŒçè¿ãããã®å ã®æ§é ã®å€ããä¿æããŠããããããããã°ããœãŒã¹ã¬ãã«ã®å€æã«åœ¹ç«ã¡ãŸãã
2. 3ã¢ãã¬ã¹ã³ãŒãïŒTACïŒ
TACã¯ãååœä»€ãæå€§3ã€ã®ãªãã©ã³ããæã€åœä»€ã®ç·åœ¢ã·ãŒã±ã³ã¹ã§ãã éåžžã`x = y op z` ãšãã圢åŒãåããŸããããã§ `x`ã`y`ã`z` ã¯å€æ°ãŸãã¯å®æ°ã§ã`op` ã¯æŒç®åã§ãã TACã¯ãè€éãªæäœã®è¡šçŸãããåçŽãªäžé£ã®ã¹ãããã«åçŽåããŸãã
äŸïŒåã³åŒ `x = y + 2 * z` ãèããŠã¿ãŸãããã 察å¿ããTACã¯æ¬¡ã®ããã«ãªããããããŸããïŒ
t1 = 2 * z
t2 = y + t1
x = t2
ããã§ã`t1`ãš`t2`ã¯ã³ã³ãã€ã©ã«ãã£ãŠå°å ¥ãããäžæå€æ°ã§ããTACã¯ããã®åçŽãªæ§é ãã³ãŒãã®åæãšå€æã容æã«ãããããæé©åãã¹ã§ãã䜿çšãããŸãããŸãããã·ã³ã³ãŒãã®çæã«ãé©ããŠããŸãã
3. éçåäžä»£å ¥ïŒSSAïŒåœ¢åŒ
SSAã¯TACã®å€åœ¢ã§ãããå倿°ãäžåºŠã ãå€ãä»£å ¥ããã圢åŒã§ãã 倿°ã«æ°ããå€ãä»£å ¥ããå¿ èŠãããå Žåã倿°ã®æ°ããããŒãžã§ã³ãäœæãããŸãã SSAã¯ãåã倿°ãžã®è€æ°ã®ä»£å ¥ã远跡ããå¿ èŠããªããªããããããŒã¿ãããŒè§£æãšæé©åãå€§å¹ ã«å®¹æã«ããŸãã
äŸïŒæ¬¡ã®ã³ãŒãã¹ãããããèããŠã¿ãŸãããïŒ
x = 10
y = x + 5
x = 20
z = x + y
åçã®SSA圢åŒã¯æ¬¡ã®ããã«ãªããŸãïŒ
x1 = 10
y1 = x1 + 5
x2 = 20
z1 = x2 + y1
å倿°ãäžåºŠããä»£å ¥ãããŠããªãããšã«æ³šæããŠãã ããã`x` ãåä»£å ¥ããããšãæ°ããããŒãžã§ã³ `x2` ãäœæãããŸããSSAã¯ã宿°äŒæããããã³ãŒãåé€ãªã©ãå€ãã®æé©åã¢ã«ãŽãªãºã ãåçŽåããŸãã éåžž `x3 = phi(x1, x2)` ãšæžãããPhi颿°ããå¶åŸ¡ãããŒã®åæµç¹ã«ããçŸããŸãããããã¯ãphi颿°ã«å°éããããã«ã©ã®ãã¹ãåããããã«å¿ããŠã`x3` ã `x1` ãŸã㯠`x2` ã®å€ãåãããšã瀺ããŸãã
4. å¶åŸ¡ãããŒã°ã©ãïŒCFGïŒ
CFGã¯ãããã°ã©ã å ã®å®è¡ã®æµãã衚ããŸããããã¯æåã°ã©ãã§ãããããŒãã¯åºæ¬ãããã¯ïŒåäžã®ãšã³ããªãã€ã³ããšãšã°ãžãããã€ã³ããæã€åœä»€ã®ã·ãŒã±ã³ã¹ïŒã衚ãããšããžã¯ãããã®éã®å¯èœãªå¶åŸ¡ãããŒã®é·ç§»ã衚ããŸãã
CFGã¯ãçå倿°è§£æãå°éå®çŸ©ãã«ãŒãæ€åºãªã©ãããŸããŸãªè§£æã«äžå¯æ¬ ã§ãããããã¯ãã³ã³ãã€ã©ãåœä»€ãå®è¡ãããé åºããããŒã¿ãããã°ã©ã ãéããŠã©ã®ããã«æµããããçè§£ããã®ã«åœ¹ç«ã¡ãŸãã
5. æåéå·¡åã°ã©ãïŒDAGïŒ
CFGã«äŒŒãŠããŸãããåºæ¬ãããã¯å ã®åŒã«çŠç¹ãåœãŠãŠããŸããDAGã¯ãæäœéã®äŸåé¢ä¿ãèŠèŠçã«è¡šçŸããå ±ééšååŒã®åé€ãåäžã®åºæ¬ãããã¯å ã§ã®ä»ã®å€æãæé©åããã®ã«åœ¹ç«ã¡ãŸãã
6. ãã©ãããã©ãŒã åºæã®IRïŒäŸïŒLLVM IRãJVMãã€ãã³ãŒãïŒ
äžéšã®ã·ã¹ãã ã§ã¯ããã©ãããã©ãŒã åºæã®IRãå©çšãããŸãã 2ã€ã®èåãªäŸã¯ãLLVM IRãšJVMãã€ãã³ãŒãã§ãã
LLVM IR
LLVMïŒLow Level Virtual MachineïŒã¯ã匷åã§æè»ãªIRãæäŸããã³ã³ãã€ã©åºç€ãããžã§ã¯ãã§ããLLVM IRã¯ãå¹ åºãã¿ãŒã²ããã¢ãŒããã¯ãã£ããµããŒããããå³å¯ã«åä»ããããäœã¬ãã«èšèªã§ããClangïŒCãC++ãObjective-CçšïŒãSwiftãRustãªã©ãå€ãã®ã³ã³ãã€ã©ã§äœ¿çšãããŠããŸãã
LLVM IRã¯ã容æã«æé©åããããã·ã³ã³ãŒãã«å€æãããããã«èšèšãããŠããŸããSSA圢åŒãããŸããŸãªããŒã¿åã®ãµããŒããè±å¯ãªåœä»€ã»ãããªã©ã®æ©èœãåããŠããŸããLLVMã€ã³ãã©ã¹ãã©ã¯ãã£ã¯ãLLVM IRããã³ãŒããåæã倿ãçæããããã®äžé£ã®ããŒã«ãæäŸããŸãã
JVMãã€ãã³ãŒã
JVMïŒJava Virtual MachineïŒãã€ãã³ãŒãã¯ãJavaä»®æ³ãã·ã³ã§äœ¿çšãããIRã§ãã ããã¯JVMã«ãã£ãŠå®è¡ãããã¹ã¿ãã¯ããŒã¹ã®èšèªã§ããJavaã³ã³ãã€ã©ã¯JavaãœãŒã¹ã³ãŒããJVMãã€ãã³ãŒãã«å€æããããã¯JVMãå®è£ ãããŠããä»»æã®ãã©ãããã©ãŒã ã§å®è¡ã§ããŸãã
JVMãã€ãã³ãŒãã¯ããã©ãããã©ãŒã ã«äŸåãããå®å šã§ããããã«èšèšãããŠããŸããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãåçã¯ã©ã¹ããŒãã£ã³ã°ãªã©ã®æ©èœãåããŠããŸããJVMã¯ããã€ãã³ãŒããå®è¡ããã¡ã¢ãªã管çããããã®å®è¡æç°å¢ãæäŸããŸãã
æé©åã«ãããIRã®åœ¹å²
IRã¯ã³ãŒãã®æé©åã«ãããŠéèŠãªåœ¹å²ãæãããŸããããã°ã©ã ãåçŽåããæšæºåããã圢åŒã§è¡šçŸããããšã«ãããIRã¯ã³ã³ãã€ã©ãçæãããã³ãŒãã®ããã©ãŒãã³ã¹ãåäžãããããŸããŸãªå€æãå®è¡ããããšãå¯èœã«ããŸããäžè¬çãªæé©åææ³ã«ã¯ä»¥äžã®ãããªãã®ããããŸãã
- 宿°ç³ã¿èŸŒã¿ïŒã³ã³ãã€ã«æã«å®æ°åŒãè©äŸ¡ããŸãã
- ãããã³ãŒãåé€ïŒããã°ã©ã ã®åºåã«åœ±é¿ãäžããªãã³ãŒããåé€ããŸãã
- å ±ééšååŒã®åé€ïŒåãåŒã®è€æ°ã®åºçŸãåäžã®èšç®ã«çœ®ãæããŸãã
- ã«ãŒãå±éïŒã«ãŒãå¶åŸ¡ã®ãªãŒããŒããããåæžããããã«ã«ãŒããå±éããŸãã
- ã€ã³ã©ã€ã³åïŒé¢æ°åŒã³åºãã®ãªãŒããŒããããåæžããããã«ã颿°åŒã³åºãã颿°ã®æ¬äœã«çœ®ãæããŸãã
- ã¬ãžã¹ã¿å²ãåœãŠïŒã¢ã¯ã»ã¹é床ãåäžãããããã«ã倿°ãã¬ãžã¹ã¿ã«å²ãåœãŠãŸãã
- åœä»€ã¹ã±ãžã¥ãŒãªã³ã°ïŒãã€ãã©ã€ã³ã®å©çšçãåäžãããããã«åœä»€ãäžŠã¹æ¿ããŸãã
ãããã®æé©åã¯IRäžã§å®è¡ãããŸããã€ãŸããã³ã³ãã€ã©ããµããŒããããã¹ãŠã®ã¿ãŒã²ããã¢ãŒããã¯ãã£ã«å©çãããããããšãã§ããŸãã ããã¯IRã䜿çšããäž»èŠãªå©ç¹ã§ãããéçºè ã¯æé©åãã¹ãäžåºŠèšè¿°ããã°ããããåºç¯ãªãã©ãããã©ãŒã ã«é©çšã§ããŸããäŸãã°ãLLVMãªããã£ãã€ã¶ã¯ãLLVM IRããçæãããã³ãŒãã®ããã©ãŒãã³ã¹ãåäžãããããã«äœ¿çšã§ããå€§èŠæš¡ãªæé©åãã¹ã®ã»ãããæäŸããŸããããã«ãããLLVMã®ãªããã£ãã€ã¶ã«è²¢ç®ããéçºè ã¯ãC++ãSwiftãRustãªã©ã®å€ãã®èšèªã®ããã©ãŒãã³ã¹ãåäžãããå¯èœæ§ããããŸãã
广çãªäžé衚çŸã®äœæ
è¯ãIRãèšèšããããšã¯ãããªã±ãŒããªãã©ã³ã¹æèŠãèŠããäœæ¥ã§ãã以äžã«ããã€ãã®èæ ®äºé ãæããŸãïŒ
- æœè±¡åã®ã¬ãã«ïŒ è¯ãIRã¯ããã©ãããã©ãŒã åºæã®è©³çްãé ãã®ã«ååæœè±¡çã§ãããªããã广çãªæé©åãå¯èœã«ããã®ã«ååå ·äœçã§ãªããã°ãªããŸããã éåžžã«é«ã¬ãã«ãªIRã¯ããœãŒã¹èšèªããã®æ å ±ãä¿æããããäœã¬ãã«ã®æé©åãè¡ãã®ãå°é£ã«ãªãå¯èœæ§ããããŸããéåžžã«äœã¬ãã«ãªIRã¯ãã¿ãŒã²ããã¢ãŒããã¯ãã£ã«è¿ãããè€æ°ã®ãã©ãããã©ãŒã ãã¿ãŒã²ããã«ããã®ãå°é£ã«ãªãå¯èœæ§ããããŸãã
- åæã®å®¹æãïŒ IRã¯éçè§£æã容æã«ããããã«èšèšãããã¹ãã§ãã ããã«ã¯ãããŒã¿ãããŒè§£æãåçŽåããSSA圢åŒãªã©ã®æ©èœãå«ãŸããŸãã容æã«åæå¯èœãªIRã¯ãããæ£ç¢ºã§å¹æçãªæé©åãå¯èœã«ããŸãã
- ã¿ãŒã²ããã¢ãŒããã¯ãã£ããã®ç¬ç«æ§ïŒIRã¯ãç¹å®ã®ã¿ãŒã²ããã¢ãŒããã¯ãã£ããç¬ç«ããŠããã¹ãã§ãã ããã«ãããã³ã³ãã€ã©ã¯æé©åãã¹ã«æå°éã®å€æŽã§è€æ°ã®ãã©ãããã©ãŒã ãã¿ãŒã²ããã«ã§ããŸãã
- ã³ãŒããµã€ãºïŒIRã¯ãä¿åããã³åŠçãã³ã³ãã¯ãã§å¹ççã§ããã¹ãã§ããå€§èŠæš¡ã§è€éãªIRã¯ãã³ã³ãã€ã«æéãšã¡ã¢ãªäœ¿çšéãå¢å ãããå¯èœæ§ããããŸãã
å®äžçã§ã®IRã®äŸ
ããã€ãã®äººæ°ã®ããèšèªãã·ã¹ãã ã§IRãã©ã®ããã«äœ¿çšãããŠããããèŠãŠã¿ãŸãããã
- JavaïŒåè¿°ã®ããã«ãJavaã¯JVMãã€ãã³ãŒããIRãšããŠäœ¿çšããŸããJavaã³ã³ãã€ã©ïŒ`javac`ïŒã¯JavaãœãŒã¹ã³ãŒãããã€ãã³ãŒãã«å€æãããããJVMã«ãã£ãŠå®è¡ãããŸããããã«ãããJavaããã°ã©ã ã¯ãã©ãããã©ãŒã ã«äŸåããªããªããŸãã
- .NETïŒ.NETãã¬ãŒã ã¯ãŒã¯ã¯å ±éäžéèšèªïŒCILïŒãIRãšããŠäœ¿çšããŸããCILã¯JVMãã€ãã³ãŒãã«äŒŒãŠãããå ±éèšèªã©ã³ã¿ã€ã ïŒCLRïŒã«ãã£ãŠå®è¡ãããŸããC#ãVB.NETã®ãããªèšèªã¯CILã«ã³ã³ãã€ã«ãããŸãã
- SwiftïŒSwiftã¯LLVM IRãIRãšããŠäœ¿çšããŸããSwiftã³ã³ãã€ã©ã¯SwiftãœãŒã¹ã³ãŒããLLVM IRã«å€æãããããLLVMããã¯ãšã³ãã«ãã£ãŠæé©åããããã·ã³ã³ãŒãã«ã³ã³ãã€ã«ãããŸãã
- RustïŒRustãLLVM IRã䜿çšããŸãã ããã«ãããRustã¯LLVMã®åŒ·åãªæé©åèœåãæŽ»çšããå¹ åºããã©ãããã©ãŒã ãã¿ãŒã²ããã«ããããšãã§ããŸãã
- Python (CPython)ïŒCPythonã¯ãœãŒã¹ã³ãŒããçŽæ¥è§£éããŸãããNumbaã®ãããªããŒã«ã¯LLVMã䜿çšããŠPythonã³ãŒãããæé©åããããã·ã³ã³ãŒããçæãããã®ããã»ã¹ã®äžéšãšããŠLLVM IRãæ¡çšããŠããŸããPyPyã®ãããªä»ã®å®è£ ã§ã¯ãJITã³ã³ãã€ã«ããã»ã¹äžã«ç°ãªãIRã䜿çšããŸãã
IRãšä»®æ³ãã·ã³
IRã¯ä»®æ³ãã·ã³ïŒVMïŒã®åäœã®åºæ¬ã§ããVMã¯éåžžããã€ãã£ãã®ãã·ã³ã³ãŒãã§ã¯ãªããJVMãã€ãã³ãŒããCILãªã©ã®IRãå®è¡ããŸããããã«ãããVMã¯ãã©ãããã©ãŒã ã«äŸåããªãå®è¡ç°å¢ãæäŸã§ããŸããVMã¯ãŸããå®è¡æã«IRã«å¯ŸããŠåçãªæé©åãè¡ããããã©ãŒãã³ã¹ãããã«åäžãããããšãã§ããŸãã
ããã»ã¹ã¯éåžžã以äžã®ã¹ããããå«ã¿ãŸãã
- ãœãŒã¹ã³ãŒãã®IRãžã®ã³ã³ãã€ã«ã
- IRã®VMãžã®ããŒãã
- IRã®è§£éãŸãã¯Just-In-TimeïŒJITïŒã³ã³ãã€ã«ã«ãããã€ãã£ããã·ã³ã³ãŒããžã®å€æã
- ãã€ãã£ããã·ã³ã³ãŒãã®å®è¡ã
JITã³ã³ãã€ã«ã«ãããVMã¯å®è¡æã®æ¯ãèãã«åºã¥ããŠåçã«ã³ãŒããæé©åã§ããéçã³ã³ãã€ã«ã ããããåªããããã©ãŒãã³ã¹ãå®çŸããŸãã
äžé衚çŸã®æªæ¥
IRã®åéã¯ãæ°ãã衚çŸåœ¢åŒãæé©åæè¡ã«é¢ããç¶ç¶çãªç ç©¶ãšãšãã«é²åãç¶ããŠããŸããçŸåšã®ãã¬ã³ãã«ã¯ä»¥äžã®ãããªãã®ããããŸãã
- ã°ã©ãããŒã¹ã®IRïŒã°ã©ãæ§é ã䜿çšããŠãããã°ã©ã ã®å¶åŸ¡ãããŒãšããŒã¿ãããŒãããæç€ºçã«è¡šçŸããŸããããã«ãããããã·ãŒãžã£éè§£æãã°ããŒãã«ãªã³ãŒãç§»åãªã©ãããé«åºŠãªæé©åæè¡ãå¯èœã«ãªããŸãã
- å€é¢äœã³ã³ãã€ã«ïŒæ°åŠçãªææ³ã䜿çšããŠãã«ãŒããé åã¢ã¯ã»ã¹ãåæã»å€æããŸããããã«ãããç§åŠæè¡èšç®ã¢ããªã±ãŒã·ã§ã³ã§å€§å¹ ãªããã©ãŒãã³ã¹åäžãæåŸ ã§ããŸãã
- ãã¡ã€ã³åºæIRïŒæ©æ¢°åŠç¿ãç»ååŠçãªã©ãç¹å®ã®ãã¡ã€ã³ã«åãããŠèª¿æŽãããIRãèšèšããŸããããã«ããããã®ãã¡ã€ã³ã«ç¹åãããããç©æ¥µçãªæé©åãå¯èœã«ãªããŸãã
- ããŒããŠã§ã¢ãæèããIRïŒåºç€ãšãªãããŒããŠã§ã¢ã¢ãŒããã¯ãã£ãæç€ºçã«ã¢ãã«åããIRãããã«ãããã³ã³ãã€ã©ã¯ãã£ãã·ã¥ãµã€ãºãã¡ã¢ãªåž¯åå¹ ãåœä»€ã¬ãã«ã®äžŠåæ§ãªã©ã®èŠå ãèæ ®ããŠãã¿ãŒã²ãããã©ãããã©ãŒã åãã«æé©åãããã³ãŒããçæã§ããŸãã
課é¡ãšèæ ®äºé
å©ç¹ã«ãããããããIRãæ±ãããšã«ã¯ç¹å®ã®èª²é¡ããããŸãã
- è€éãïŒIRãšãã®é¢é£ããè§£æããã³æé©åãã¹ã®èšèšãšå®è£ ã¯ãè€éã§æéã®ãããäœæ¥ã«ãªãå¯èœæ§ããããŸãã
- ãããã°ïŒIRã¬ãã«ã§ã®ã³ãŒãã®ãããã°ã¯ãIRããœãŒã¹ã³ãŒããšå€§å¹ ã«ç°ãªãå¯èœæ§ããããããå°é£ãªå ŽåããããŸãã IRã³ãŒããå ã®ãœãŒã¹ã³ãŒãã«ãããã³ã°ããããã®ããŒã«ãšæè¡ãå¿ èŠã§ãã
- ããã©ãŒãã³ã¹ã®ãªãŒããŒãããïŒã³ãŒããIRã«å€æããããIRãã倿ãããããéã«ãããçšåºŠã®ããã©ãŒãã³ã¹ãªãŒããŒããããçºçããå¯èœæ§ããããŸããIRã䜿çšãã䟡å€ãããããã«ã¯ãæé©åã®å©ç¹ããã®ãªãŒããŒããããäžåããªããã°ãªããŸããã
- IRã®é²åïŒæ°ããã¢ãŒããã¯ãã£ãããã°ã©ãã³ã°ãã©ãã€ã ãç»å Žããã«ã€ããŠãIRããããããµããŒãããããã«é²åããå¿ èŠããããŸããããã«ã¯ç¶ç¶çãªç ç©¶éçºãå¿ èŠã§ãã
çµè«
äžé衚çŸã¯ãçŸä»£ã®ã³ã³ãã€ã©èšèšãšä»®æ³ãã·ã³æè¡ã®åºç€ã§ãããããã¯ãã³ãŒãã®ç§»æ€æ§ãæé©åãã¢ãžã¥ãŒã«æ§ãå¯èœã«ããéèŠãªæœè±¡åãæäŸããŸããããŸããŸãªçš®é¡ã®IRãšãã³ã³ãã€ã«ããã»ã¹ã«ããããããã®åœ¹å²ãçè§£ããããšã§ãéçºè ã¯ãœãããŠã§ã¢éçºã®è€éããšãå¹ççã§ä¿¡é Œæ§ã®é«ãã³ãŒããäœæããéã®èª²é¡ã«ã€ããŠãããæ·±ãçè§£ããããšãã§ããŸãã
æè¡ã鲿©ãç¶ããã«ã€ããŠãIRã¯é«ã¬ãã«ããã°ã©ãã³ã°èšèªãšãé²åãç¶ããããŒããŠã§ã¢ã¢ãŒããã¯ãã£ã®ç¶æ³ãšã®éã®ã®ã£ãããåããäžã§ããŸããŸãéèŠãªåœ¹å²ãæããããšã¯ééããããŸãããããŒããŠã§ã¢åºæã®è©³çŽ°ãæœè±¡åãã€ã€ã匷åãªæé©åãå¯èœã«ãããã®èœåã¯ããœãããŠã§ã¢éçºã«ãšã£ãŠäžå¯æ¬ ãªããŒã«ãšãªã£ãŠããŸãã