XPç¥ããPythonã§ã¢ã¸ã£ã¤ã«éçºãµã¤ã¯ã«2010ver.ãã¬ãã¼ã
9月4日 XP祭り2010 ~ アジャイル学園祭~(東京都)(#xpjug) ã§ @shimizukawa ããã®
ãPythonã§ã¢ã¸ã£ã¤ã«éçºãµã¤ã¯ã«2010ver.ã
ã¨ããã»ãã·ã§ã³ã«åå ããã¦é ãã¾ããã
ãã®å ´ã§ãå®è¡å§å¡ã®@shibukawaãããããã»ãã·ã§ã³ã«æ¥ãããªãã£ã人ã®ããã«ãã¬ãã¼ã¿ã¼ããã人ããåéãã¦ããã®ã§ãããããããªããæä¼ãã§ãããã¨æããæãæãããã¦é ãã¾ããã
ã¨ãããã¨ã§ãæ¸
æ°´å·ããã®ã»ãã·ã§ã³ã®ã¬ãã¼ããæ¸ããã¦é ãã¾ãã
ã¹ã©ã¤ãã«ã¤ãã¦ã®è£è¶³çãªè©±ã¨å人çãªææ³çãæ·»ããªããçºãããã¨æãã¾ãã
ã»ãã·ã§ã³ã®ã¹ã©ã¤ãã¯ãã¡ãã§ãã
ã¹ã©ã¤ãã¯ãid:amachangããã使ããs6ã¨ããHTMLãã¬ã¼ã³ãã¼ã·ã§ã³ãã¼ã«ã使ã£ã¦ä½ããã¦ãã¾ãã
ä½¿ãæ¹ã¯ãã¨ããããââââãã¿ã³ãæ¼ãã°å¤§ä½åããã¨æãã¾ãã(å°ãéãã§ã)
ã»ãã·ã§ã³ã®æ¦è¦
主ã«ãã¢ã¸ã£ã¤ã«éçºã«å¿
è¦ã«ãªã以ä¸ã®ãããªèªååãã¼ã«é¡ã«ã¤ãã¦ã®ã話ã§ãã
- ã½ã¼ã¹ã³ã¼ã管çã®èªåå
- ãã¹ãã®èªåå
- ç°å¢æ§ç¯ã®èªåå
- ç¶ç¶çã¤ã³ãã°ã¬ã¼ã·ã§ã³ã®å®æ½
- ããã¥ã¡ã³ãçæã®èªåå
ãããå
¨é¨ Python ã§æããï¼ãã¨ãã£ãå
容ã«ã¤ãã¦ã" Engineering Practice 㪠ã³ã³ããã¹ã" ã®è©±ã§ããã
æ¸ æ°´å·ããã®èªå·±ç´¹ä»
ãä»äºã§ã Python ã使ã£ã¦ãããæã¯çµã¿è¾¼ã¿ç³»ã®éçºã§XPãå®è·µããã¦ããããã§ãã
åå ã³ãã¥ããã£ã¯ä¸»ã« Zope/Plone, Sphinx, pyspa, XP é¢é£ã
æè¿ã¯ãDeliverance/xdv ã¨ãã£ãã ãWeb ãã¬ã¼ã ã¯ã¼ã¯ã®ãã³ãã¬ãæ¸ãæããã«ãã¶ã¤ã³é©ç¨ãããæè¡ã«æ³¨ç®ãã¦ããããã§ãã参照
ããã¦ä½ãããæè¿ç¿»è¨³æ¬ãåºããã¦ãã¾ãã
ã¨ãã¹ãã¼ãPythonããã°ã©ãã³ã°
æ¸
æ°´å·ãã(ã¨å®è¡å§å¡ æ¸å·ãããä»ï¼å)ã«ãã翻訳æ¬ã§ãã
Python ã«éããã½ããã¦ã¨ã¢éçºè
å
¨è¬ã«ã¨ã£ã¦åå¼·ã«ãªãå
容ãªã®ã§ãæ¯éèªããã¨ããå§ããã¾ãã
ã»ãã·ã§ã³ã«ãããã¾ãããã 7ã11 ç« ã¯ Python ã¨è¨ããã㯠XP (æ£ç¢ºã«è¨ãã° Python ã§ãããã« XP ã®ãã©ã¯ãã£ã¹ãå®è·µããã)ã«ã¤ãã¦å¹
åºãæ¸ããã¦ãã¾ãã
仿¥ã®ã»ãã·ã§ã³ããã®è¾ºã®ã話ã§ããã
ã½ã¼ã¹ç®¡çã®èªåå
ä½ãèªååããã«ãã¦ããã¾ãã¯ã³ã¼ã管çããï¼
ã½ã¼ã¹ã®ç®¡çã¯ãVCS (Version Controll System) ã使ç¨ãã¦è¡ãã¾ãã
ããã§ã½ã¼ã¹ãã®ãã®ã®ç®¡çãã½ã¼ã¹ã®å¤æ´å±¥æ´ã®ç®¡çãããã¦ã½ã¼ã¹ã®å
±æãè¡ããã¨ã§ã以éã®èªååã®åºç¤ãå½¢æãã¾ãã
VCS ã«ã¯ CVS, SVN ã¨ãã£ãä¸å¤®é権å(ä¸å¤®ã«ã»ã³ãã©ã«ãªãã¸ããªããã¤)ã¨ãhg, bzr, git çã®åæ£å(ãªãã¸ããªã®ã¯ãã¼ã³ãè¤æ°ç®æã«ãã)ã®å¤§ããäºç¨®é¡ãããã¾ãã
æ¸ æ°´å·ããã¯ãå°å ¥ã«ãµã¼ãçãå¿ è¦ãªã"忣å"ãããããã¨ã®ãã¨ã§ãPython ã§ä½ããã VCS ã§ãã hg(mercurial) ã®ç´¹ä»ã§ãã
å°å
¥ã¨åºæ¬ã®ä½¿ãæ¹ã¯ä»¥ä¸ãã¤ã³ã¹ãã¼ã«ã¯ python ã®ããã±ã¼ã¸ç®¡çã·ã¹ãã ã§ãã easy_install ã使ãã¨ãæè»½ã
easy_install mercurial hg init hg clone
ããã«ãmercurial ã«å èµããããµã¼ãæ©è½ã使ãã°ãã½ã¼ã¹ã®ã¡ãã£ã¨ããå±¥æ´ã®ç¢ºèªããå ±æã®ããã®å ¬éãç°¡åã«ã§ãã¾ãã
hg serve -p 8000
ç°å¢æ§ç¯ã®èªåå
ããã°ã©ã ã¯vscããå ¥æããã ãã§ã¯åããªãå ´åãå¤ã
- é¢é£ããããã°ã©ã (ä¾åã©ã¤ãã©ãªç)ãå ¥æãé ç½®
- ãã¹ã®è¨å®ãã¹ã¯ãªããã®è¨ç½®
- ç°å¢è¨å®ãã¡ã¤ã«ãé ç½®ãå¿ è¦ã«å¿ãã¦å¤æ´
ããã§ããããã£ãç°å¢æ§ç¯ãèªååããã®ã buildout ã§ãã
buildout ã¯ãbuildout.cfg ã¨ãã ini å½¢å¼ã®ãã¡ã¤ã«ã«ç°å¢æ§ç¯ã«å¿
è¦ãªæ
å ±ãè¨è¿°ãã¦ãããã¨ã§ã
æ§ç¯ãèªååãã¾ãã(ã¹ã©ã¤ãã«ã¯ãZope 㨠Plone ãèªåã¤ã³ã¹ãã¼ã«ï¼ãã©ã°ã¤ã³ãå
¥ãã buildout.cfg ã®ä¾)
è¨å®ãè¨è¿°ããã
$ hg clone http://xxxxx/ . $ ls bootstrap.py buildout.cfg $ python bootstrap.py $ bin/buildout
ããã§ç°å¢æ§ç¯å®äºã
ããã§å®ç§ã¨è¡ããªãå ´åããããã©ã
ã ãããã®é¨åã¯ä¸æãè¡ãã
ãã¢ã¨ãã¦ãzc.buildoutã§GAEã®ç°å¢ã使ããä¾ã宿¼ããã¾ããã
cfgãã¡ã¤ã«ã¯ããã³ãã¬ã¼ããå¤ãå ¬éããã¦ããã®ã§ãå°ããããã°ä½¿ããç©ãå¤ãããã§ãã
å®è¡ããã¨ãå¿ è¦ãªã©ã¤ãã©ãªçãå±éããã¾ãã
appengine ã®å ´åã¯ãã¡ã¤ã«æ°å¶éãããã®ã§ããã使ãã©ã¤ãã©ãªã¯ããããã zip ã«åºããã¿ãããªãã¨ããcfg ã®è¨å®ã§ç°¡åã«ã§ãã¾ãã
ä»çµã¿ã¨ãã¦ã¯ã"ã¬ã·ã" ã¨ããç©ãå¼ã¶ã ããªã®ã§ã誰ããæ¸ããã¬ã·ãããã¬ã·ããèªåã§æ¸ãã°ããããããªç°å¢ãæ§ç¯åºæ¥ã¾ãã
ãã¹ãèªåå
Pyhton ã«ã¯ãæ¨æºã§ unittest ã©ã¤ãã©ãªãããããã§ããã¹ããå§ãããã¾ãã
ããã§ã¯æ©è½ãè¶³ããªãå ´åã¯ãNose ã py.testãæ¸å·ããä½ã® PySpec(RSpec ã® pythonç)çãæãã¾ãã
ãã¹ãå¨ãã¯ãRubyãJavaã®æ¹ãã¾ã å°ãå¼·ãé¢ãããããpythonã§ãååunittestã¯å¯è½ã
ã¾ããä»ã®è¨èªã«ã¯ãã¾ããªãPyhtonã®æ©è½ã¨ãã¦ãDocTestãããã¾ãã
ããã¯é¢æ°ã«ãã¢ããã¥ã¡ã³ããæ¸ãã¨ããã¹ãã¨ãã¦å®è¡ã§ããæ©è½ã§ãã
æ©è½ã®èª¬æãããã®ã¾ã¾ãã¹ãã«ãªãã¨ããã¹ã°ã¬ã¢ãã
ãããªæãã§ãã
def add(x, y): """ äºã¤ã®å¤ãè¶³ãã¾ãã >>> add(1, 2) 3 """ return x + y
ã¹ã©ã¤ãã«ã¯ãDocTestã使ã£ãTDDã®ãã¢Flashãããã¾ãã
ããã¯ä»¥åãæ¸
æ°´å·ãããæ¸ãã以ä¸ã®ããã°ã®è»¢è¼ã§ãã
2006/05/21 PythonのDocTestでお手軽TDD - 清水川Web
注æç¹ã¨ãã¦ã¯ãdocTest ã ãã§ä½ã§ãããã§ããã¹ããæ¸ããã¨ããªããã¨ã
ãããã颿°ã®ä½¿ãæ¹ã®èª¬æã¨ãã¹ãããã£ã¤ãã¦ããã®ã¯ãããã¥ã¡ã³ããä¸å
çã«éç´ãããã£ã¡ãã£ã¡è¦ã«è¡ããªãã¦ãããªãã¨ããç¹ã§é常ã«ã¡ãªãããããã¨ã®ãã¨ã
åç¥
ããã§ãæ¸ æ°´å·ãããæ¯æãã£ã¦ããåå¼·ä¼ã®ãç¥ããã
- Sphinx+翻訳ハッカソン (9/5)
- エキPy読書会02 (9/7)
- Python mini Hack-a-thon (9/25)
9æã¯ã»ã¼åã¾ã£ã¦ãã¾ãã¾ãã>< 10æãããã¾ããï¼
ã¨ãããã¨ãªã®ã§ãèå³ã®æãæ¹ã¯æ¯éåå ãããã¨è¯ãã¨æãã¾ãã
ç¶ç¶çã¤ã³ãã°ã¬ã¼ã·ã§ã³
ããã§ã¯ããããã CI (Continuous Integration: ç¶ç¶çã¤ã³ãã°ã¬ã¼ã·ã§ã³) ã®ã話ã§ãã
CIç¨ã®ã½ãããè²ã
ããã¾ãã
- Hudson (http://hudson-ci.org/)
- (http://www.mozilla.org/tinderbox.html)
- (http://cruisecontrol.sourceforge.net/)
ããã§ã¯ãPython製èªåãã¹ããµã¼ãã¼Buildbotã®ç´¹ä»ã§ãã
Python ãåä½ããç°å¢ãªãåããã¾ãã
詳細ã¯Python開発合宿2008冬ã®è³æããã¨ã«èª¬æããã¾ããã
åºæ¬çãªæµãã¯ã
- ãã¹ãæ¸ã
- ãã¹ãéã
- ã³ããããã
- ããã¯ãã
- buildbotèµ°ã
- ã¨ã©ã¼ã ã¨éç¥ãããã©ã³ã
ã¨ãã£ãä½¿ãæ¹ã
è¤æ°äººå
±åã§ã½ã¼ã¹ãæ¸ãã¦è¡ãå ´åã¯ãã ããã®ã³ããããä»ã«å½±é¿ãããã¨ãç¥ãããã«ããããã£ãç¶ç¶ççµ±åã®ææ³ãæå¹ã§ãã
æ§æã¨ãã¦ã¯ãbuildMasterã¨ããã®ãçµ±åã®éä¸ç®¡çããã¦ãããbuildSlaveã®ç®¡çããçµæéç¥çããã¦ããããã§ãã
ã¾ããbuildbotã¯è²ã
ãªvcsã«å¯¾å¿ãã¦ãã¾ãã
ããããæè»æ§ãããBuildbotã¯å¤ãã®OSSããã¸ã§ã¯ãã§æ¡ç¨ããã¦ããããã§ãã
Buildbot, Python, Webkit, Mozilla, Google Chromium XEmacs, MongoDB, Wireshark ILM, Boost, Zope, Twisted, SpamAssassin, OpenID, KDE, GHC, Subversion, OpenOffice, Jython ...
BuildbotãPythonæ¬ä½ã¯ãã¡ãããWebkitãChromium,XEmacs,çããããããé¡ã¶ãã§ãããã®å®åã伺ãã¾ãã
ããã¥ã¡ã³ã使ã®èªåå
ããã¥ã¡ã³ã使ã¯ãã¼ã£ã¦ãã¾ããã¡
- åããã«ã¤ãã¦æéããªã
- æç« ãæ¸ãã®ãè¦æã
- è¦ãªãæç« ã¯æ¸ããããªã
ã¨ããç¶æ ã
ããã¥ã¡ã³ããæ¸ãã®ã¯æ¥½ããï¼
- ããã¸ã§ã¯ãéå§æã«ããã»ã¹ãæ´å
- å¿ è¦ãªæç« ãå¿ è¦ãªæã«æ¸ã
- ã½ããã¦ã§ã¢ã³ã¼ãåæ§ã«æé·ããã¦ãã
ã¨ããæ¹åã«ãã£ã¦è¡ãã®ã大åã
ãã®ããã«ããããã¥ã¡ã³ããæ¸ãã®ããã£ã¨ç°¡åã«ï¼ãããããã®ãã¼ã«ã¨ãã¦ãSphinx ã¨ãããã¼ã«ã®ç´¹ä»ã§ãã
Sphinxã¯Pyhtonã§ä½ãããããã¥ã¡ã³ãçæã®ãã¼ã«ã§ããreSt(reStructuredText)ã¨ããwikiã®ãããªè¨æ³ã§è¨è¿°ãã¾ãã
ã½ã¼ã¹ã®ãã«ãæã«ãããã¥ã¡ã³ãéã®ãªã³ã¯çæããå¼·åãªã³ã¼ãã®ã·ã³ã¿ãã¯ã¹ãã¤ã©ã¤ãã使ã£ã¦è¦ãããããã¥ã¡ã³ããç°¡åã«ä½ãã¾ãã
ã¾ãã使ããããã¥ã¡ã³ãã¯ãHTMLãPDFã ãã§ãªããePubã«ãã¦iPadçã§è¦ããã¨ãåºæ¥ã¾ãã
Pyhtonã®docutilsãpygmentçã®æ¢åè¨è¿°ã䏿ãçµã¿åããã¦ä½ããã¦ãããæ¡å¼µãPythonã§æ¸ããã¨ãåºæ¥ã¾ãã
æè¿ã¯OSSã§ããã¥ã¡ã³ãçæã«ä½¿ãããããæ¥æ¬ã§ã¯ç¿»è¨³ããã¸ã§ã¯ãã§ã使ããã¦ããããã§ãã
ããã¥ã¡ã³ãã®çæã¯ã"make"ã使ãã®ã§ã"make html"ãå
ã»ã©ã®CIã§åãã¦ããã¨ã使ããªãããããã£ã¼ãããã¯ãå¾ããã¨ãåºæ¥ãã¨ã®ãã¨ã
ã¾ããã½ã¼ã¹ã¯ããã¹ããªã®ã§ãã¼ã¸ã§ã³ç®¡çããããããã»ãã©ãã£ã¹æ§é ã§ããwikiã«å¯¾ãã¦ãSphinxã¯ããªã¼æ§é ã§ãããããæ§é ãã·ã³ãã«ã«ä¿ã¤ãã¨ãåºæ¥ã¾ãã
以ä¸ã®ãã¨ãããSphinxã¯æçµææç©ã¨ãã¦é常ã«å©ç¨ããããããã§ãã
ãã¡ãã«ã¤ãã¦ã¯ã
Shibu's Diary: Sphinx紹介セッション@BPStudy #30ã«æ¸å·ããã®ç´¹ä»è³æãæãã¾ãã
課é¡ç®¡çã·ã¹ãã
è¤æ°äººã§ããã¸ã§ã¯ããé²ããä¸ã§ããã°ã課é¡çã管çããã·ã¹ãã (ããã¸ã§ã¯ã管ç) ãéè¦ã«ãªãã¾ãã
Pythonã ã¨Tracãæåã§ãã(ä»ã«ã¯Redmineã¨ã)
Trac = wiki + 課é¡ç®¡ç + ã³ã¼ã管ç
Tracã使ã£ã使¥ããã¼ã¯ãããªæãã§ãã
- ã ããããã±ãããæ¸ã
- æ å½è ãAcceptãã¦ã³ã¼ããä¿®æ£
- ä¿®æ£ãã³ããã
- ã³ããããã°ãèªåã§åæããã
- ãã±ãããclose
- ãã¦ãã¦çãwikiã«è¨é²ãå ±æ
ãã®æããã±ãããã³ãããã®åãã¯Tracä¸ã®Timelineã¨ããç»é¢ã§æµãã追ããã¨ãåºæ¥ã¾ããã
ãã±ããç»é²æã®#idã使ã£ã¦ãã³ãããã¨å®è£
ãã²ãã¥ããããwikiã¨ãªã³ã¯ãè²¼ã£ããåºæ¥ã¾ãã
ããã¸ã§ã¯ãã§åºã¦ããæ§ã
ãªèª²é¡ã«é¢ããæ
å ±ãä¸å
管çåºæ¥ã¦ãããã«å¿
è¦ãªæ
å ±ãç¹ãã£ã¦ãã(æ£ãã°ã£ã¦ããªã)ã¨ãããã¨ã§ãããã¸ã§ã¯ããåæ»ã«é²ãããã¨ãåºæ¥ã¾ãã
å ¨ã¦ãä¸ã¤ã«ç¹ã
ããã¾ã§ã«åºã¦æ¥ã
- ã½ã¼ã¹ã³ã¼ã管çã®èªåå
- ãã¹ãã®èªåå
- ç°å¢æ§ç¯ã®èªåå
- ç¶ç¶çã¤ã³ãã°ã¬ã¼ã·ã§ã³ã®å®æ½
- ããã¥ã¡ã³ãçæã®èªåå
ããããå ¨ã¦ãèªååã飿ºãããã
ãããå ¨é¨Pythonã§ã§ãããï¼ã
ã¨ããã話ã§ããã
質åã¿ã¤ã
ä¼å ´ããã®è³ªåã¨ãæ¸ æ°´å·ããã«ããåçã§ãã
- Q1
- ãã¹ãå¨ããRubyçã«æ¯ã¹ãã¨é ãã¦ãã¨ããçç±ã¯ï¼
- A1
- Unitttestã®æåã¯ããããããä»ã®è¨èªã¯ãèªç¶è¨èªã®æèãããã¹ããè¡ããã¨è¨ã£ãé åã«ãææ¦ãã¦ããï¼rubyã ã¨cucamberï¼pythonã«ã¯ããããã®ããªããªãã
- Q2
- ã½ã¼ã¹ã忣VCSã§ç®¡çããå ´åãã©ããã£ã¦CIããã®ï¼ ä¸å¤®é権åã®æ¹ãè¯ããªããï¼
- A2
- 忣åã§ãã£ã¦ãããã£ã¨ãã©ãã©ãªã¾ã¾ã§ã¯ãªããæçµçã«ã¯ä¸ã¤ã«çºãããMercurialã§ãä¸å¤®ãµã¼ãã«ããããã®ãä¸ã¤ã®cloneã«ä½ç½®ã¥ãã¦ãããã§CIãåãããã®ç¹ããã©ããä¸å¤®ãµã¼ãã«ãããï¼ããªã©ã®éç¨ã«ã¼ã«ã¯ãã®é½åº¦æ±ºããå¿ è¦ãæãã
- Q3
- Sphinxã§ä»ã®ææ¸ãinport,exportããä»çµã¿ã¯ããï¼ å¥ã®ããã¥ã¡ã³ããtracã®wikiã¨ãåå©ç¨ãããã
- A3
- ä»ã¯ãé å¼µã£ã¦ãã¼ã¹ãããããããªããããããHTMLã¨ãã¯æ§é åææ¸ãªã®ã§ãã¼ã¹ãæ¸ããããããWordçãHTMLã§åºããããåºæ¥ãªãã¯ãªããæåã§ãããªãã¦ãããããããµã¼ãã¹ããã¦ããµã¤ãããããDocBookã¨ããã®ãããããã¨Trac ã¯wikiã«reStã使ããã¨ãã§ããã®ã§ãreStã§æ¸ãã¦ããã¨å¾ã§ä½¿ãåããã
ãã¾ã
ä»åã®ãã¬ã¼ã³ã¯ãSphinxã夿ãã¦id:amachang謹製ã®S6ã¨ããHMTLãã¬ã¼ã³ãã¼ã«ã§æ¸ããã¦ãã¾ãã
(S6ã®è©³ç´°ã¯こちら)
ææ³
ä»åã¯ãPythonãç¨ããããã¸ã§ã¯ãèªååã®åãã¼ã«ã横æçã«ç´¹ä»+ãã¢ã¨ããå
容ã§ããã
ãã¼ã«èªä½ãPython製ãªã ãã§ãå¤ãã®ãã¼ã«ã¯Pythonãç¨ããéçºã§ãªãå ´åã§ãååã«éç¨ãããã®ã§ãã
éçºã«éä¸ããããã«ãããã¸ã§ã¯ãã®æåã®æ®µéã§ãããã£ãç°å¢ããã¡ãã¨æ§ç¯ãã¦ãã¾ãã¨ããã®ãã¨å¤ãã®å ´é¢ã§æ©æµãåãããã¨ãåºæ¥ãã¨æãã¾ãã
ããä¸åº¦ã«å ¨é¨ãå°å ¥ããã®ã«æ·å± ã®é«ããæããã®ã§ããã°ãå人çã«ã¯ã½ã¼ã¹ç®¡çã®Mercurialãããã¥ã¡ã³ã使ã®Sphinxãããããåãã¦è¦ãã®ãè¯ãã®ã§ã¯ãªããã¨æãã¾ãã(ãã¹ãã¯ãããæ¸ãã¦ã¾ãããï¼wï¼
ä»åã¯æ¦è¦ã§ãããããã£ã¨è©³ããç¥ããããªã£ãããæ¸ æ°´å·ããä»ï¼åã«ãã以ä¸ã®ç¿»è¨³æ¬ãèªããã¨ããå§ããã¾ããåé ã«ãæãã¾ããããPythonã®è©±ã ãã§ãªãXPã®è©±ãå¤ãåºã¦ããã®ã§ãPythonã¦ã¼ã¶ä»¥å¤ã«ããå§ãåºæ¥ãã¨æãã¾ãã(åæ²)

ã¨ãã¹ãã¼ãPythonããã°ã©ãã³ã°
- ä½è : Tarek Ziade,稲ç°ç´å,æ¸å·ããã,æ¸ æ°´å·è²´ä¹,森æ¬å²ä¹
- åºç社/ã¡ã¼ã«ã¼: ã¢ã¹ãã¼ã»ã¡ãã£ã¢ã¯ã¼ã¯ã¹
- çºå£²æ¥: 2010/05/28
- ã¡ãã£ã¢: 大忬
- è³¼å ¥: 33人 ã¯ãªãã¯: 791å
- ãã®ååãå«ãããã° (91ä»¶) ãè¦ã
以ä¸ã§ã¬ãã¼ããçµããã¾ãã
æ¸ æ°´å·ãããããã¨ããããã¾ããï¼