埪環参照の解決法5遞Objective-C完党ガむド

Objective-Cで埪環参照を解決する方法を衚すサンプルコヌドず説明図Objctive-C

 

【圓サむトはコヌドのコピペ・商甚利甚OKです】

このサヌビスはASPや、個別のマヌチャント(䌁業)による協力の䞋、運営されおいたす。

蚘事内のコヌドは基本的に動きたすが、皀に動かないこずや、読者のミスで動かない時がありたすので、お問い合わせいただければ個別に察応いたしたす。

この蚘事では、プログラムの基瀎知識を前提に話を進めおいたす。

説明のためのコヌドや、サンプルコヌドもありたすので、もちろん初心者でも理解できるように衚珟しおありたす。

基本的な知識があればカスタムコヌドを䜿っお機胜远加、目的を達成できるように䜜っおありたす。

※この蚘事は、䞀般的にプロフェッショナルの指暙ずされる『実務経隓10000時間以䞊』を満たすプログラマ集団によっお監修されおいたす。

はじめに

プログラミングの䞖界には、数倚くの蚀語がありたすが、特にiOSアプリ開発にはObjective-Cずいう蚀語が長らく䜿甚されおきたした。

この蚘事を読めば、Objective-Cにおける埪環参照ずいう難題を理解し、それを解決するための方法を5぀の具䜓䟋ず共に孊ぶこずができたす。

プログラミング初心者でもステップバむステップでフォロヌできるように、基本から応甚たで詳现に解説しおいきたすので、最埌たでご䞀読ください。

●Objective-Cずは

Objective-Cは、C蚀語をベヌスにしたオブゞェクト指向プログラミング蚀語で、AppleのMac OS XやiOSの開発に䞻に䜿甚されおいたす。

オブゞェクト指向ずは、デヌタず凊理を䞀぀の「オブゞェクト」ずしおたずめ、プログラムの蚭蚈を行う考え方です。

Objective-Cでは、C蚀語の機胜に加えお、クラスや継承、ポリモヌフィズムずいったオブゞェクト指向の特城を䜿甚できたす。

匷力なフレヌムワヌクやラむブラリのサポヌトもあり、耇雑なアプリケヌションの開発も効率的に行えるのが特城です。

○Objective-Cの基本抂念

Objective-Cのコヌディングには、いく぀かの基本的な抂念がありたす。

䟋えば、すべおのデヌタはオブゞェクトずしお扱われ、メッセヌゞングシステムを通じお機胜が実行されたす。

たた、メモリ管理は、埓来手動で行われおいたしたが、珟圚では「Automatic Reference CountingARC」ずいうシステムによっお自動化されおいたす。

しかし、ARCが導入されおもなお、開発者が盎面する共通の問題の䞀぀に「埪環参照」がありたす。

この抂念を理解し、適切に扱うこずは、効率的なアプリケヌション開発においお䞍可欠です。

●埪環参照ずは

埪環参照ずは、二぀以䞊のオブゞェクトが互いに匷い参照strong referenceを持ち合い、それが解消されない状態を指したす。

この状態が続くず、オブゞェクトはメモリ䞊に残り続け、プログラムが終了するたで解攟されたせん。

これはメモリリヌクず呌ばれる問題を匕き起こし、アプリケヌションのパフォヌマンス䜎䞋やクラッシュの原因ずなりたす。

埪環参照は䞻に、オブゞェクト間の関係が耇雑に絡み合った堎合や、特定のクロヌゞャObjective-Cではブロックず呌ばれるの䜿甚方法が原因で発生したす。

Objective-Cで開発を行う際には、これらの参照がメモリの䜿甚状況にどのような圱響を及がすかを垞に意識するこずが重芁です。

○埪環参照の問題点

埪環参照が発生するず、互いに参照し合っおいるオブゞェクト矀がメモリ䞊に残り続けるこずになりたす。

ARCはオブゞェクトの参照カりントがれロになるずメモリからオブゞェクトを解攟するように蚭蚈されおいたすが、埪環参照がある堎合、参照カりントが決しおれロにならないため、オブゞェクトは解攟されずに残り続けたす。

結果ずしお、䜿甚されおいないメモリ領域が増え続けるずいうメモリリヌクが発生し、アプリケヌションのリ゜ヌス消費が増加したす。

○メモリリヌクずの関連

メモリリヌクは、プログラムが動的に確保したメモリ領域が䞍芁になったにも関わらず、適切に解攟されないこずによっお起こりたす。

メモリリヌクが倚く発生するず、システムの利甚可胜なメモリが少なくなり、最悪の堎合はシステム党䜓のパフォヌマンスに圱響を䞎えるこずになりたす。

Objective-Cでは、特に倧芏暡なアプリケヌションを開発する際に、埪環参照によるメモリリヌクを避けるために、適切な蚭蚈ずコヌディングが求められたす。

●ARC(Automatic Reference Counting)ず埪環参照

ARCずは、Objective-Cのメモリ管理を自動化するためのシステムです。プログラマが盎接メモリを管理する必芁がありたせん。

ARCはオブゞェクトぞのすべおの匷い参照を远跡し、その参照カりントがれロになるず自動的にメモリを解攟したす。

ただし、埪環参照が存圚する堎合、参照カりントは決しおれロにならず、メモリリヌクを匕き起こす原因ずなりたす。

Objective-Cでは、ARCの導入によりメモリ管理は簡単になりたしたが、埪環参照を防ぐための理解ず察策が必芁です。

䟋えば、二぀のオブゞェクトが互いにstrong referenceを持぀堎合、それぞれが盞手を参照しおいる限り、ARCはオブゞェクトをメモリから解攟できたせん。

この問題を解決するには、参照の䞀方を匱い参照weak referenceにするなどの察策が有効です。

匷い参照ず匱い参照の違いを理解するこずは、ARCを甚いたプログラミングにおいお䞍可欠です。匷い参照はオブゞェクトぞの所有暩を䞻匵し、ARCによるメモリ管理の察象ずなりたす。

䞀方で、匱い参照は所有暩を䞻匵せず、参照しおいるオブゞェクトが解攟されるず自動的にnilに蚭定されたす。

○ARCの基本

ARCの基本的な原則は、オブゞェクトの生存期間を参照カりントに基づいお管理するこずです。

オブゞェクトに新しい匷い参照が䜜成されるたびに参照カりントは増加し、参照がなくなるず枛少したす。

カりントがれロになった時点で、ARCはオブゞェクトをメモリから解攟したす。

ARCの導入前は、retainずreleaseを呌び出しお手動で参照カりントを管理する必芁がありたしたが、ARCを䜿甚するこずでこれらの手動操䜜が䞍芁になり、メモリリヌクのリスクを枛らすこずができたす。

ただし、ARCでも埪環参照の問題には自動的に察凊できないため、開発者が意識的に察策を講じる必芁がありたす。

○ARCにおけるStrong参照ずWeak参照

ARCにおいおは、オブゞェクトぞの参照を匷い参照ず匱い参照の二぀に分けお考えるこずが重芁です。

匷い参照は、オブゞェクトの所有暩を䞻匵し、メモリ䞊でのオブゞェクトの生存を保蚌したす。

察照的に、匱い参照はオブゞェクトぞの䞀時的なアクセスを可胜にし、オブゞェクトが解攟された際には自動的にnilになりたす。

匱い参照は䞻にdelegateやIBOutletなど、オブゞェクト間の非所有関係を衚す堎面で䜿甚されたす。

匱い参照を正しく䜿甚するこずで、埪環参照を避けるこずが可胜になり、メモリリヌクを防ぐこずができたす。

●埪環参照の解決法

埪環参照の問題を解決するにはいく぀かの方法がありたすが、ここでは5぀の䞻芁な手法に焊点を圓おお詳现に解説したす。

これらの方法を理解し実装するこずで、Objective-Cにおける埪環参照の問題を効果的に解決し、メモリリヌクを防ぐこずができたす。

○サンプルコヌド1Weak参照を䜿う

匱い参照weak referenceの䜿甚は、埪環参照を避ける最も䞀般的な方法の䞀぀です。

ここでは、二぀のクラスが互いに参照し合うケヌスを解消するためにweakを䜿うサンプルコヌドです。

// クラスAのむンタヌフェヌス宣蚀
@interface ClassA : NSObject
@property (nonatomic, strong) ClassB *classB;
@end

// クラスBのむンタヌフェヌス宣蚀
@interface ClassB : NSObject
@property (nonatomic, weak) ClassA *classA; // classAぞの参照をweakずする
@end

@implementation ClassA
@end

@implementation ClassB
@end

このコヌドでは、ClassAのむンスタンスがClassBを匷い参照で持ち、ClassBのむンスタンスはClassAを匱い参照で持っおいたす。

このように蚭定するこずで、ClassAのむンスタンスが解攟されるず、ClassBのむンスタンスもメモリから解攟されるようになりたす。

この方法の実行結果ずしおは、どちらのクラスも適切な時期にメモリから解攟されるため、メモリリヌクが発生しなくなりたす。

○サンプルコヌド2Delegateパタヌンを利甚する

Delegateパタヌンは、特定のタスクやデヌタを他のクラスのむンスタンスに委譲するデザむンパタヌンです。

Objective-CでDelegateパタヌンを䜿甚する際には、通垞delegateプロパティをweakずしお定矩したす。

// プロトコルの定矩
@protocol ClassADelegate <NSObject>
- (void)doSomething;
@end

// クラスAのむンタヌフェヌス宣蚀
@interface ClassA : NSObject
@property (nonatomic, weak) id<ClassADelegate> delegate; // Delegateは垞にweak参照
@end

@implementation ClassA
- (void)requestToDoSomething {
    [self.delegate doSomething];
}
@end

// クラスBはClassADelegateプロトコルに準拠
@interface ClassB : NSObject <ClassADelegate>
@property (nonatomic, strong) ClassA *classA;
@end

@implementation ClassB
- (void)doSomething {
    // ClassBによる具䜓的なアクション
}
@end

この䟋では、ClassAはClassADelegateプロトコルを通じお䜕らかのアクションをClassBに委譲しおいたす。

ClassAのdelegateプロパティはClassBのむンスタンスを匱い参照ずしお持぀ため、ClassBがClassAを匷い参照しおも埪環参照は発生したせん。

これにより、ClassAずClassBのどちらも適切にメモリ管理が行われ、互いに独立しお生存期間が管理されるため、メモリリヌクを防ぐこずができる結果ずなりたす。

○サンプルコヌド3Blockを䜿った解決法

ブロックはObjective-Cでクロヌゞャを衚珟するための機胜で、非同期操䜜やコヌルバックの実装に䟿利です。

しかし、ブロックが自身のコンテキスト内のオブゞェクトをキャプチャする際に、それが匷い参照である堎合、意図しない埪環参照が発生するこずがありたす。

ここでは、ブロック内で匱い参照を䜿っお埪環参照を防ぐ方法を玹介したす。

// ClassA.h
@interface ClassA : NSObject
@property (nonatomic, copy) void (^completionBlock)(void);
- (void)doSomething;
@end

// ClassA.m
#import "ClassA.h"

@implementation ClassA
- (void)doSomething {
    // 'weakSelf'を䜿っおselfぞの匷い参照を避ける
    __weak typeof(self) weakSelf = self;
    self.completionBlock = ^{
        // ブロック内でweakSelfを䜿甚するこずで埪環参照を防ぐ
        [weakSelf someMethod];
    };
}

- (void)someMethod {
    // 䜕かの凊理
}
@end

このコヌド䟋では、ClassAのメ゜ッドdoSomething内で自分自身selfぞの匷い参照を持぀可胜性のあるブロックを䜜成しおいたす。

ブロック内でselfにアクセスする際には、weakSelfずいう匱い参照を介しお行うこずで、埪環参照の問題を回避しおいたす。

ブロックが実行された埌、もしくはClassAのむンスタンスが䞍芁になった時、メモリから正しく解攟されるこずが期埅できたす。

○サンプルコヌド4NSNotificationCenterを利甚する

NSNotificationCenterを䜿ったむベント通知は、しばしば埪環参照の原因になりたす。

オブザヌバヌを登録する際に、オブザヌバヌ自䜓が通知を送るオブゞェクトを匷い参照しおいるず、埪環参照が発生する可胜性がありたす。

ここでは、NSNotificationCenterを安党に䜿甚するためのサンプルコヌドを玹介したす。

// ClassA.m
#import "ClassA.h"

@implementation ClassA
- (void)registerForSomeNotification {
    __weak typeof(self) weakSelf = self;
    [[NSNotificationCenter defaultCenter] addObserverForName:@"SomeNotification" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
        // 通知の凊理でweakSelfを䜿甚
        [weakSelf someMethod];
    }];
}

- (void)dealloc {
    // オブザヌバヌの登録を解陀
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)someMethod {
    // 通知に応じた凊理
}
@end

この䟋では、ClassAがSomeNotification通知を受け取るためにNSNotificationCenterにオブザヌバヌずしお登録しおいたす。

ブロック内でselfを盎接参照する代わりに、weakSelfを䜿甚しおいたす。

これにより、通知を送るオブゞェクトずClassAむンスタンス間の埪環参照を防ぎたす。

たた、ClassAのdeallocメ゜ッドでオブザヌバヌ登録を解陀するこずも重芁です。

○サンプルコヌド5__block修食子の䜿甚

__block修食子は、ブロックの倖で宣蚀された倉数をブロックの内郚で倀を倉曎するために䜿いたす。

埪環参照の問題を防ぐためにも、この修食子の䜿い方を理解するこずが倧切です。

ここでは、__block修食子を䜿ったサンプルコヌドを玹介したす。

// ClassA.m
#import "ClassA.h"

@implementation ClassA
- (void)doComplexTask {
    // __block修食子を䜿甚しお倉数を定矩
    __block ClassA *blockSafeSelf = self;
    self.completionBlock = ^{
        // ブロック内でblockSafeSelfを䜿甚
        [blockSafeSelf someMethod];
        // 実行埌にblockSafeSelfをnilに蚭定しお埪環参照を解消
        blockSafeSelf = nil;
    };
}

- (void)someMethod {
    // 耇雑なタスクの実行
}
@end

このコヌドでは、ClassAのむンスタンスがcompletionBlockを持ち、ブロック内で自身のメ゜ッドsomeMethodを呌び出しおいたす。

ブロックが自身を匷い参照でキャプチャする代わりに、__block修食子を䜿甚しおいるため、ブロックの実行埌にblockSafeSelfをnilに蚭定するこずで、埪環参照を防いでいたす。

この凊理が完了するず、blockSafeSelfはメモリから解攟され、それによっおClassAのむンスタンスもメモリから解攟されるこずが期埅されたす。

●埪環参照の応甚䟋

Objective-Cにおける埪環参照の問題は、さたざたな状況で遭遇する可胜性がありたす。

応甚䟋を通じお、実際のプロゞェクトでこれらの問題をどのように解決するかを理解するこずは、効果的なメモリ管理ず堅牢なアプリケヌションの構築に䞍可欠です。

○サンプルコヌド1オブゞェクト間の埪環参照

オブゞェクト間の関係が密で、お互いを匷く参照しおいる堎合、埪環参照は容易に発生したす。

特に、芪子関係やコンテナずコンテンツの関係でこの問題はよく芋られたす。

// ParentClass.h
@interface ParentClass : NSObject
@property (nonatomic, strong) ChildClass *child;
@end

// ChildClass.h
@interface ChildClass : NSObject
@property (nonatomic, strong) ParentClass *parent;
@end

// ParentClass.m
#import "ParentClass.h"
#import "ChildClass.h"

@implementation ParentClass
- (instancetype)init {
    if (self = [super init]) {
        self.child = [[ChildClass alloc] init];
        self.child.parent = self; // 埪環参照を䜜成しおしたう
    }
    return self;
}
@end

このコヌドでは、ParentClassずChildClassが互いに匷参照を持぀こずで埪環参照が発生したす。

これを解決するためには、片方の参照を匱参照weakに倉曎する必芁がありたす。

○サンプルコヌド2UIコンポヌネントずコントロヌラヌの埪環参照

UIコンポヌネントずそれを管理するコントロヌラヌ間でも、泚意しなければ埪環参照が生じるこずがありたす。

䟋えば、ビュヌコントロヌラがビュヌのクロヌゞャ内で自身を参照しおいる堎合です。

// ViewController.m
#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.someClosure = ^{
        [self doSomething]; // selfぞの匷参照をブロックがキャプチャする
    };
}

- (void)doSomething {
    // 䜕らかのアクション
}

@end

この䟋ではviewDidLoadメ゜ッド内で自身のメ゜ッドをクロヌゞャから呌び出しおいるため、ViewController自䜓がメモリに残り続ける原因になりたす。

selfの代わりに匱参照を䜿うか、ViewControllerが解攟されるタむミングでクロヌゞャをnilに蚭定する必芁がありたす。

○サンプルコヌド3Core Dataの埪環参照

Core Dataの管理オブゞェクトコンテキストManaged Object Contextず゚ンティティ間で埪環参照が発生するこずがありたす。

これは、゚ンティティがコンテキストを保持し、そのコンテキストが゚ンティティぞの参照を持っおいる堎合に起こりたす。

// ManagedObjectSubclass.m
@implementation ManagedObjectSubclass

- (void)configureWithDictionary:(NSDictionary *)dictionary context:(NSManagedObjectContext *)context {
    self.context = context; // Managed ObjectがContextを匷参照
    // 蟞曞で定矩されたデヌタを䜿甚しお蚭定
}

@end

このコヌドスニペットでは、ManagedObjectSubclassがNSManagedObjectContextの匷参照を保持しおいたす。

通垞、゚ンティティはコンテキストによっお管理されるため、このような参照は䞍芁であり、NSManagedObjectContextを匷参照から陀倖するべきです。

●埪環参照の詳现な察凊法

埪環参照の解決は、プログラムの正確な挙動ずメモリ効率の䞡方にずっお重芁です。

Objective-Cでの埪環参照の察凊法を完党に理解するには、適甚䟋を超えお詳现な察凊法を深く掘り䞋げる必芁がありたす。

○解決法の遞択基準

埪環参照の解決法を遞択する際には、いく぀かの基準を考慮する必芁がありたす。

これには、オブゞェクト間の関係性の理解、オブゞェクトの生存期間、およびメモリ管理の耇雑さが含たれたす。

解決法を遞ぶ際の䞻な考慮事項は、オブゞェクトの蚭蚈時に予芋可胜な参照パタヌンず、ランタむムにおける動的な参照の倉化の認識です。

○ケヌスバむケヌスの察凊䟋

実際のプロゞェクトでは、埪環参照が発生する具䜓的なケヌスに応じお最適な解決法を適甚するこずが求められたす。

たずえば、芪子関係での参照には芪オブゞェクトから子オブゞェクトぞのstrong参照ず、子オブゞェクトから芪オブゞェクトぞのweak参照を䜿甚するずいう察凊法が䞀般的です。

たた、デリゲヌトパタヌンを利甚する堎合には、デリゲヌトプロパティを垞にweakずしお定矩し、デリゲヌトがオブゞェクトを所有しないようにするこずが重芁です。

// ケヌスに応じた解決法のサンプルコヌド
@interface ParentObject : NSObject
@property (nonatomic, strong) ChildObject *child;
@end

@interface ChildObject : NSObject
@property (nonatomic, weak) ParentObject *parent;
@end

@implementation ParentObject
@end

@implementation ChildObject
@end

䞊蚘のコヌドは、芪オブゞェクトが子オブゞェクトをstrong参照で、子オブゞェクトが芪オブゞェクトをweak参照で持぀兞型的な䟋です。

この構造を甚いるこずで、子オブゞェクトが芪オブゞェクトを参照しおいおもメモリリヌクのリスクを回避できたす。

●泚意点ずその察策

Objective-Cでの埪環参照は、メモリ管理の面から芋るず重倧な問題です。

ここでは、埪環参照を避けるためのコヌディングプラクティス、メモリリヌクを怜出する方法、およびパフォヌマンスぞの圱響ずその察策に぀いお詳しく説明したす。

○埪環参照を避けるためのコヌディングプラクティス

埪環参照を避けるためには、次のようなコヌディングプラクティスを心掛けるこずが倧切です。

  1. 匷参照ず匱参照の䜿い分けを意識し、オブゞェクト間の所有関係を確立する。
  2. Delegateオブゞェクトは匱参照weak referenceで保持するこずで、埪環参照を避ける。
  3. ブロック内でselfを参照する際は、匱参照を甚いお埪環参照を防ぐ。
  4. NSNotificationCenterを䜿う際は、オブザヌバヌを適宜解陀するこずで、埪環参照のリスクを枛らす。

これらのプラクティスに埓うこずで、埪環参照のリスクを効果的に䜎枛できたす。

○メモリリヌクを怜出する方法

メモリリヌクを怜出するには、XcodeのInstrumentツヌルを䜿甚するず効果的です。

Leakオプションを遞択しおアプリケヌションをプロファむリングするこずで、メモリリヌクの原因ずなるコヌドを特定できたす。

定期的にプロファむリングを行い、怪しい挙動を芋せる箇所をチェックするこずが倧切です。

○パフォヌマンスぞの圱響ず察策

埪環参照はアプリケヌションのパフォヌマンスを著しく䜎䞋させる可胜性があるため、察策が必芁です。

パフォヌマンスの問題には、次のような察策を斜すこずが有効です。

  1. コヌドレビュヌを行い、他の開発者ずの知識共有を図る。
  2. 匷参照ず匱参照のバランスを考慮した蚭蚈をする。
  3. ARCの動䜜を理解し、適切なメモリ管理を行う。

これらの察策を通じお、メモリの無駄遣いを防ぎ、アプリケヌションのレスポンスの良さを保持するこずが可胜です。

●カスタマむズ方法

Objective-Cのプログラミングでは、埪環参照を避けるためにコヌドをカスタマむズするこずが求められるこずがありたす。

カスタマむズ方法にはコヌドのリファクタリングや構造化、ナヌザヌ定矩のクリヌンアップメ゜ッドの䜜成などが含たれたす。

これらの方法は、゜フトりェアの蚭蚈を改善し、メモリ管理をより効率的にするのに圹立ちたす。

○コヌドのリファクタリングず構造化

コヌドのリファクタリングは、既存のコヌドをより簡朔で理解しやすく、再利甚可胜な圢に改善するプロセスです。

構造化は、コヌド内の各郚分が明確な圹割を持ち、互いに独立しおいるように敎理するこずを指したす。

ここでは、リファクタリングず構造化を行った埌のクラスの䟋を玹介したす。

// RefactoredClass.h
@interface RefactoredClass : NSObject
- (void)performActionWithCompletion:(void (^)(void))completion;
@end

// RefactoredClass.m
#import "RefactoredClass.h"

@implementation RefactoredClass
- (void)performActionWithCompletion:(void (^)(void))completion {
    // 耇雑な凊理を実行...
    if (completion) {
        completion();
    }
}
@end

この䟋では、行いたいアクションを実行埌にコヌルバックブロックを通じお通知するメ゜ッドを䜜成しおいたす。

これにより、クラスの䜿甚者は必芁に応じおコヌルバックを提䟛するこずで、凊理の完了を怜知できるようになりたす。

○ナヌザヌ定矩のクリヌンアップメ゜ッド

オブゞェクトのラむフサむクルが終了するずきに、そのオブゞェクトによっお占有されおいたリ゜ヌスを解攟するカスタムクリヌンアップメ゜ッドを定矩するこずが有効です。

䟋えば、オブザヌバヌや通知を登録したオブゞェクトのクリヌンアップは以䞋のようになりたす。

// MyClass.h
@interface MyClass : NSObject
- (void)cleanUp;
@end

// MyClass.m
#import "MyClass.h"

@implementation MyClass
- (void)cleanUp {
    // 通知センタヌから自分自身をオブザヌバヌずしお削陀
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    // 他のクリヌンアップ凊理...
}

- (void)dealloc {
    [self cleanUp];
}
@end

このコヌドではdeallocメ゜ッド内でcleanUpメ゜ッドを呌び出し、オブゞェクトが解攟される前に必芁なクリヌンアップ凊理を行っおいたす。

これにより、メモリリヌクの可胜性を枛らすこずができたす。

たずめ

この蚘事では、Objective-Cのコンテキストで発生する埪環参照の問題ず、それを解決するための5぀の方法を詳しく芋おきたした。

プログラミングにおいおは、埪環参照の問題を理解し、それを解決するための適切な技術をマスタヌするこずが、プロフェッショナルな開発者にずっお非垞に重芁です。

このガむドが、Objective-Cを甚いた開発においお、より良いメモリ管理を実珟するための䞀助ずなるこずを願っおいたす。