ã¿ã€ãã«ã®éãã§ãã
BookRainãšãããŠã§ããµã€ããäœæããŸããã
æžç±ã®ã¿ã€ãã«ãéšã®ããã«éã£ãŠããã ãã§ãã
ããç«æèŠã§æ¥œããã§ããã ãããå¬ããã§ãã
â»2022/08/30ãã¢ãã€ã«å¯Ÿå¿ãã§ããŠããŸãããç³ãèš³ããããŸããããã
https://bookrain.link/
â»2024/07/25ãAWSããGitHub Pagesãžç§»è¡ããŸããã
https://kemelman.github.io/bookrain/
ãœãŒã¹ã³ãŒãã¯ãã¡ãã§ãã
https://github.com/kemelman/bookrain
GitHub Pagesã§ã®ãµã€ãäœææ¹æ³
https://docs.github.com/ja/pages/getting-started-with-github-pages/creating-a-github-pages-site
äœãããšæã£ããã£ãã
BookRainã¯ããããããã®WordCascadeã®ãªããŒãžã¥ã«ãªããŸãã
ãã®ãŠã§ããµã€ããã¯ãããŠç®ã«ããã®ã¯çŽïŒå¹Žåã»ã©ã§ãã
ããã³ããšã³ãã£ãŠãããªã«ãåæ
çãªã®ããšæåããã®ãèŠããŠããŸãã
ç§ãçŽæçã«ã ãã§ã楜ããããã®ãäœã£ãŠã¿ããïŒããšçãäžãããŸãããã人䞊ã¿ã«æžããã®ã¯Pythonãããã
以æ¥ã諊ããŠããŸããããæè¿ã«ãªã£ãŠbrythonãªããã®ãç¥ããŸããã
brythonãç¥ã£ãã®ã¯ãªããšYouTubeã§ãã
ããããçãããpythonã§ãã©ãŠã¶ã²ãŒã ãäœãåç»ã§ãã
yanesdk-for-brythonãšããããŒã«ãäœæãããŠããã£ããããŸããã
ãããããããšã«githubã§ãµã³ãã«ã®ã²ãŒã ãäžç·ã«å
¬éãããŠããã£ããããŸãã
æ¥æ¬èªã§ã³ã¡ã³ããå
¥ã£ãŠãããªããPythonã§æžãããŠããã®ã§ããã°ããµã³ãã«ã®ãœãŒã¹ã³ãŒãããããªãã°ãæéããããŠïŒ³ïŒ€ïŒ«ãçè§£ããã°ç§ã«ãããã³ããšã³ããåããæ¥œãããå³ããããããããªãïŒ
æ©éããŠã³ããŒãããŠã³ãŒããèªã¿è§£ãã¯ãããŸããã
yanesdk-for-brythonã®å匷
ãã©ãŠã¶ã²ãŒã äœæçšã®ïŒ³ïŒ€ïŒ«ã«è§Šããã®ã¯åããŠã®ããšã§ãã
æåã¯ãŸã£ããããããŸããã§ããããã¯ã©ã¹éã®é¢ä¿ãããã£ãŠãããšããªããšãåãããããã«ãªã£ãŠããŸããã
ïŒç§ãè§£éããéãã®å
šè²ã¯ãã·ãŒã³ã¯ã©ã¹ã®äžã«ã²ãŒã ãªããžã§ã¯ããããããã®ã²ãŒã ãªããžã§ã¯ãã«ä»äžããããããã£ã®ãããªã¯ã©ã¹ãèšå®ããŠããããšããã€ã¡ãŒãžã§ããïŒ
ææãšããŠã¯ã€ã³ã¹ã¿ã³ã¹ã£ãŠæ¬åœã«å®äœãšããŠæ±ããã®ã ãªãšããªã«ãä»ãããšåããããŠããŸããããªçŽ æŽãªåŠã³ããããŸããã
ã䜿ã£ãŠãããšãåŠçãã®ãã®ãããŒãã³ãŒãã£ã³ã°ããŠãããšããããã¯ãæ¬åœã«çç©ãæ±ã£ãŠãããããªæèŠã§ããã
転ããŠãä»ãŸã§ãã¬ãŒã ã¯ãŒã¯ã颿°åã®ã³ãŒããšããŠããèªèããŠããªãã£ãã®ã ãªãšåé¢æåž«çãªèªçããããŸãããïŒé¢æ°åãæªãããšããããšã§ã¯ãªãã§ããïŒ
ãŸãããµã³ãã«ã®ãœãŒã¹ã³ãŒãã«ã³ã¡ã³ããããããæžããŠããã®ã§ããšãŠãå©ãããŸããã
ããã巚人ã®è©ã®äžã«ç«ã€ãšããããšãããã
openBDã£ãŠïŒ
WordCascadeã©ã€ã¯ã«ãæåãéã£ãŠãããŠã§ããµã€ããäœãã®ã¯æ±ºããŠããŸããã
ãšã¯ããããªã«ãéãããã°ããã®ãããããŸããã
ãªã«ãéãããããèããã®ã¯ç¥ãããã§ããªã«ãéã£ãŠããã®ããèããã®ã¯æ°è±¡åºãããã§ãããã
WordCascadeã¯ã©ã³ãã ãªåèªãéã£ãŠããã®ã§ãæ¬ã®ã¿ã€ãã«ãéã£ãŠãããã¡ããã©ããå·®å¥åã«ãªãã®ã§ã¯ããšèª¿ã¹ããšãããopenBDãšãããçºèŠããŸããã
ç§ãã¡openBDãããžã§ã¯ãïŒã«ãŒãªã«ã»çå ãããã³ã ïŒã¯æžèªæ å ±ã»æžåœ±ããã ãã§ãèªç±ã«äœ¿ãããé«éãªAPIã§æäŸããŸãã
ã»å人ããSNSãããã°ã§æ¬ã玹ä»ãããšã
ã»æžåºããä»å ¥ããã販売ã®ããã«æ¬ã玹ä»ãããšã
ã»å³æžé€šããéžæžããå©çšè ã«æ¬ã玹ä»ãããšã
ã»ã¡ãã£ã¢ããæ¬ã玹ä»ãè©ãããšã
ã»äŒæ¥ããæžèªæ å ±ã»æžåœ±ãå©çšããããããªãµãŒãã¹ãéçºãããšã
ãããããšãã«ãèªç±ã«äœ¿ããæžèªæ å ±ã»æžåœ±ããé«éãªAPIã§æäŸããopenBDã®æäŸãéå§ããŸãã
ãªãŒãã³ãªæ¬ã®ããŒã¿ããæ¬ã®äžçããŸããŸãè±ãã«ãããšèããããã§ãã
openBDã¯ãã«ãŒãªã«ãAPIã·ã¹ãã ãéçºããŸãã
ã«ãŒãªã«ã¯ã峿žé€šèµæžã»è²žåºæ å ±ãæšªæçã«é«éã§æ€çŽ¢ãããµã€ããæäŸããŠããŸãã
ããã§å¹ã£ãããŠããŠã掻çšããŸãã
openBDã«æ²èŒããæžèªæ å ±ã»æžåœ±ã¯çå ãããã³ã ãåéããŸãã
çå ãããã³ã ã¯ãäŒå¡åºç瀟229瀟ã®ã€ãã£ãæ¬ã®æžèªæ å ±ã»æžåœ±ããããäžã§å ¬éããæžåºã»å次ãªã©ã«éãå±ããã·ã¹ãã ãã€ããåºç瀟å£äœã§ãã
ããã«äŒå¡åºç瀟ã ãã§ãªãã倧æããäžå°åºç瀟ãŸã§ã24,747瀟ã®çŽ76äžã¿ã€ãã«ã®æ¬ã®æžèªæ å ±ãæžåœ±ããããèªã¿ãæžè©æ²èŒæ å ±ãªã©ããã€ããŠãµã€ããAPIã§æäŸããŠããŸãã
æäŸã®ããã«ãåºç瀟ã»åºçæ¥çã»åœç«åœäŒå³æžé€šãªã©ããã®åéã®èç©ã掻çšããŠåçµã¿ãŸãã
äžèšã¯å
¬åŒãããããŒãžããã®åŒçšã§ãã
pythonã§ã®äœ¿ãæ¹ã¯ãã¡ããåèã«ãããŠé ããŠå匷ããŸããã
ã©ããã£ãŠå ¬éãããã
ããŒã¿ããŒã¹ãäœæããŠæžç±ã®ã¿ã€ãã«ãèšé²ããŠãFlaskãšEC2ã§ãŠã§ãã¢ããªã±ãŒã·ã§ã³ãšããŠäœãããšèããŠããŸããããã䜿ãããšãªããšè©±ãå€ãã£ãŠããŸãã
BookRainã®æäŸã«ã¯ãŠãŒã¶ãŒããã®å
¥åãã»ãŒåãä»ããå¿
èŠããããŸããã
ç»é¢ãã¯ãªãã¯ãããšçœé»å転ããããããã§ããïŒãããæ¬å®¶ãªããŒãžã¥ã§ãïŒ
ãªãã°éçãµã€ããšããŠäœã£ãã»ããèããããšãæžãã¯ãã§ãã
ããã§ïŒ³ïŒã䜿ã£ãŠbrythonã詊ããŠã¿ããšãããåããŠãããŸããã
ãŠã§ããµã€ãã®å
¬éæ¹æ³ã¯ä»¥äžã®èšäºãåèã«ãããŠé ããŸããã
çéïŒã®S3+CloudFront+Route53+ACMã§ãã
éçºç°å¢ã»äœ¿ã£ãæ¡åŒµæ©èœ
vscodeã§éçºãè¡ããŸããã
ãããã°ã¯ãã¡ãã®æ¡åŒµæ©èœã䜿ããŸããã
ããã«çµæã確èªã§ããã®ã§ãšãŠã䟿å©ã§ããã
ãšãã£ã¿ãŒã§ç°¡æãµãŒããŒãç«ãŠãããã£ãŠæ¹ããŠèãããšãããæè¡ã ãªããã
以äžã«èºããŠããŸã£ããšãããæããŸãã
ç»é¢ãã£ã±ãã«è¡šç€ºããããã©ãæåããŒããã
ãµã³ãã«ã²ãŒã ã®index.htmlå
ã®canvasèŠçŽ ã¯åºå®é·ãšãªã£ãŠããŸãã
ç»é¢ãã£ã±ãã«è¡šçŸãããã®ã§ãcanvasããŠãŒã¶ãŒã®ç»é¢ã®å€§ããã«åãããå¿
èŠããããŸãã
ãããããã¯çãç§ã§ãç¥ã£ãŠããŸããcssã§widthãšheightã100%ã«æå®ããã°ããã®ã§ãã
èäžããªããcssãäœæããŠãªããŒãããŠã¿ããšãããæåããŒãããŠããŸããŸããã
調ã¹ãŠã¿ããšãããcanvasèŠçŽ ã䜿ãéã«åå¿è
ããããã£ãŠããŸã倱æã®ããã§ããã
canvaså
ã®æ¯çãšCSSã§ã®æå®ããæ¯çãç°ãªã£ãŠããŸãã®ãåå ã§ãã
åå ã¯ããããŸããããåœããåã§ããå¯ŸåŠæ¹æ³ã¯javascriptã䜿ã£ããã®ã°ããã
諊ããŠjavascriptãäžéšã ã䜿ã£ãŠããŸãããšããããŸããããä»äºãªããšãããå人éçºã§ããã¯å³æ°ãªãã
ïŒé±éã»ã©ã³ãŒããããã£ãŠããŸããããçµå±ã®ãšãããç§ã«å¿
èŠã ã£ãã®ã¯ã¡ãããšåçãçè§£ããããšããæ
床ã§ããã
é£ããèããŠããã®ã§ããããªãã®ããšã¯ãªããpythonã§javascriptãšåãã³ãŒããåçŸããã°ããã ãã§ããã
yanesdk-for-pythonã®Canvasã¯ã©ã¹ã®å€§ãããwrapperèŠçŽ ã«åãããããã«ã³ãŒãã倿ŽããŸããã
ãŸããcanvasãwrapperãäœæããŠãã®äžã«å
¥ããŸãã
<body onload="brython()">
<div id="wrapper">
<canvas id="canvas"></canvas>
</div>
<script type="text/python" src="main.py"></script>
</body>
body{
margin:0;
padding:0;
height:100vh;
}
canvas{
display: block;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
}
#wrapper{
width: 100%;
height: 100%;
}
/* ã¹ã¯ããŒã«ããŒãé衚瀺 */
body::-webkit-scrollbar {
display: none;
}
ãããŠãSDKã®ã³ãŒãã倿Žã以äžã®ããã«ããŸããã
å ã®SDKã®ã³ãŒã
# æç»çšcanvas
class Canvas:
# canvas_id_name : HTML5ã®canvasã«ã€ããidåãdefaultã§ã¯"canvas"
def __init__(self, canvas_id_name:str = "canvas"):
# æç»ããcanvasã®contextã®ååŸã
self.canvas = document[canvas_id_name]
self.ctx = self.canvas.getContext("2d")
# canvasã®å¹
ãšé«ã
self.width :int = self.canvas.width
self.height:int = self.canvas.height
# canvasã®Rect
self.rect = Rect(
Vector2D(0,0) ,
Vector2D(self.width, self.height)
)
倿ŽåŸã®SDKã®ã³ãŒã
# æç»çšcanvas
class Canvas:
# canvas_id_name : HTML5ã®canvasã«ã€ããidåãdefaultã§ã¯"canvas"
def __init__(self, canvas_id_name:str = "canvas"):
# æç»ããcanvasã®contextã®ååŸã
# wrapperèŠçŽ ã®çžŠæšªãååŸããŠãself.canvasãããã«åèŽãããããšã§æåã®ãŒãããé²ã
self.canvas = document[canvas_id_name]
self.wrapper = document['wrapper']
self.ctx = self.canvas.getContext("2d")
# debug
# print('ãã£ã³ãã¹ã®èŠçŽ ')
# for key, value in self.canvas.__dict__.items():
# print(key, ':', value)
# print('wrapperã®èŠçŽ ')
# for key, value in self.wrapper.__dict__.items():
# print(key, ':', value)
# ç»é¢ãã£ã±ãã«canvasãåããã
# ã¹ãããPCã©ã¡ãã§ãåãã¬ã€ã¢ãŠã
self.canvas.attrs['width'] = self.wrapper.clientWidth
self.canvas.attrs['height'] = self.wrapper.clientHeight
self.width:int = self.canvas.width
self.height:int = self.canvas.height
# canvasã®Rect
self.rect = Rect(
Vector2D(0,0) ,
Vector2D(self.width, self.height)
)
ãã¯ãå°æå
ã§è§£æ±ºããããšãããããããã£ãããšã€ã³ããããããæ¹ã建èšçã§ããã
ã§ãããåŸè¿°ããŸããå®ç§ãªå¯Ÿå¿ã«ã¯ãªã£ãŠããŸããã
ãšããããã¯å®æãç®æããŠãèªåãæºè¶³ã§ããã¬ãã«ã§æ¹åãã§ããŸããã
requestsãã€ãããªã
衚瀺ã«ã€ããŠã¯ããæãã«ãªã£ãŠããŸãããæåã®ãµã€ãºãèœã¡ãã¹ããŒããªã©ãã©ã³ãã ã§ãšãç¯å²ãæå®ããŠéšããããªã£ãŠããŸããã
ãããããã§ãé倧ãªåé¡ã«æ°ä»ããŸãããrequestsïŒHTTPéä¿¡ã®ããã®pythonã®ã©ã€ãã©ãªïŒãbrythonã§ã¯äœ¿ããªãã®ã§ããurllibã§ãªããšã代çšãã§ããªãããšèããŸããããææã§ããã
äžã®äžã®åºãã«é ãäžããã°ããã§ãããããã§ãããªããšïŒ¡ïŒ°ïŒ©ãå°å
¥ã§ããŸããã
ãã®èšäºãåãããã ããã®åœ¹ã«ç«ã€ããšãé¡ããŸãã
é«éå
ããŠãããã§ç®çã®ãã®ãã§ããŸãããã宿ã¯å®å
šãšã¯ç°ãªããŸãã
ãšã«ããé
ãã®ã§ããæåã®ã¿ã€ãã«ãéã£ãŠãããŸã§ã«ïŒïŒç§ãããããŸããããã§ã¯ãããŸããã
ããã§é«éåãå³ããŸããã
ãŸããç«¶æããã°ã©ãã³ã°ã掻ãããšã¯
ãšããã§ãç§ã¯è¶£å³ã§ç«¶æããã°ã©ãã³ã°ãããŠãããAtCoderãšãããµãŒãã¹ãå©çšãããŠé ããŠããŸãã
ããããšãŠãé¢çœããŠãæ¯é±æ«ã³ã³ãã¹ãã«åå ããŠçµæã«äžåäžæããŠããŸãã
ãããã«ã³ãŒãã£ã³ã°ãéããªã£ãããèªè§£èœåãäžãã£ãæ°ãããããªã©ãæ¥åã«ãã©ã¹ã«ãªã£ãããããã®ã§ãããããšãã°åçèšç»æ³ã䜿ãããªãã®ãçŸåšã®æ¥åã«ã¯ãªãã£ã«ã«ã«å¿
èŠãªèœåããšèšãããã°ããã§ã¯ãªãã§ããïŒããããæ¥œããã ãã§å
åãªãã§ããã©ãïŒ
ããŠããã¯ã©ã¯ãããŸãã§ãBookRainã®ä»æ§ã«ã€ããŠå°ã解説ããŸãã
ãŸããISBNã³ãŒããšåŒã°ããæžç±ã管çããïŒïŒæ¡ã®çªå·ãååŸããŠãISBNã®å
é ïŒæåãïŒïŒïŒïŒã§ããïŒæ¥æ¬ã§çºåãããæ¬ã§ããïŒæ¬ã ããæœåºããããšãããã«ã©ã³ãã ã«è€æ°éžãã§ãæžç±ã®ã¿ã€ãã«ãå床openBDã«åãåãããŸãã
ãã®ISBNããã£ã«ã¿ããåŠçã«æéãããã£ãŠããã®ã倧ããªããã¯ã§ããã
ãã®ãã£ã«ã¿åŠçã¯ä»¥äžã®éãã§ãã
# seqã¯ISBNã³ãŒããå
¥ã£ããªã¹ã
seq = [s for s in seq if s[:4] == '9784']
æçŽã«ïŒïŒïŒïŒã§ããããå€å®ããããã§ãã
ããããªããšãé«éåããå¿
èŠããããŸããã
è²ã
ãšèããã®ã§ãããããæ¥ãååŸããISBNã®ãªã¹ããæåãããœãŒããããŠããããšã«æ°ã¥ããŸããã
import bisect
# isbnã9784ããã¯ããŸããã®ã ãã«ãã
seq = seq[bisect.bisect_left(seq,'9784000000000'):bisect.bisect_right(seq,'9784999999999')]
äºåæ¢çŽ¢ã§ããæé©ãªã®ãã¯ããããŸããããããã§ç·åœ¢ã§æ¢çŽ¢ããå¿
èŠããªããªããŸããã
ïŒèšæž¬ããŠã¿ããšãããïŒïŒç§ã»ã©ããã£ãŠããã®ãïŒç§ã»ã©ã«ççž®ãããŸãããïŒïŒ
AtCoderãšããããã°ç®±åºã®äžã ãã§äœ¿ã£ãŠããç¥èãå®è·µã§æŽ»ãããšããã®ã¯ãåè¿ãªäœéšã§ããæ°åŠãã¢ã«ãŽãªãºã ã«æ¯ããããŠè²ã
ãªãŠã§ããµãŒãã¹ãæäŸãããŠããã®ã ãšèã§æããåºæ¥äºã§ããã
ãããŠãç«¶æããã°ã©ãã³ã°ãããŠããªããã°ãæãããœãŒããããŠãããšããç¹åŸŽãèŠéãããŠãããšæããŸããç¥èã¯ã¹ã¿ãã£ãã¯ãªãã®ã§ã¯ãªãããšããããšãæ¹ããŠæããŸããã
ãŠã§ã«ã«ã ã¡ãã»ãŒãžãã€ããã
ïŒç§ãŸã§ãã£ãŠããããªã倧äžå€«ã§ããèšãæ¹ã¯æªãã§ãããå°ºããªããšãã€ãªãã°ããã
èªæžã«é¢ããåèšãæåã«ãŠã§ã«ã«ã ã¡ãã»ãŒãžãšããŠåºãã°å°å
¥ã«æé«ã ãšæããå®è£
ããŸããã
ãã¡ãã®åèšãpythonã®ãœãŒã¹ã³ãŒãã«èŸæžãšããŠæžã蟌ã¿ãã©ã³ãã ã«ã²ãšã€ãéžã¶ããã«ããŸããã
å
å²ã®èšèã§ããïŒç§ã©ããããã£ã·ãäžçãè²»ãããã»ã©ã®æ·±ã¿ããããŸãã
ãšãŠãé°å²æ°ãç· ãŸãããŠã§ããµã€ãã«æ²¡å
¥ãããã®ã«ãã®ïŒç§ãããŸã䜿ããã®ã§ã¯ãªãããªãšæããŠããŸãã
å人ãµãŒãã¹ã§èšå®ããã¹ãããš
ãªããšãæºè¶³ãããã®ãäœããŸããããå人ã§éçºãããã®ãå
¬éããã®ã¯ã¯ãããŠã®ããšã§ãã
ogpãšããã¡ã¿ã¿ã°ãæžããããªã³ã¯ã«ç»åãåºããã¿ããã«å®ç³ãšããŠèšå®ããã¹ãããšããããšã¯ç¥ã£ãŠããã®ã§ãããå
·äœçã«ã©ãããã°ããã®ãããããŸããã
ããqiitaã§æµããŠããèšäºãããã¯ããŒã¯ããŠãããã®ãåãå¥ããŸããã
ãã®èšäºã«æžããŠããããšãèšå®ããŸãããæ¬åœã«ãããããããã
äžç¹ã ãèºããã®ã¯ãtwitterã®ã«ãŒãã§ç»åãåºãªãã£ãããšã§ãã
ãã¡ããæ¢ç¥ã®å€±æã§ããã
ãã¡ãã®èšäºã«ããéãã絶察ãã¹ã§æå®ããå¿
èŠããããŸããã
çµµã¯å人ãããããçŽã«ææžãã§ä»ç«ãŠãŠãããŸããã
ææžããããããã€ããé°å²æ°ãåºãŠããŠãäœçœãæ®ããã»ã³ã¹ã«è±åžœã§ãã
æ¹åç¹
ãªããšãå ¬éãŸã§ãã©ãçããŸããããç©ã¿æ®ãã¯ããããã§ãã
ã¢ãã€ã«ã ãšãããé ãããã¬ã€ã¢ãŠãããããã
ã¬ã€ã¢ãŠãã瞊é·ã®ã¹ããŒããã©ã³ã ãšåŽ©ããŠããŸããŸããæåããŒãããŠããŸã£ããŸãŸã§ãã
ãããŠãšã«ããé
ããã§ããïŒããããçã§å
åã«é«éããšèãããšããã§ããªããïŒã¹ããã®ïŒ£ïŒ°ïŒµãã¡ã¢ãªã«å¯ŸããŠããŒã¿ã倧ããããã®ããªããšããæ¹ããå©èšãé ããŸããã®ã§ã䜿ãã¿ã€ãã«ã®æ°ãã¢ãã€ã«çãšïŒ°ïŒ£çãšã§åããã®ã詊ããŠã¿ãããšèããŠããŸããããæ¹ã¯ä»ãã調ã¹ãŸããããã
yanesdk-for-brythonã¯ç»åãé³å£°åºåã ãã§ãªããã¿ããã€ãã³ããŸã§ç¶²çŸ ããŠããŸããã¢ãã€ã«ã§ãã£ãŠã¿ããã¢ã€ãã¢ãæµ®ããã ããã²ææŠããŠã¿ããã§ãããæ¹åã§ãããããœã³ã³ãæã£ãŠããªãå人ã«ãèŠãŠã»ãããªãšæã£ãŠããŸãã
æäººæå®
ç§ã¯æ¬ã«è²Žè³€ã¯ãªããšèããŠããŸããäœå®¶ãããç·šéãããåºç瀟ãããäžåã®æ¬ãäžæ¢ããã®ã«äžŠã ãªãã¬æéãšç±æã泚ãã§ããã£ããããŸããã§ãããäžç¹å®å€æ°ã«å ¬éããŠãããã®ãšããŠäžå®ã®å ¬å ±æ§ã¯å¿ èŠã§ãã
æäººæå®ãå
¥ã£ãŠãããã®ã ãã§ããã£ã«ã¿ããŠå€ãããšããŸããããopenBDã§ååŸã§ããonixïŒæžèªæ
å ±ã®äº€æã®ããã«èšèšãããæžèªããŒã¿èŠæ ŒïŒã®æ
å ±ãã¿ã€ãã«ãªã©ã®é¡é¢çãªæ
å ±ã ãã§ã¯ããŸãã§ããŸããã§ããã
æ®éã®ãã¹ããªå°èª¬ãšæäººåãã§ãããå°èª¬ãåºåããã¯ãã®é
ç®ããŸã£ããåãã ã£ãããããã§ãããããã
ïŒä»¥äžã®ããŒã¿ä»æ§ã®DescriptiveDetailã®Audienceã®ãšããã§ãïŒ
ãªããŒããããšãŠã§ã«ã«ã ã¡ãã»ãŒãžãåºãªããšãããã
brythonã®ä»æ§ãªã®ããã¯ããŸãã¯ãããŒã圱é¿ããŠããã®ãã¯ããããŸããã
ãã£ãšç§ã®å®è£
ã«åå ã¯ããã®ã§ãããã
ããã©ããããŸã§å人éçºã§ããããããªãããšã楜ãã¿ãããšæããŸãã
ãåãããããªããçå·ã¯åŸ®ç¬ãã ã
ãã§ããããããããããææ ã®äžã§ãæãç¥çã§ãæã人éçãªãã®ã ãã
ããïŒãäœãã§ããïŒ]
ãããããªãããšããææ ã
ãŸãšã
以äžãšãªããŸããã¡ããã¡ãããšè§Šã£ãŠãã£ãŠãæ¹åã§ããããªãšèããŠããŸãã
ãããåå ãªã©ããããããããã£ããããŸãããããã£ãšã³ã¡ã³ãã§æããŠããã ããã幞ãã§ãã
ãããŠãBookRainã§æããããªãã£ãæ¬ãšã®åºäŒããããã°ãäœè
å¥å©ã«å°œããŸãã