Djangoã®ã»ãã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã®åãæ¢ããã«ã¹ã¿ã ã»ãã·ã§ã³ããã¯ãšã³ããæ§ç¯ããŸããããã¢ããªã±ãŒã·ã§ã³åºæã®ããŒãºã«åãããŠã»ãã·ã§ã³ã¹ãã¬ãŒãžã調æŽããããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£ãåäžãããæ¹æ³ãåŠã³ãŸãã
Djangoã®è§£æïŒã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ã®ããã®ã«ã¹ã¿ã ã»ãã·ã§ã³ããã¯ãšã³ãã®æ§ç¯
Djangoã®ã»ãã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã¯ããªã¯ãšã¹ãéã§ãŠãŒã¶ãŒåºæã®ããŒã¿ãä¿åããå ç¢ãªæ¹æ³ãæäŸããŸããããã©ã«ãã§ã¯ãDjangoã¯ããŒã¿ããŒã¹ããã£ãã·ã¥ããã¡ã€ã«ããŒã¹ã®ã¹ãã¬ãŒãžãå«ãããã€ãã®çµã¿èŸŒã¿ã»ãã·ã§ã³ããã¯ãšã³ããæäŸããŸããããããã»ãã·ã§ã³ç®¡çã«ãã现ããªå¶åŸ¡ãå¿ èŠãšããèŠæ±ã®å³ããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã«ã¹ã¿ã ã»ãã·ã§ã³ããã¯ãšã³ãã®æ§ç¯ãäžå¯æ¬ ã«ãªããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ãDjangoã®ã»ãã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã®è€éããæ¢ããç¹å®ã®ããŒãºã«åãããŠã«ã¹ã¿ã ããã¯ãšã³ããæ§ç¯ããããã®ç¥èãæäŸããŸãã
Djangoã®ã»ãã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ãçè§£ãã
Djangoã»ãã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã®æ žå¿ã¯ãåãŠãŒã¶ãŒã«äžæã®ã»ãã·ã§ã³IDãå²ãåœãŠãããšã§æ©èœããŸãããã®IDã¯éåžžããã©ãŠã¶ã®Cookieã«ä¿åããããµãŒããŒåŽã®ã¹ãã¬ãŒãžããã»ãã·ã§ã³ããŒã¿ãååŸããããã«äœ¿çšãããŸãããã®ãã¬ãŒã ã¯ãŒã¯ã¯ããã¥ãŒå ã§ã»ãã·ã§ã³ããŒã¿ã«ã¢ã¯ã»ã¹ããã³å€æŽããããã®ã·ã³ãã«ãªAPIãæäŸããŸãããã®ããŒã¿ã¯ãåããŠãŒã¶ãŒããã®è€æ°ã®ãªã¯ãšã¹ãéã§ä¿æããããŠãŒã¶ãŒèªèšŒãã·ã§ããã³ã°ã«ãŒããããŒãœãã©ã€ãºããããšã¯ã¹ããªãšã³ã¹ãªã©ã®æ©èœãå¯èœã«ããŸãã
çµã¿èŸŒã¿ã»ãã·ã§ã³ããã¯ãšã³ãïŒç°¡åãªæŠèŠ
Djangoã¯ãããããã«é·æãšçæãããããã€ãã®çµã¿èŸŒã¿ã»ãã·ã§ã³ããã¯ãšã³ããæäŸããŸãã
- ããŒã¿ããŒã¹ã»ãã·ã§ã³ããã¯ãšã³ã (
django.contrib.sessions.backends.db
): ã»ãã·ã§ã³ããŒã¿ãDjangoããŒã¿ããŒã¹ã«ä¿åããŸããããã¯ä¿¡é Œæ§ã®é«ããªãã·ã§ã³ã§ããããã©ãã£ãã¯ã®å€ããŠã§ããµã€ãã§ã¯ããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ãªãå¯èœæ§ããããŸãã - ãã£ãã·ã¥ã»ãã·ã§ã³ããã¯ãšã³ã (
django.contrib.sessions.backends.cache
): ãã£ãã·ã¥ã·ã¹ãã ïŒäŸïŒMemcachedãRedisïŒãå©çšããŠã»ãã·ã§ã³ããŒã¿ãä¿åããŸããããŒã¿ããŒã¹ããã¯ãšã³ããšæ¯èŒããŠããã©ãŒãã³ã¹ãåäžããŸããããã£ãã·ã³ã°ãµãŒããŒãå¿ èŠã§ãã - ãã¡ã€ã«ããŒã¹ã»ãã·ã§ã³ããã¯ãšã³ã (
django.contrib.sessions.backends.file
): ãµãŒããŒã®ãã¡ã€ã«ã·ã¹ãã äžã®ãã¡ã€ã«ã«ã»ãã·ã§ã³ããŒã¿ãä¿åããŸããéçºçšãŸãã¯å°èŠæš¡ãªãããã€ã¡ã³ãã«ã¯é©ããŠããŸãããã¹ã±ãŒã©ããªãã£ãšã»ãã¥ãªãã£äžã®æžå¿µãããæ¬çªç°å¢ã§ã®äœ¿çšã¯æšå¥šãããŸããã - ãã£ãã·ã¥ããŒã¿ããŒã¹ã»ãã·ã§ã³ããã¯ãšã³ã (
django.contrib.sessions.backends.cached_db
): ããŒã¿ããŒã¹ãšãã£ãã·ã¥ã®ããã¯ãšã³ããçµã¿åãããŸãããã£ãã·ã¥ããã»ãã·ã§ã³ããŒã¿ãèªã¿åãããã£ãã·ã¥ã«ããŒã¿ãèŠã€ãããªãå Žåã¯ããŒã¿ããŒã¹ã«ãã©ãŒã«ããã¯ããŸããã»ãã·ã§ã³ããŒã¿ã¯ãã£ãã·ã¥ãšããŒã¿ããŒã¹ã®äž¡æ¹ã«æžã蟌ãŸããŸãã - CookieããŒã¹ã»ãã·ã§ã³ããã¯ãšã³ã (
django.contrib.sessions.backends.signed_cookies
): ã»ãã·ã§ã³ããŒã¿ããŠãŒã¶ãŒã®Cookieã«çŽæ¥ä¿åããŸããããã«ãããããã€ã¡ã³ãã¯ç°¡çŽ åãããŸãããä¿åã§ããããŒã¿éãå¶éãããæ éã«å®è£ ããªããšã»ãã¥ãªãã£ãªã¹ã¯ãçããŸãã
ãªãã«ã¹ã¿ã ã»ãã·ã§ã³ããã¯ãšã³ããäœæããã®ãïŒ
Djangoã®çµã¿èŸŒã¿ããã¯ãšã³ãã¯å€ãã®ã·ããªãªã«é©ããŠããŸãããã«ã¹ã¿ã ããã¯ãšã³ãã«ã¯ããã€ãã®å©ç¹ããããŸãã
- ããã©ãŒãã³ã¹æé©å: ã¹ãã¬ãŒãžã¡ã«ããºã ãç¹å®ã®ããŒã¿ã¢ã¯ã»ã¹ãã¿ãŒã³ã«åãããããšãã§ããŸããäŸãã°ãç¹å®ã®ã»ãã·ã§ã³ããŒã¿ã«é »ç¹ã«ã¢ã¯ã»ã¹ããå Žåããã®ããŒã¿ã®ã¿ãååŸããããã«ããã¯ãšã³ããæé©åããããŒã¿ããŒã¹ã®è² è·ããã£ãã·ã¥ã®ç«¶åãæžããããšãã§ããŸãã
- ã¹ã±ãŒã©ããªãã£: 倧容éããŒã¿åãã«èšèšãããç¹æ®ãªã¹ãã¬ãŒãžãœãªã¥ãŒã·ã§ã³ãšçµ±åã§ããŸããéåžžã«å€§èŠæš¡ãªã»ãã·ã§ã³ããŒã¿ã»ããã«ã¯ãCassandraãMongoDBã®ãããªNoSQLããŒã¿ããŒã¹ã®äœ¿çšãæ€èšããŠãã ããã
- ã»ãã¥ãªãã£: æå·åãããŒã¯ã³ããŒã¹èªèšŒãªã©ã®ã«ã¹ã¿ã ã»ãã¥ãªãã£å¯Ÿçãå®è£ ããæ©å¯æ§ã®é«ãã»ãã·ã§ã³ããŒã¿ãä¿è·ã§ããŸãã
- æ¢åã·ã¹ãã ãšã®çµ±å: åŸæ¥ã®èªèšŒã·ã¹ãã ããµãŒãããŒãã£ã®ããŒã¿ã¹ãã¢ãªã©ãæ¢åã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãšã·ãŒã ã¬ã¹ã«çµ±åã§ããŸãã
- ã«ã¹ã¿ã ããŒã¿ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³: å¹ççãªããŒã¿ä¿åãšè»¢éã®ããã«ãã«ã¹ã¿ã ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒïŒäŸïŒProtocol BuffersãMessagePackïŒã䜿çšã§ããŸãã
- ç¹å®ã®èŠä»¶: ç°ãªãå°åã®ãŠãŒã¶ãŒã®ã¬ã€ãã³ã·ãæå°éã«æããããã«ãã»ãã·ã§ã³ããŒã¿ãå°ççã«åæ£ããŠä¿åãããªã©ãç¬èªã®ã¢ããªã±ãŒã·ã§ã³èŠä»¶ã«å¯Ÿå¿ã§ããŸãïŒäŸïŒãšãŒãããã®ãŠãŒã¶ãŒã»ãã·ã§ã³ããšãŒãããã®ããŒã¿ã»ã³ã¿ãŒã«ä¿åããïŒã
ã«ã¹ã¿ã ã»ãã·ã§ã³ããã¯ãšã³ãã®æ§ç¯ïŒã¹ããããã€ã¹ãããã¬ã€ã
ã«ã¹ã¿ã ã»ãã·ã§ã³ããã¯ãšã³ããäœæããã«ã¯ãdjango.contrib.sessions.backends.base.SessionBase
ãç¶æ¿ããããã€ãã®äž»èŠãªã¡ãœããããªãŒããŒã©ã€ãããã¯ã©ã¹ãå®è£
ããå¿
èŠããããŸãã
1. æ°ããã»ãã·ã§ã³ããã¯ãšã³ãã¢ãžã¥ãŒã«ãäœæãã
Djangoãããžã§ã¯ãå
ã«æ°ããPythonã¢ãžã¥ãŒã«ïŒäŸïŒmy_session_backend.py
ïŒãäœæããŸãããã®ã¢ãžã¥ãŒã«ã«ã¯ãã«ã¹ã¿ã ã»ãã·ã§ã³ããã¯ãšã³ãã®å®è£
ãå«ãŸããŸãã
2. ã»ãã·ã§ã³ã¯ã©ã¹ãå®çŸ©ãã
ã¢ãžã¥ãŒã«å
ã§ãdjango.contrib.sessions.backends.base.SessionBase
ãç¶æ¿ããã¯ã©ã¹ãå®çŸ©ããŸãããã®ã¯ã©ã¹ãã«ã¹ã¿ã ã»ãã·ã§ã³ããã¯ãšã³ãã衚ããŸãã
3. ã»ãã·ã§ã³ã¹ãã¢ã¯ã©ã¹ãå®çŸ©ãã
ãŸãã`django.contrib.sessions.backends.base.SessionStore`ãç¶æ¿ããã»ãã·ã§ã³ã¹ãã¢ã¯ã©ã¹ãäœæããå¿ èŠããããŸããããã¯ãã»ãã·ã§ã³ããŒã¿ã®å®éã®èªã¿åããæžã蟌ã¿ãåé€ãåŠçããã¯ã©ã¹ã§ãã
```python from django.contrib.sessions.backends.base import SessionStore from django.core.exceptions import SuspiciousOperation class MySessionStore(SessionStore): """ Custom session store implementation. """ def load(self): try: # Load session data from your storage (e.g., database, cache) session_data = self._load_data_from_storage() return self.decode(session_data) except: return {} def exists(self, session_key): # Check if session exists in your storage return self._check_session_exists(session_key) def create(self): while True: self._session_key = self._get_new_session_key() try: # Attempt to save the new session self.save(must_create=True) break except SuspiciousOperation: # Key collision, try again continue def save(self, must_create=False): # Save session data to your storage session_data = self.encode(self._get_session(no_load=self._session_cache is None)) if must_create: self._create_session_in_storage(self.session_key, session_data, self.get_expiry_age()) else: self._update_session_in_storage(self.session_key, session_data, self.get_expiry_age()) def delete(self, session_key=None): if session_key is None: if self.session_key is None: return session_key = self.session_key # Delete session from your storage self._delete_session_from_storage(session_key) def _load_data_from_storage(self): # Implement the logic to retrieve session data from your storage raise NotImplementedError("Subclasses must implement this method.") def _check_session_exists(self, session_key): # Implement the logic to check if session exists in your storage raise NotImplementedError("Subclasses must implement this method.") def _create_session_in_storage(self, session_key, session_data, expiry_age): # Implement the logic to create a session in your storage raise NotImplementedError("Subclasses must implement this method.") def _update_session_in_storage(self, session_key, session_data, expiry_age): # Implement the logic to update the session in your storage raise NotImplementedError("Subclasses must implement this method.") def _delete_session_from_storage(self, session_key): # Implement the logic to delete the session from your storage raise NotImplementedError("Subclasses must implement this method.") ```4. å¿ èŠãªã¡ãœãããå®è£ ãã
MySessionStore
ã¯ã©ã¹ã§ä»¥äžã®ã¡ãœããããªãŒããŒã©ã€ãããŸãã
load()
: ã¹ãã¬ãŒãžã·ã¹ãã ããã»ãã·ã§ã³ããŒã¿ãããŒããããã³ãŒãïŒself.decode()
ã䜿çšïŒããŠèŸæžãšããŠè¿ããŸããã»ãã·ã§ã³ãååšããªãå Žåã¯ã空ã®èŸæžãè¿ããŸããexists(session_key)
: æå®ãããããŒãæã€ã»ãã·ã§ã³ãã¹ãã¬ãŒãžã·ã¹ãã ã«ååšãããã©ããã確èªããŸããã»ãã·ã§ã³ãååšããå Žåã¯True
ããã以å€ã®å Žåã¯False
ãè¿ããŸããcreate()
: æ°ãã空ã®ã»ãã·ã§ã³ãäœæããŸãããã®ã¡ãœããã¯ãäžæã®ã»ãã·ã§ã³ããŒãçæãã空ã®ã»ãã·ã§ã³ãã¹ãã¬ãŒãžã«ä¿åããå¿ èŠããããŸããããŒã®è¡çªãçºçããå¯èœæ§ãåŠçããŠããšã©ãŒãåé¿ããŸããsave(must_create=False)
: ã»ãã·ã§ã³ããŒã¿ãã¹ãã¬ãŒãžã·ã¹ãã ã«ä¿åããŸããmust_create
åŒæ°ã¯ãã»ãã·ã§ã³ãåããŠäœæããããã©ããã瀺ããŸããmust_create
ãTrue
ã®å ŽåãåãããŒãæã€ã»ãã·ã§ã³ãæ¢ã«ååšããå Žåã¯ãã¡ãœããã¯SuspiciousOperation
äŸå€ãçºçãããå¿ èŠããããŸããããã¯ã»ãã·ã§ã³äœææã®ç«¶åç¶æ ãé²ãããã§ããä¿åããåã«ãself.encode()
ã䜿çšããŠããŒã¿ããšã³ã³ãŒãããŸããdelete(session_key=None)
: ã¹ãã¬ãŒãžã·ã¹ãã ããã»ãã·ã§ã³ããŒã¿ãåé€ããŸããsession_key
ãNone
ã®å ŽåãçŸåšã®session_key
ã«é¢é£ä»ããããã»ãã·ã§ã³ãåé€ããŸãã_load_data_from_storage()
: æœè±¡ã¡ãœãããã¹ãã¬ãŒãžããã»ãã·ã§ã³ããŒã¿ãååŸããããžãã¯ãå®è£ ããŸãã_check_session_exists(session_key)
: æœè±¡ã¡ãœãããã¹ãã¬ãŒãžã«ã»ãã·ã§ã³ãååšãããã©ããããã§ãã¯ããããžãã¯ãå®è£ ããŸãã_create_session_in_storage(session_key, session_data, expiry_age)
: æœè±¡ã¡ãœãããã¹ãã¬ãŒãžã«ã»ãã·ã§ã³ãäœæããããžãã¯ãå®è£ ããŸãã_update_session_in_storage(session_key, session_data, expiry_age)
: æœè±¡ã¡ãœãããã¹ãã¬ãŒãžå ã®ã»ãã·ã§ã³ãæŽæ°ããããžãã¯ãå®è£ ããŸãã_delete_session_from_storage(session_key)
: æœè±¡ã¡ãœãããã¹ãã¬ãŒãžããã»ãã·ã§ã³ãåé€ããããžãã¯ãå®è£ ããŸãã
éèŠãªèæ ®äºé ïŒ
- ãšã©ãŒåŠç: ã¹ãã¬ãŒãžã®é害ãé©åã«åŠçããããŒã¿æå€±ãé²ãããã«å ç¢ãªãšã©ãŒåŠçãå®è£ ããŸãã
- äžŠè¡æ§: ã¹ãã¬ãŒãžã·ã¹ãã ãè€æ°ã®ã¹ã¬ãããŸãã¯ããã»ã¹ããã¢ã¯ã»ã¹ãããå ŽåãäžŠè¡æ§ã®åé¡ãèæ ®ããŠãã ãããããŒã¿ç Žæãé²ãããã«é©åãªããã¯ã¡ã«ããºã ã䜿çšããŸãã
- ã»ãã·ã§ã³æå¹æé: æå¹æéãåããã»ãã·ã§ã³ãã¹ãã¬ãŒãžã·ã¹ãã ããèªåçã«åé€ããããã«ãã»ãã·ã§ã³æå¹æéãå®è£
ããŸããDjangoã¯ãã»ãã·ã§ã³ã®æå¹æéãæ±ºå®ããããã®
get_expiry_age()
ã¡ãœãããæäŸããŸãã
5. Djangoãã«ã¹ã¿ã ããã¯ãšã³ãã䜿çšããããã«èšå®ãã
ã«ã¹ã¿ã ã»ãã·ã§ã³ããã¯ãšã³ãã䜿çšããã«ã¯ãsettings.py
ãã¡ã€ã«å
ã®SESSION_ENGINE
èšå®ãæŽæ°ããŸãã
your_app
ãDjangoã¢ããªã±ãŒã·ã§ã³ã®ååã«ãmy_session_backend
ãã»ãã·ã§ã³ããã¯ãšã³ãã¢ãžã¥ãŒã«ã®ååã«çœ®ãæããŠãã ããã
äŸïŒRedisãã»ãã·ã§ã³ããã¯ãšã³ããšããŠäœ¿çšãã
Redisãã«ã¹ã¿ã ã»ãã·ã§ã³ããã¯ãšã³ããšããŠäœ¿çšããå
·äœçãªäŸã§èª¬æããŸãããããŸããredis
Pythonããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãã
次ã«ãmy_session_backend.py
ãã¡ã€ã«ã倿ŽããŠRedisã䜿çšããŸãã
settings.py
ã§èšå®ãå¿ããªãã§ãã ããã
your_app
ã眮ãæããRedisæ¥ç¶ãã©ã¡ãŒã¿ãé©å®æŽæ°ããŠãã ããã
ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé
ã«ã¹ã¿ã ã»ãã·ã§ã³ããã¯ãšã³ããå®è£ ããéãã»ãã¥ãªãã£ã¯æåªå äºé ã§ããã¹ãã§ãã以äžãèæ ®ããŠãã ããã
- ã»ãã·ã§ã³ãã€ãžã£ãã¯: HTTPSã䜿çšããŠã»ãã·ã§ã³Cookieãæå·åããã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒã®è匱æ§ãé²ãããšã§ãã»ãã·ã§ã³ãã€ãžã£ãã¯ããä¿è·ããŸãã
- ã»ãã·ã§ã³åºå®å: ãŠãŒã¶ãŒããã°ã€ã³ããåŸã«ã»ãã·ã§ã³IDãåçæãããªã©ãã»ãã·ã§ã³åºå®åæ»æãé²ãããã®å¯Ÿçãå®è£ ããŸãã
- ããŒã¿æå·å: æ©å¯æ§ã®é«ãã»ãã·ã§ã³ããŒã¿ãæå·åããŠãäžæ£ã¢ã¯ã»ã¹ããä¿è·ããŸãã
- å ¥åæ€èšŒ: ãã¹ãŠã®ãŠãŒã¶ãŒå ¥åãæ€èšŒããã»ãã·ã§ã³ããŒã¿ãå±éºã«ãããå¯èœæ§ã®ããã€ã³ãžã§ã¯ã·ã§ã³æ»æãé²ããŸãã
- ã¹ãã¬ãŒãžã»ãã¥ãªãã£: äžæ£ã¢ã¯ã»ã¹ãé²ãããã«ã»ãã·ã§ã³ã¹ãã¬ãŒãžã·ã¹ãã ãä¿è·ããŸããããã«ã¯ãã¢ã¯ã»ã¹å¶åŸ¡ãªã¹ãããã¡ã€ã¢ãŠã©ãŒã«ãäŸµå ¥æ€ç¥ã·ã¹ãã ã®èšå®ãå«ãŸããå ŽåããããŸãã
å®éã®ãŠãŒã¹ã±ãŒã¹
ã«ã¹ã¿ã ã»ãã·ã§ã³ããã¯ãšã³ãã¯ãããŸããŸãªã·ããªãªã§äŸ¡å€ããããŸãã
- Eã³ããŒã¹ãã©ãããã©ãŒã : Cassandraã®ãããªé«æ§èœNoSQLããŒã¿ããŒã¹ãåããã«ã¹ã¿ã ããã¯ãšã³ããå®è£ ããæ°çŸäžäººã®ãŠãŒã¶ãŒã®å€§éã®ã·ã§ããã³ã°ã«ãŒããšãŠãŒã¶ãŒããŒã¿ãåŠçããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ã¢ããªã±ãŒã·ã§ã³: 忣ãã£ãã·ã¥ã«ã»ãã·ã§ã³ããŒã¿ãä¿åããå°ççã«å€æ§ãªå°åã®ãŠãŒã¶ãŒã«å¯ŸããŠäœã¬ã€ãã³ã·ã確ä¿ããŸãã
- éèã¢ããªã±ãŒã·ã§ã³: 匷åãªæå·åãšå€èŠçŽ èªèšŒãåããã«ã¹ã¿ã ããã¯ãšã³ããå®è£ ããæ©å¯æ§ã®é«ãéèããŒã¿ãä¿è·ããŸããéµç®¡çã«ã¯ããŒããŠã§ã¢ã»ãã¥ãªãã£ã¢ãžã¥ãŒã«ïŒHSMïŒã®æ€èšãå¿ èŠã§ãã
- ã²ãŒã ãã©ãããã©ãŒã : ã«ã¹ã¿ã ããã¯ãšã³ãã䜿çšããŠãã¬ã€ã€ãŒã®é²è¡ç¶æ³ãšã²ãŒã ã®ç¶æ ãä¿åãããªã¢ã«ã¿ã€ã æŽæ°ãšã·ãŒã ã¬ã¹ãªã²ãŒã äœéšãå¯èœã«ããŸãã
çµè«
Djangoã§ã«ã¹ã¿ã ã»ãã·ã§ã³ããã¯ãšã³ããäœæãããšãã»ãã·ã§ã³ç®¡çã«ãããŠèšãç¥ããªãæè»æ§ãšå¶åŸ¡ãåŸãããŸããæ ¹åºã«ããååãçè§£ããããã©ãŒãã³ã¹ãã¹ã±ãŒã©ããªãã£ãã»ãã¥ãªãã£èŠä»¶ãæ éã«èæ ®ããããšã§ãã¢ããªã±ãŒã·ã§ã³ç¬èªã®ããŒãºã«åãããé«åºŠã«æé©åãããå ç¢ãªã»ãã·ã§ã³ã¹ãã¬ãŒãžãœãªã¥ãŒã·ã§ã³ãæ§ç¯ã§ããŸãããã®ã¢ãããŒãã¯ãããã©ã«ãã®ãªãã·ã§ã³ã§ã¯äžååã«ãªãå€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠç¹ã«éèŠã§ãããŠãŒã¶ãŒããŒã¿ãä¿è·ããã¢ããªã±ãŒã·ã§ã³ã®æŽåæ§ãç¶æããããã«ãã«ã¹ã¿ã ã»ãã·ã§ã³ããã¯ãšã³ããå®è£ ããéã¯åžžã«ã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ãåªå ããããšãå¿ããªãã§ãã ããã