ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã®å æ¬çãªæ¢æ±ããããã°ãã»ãã¥ãªãã£ãããã©ãŒãã³ã¹æé©åã«ããããã®å¿çšãšå«ççèå¯ã
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ïŒã©ã³ã¿ã€ã ã³ãŒã倿޿è¡
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯ãéçºè ãããã°ã©ã ã®ãã€ãã³ãŒãã倿Žããããšã§ãå®è¡æã«ãã®åäœãä¿®æ£ã§ãã匷åãªæè¡ã§ãããã®åçãªå€æŽã¯ããããã°ãããã©ãŒãã³ã¹ç£èŠããã»ãã¥ãªãã£åŒ·åãã¢ã¹ãã¯ãæåããã°ã©ãã³ã°ïŒAOPïŒã«è³ããŸã§ãããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã«éãéããŸããããããæœåšçãªãªã¹ã¯ãå«ççèå¯ã䌎ããããããæ éã«å¯ŸåŠããå¿ èŠããããŸãã
ãã€ãã³ãŒãã®çè§£
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ãæãäžããåã«ããã€ãã³ãŒããšã¯äœãããããŠãããç°ãªãã©ã³ã¿ã€ã ç°å¢ã§ã©ã®ããã«æ©èœããããçè§£ããããšãéèŠã§ãããã€ãã³ãŒãã¯ãJavaãC#ã®ãããªé«æ°Žæºèšèªããã³ã³ãã€ã©ã«ãã£ãŠçæãããããã©ãããã©ãŒã ã«äŸåããªãããã°ã©ã ã³ãŒãã®äžé衚çŸã§ãã
Javaãã€ãã³ãŒããšJVM
Javaãšã³ã·ã¹ãã ã§ã¯ããœãŒã¹ã³ãŒãã¯Javaä»®æ³ãã·ã³ïŒJVMïŒä»æ§ã«æºæ ãããã€ãã³ãŒãã«ã³ã³ãã€ã«ãããŸãããã®ãã€ãã³ãŒãã¯JVMã«ãã£ãŠå®è¡ãããJVMã¯ãã€ãã³ãŒããè§£éãããããŸãã¯ãžã£ã¹ãã€ã³ã¿ã€ã ïŒJITïŒã³ã³ãã€ã«ããŠãåºç€ãšãªãããŒããŠã§ã¢ã§å®è¡ã§ãããã·ã³ã³ãŒãã«å€æããŸããJVMã¯ãJavaããã°ã©ã ãåã³ã³ãã€ã«ãå¿ èŠãšããã«ãç°ãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãããŒããŠã§ã¢ã¢ãŒããã¯ãã£ã§å®è¡ã§ããæœè±¡åã®ã¬ãã«ãæäŸããŸãã
.NETäžéèšèªïŒILïŒãšCLR
åæ§ã«ã.NETãšã³ã·ã¹ãã ã§ã¯ãC#ãVB.NETã®ãããªèšèªã§æžããããœãŒã¹ã³ãŒãã¯ãCommon Intermediate LanguageïŒCILïŒïŒãã°ãã°MSILïŒMicrosoft Intermediate LanguageïŒãšåŒã°ããïŒã«ã³ã³ãã€ã«ãããŸãããã®ILã¯ãJVMã®.NETçã§ããCommon Language RuntimeïŒCLRïŒã«ãã£ãŠå®è¡ãããŸããCLRã¯ããžã£ã¹ãã€ã³ã¿ã€ã ã³ã³ãã€ã«ãã¡ã¢ãªç®¡çãå«ãåæ§ã®æ©èœãæãããŸãã
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ãšã¯ïŒ
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯ãããã°ã©ã ã®ãã€ãã³ãŒããå®è¡æã«å€æŽããããšãå«ã¿ãŸãããã®å€æŽã«ã¯ãæ°ããåœä»€ã®è¿œå ãæ¢åã®åœä»€ã®çœ®ãæãããŸãã¯åœä»€ã®å®å šãªåé€ãå«ãŸããŸããç®çã¯ãå ã®ãœãŒã¹ã³ãŒãã倿Žããããã¢ããªã±ãŒã·ã§ã³ãåã³ã³ãã€ã«ãããããããšãªããããã°ã©ã ã®åäœã倿Žããããšã§ãã
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã®äž»ãªå©ç¹ã¯ãã¢ããªã±ãŒã·ã§ã³ãåèµ·åãããããã®åºç€ãšãªãã³ãŒãã倿Žãããããããšãªããã¢ããªã±ãŒã·ã§ã³ã®åäœãåçã«å€æŽã§ããããšã§ããããã«ãããæ¬¡ã®ãããªã¿ã¹ã¯ã«ç¹ã«åœ¹ç«ã¡ãŸãã
- ãããã°ãšãããã¡ã€ãªã³ã°: ãœãŒã¹ã³ãŒãã倿Žããã«ãã¢ããªã±ãŒã·ã§ã³ã«ãã®ã³ã°ãããã©ãŒãã³ã¹ç£èŠã³ãŒãã远å ããã
- ã»ãã¥ãªãã£: ã¢ã¯ã»ã¹å¶åŸ¡ãè匱æ§ãããé©çšãªã©ã®ã»ãã¥ãªãã£å¯Ÿçãå®è¡æã«å®è£ ããã
- ã¢ã¹ãã¯ãæåããã°ã©ãã³ã°ïŒAOPïŒ: ãã®ã³ã°ããã©ã³ã¶ã¯ã·ã§ã³ç®¡çãã»ãã¥ãªãã£ããªã·ãŒãªã©ã®æšªæçé¢å¿äºããã¢ãžã¥ãŒã«åããåå©çšå¯èœãªæ¹æ³ã§å®è£ ããã
- ããã©ãŒãã³ã¹æé©å: ã©ã³ã¿ã€ã ã®ããã©ãŒãã³ã¹ç¹æ§ã«åºã¥ããŠã³ãŒããåçã«æé©åããã
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã®æè¡
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ãå®è¡ããããã«ãããã€ãã®æè¡ã䜿çšã§ããããããã«é·æãšçæããããŸãã
1. ã€ã³ã¹ãã¥ã«ã¡ã³ããŒã·ã§ã³ã©ã€ãã©ãª
ã€ã³ã¹ãã¥ã«ã¡ã³ããŒã·ã§ã³ã©ã€ãã©ãªã¯ãå®è¡æã«ãã€ãã³ãŒãã倿Žããããã®APIãæäŸããŸãããããã®ã©ã€ãã©ãªã¯éåžžãã¯ã©ã¹ããŒãããã»ã¹ãååããã¯ã©ã¹ãJVMãŸãã¯CLRã«ããŒãããããšãã«ãã®ãã€ãã³ãŒãã倿Žããããšã«ãã£ãŠæ©èœããŸããäŸãšããŠã¯æ¬¡ã®ãã®ããããŸãã
- ASM (Java): ãã€ãã³ãŒã倿Žã现ããå¶åŸ¡ã§ããã匷åã§åºã䜿çšãããŠããJavaãã€ãã³ãŒãæäœãã¬ãŒã ã¯ãŒã¯ã
- Byte Buddy (Java): JVMçšã®é«ã¬ãã«ãªã³ãŒãçæããã³æäœã©ã€ãã©ãªããã€ãã³ãŒãæäœãç°¡çŽ åããæµæ¢ãªAPIãæäŸããŸãã
- Mono.Cecil (.NET): .NETã¢ã»ã³ããªã®èªã¿æžããæäœã®ããã®ã©ã€ãã©ãªãããã«ããã.NETã¢ããªã±ãŒã·ã§ã³ã®ILã³ãŒãã倿Žã§ããŸãã
äŸ (ASMã䜿çšããJava):
Calculatorãšããååã®ã¯ã©ã¹ã®calculateSumãšããã¡ãœããã«ãã°ã远å ããããšããŸããASMã䜿çšãããšãCalculatorã¯ã©ã¹ã®ããŒããååããcalculateSumã¡ãœãããå®è¡ãããååŸã«ãã°ã¹ããŒãã¡ã³ããå«ãããã«å€æŽã§ããŸãã
ClassReader cr = new ClassReader("Calculator");
ClassWriter cw = new ClassWriter(cr, 0);
ClassVisitor cv = new ClassVisitor(ASM7, cw) {
@Override
public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
MethodVisitor mv = super.visitMethod(access, name, descriptor, signature, exceptions);
if (name.equals("calculateSum")) {
return new AdviceAdapter(ASM7, mv, access, name, descriptor) {
@Override
protected void onMethodEnter() {
visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
visitLdcInsn("Entering calculateSum method");
visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);
}
@Override
protected void onMethodExit(int opcode) {
visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
visitLdcInsn("Exiting calculateSum method");
visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);
}
};
}
return mv;
}
};
cr.accept(cv, 0);
byte[] modifiedBytecode = cw.toByteArray();
// Load the modified bytecode into the classloader
ãã®äŸã¯ãASMã䜿çšããŠã¡ãœããã®æåãšæåŸã«ã³ãŒããæ¿å
¥ããæ¹æ³ã瀺ããŠããŸãããã®æ¿å
¥ãããã³ãŒãã¯ã³ã³ãœãŒã«ã«ã¡ãã»ãŒãžãåºåããå
ã®ãœãŒã¹ã³ãŒãã倿ŽããããšãªããcalculateSumã¡ãœããã«å¹æçã«ãã®ã³ã°ã远å ããŸãã
2. åçãããã·
åçãããã·ã¯ãäžããããã€ã³ã¿ãŒãã§ãŒã¹ãŸãã¯äžé£ã®ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ãããããã·ãªããžã§ã¯ããå®è¡æã«äœæã§ãããã¶ã€ã³ãã¿ãŒã³ã§ãããããã·ãªããžã§ã¯ãã§ã¡ãœãããåŒã³åºããããšããã®åŒã³åºãã¯ååããããã³ãã©ã«è»¢éãããŸãããã³ãã©ã¯ãå ã®ã¡ãœãããåŒã³åºãååŸã«ã远å ã®ããžãã¯ãå®è¡ã§ããŸãã
åçãããã·ã¯ããã®ã³ã°ããã©ã³ã¶ã¯ã·ã§ã³ç®¡çãã»ãã¥ãªãã£ãã§ãã¯ãªã©ã®AOPã©ã€ã¯ãªæ©èœã®å®è£ ã«ãã䜿çšãããŸãããããã¯ãçŽæ¥çãªãã€ãã³ãŒãæäœãšæ¯èŒããŠãã¢ããªã±ãŒã·ã§ã³ã®åäœã倿Žããããã®ããã宣èšçã§äŸµå ¥æ§ã®äœãæ¹æ³ãæäŸããŸãã
äŸ (Javaåçãããã·):
public interface MyInterface {
void doSomething();
}
public class MyImplementation implements MyInterface {
@Override
public void doSomething() {
System.out.println("Doing something...");
}
}
public class MyInvocationHandler implements InvocationHandler {
private final Object target;
public MyInvocationHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Before method: " + method.getName());
Object result = method.invoke(target, args);
System.out.println("After method: " + method.getName());
return result;
}
}
// Usage
MyInterface myObject = new MyImplementation();
MyInvocationHandler handler = new MyInvocationHandler(myObject);
MyInterface proxy = (MyInterface) Proxy.newProxyInstance(
MyInterface.class.getClassLoader(),
new Class>[]{MyInterface.class},
handler);
proxy.doSomething(); // This will print the before and after messages
ãã®äŸã¯ãåçãããã·ã䜿çšããŠãªããžã§ã¯ããžã®ã¡ãœããåŒã³åºããååããæ¹æ³ã瀺ããŠããŸããMyInvocationHandlerã¯doSomethingã¡ãœãããååããã¡ãœãããå®è¡ãããååŸã«ã¡ãã»ãŒãžãåºåããŸãã
3. ãšãŒãžã§ã³ã (Java)
JavaãšãŒãžã§ã³ãã¯ãèµ·åæãŸãã¯å®è¡æã«åçã«JVMã«ããŒãã§ããç¹å¥ãªããã°ã©ã ã§ãããšãŒãžã§ã³ãã¯ã¯ã©ã¹ããŒãã€ãã³ããååããã¯ã©ã¹ãããŒãããããšãã«ãã®ãã€ãã³ãŒãã倿Žã§ããŸãããããã¯ãJavaã¢ããªã±ãŒã·ã§ã³ã®åäœãã€ã³ã¹ãã¥ã«ã¡ã³ãããã³å€æŽããããã®åŒ·åãªã¡ã«ããºã ãæäŸããŸãã
JavaãšãŒãžã§ã³ãã¯éåžžãæ¬¡ã®ãããªã¿ã¹ã¯ã«äœ¿çšãããŸãã
- ãããã¡ã€ãªã³ã°: ã¢ããªã±ãŒã·ã§ã³ã«é¢ããããã©ãŒãã³ã¹ããŒã¿ãåéããã
- ã¢ãã¿ãªã³ã°: ã¢ããªã±ãŒã·ã§ã³ã®å¥å šæ§ãšã¹ããŒã¿ã¹ãç£èŠããã
- ãããã°: ã¢ããªã±ãŒã·ã§ã³ã«ãããã°æ©èœã远å ããã
- ã»ãã¥ãªãã£: ã¢ã¯ã»ã¹å¶åŸ¡ãè匱æ§ãããé©çšãªã©ã®ã»ãã¥ãªãã£å¯Ÿçãå®è£ ããã
äŸ (JavaãšãŒãžã§ã³ã):
import java.lang.instrument.Instrumentation;
public class MyAgent {
public static void premain(String agentArgs, Instrumentation inst) {
System.out.println("Agent loaded");
inst.addTransformer(new MyClassFileTransformer());
}
}
import java.lang.instrument.ClassFileTransformer;
import java.security.ProtectionDomain;
import java.lang.instrument.IllegalClassFormatException;
import java.io.ByteArrayInputStream;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
public class MyClassFileTransformer implements ClassFileTransformer {
@Override
public byte[] transform(ClassLoader loader, String className, Class> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
try {
if (className.equals("com/example/MyClass")) {
ClassPool classPool = ClassPool.getDefault();
CtClass ctClass = classPool.makeClass(new ByteArrayInputStream(classfileBuffer));
CtMethod method = ctClass.getDeclaredMethod("myMethod");
method.insertBefore("System.out.println(\"Before myMethod\");");
method.insertAfter("System.out.println(\"After myMethod\");");
byte[] byteCode = ctClass.toBytecode();
ctClass.detach();
return byteCode;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
ãã®äŸã¯ãcom.example.MyClassãšããååã®ã¯ã©ã¹ã®ããŒããååããJavassistïŒå¥ã®ãã€ãã³ãŒãæäœã©ã€ãã©ãªïŒã䜿çšããŠãmyMethodã®ååŸã«ã³ãŒããæ¿å
¥ããJavaãšãŒãžã§ã³ãã瀺ããŠããŸãããšãŒãžã§ã³ãã¯-javaagent JVMåŒæ°ã䜿çšããŠããŒããããŸãã
4. ãããã¡ã€ã©ãšãããã¬
å€ãã®ãããã¡ã€ã©ãšãããã¬ã¯ãããã©ãŒãã³ã¹ããŒã¿ãåéãããããã°æ©èœãæäŸããããã«ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³æè¡ã«äŸåããŠããŸãããããã®ããŒã«ã¯éåžžããããã¡ã€ã«ãŸãã¯ãããã°ãããã¢ããªã±ãŒã·ã§ã³ã«ã€ã³ã¹ãã¥ã«ã¡ã³ããŒã·ã§ã³ã³ãŒããæ¿å ¥ãããã®åäœãç£èŠããŠé¢é£ããŒã¿ãåéããŸãã
äŸãšããŠã¯æ¬¡ã®ãã®ããããŸãã
- JProfiler (Java): ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã䜿çšããŠããã©ãŒãã³ã¹ããŒã¿ãåéããåçšJavaãããã¡ã€ã©ã
- YourKit Java Profiler (Java): ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ãå©çšããããäžã€ã®äººæ°ã®ããJavaãããã¡ã€ã©ã
- Visual Studio Profiler (.NET): Visual Studioã«çµã¿èŸŒãŸããŠãããããã¡ã€ã©ã§ãã€ã³ã¹ãã¥ã«ã¡ã³ããŒã·ã§ã³æè¡ã䜿çšããŠ.NETã¢ããªã±ãŒã·ã§ã³ããããã¡ã€ãªã³ã°ããŸãã
ãŠãŒã¹ã±ãŒã¹ãšã¢ããªã±ãŒã·ã§ã³
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯ãããŸããŸãªé åã«ããã£ãŠå¹ åºãå¿çšããããŸãã
1. ãããã°ãšãããã¡ã€ãªã³ã°
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãããã°ãšãããã¡ã€ãªã³ã°ã«éåžžã«è²Žéã§ãããã®ã³ã°ã¹ããŒãã¡ã³ããããã©ãŒãã³ã¹ã«ãŠã³ã¿ããŸãã¯ãã®ä»ã®ã€ã³ã¹ãã¥ã«ã¡ã³ããŒã·ã§ã³ã³ãŒããæ¿å ¥ããããšã§ãéçºè ã¯å ã®ãœãŒã¹ã³ãŒãã倿Žããããšãªããã¢ããªã±ãŒã·ã§ã³ã®åäœã«é¢ããæŽå¯ãåŸãããšãã§ããŸããããã¯ããœãŒã¹ã³ãŒãã®å€æŽãå®çŸäžå¯èœãŸãã¯æãŸãããªãè€éãªã·ã¹ãã ãæ¬çªã·ã¹ãã ããããã°ããå Žåã«ç¹ã«åœ¹ç«ã¡ãŸãã
2. ã»ãã¥ãªãã£åŒ·å
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã匷åããããã«äœ¿çšã§ããŸããäŸãã°ãã¢ã¯ã»ã¹å¶åŸ¡ã¡ã«ããºã ã®å®è£ ãã»ãã¥ãªãã£è匱æ§ã®æ€åºãšé²æ¢ããŸãã¯å®è¡æã®ã»ãã¥ãªãã£ããªã·ãŒã®åŒ·å¶ã«äœ¿çšã§ããŸããã»ãã¥ãªãã£ã³ãŒããã¢ããªã±ãŒã·ã§ã³ã«æ¿å ¥ããããšã§ãéçºè ã¯å ã®ãœãŒã¹ã³ãŒãã倿Žããããšãªããä¿è·å±€ã远å ã§ããŸãã
ã¬ã¬ã·ãŒã¢ããªã±ãŒã·ã§ã³ã«æ¢ç¥ã®è匱æ§ãããã·ããªãªãèããŠã¿ãŸãããããã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã䜿çšãããšãå®å šãªã³ãŒãã®æžãæããšåãããã€ãå¿ èŠãšããã«ãè匱æ§ãåçã«ãããé©çšã§ããŸãã
3. ã¢ã¹ãã¯ãæåããã°ã©ãã³ã° (AOP)
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯ãã¢ã¹ãã¯ãæåããã°ã©ãã³ã°ïŒAOPïŒã®äž»èŠãªã€ããŒãã©ã§ããAOPã¯ããã®ã³ã°ããã©ã³ã¶ã¯ã·ã§ã³ç®¡çãã»ãã¥ãªãã£ããªã·ãŒãªã©ã®æšªæçé¢å¿äºãã¢ãžã¥ãŒã«åããããšãå¯èœã«ããããã°ã©ãã³ã°ãã©ãã€ã ã§ãããã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã䜿çšããããšã§ãéçºè ã¯ãããã®ã¢ã¹ãã¯ããã³ã¢ããžãã¹ããžãã¯ã倿Žããããšãªãã¢ããªã±ãŒã·ã§ã³ã«çµã¿èŸŒãããšãã§ããŸããããã«ãããããã¢ãžã¥ãŒã«åãããä¿å®ãããããåå©çšå¯èœãªã³ãŒããå®çŸããŸãã
äŸãã°ããã¹ãŠã®ãµãŒãã¹ã§äžè²«ãããã®ã³ã°ãå¿ èŠãªãã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ãèããŠã¿ãŸãããããã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ãçšããAOPã䜿çšããããšã§ãåãµãŒãã¹ã®ãã¹ãŠã®é¢é£ã¡ãœããã«èªåçã«ãã®ã³ã°ã远å ããåãµãŒãã¹ã®ã³ãŒãã倿Žããããšãªãäžè²«ãããã®ã³ã°åäœãä¿èšŒã§ããŸãã
4. ããã©ãŒãã³ã¹æé©å
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåçã«æé©åããããã«äœ¿çšã§ããŸããäŸãã°ãã³ãŒãå ã®ãããã¹ããããç¹å®ããŠæé©åããããå®è¡æã«ãã£ãã·ã³ã°ããã®ä»ã®ããã©ãŒãã³ã¹åäžæè¡ãå®è£ ãããããããã«äœ¿çšã§ããŸããæé©åã³ãŒããã¢ããªã±ãŒã·ã§ã³ã«æ¿å ¥ããããšã§ãéçºè ã¯å ã®ãœãŒã¹ã³ãŒãã倿Žããããšãªãããã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
5. åçæ©èœæ³šå ¥
äžéšã®ã·ããªãªã§ã¯ãæ¢åã®ã¢ããªã±ãŒã·ã§ã³ã®ã³ã¢ã³ãŒãã倿Žããããå®å šã«åãããã€ãããããããšãªããæ°ããæ©èœã远å ãããå ŽåããããŸãããã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯ãå®è¡æã«æ°ããã¡ãœãããã¯ã©ã¹ããŸãã¯æ©èœã远å ããããšã§ãåçãªæ©èœæ³šå ¥ãå¯èœã«ããŸããããã¯ãå®éšçãªæ©èœã®è¿œå ãA/Bãã¹ãããŸãã¯ç°ãªããŠãŒã¶ãŒãžã®ã«ã¹ã¿ãã€ãºãããæ©èœã®æäŸã«ç¹ã«åœ¹ç«ã¡ãŸãã
å«ççèå¯ãšæœåšçãªãªã¹ã¯
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯å€§ããªå©ç¹ãæäŸããŸãããæ éã«èæ ®ããå¿ èŠãããå«ççæžå¿µãšæœåšçãªãªã¹ã¯ãæèµ·ããŸãã
1. ã»ãã¥ãªãã£ãªã¹ã¯
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯ã責任ãæã£ãŠäœ¿çšãããªãå Žåãã»ãã¥ãªãã£ãªã¹ã¯ãæãå¯èœæ§ããããŸããæªæã®ããã¢ã¯ã¿ãŒã¯ããã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã䜿çšããŠãã«ãŠã§ã¢ãæ³šå ¥ããããæ©å¯ããŒã¿ãçãã ããã¢ããªã±ãŒã·ã§ã³ã®æŽåæ§ã䟵害ãããããå¯èœæ§ããããŸããäžæ£ãªãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã鲿¢ããæ³šå ¥ãããã³ãŒãã培åºçã«å¯©æ»ãããä¿¡é Œã§ãããã®ã§ããããšãä¿èšŒããããã«ãå ç¢ãªã»ãã¥ãªãã£å¯Ÿçãå®è£ ããããšãäžå¯æ¬ ã§ãã
2. ããã©ãŒãã³ã¹ãªãŒããŒããã
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯ãç¹ã«é床ãŸãã¯éå¹ççã«äœ¿çšãããå Žåãããã©ãŒãã³ã¹ãªãŒããŒããããåŒãèµ·ããå¯èœæ§ããããŸããæ¿å ¥ãããã³ãŒãã¯ã远å ã®åŠçæéãå ããããã¡ã¢ãªæ¶è²»ãå¢ãããããã¢ããªã±ãŒã·ã§ã³ã®éåžžã®å®è¡ãããŒã劚害ãããããå¯èœæ§ããããŸãããã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ãæ éã«èæ ®ãããã®åœ±é¿ãæå°éã«æããããã«æ¿å ¥ãããã³ãŒããæé©åããããšãéèŠã§ãã
3. ä¿å®æ§ãšãããã°
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ä¿å®ãšãããã°ãããå°é£ã«ããå¯èœæ§ããããŸããæ¿å ¥ãããã³ãŒãã¯ãã¢ããªã±ãŒã·ã§ã³ã®å ã®ããžãã¯ãäžæçã«ããçè§£ããã©ãã«ã·ã¥ãŒãã£ã³ã°ãå°é£ã«ããå¯èœæ§ããããŸããæ¿å ¥ãããã³ãŒããæç¢ºã«ææžåãããããã°ããã³ç®¡çã®ããã®ããŒã«ãæäŸããããšãéèŠã§ãã
4. æ³çããã³å«ççæžå¿µ
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯ãç¹ã«ãµãŒãããŒãã£ã¢ããªã±ãŒã·ã§ã³ããã®åæãªãã«å€æŽããããã«äœ¿çšãããå Žåãæ³çããã³å«ççãªæžå¿µãæèµ·ããŸãããœãããŠã§ã¢ãã³ããŒã®ç¥çè²¡ç£æš©ãå°éããã¢ããªã±ãŒã·ã§ã³ã倿Žããåã«èš±å¯ãåŸãããšãéèŠã§ããããã«ããã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã®å«çç圱é¿ãèæ ®ãã責任ããå«ççãªæ¹æ³ã§äœ¿çšãããããšãä¿èšŒããããšãäžå¯æ¬ ã§ãã
äŸãã°ãåçšã¢ããªã±ãŒã·ã§ã³ãæ¹å€ããŠã©ã€ã»ã³ã¹å¶éãåé¿ããããšã¯ãéæ³ãã€éå«ççã§ãã
ãã¹ããã©ã¯ãã£ã¹
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã®ãªã¹ã¯ã軜æžãããã®å©ç¹ãæå€§åããããã«ã¯ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãããšãéèŠã§ãã
- æ§ããã«äœ¿çšãã: ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯ãæ¬åœã«å¿ èŠã§ããããã®å©ç¹ããªã¹ã¯ãäžåãå Žåã«ã®ã¿äœ¿çšããŠãã ããã
- ã·ã³ãã«ã«ä¿ã€: ããã©ãŒãã³ã¹ãšä¿å®æ§ãžã®åœ±é¿ãæå°éã«æãããããæ¿å ¥ããã³ãŒãã¯å¯èœãªéãã·ã³ãã«ãã€ç°¡æœã«ããŠãã ããã
- æç¢ºã«ææžåãã: æ¿å ¥ããã³ãŒãã¯ãçè§£ãšä¿å®ã容æã«ããããã«åŸ¹åºçã«ææžåããŠãã ããã
- å³å¯ã«ãã¹ããã: æ¿å ¥ããã³ãŒãã¯ããã°ãã»ãã¥ãªãã£è匱æ§ãå°å ¥ããªãããšã確å®ã«ããããã«å³å¯ã«ãã¹ãããŠãã ããã
- é©åã«ä¿è·ãã: äžæ£ãªãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ãé²ããæ¿å ¥ãããã³ãŒããä¿¡é Œã§ãããã®ã§ããããšã確å®ã«ããããã«ãå ç¢ãªã»ãã¥ãªãã£å¯Ÿçãå®è£ ããŠãã ããã
- ããã©ãŒãã³ã¹ãç£èŠãã: ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³åŸã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç£èŠããæªåœ±é¿ããªãããšã確èªããŠãã ããã
- æ³çããã³å«ççå¢çãå°éãã: ãµãŒãããŒãã£ã¢ããªã±ãŒã·ã§ã³ã倿Žããåã«å¿ èŠãªèš±å¯ãšã©ã€ã»ã³ã¹ãããããšã確èªããåžžã«èªåã®è¡åã®å«çç圱é¿ãèæ ®ããŠãã ããã
çµè«
ãã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯ãå®è¡æã®åçãªã³ãŒã倿Žãå¯èœã«ãã匷åãªæè¡ã§ããããã¯ããããã°ã®åŒ·åãã»ãã¥ãªãã£åŒ·åãAOPæ©èœãããã©ãŒãã³ã¹æé©åãªã©ãæ°å€ãã®å©ç¹ãæäŸããŸããããããæ éã«å¯ŸåŠããå¿ èŠãããå«ççèå¯ãšæœåšçãªãªã¹ã¯ãååšããŸãããã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã®æè¡ããŠãŒã¹ã±ãŒã¹ãããã³ãã¹ããã©ã¯ãã£ã¹ãçè§£ããããšã§ãéçºè ã¯ãã®åã責任ãæã£ãŠå¹æçã«æŽ»çšããã¢ããªã±ãŒã·ã§ã³ã®å質ãã»ãã¥ãªãã£ãããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
ãœãããŠã§ã¢ç°å¢ãé²åãç¶ããã«ã€ããŠããã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã¯åçã§é©å¿æ§ã®ããã¢ããªã±ãŒã·ã§ã³ãå¯èœã«ããäžã§ããŸããŸãéèŠãªåœ¹å²ãæããã§ããããéçºè ã¯ããã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³æè¡ã®ææ°ã®é²æ©ã«ã€ããŠåžžã«æ å ±ãå ¥æãã責任ããå«ççãªäœ¿çšã確å®ã«ããããã®ãã¹ããã©ã¯ãã£ã¹ãæ¡çšããããšãäžå¯æ¬ ã§ããããã«ã¯ãç°ãªãæ³åã«ãããæ³ç圱é¿ãçè§£ãããããã«æºæ ããããã«éçºãã©ã¯ãã£ã¹ãé©å¿ãããããšãå«ãŸããŸããäŸãã°ããšãŒãããã®èŠå¶ïŒGDPRïŒã¯ããã€ãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ãå©çšããç£èŠããŒã«ã®å®è£ æ¹æ³ãäœ¿çšæ¹æ³ã«åœ±é¿ãäžããå¯èœæ§ããããããŒã¿ãã©ã€ãã·ãŒãšãŠãŒã¶ãŒã®åæãæ éã«èæ ®ããå¿ èŠããããŸãã