ã¯ããã«
ããã«ã¡ã¯ãLaddgeã§ããä»åã¯ã9/28(æ°Ž), 29(æš)ã«èªåã®é«æ ¡ã§è¡ãããã¯ã©ã¹ãããã§ãæ ¡å åãã®ç¹èšãµã€ããäœããŸããã
âãµã³ãã«
æ¬èšäºã®å
容ã¯ãåŠæ ¡ã«éå
¬åŒã§å
¬éããŠãããã®ã§ãã
æ¬èšäºã«é¢ããåãåãããåŠæ ¡ãžè¡ãè¡çºã¯æ
ãã§ããã ããããé¡ãããããŸãã
äžå¿ãœãŒã¹ã³ãŒãã¯GitHubã«äžããŠãããŸãããæ¥ãã§äœã£ãŠãã®ãããããåãã°ãããããã£ãŠæãã§ãŽãã£ãŽãã£ããŠãã®ã§ããã®èšäºã§ã¯çްããã³ãŒãã®èª¬æã¯ããŸãããã«ããããŸããªã¢ã€ãã¢çãªã®ãèŒããããããšæããŸãã
質åãããã°ãé æ
®ãªãã³ã¡ã³ãããTwitterã®DMã§ãããŠãã ããã
åæ©
ãã¡ã®é«æ ¡ã§ã¯ãæ¥å£ãç§å£ã®ã¯ã©ã¹ãããããããã6æãš9æã«è¡ããŸãã
(ããããããæ¥ã¯ã©ãããç§ã¯ã©ããšåŒãã§ãŸãã)
ä»åäœãã®ã¯ç§ã¯ã©ã®ãµã€ãã§ãã
åã¯çåŸäŒã®æ å ±ãšããéšçœ²ã«å±ããŠããŠãæ¥ã¯ã©ã®ãšãã«ã¯ãã³ãã察çã§èг客ãå ¥ããªã宀å ç«¶æããçåŸäŒã®æ©æã䜿ããYouTubeã©ã€ãã§é ä¿¡ãããããŠããŸããã
ã§ãããã¯ã©ã¹ãããã¯2æ¥éã®æ¥çšã§è¡ãããã®ã§ãæäœ1åã¯YouTubeã®ãªã³ã¯ãå€ãã£ãŠããŸããŸãã
(å®éã«ã¯éäžã§ãã©ãã£ãŠèœã¡ããããŠäœåãå€ãããŸããã)
ãããã£ããšãã«ããã¡ãã¡å šæ ¡ã«ãªã³ã¯ãé ãã®ã¯å€§å€ã§ãã
ããã§ãYouTubeã®ãªã³ã¯ããŸãšãããµã€ããäœãããã®ãµã€ããä»ããŠYouTubeãèŠããããã«ããŠããŸããã
å®éã«äœã£ããµã€ãã以äžã®æãã§ãã
äžæ©ã§äœã£ãã®ã§ã ãã¶éã§ãã
ããã§ãã¡ãããšæ©èœããŠããŸããã
ç§ã¯ã©ã§ã¯ãããçºå±ããããã®ãäœãããšæããéçºãè¡ããŸããã
æ§æ³
ãŸããä»åã®ãµã€ãã®èŠä»¶ã以äžã®ããã«èšå®ããŸããã
- æ¥ã¯ã©ã®ãšãã®æ©èœã¯ç¶æ¿ãã
- ã©ã€ãé ä¿¡ã®ãªã³ã¯ã¯å€éšã«æŒãããšãŸããã®ã§ããµã€ãèªäœãäœããã®æ¹æ³ã§éå®å ¬éã«ãã
- æ°æ©èœãšããŠãã¯ã©ã¹ãããã®ããŒãã¡ã³ã衚ãçµæèŸŒã¿ã§è¡šç€ºã§ããããã«ãã
- ç·šéæ©èœãã€ãã
éå®å ¬éã«ãã
ä»åã®ãµã€ãã¯å€éšã«æŒãããšå€§å€ãŸããã®ã§ãæ¬æ¥ã¯basicèªèšŒãã€ããã¹ãã§ãã
æ¥ã¯ã©ã®ãšãã¯basicèªèšŒãã€ããŠããŸããã
ãã ãbasicèªèšŒããããããšã«ã¯ããã€ãåé¡ããããŸãã
LINEã®å éšãã©ãŠã¶ã§éããªã
LINEã®å éšãã©ãŠã¶ã¯basicèªèšŒã«å¯Ÿå¿ããŠããŸããã
äœè²å§å¡ãéããŠãªã³ã¯ãéã£ããããã®ãå€åLINEãã¡ã€ã³ãªã®ã§ãLINEã§éããªãã®ã¯å°ããŸãã
æ¥ã¯ã©ã®ãšãã¯ããŠãŒã¶ãŒãšãŒãžã§ã³ãã§LINEã®å éšãã©ãŠã¶ãå€å®ããŠãLINEã®å éšãã©ãŠã¶ã§éãããŠãããšãã®ã¿ãå€éšãã©ãŠã¶ã§éãããã«ãªãã€ã¬ã¯ãããŠããŸããã
ã§ãããã¯çµæ§ç¡çãããªæ¹æ³ã§ããªãã€ã¬ã¯ãã®ããã«å éšãã©ãŠã¶ã®ãšãã¯basicèªèšŒãããããªãããã«ããŠããŸããã
ããããããæ¹ã¯ãªããšãªãå«ã§ãã
ãªã³ã¯ãšå ±ã«ãŠãŒã¶ãŒåãšãã¹ã¯ãŒããéããªããšãããªã
人ã«ã·ã§ã¢ãããšãã«ããªã³ã¯ãšãŠãŒã¶ãŒåãšãã¹ã¯ãŒãã®3ç¹ã»ãããéãå¿ èŠããããŸãã
éãããåŽã¯ããªã³ã¯ãããµã€ãã«é£ãã§ãããã«ãŠãŒã¶ãŒåãšãã¹ã¯ãŒããå ¥åããªããã°ãããŸããã
åHRã«ãµã€ãã®QRã³ãŒããæ²ç€ºããŸããããããèªã¿åã£ãããšã«å ¥åãå¿ èŠã§ãã
ããã¯ãªããšãªããµã€ããéãã®ãé¢åã ãšæãããŠããŸãããããªãã§ããããïŒ
(ãŸãäžå¿ããŠãŒã¶ãŒåãšãã¹ã¯ãŒããURLã«å«ãããæ¹ããããŸãããããã¯ä¿ºã奜ããããªã)
ããããããã¹ã¯ãŒããå¹³æã§LINEã§éããšããæå®€ã«è²ŒãããQRã³ãŒãã®äžã«ãã¹ã¯ãŒããæžãããŠããšããããå®å šãªã®ãããããããªããªããŸããã(ãªããŸãããïŒïŒ)
ä»åã®ããæ¹
ããã§ä»åã¯ãbasicèªèšŒã¯ãããã«ããµããã¡ã€ã³ãååãªé·ãã®ã©ã³ãã æååã«ããããšã§ãURLãç¥ã£ãŠã人ããéããªããGoogleãããããéå®å ¬éã®ãµã€ãã¿ãããªããæ¹ã«ããããšæããŸãã
32æåãããã°ååã§ãããã
uuidçæãµã€ãã䜿ã£ãŠãæè»œã«çæããŸããã
ããŒãã¡ã³ã衚瀺
ä»åã®æ°æ©èœã«ããŠç®çã®ããŒãã¡ã³ã衚瀺ã§ãã
åŸã§ã¡ãããšèª¬æããŸããããããªæãã«ãªããŸãã
ç»åã¯äœ¿ããã«å šéšhtmlãšcssã§åçŸããŸãã
詊åçµæã¯ãã¯ã©ã¹ãããã®æ¬éšã«ããäœè²å§å¡ã«å ¥åããŠããããŸãã
å詊åã®å¯©å€ã詊åçµæãæ¬éšã«å ±åã«æ¥ãã®ã§ããã®ã¿ã€ãã³ã°ã§å ¥ããŠããããŸãã
ç·šéæ©èœ
æ¥ã¯ã©ã®ãšãã®ãµã€ãã¯ãYouTubeã®ãªã³ã¯ãããã¹ããã¡ã€ã«ã«æžããŠãããŠã倿Žãããçæã¹ã¯ãªããã§htmlãçæãããšããæãã§éçšããŠããŸããã
ç·šéã¯åãsshã§ãµãŒããŒã«ç¹ãã§vimã§ç·šéãšããæãã ã£ãã®ã§ãå®è³ªåã«ããç·šéã§ããªãç¶æ ã§ããã
ä»åã¯äžèšã®éããäœè²å§å¡ãçµæãå ¥åã§ããããã«ããå¿ èŠãããã®ã§ããã©ãŠã¶äžã§ç·šéããæ©èœãæ±ããããŸãã
å®è£
ãããããå®è£ ããŠãããŸãã
äžå¿ãœãŒã¹ã³ãŒãã¯GitHubã«äžããŠãããŸãããæ¥ãã§äœã£ãŠãã®ãããããåãã°ãããããã£ãŠæãã§ãŽãã£ãŽãã£ããŠãã®ã§ããã®èšäºã§ã¯çްããã³ãŒãã®èª¬æã¯ããŸãããã«ããããŸããªã¢ã€ãã¢çãªã®ãèŒããããããšæããŸãã
質åãããã°ãé æ
®ãªãã³ã¡ã³ãããTwitterã®DMã§ãããŠãã ããã
ç°å¢æ§ç¯
ãµãŒããŒçšã«ãAWS(Amazon Web Service)ã®EC2ã䜿ããŸããã
ããã¯ãWindowsãLinuxã®OSãåãããä»®æ³ãã·ã³ã§ãå¶éã¯ãããŸããã12ã¶æã®ç¡ææ ãçšæãããŠããŸãã
æ ¡å åãã®å°èŠæš¡ãªãµã€ããªããç¡ææ ã®ãªãœãŒã¹ã§ååã§ãããã
åã¯Ubuntu Serverãã€ã³ã¹ããŒã«ããŠäœ¿ã£ãŠããŸãã
ããŒãã¡ã³ã衚ã®çæã«Pythonã䜿ãããã®ã§ããµãŒããŒãœãããŠã§ã¢ã¯Apacheãéžã³ãŸããã
sudo apt install apache2
Apacheã®ããŒãžã§ã³ã¯2.4.41ã§ããã
Apacheã®åºæ¬èšå®ã«ã€ããŠã¯å²æããŸãã
Apacheã§Pythonãåããããã«ãmod_wsgiãå°å
¥ããŸãã
sudo apt install libapache2-mod-wsgi-py3
/etc/apache2/mods-available/wsgi.confã®<IfModule>~</IfModule>å
ã®æåŸã«ã以äžã远èšããŸãã
...
# ãããã
<FilesMatch \.py$>
SetHandler wsgi-script
Options +ExecCGI
</FilesMatch>
# ãããŸã§
</IfModule>
ä¿åããããApacheãåèµ·åããŸãã
sudo systemctl restart apache2
ããã§ãæ¡åŒµåã.pyã®ãã¡ã€ã«ãwsgiã®ã¹ã¯ãªãããšããŠèªèããããã«ãªããŸãã
ãŸããä»åã¯ã©ã³ãã æååã®ãµããã¡ã€ã³ã䜿ã£ãŠãããã©ã«ãã®ãµãŒããŒã«ãŒããšã¯å¥ã®ç¬ç«ãããµã€ãã建ãŠããã®ã§ãApacheã®Virtual Hostãšããæ©èœã䜿ããŸãã
ããã«ããããã¹ãåããšã«å¥ã®ãµãŒããŒã«ãŒããèšå®ã§ããŸãã
(Virtual Hostã«ã€ããŠã®è©³ãã説æã¯å²æããŸãã)
ãŸãã¯ã/etc/apache2/sites-availableå
ã®ãã¡ã€ã«ãããã©ã«ãã§ä»¥äžã®ããã«ãªã£ãŠããã®ã§ã
/etc/apache2/sites-available
âââ 000-default.conf
âââ default-ssl.conf
åªå
é äœãæç¢ºã«ãããããdefault-ssl.confã000-default-ssl.confã«ãªããŒã ããŸãã
sudo a2dissite default-ssl
sudo mv /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/000-default-ssl.conf
sudo a2ensite 000-default-ssl
sudo systemctl restart apache2
次ã«ãã¯ã©ã¹ãããã®ãµã€ãçšã®èšå®ãæžããŸãã
/etc/apache2/sites-available/100-classmatch.confã以äžã®å
容ã§äœæããŸãã
<VirtualHost *:443>
ServerName {ã©ã³ãã æåå}.laddge.net
DocumentRoot /var/www/classmatch
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem # 泚
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key # 泚
SetEnv EDIT_KEY {ç·šéç»é¢çšã®ã©ã³ãã æåå}
<Directory /var/www/classmatch>
<Files ~ ".+">
deny from all
</Files>
<Files ~ "^(index\.html|edit\.py|.*\.css)$">
allow from all
</Files>
</Directory>
</VirtualHost>
ServerNameã®ãšããã®ã©ã³ãã æååã¯ããµããã¡ã€ã³ã«äœ¿ããã€ãå ¥ããŸãã
ç·šéç»é¢çšã®ã©ã³ãã æååãšããã®ã¯ãç·šéç»é¢ã誰ã§ãèŠããç¶æ ãåé¿ããããã«è¿œå ã§ã¯ãšãªãã©ã¡ãŒã¿ã«ãã£ã€ããŠæ¬äŒŒçã«èªèšŒããŸãã
泚ãã€ããŠãããšããã¯ã000-default-ssl.confãããã¯ã£ãŠããŠãŸãã
åã¯Cloudflareã§ç¡çããHTTPSã«ããŠãã®ã§ãæå¹ãªèšŒææžãããªããŠã倧äžå€«ã§ããã
denyãšãallowãšãæžããŠãã®ã¯ãhtmlãcssãšãã®å¿ èŠãªãã¡ã€ã«ã ããèŠããç¶æ ã«ããããã«å¶éããŠããŸãã
èšå®ãæžãããæå¹åããŸãã
sudo a2enmod 100-classmatch
sudo systemctl restart apache2
ãŸããPythonã§htmlãçæããéã«ããã³ãã¬ãŒããšã³ãžã³ãšããŠJinja2ã䜿ããŸããã
sudo pip install jinja2
ããŒãã¡ã³ã衚ãå®è£
ããŒãã¡ã³ã衚ã¯ãäœè²å§å¡äŒãäœã£ããã®ãhtmlãšcssã§åçŸããŸãã
äœè²å§å¡äŒãäœæããããŒãã¡ã³ãã¯ä»¥äžã®æãã§ãã
Excelã§äœã£ãŠãã®ã§ããããããèŠããšã ãã ãçžŠæšªã®æ ŒåãèŠããŠããŸãã
ã€ãŸãã空ã®divèŠçŽ ãçšæããŠã
- x, y ã®åº§æš
- äžã®ããã¹ã
- äžã®æ ç·
- å·Šã®æ ç·
ãèšå®ããã°ãäžã€äžã€ã®ã»ã«ãåçŸã§ãããã§ãã
芪èŠçŽ ã«position: relative;ãåèŠçŽ ã«position: absolute;ãèšå®ãããšçžå¯Ÿçã«å Žæãæ±ºããããã®ã§ã座æšã§ç®¡çã§ããããã«ãªããŸãã
<div style="potision: relative;">
<div sttle="height: 1em; width: 12.5%; position: absolute; top: 3em; left: 25%; border-top: 1px solid #000;"></div>
...
</div>
ã€ã¡ãŒãžãšããŠã¯äžã®æãã§ãã
(å®éã«ã¯ãã£ãšçްããã¹ã¿ã€ã«ã€ãããããŠããŸãã)
ããšã¯ãããã«åãããŠããŒã¿ãäœããŸãã
ããããã®ã»ã«ã¯ãäŸãã°ä»¥äžã®ããã«è¡šããŸãã
"36_2": {
"border_top": 1,
"border_left": 1
}
ããã¯ã36è¡ç®ã®2åç®ã®ã»ã«ã«äžã®æ ç·ãšå·Šã®æ ç·ãã€ããããšããæå³ã§ãã
ãããå»¶ã ãšæžããŸãã
éå¹çã§ããä»ã«æãã€ããŸããã§ããã
ããšã¯ãå詊åã®çµæãå ¥åããããšãã®æåãå¿ èŠã§ãã
ãã説æã倧å€ãªã®ã§å®éã®ããŒã¿ãèŠãŠãã ããã
15000è¡è¿ããããŸãã
ãããæå ¥åããã®ã¯çæ°ã®SATAã§ãã
ã¡ã€ã³ç»é¢ã®äœæ
ã¡ã€ã³ç»é¢ã¯ãããããã®äººãé²èЧããããšãæ³å®ããããããç·šéæã«çæããhtmlãéçã«é ä¿¡ããããã«ããŸããã
ã¡ã€ã³ç»é¢ã«ã€ããŠã¯ããµã³ãã«ãçšæããŸããã
ãã²è§Šã£ãŠã¿ãŠãã ããã
ç·šéç»é¢ã®äœæ
詊åçµæã®ç·šéç»é¢ã¯ã以äžã®ããã«ç°¡åã«ããããããã«ããŸããã
ãããªããäœè²å§å¡ã§ãç·šéã§ããã§ãããã
JavaScriptã§å ¥åå€ã®æ°åå€å®ãªã©ãããŠããŸãã
YouTubeã©ã€ãã®åã蟌ã¿åç»ã®ãªã³ã¯ããåãããã«ç·šéç»é¢ãçšæããŸããã
è¿œå æ©èœ
éçºããŠãäžã§ãè²ã è¶³ããæ©èœããããŸãã
ãã£ãŒãããã¯æ©èœ
ããŒã¿å ¥åã®ç¹æ§äžãèšå€§ãªããŒã¿ã®äžã«ééãããããããããªãã£ãã®ã§ããµã€ããèŠã人ãã¡ãééããäžå ·åãå ±åã§ããä»çµã¿ãäœããŸããã
ãŸããGoogleãã©ãŒã ã§ä»¥äžã®ãããªãã©ãŒã ãäœããŸããã

ãããŠããã©ãŒã ã«åçããã£ããšãã«éå¶ãããã«æ°ã¥ããããã«ãåçå 容ãLINE Notifyã§éç¥ããããã«ããŸããã
ã¹ã¯ãªãããšãã£ã¿ãéããŠé©åœã«GASãæžããŸãã
function onFormSubmitted(e) {
var content = e.response.getItemResponses()[0].getResponse();
var url = 'https://notify-api.line.me/api/notify';
var opt = {
'method': 'POST',
'payload': {'message': content},
'headers': {'Authorization': 'Bearer {LINE Notifyã®ã¢ã¯ã»ã¹ããŒã¯ã³}'}
};
UrlFetchApp.fetch(url, opt);
}
ããšã¯ãããªã¬ãŒã®èšå®ãããŸãã

å®éã«åãåãããäœä»¶ããããŸããã
ãã®æ©èœã¯äœè²å§å¡äŒåŽãå©ãã£ãŠãã¿ããã§ãã
ããŒã¯ã¢ãŒãã«å¯Ÿå¿
å¿ èŠãåãããªãã£ããã©ãäžå¿ããŒã¯ã¢ãŒãã«å¯Ÿå¿ãããŸããã
cssãã©ã€ãããŒãçšãšããŒã¯ããŒãçšã§åããŠããããã¡ãã£ã¢ã¯ãšãªãšJavaScriptã§æ¯ãåããæãã§ãã
奜ããªæ¹ãéžã¹ãããã«ã¹ã€ãããèšçœ®ããŸããã
SessionStorageã«ä¿æããŠããªããŒãããŠãç¶æãããããã«ããŸããã
ããŒãã¡ã³ã衚ã®åŸç¹è¡šç€ºãåãæ¿ããããããã«ãã
ããŒãã¡ã³ã衚ã«åžžã«åŸç¹ã衚瀺ããŠãããšãŽãã£ãŽãã£ããŠèŠã¥ããã®ã§ã衚瀺/é衚瀺ãåãæ¿ãããã§ãã¯ããã¯ã¹ãã€ããŸããã
çµæ
å®éã«éçšããŠã¿ãŠãèªåã§ãã³ã£ãããããããããŸãåããŸããã
Google Analyticsãèšçœ®ããŠèšæž¬ããŠããŸãããã忥ã¯775人ã»ã©ã®äººãèŠãŠãããŸããã
ãã¡ã®é«æ ¡ã¯çåŸã840人ååŸãªã®ã§ãå çæ¹ãå«ãããšããŠãã9å²è¿ãã®äººãèŠãŠããããšããããšã«ãªããŸãã
æ£çŽãããªã«èŠãŠãããããšæã£ãŠããŸããã§ããã
ãŸããåã®ããšãç¥ã£ãŠã人ãã¡ã«ã¯ãèŠããããªã©ã®ææ³ãèšã£ãŠããã人ãããŸããã
ããã«ãåœæ¥æ¬ åžããŠããåéããã¯ãã¯ã©ã¹ãããã®æ§åããããŠããã£ããšèšãããŸããã
å šäœçã«å€§æåã§ããã£ãŠããã£ãã§ãã
åç
åçç¹ãšããŠã¯ã
- ããŒã¿ã®æ§é ãè€éã§ãã¹ãå€ã
- âã«ãã£ãŠãåŒãç¶ãããã¥ãã
- ç¡é§ãå€ã
- ãã¶ã€ã³ãé©åœ
ãªã©ãæããããŸãã
次ã®ä»£ã®äººãã¡ã«ã¯ãããããã®ãäœã£ãŠã»ããã§ãã
æåŸã«
é·ããªã£ãŠããŸããã¿ãŸããã
ãããŸã§èªãã§ããã ãããããšãããããŸããã
åã¯ããããåéšã§ãã°ããããããããšãã§ããŸãããã髿 ¡åæ¥ããŠãããè²ã äœã£ãŠããããšæããŸãã









