æè¿ã§ã¯å€ãã®äººã¯Webãã©ãŠã¶ã«åãã£ãŠä»äºãããŠããŸããããã§ããã°ãã¡ãã£ãšããäœæ¥ããã©ãŠã¶äžã§ã§ãããšäŸ¿å©ã§ããä»åãJavaScriptã§ããã°ã©ã ãäœã£ãŠç°¡åãªããŒã¿ã®æååæŽåœ¢ãããæ¹æ³ã玹ä»ããŸãã
ãã¬ã¯ãŒã¯ãå éãããšãã©ãŠã¶äœæ¥ãå¢ããïŒïŒ
ãã¬ã¯ãŒã¯ãæšå¥šãããæšä»ãã®æµãã¯å éããŠããŸãããªããªããæ©åšãåãããWindowsã§ãmacOSã§ãiPadã§ãAndroidã¿ãã¬ããã§ãã奜ããªæ©æãå©çšããŠè³æã®ç¢ºèªãäœæãã§ããããã§ãã
ä»åããã¬ã¯ãŒã¯ã®ããã«å€ãã®äººãæ©æãè³Œå ¥ããŸããããå šãŠã®è·å Žã§è¯ãæ©æãæ¯çµŠã§ããããã§ã¯ãããŸãããæ¢ã«æå ã«ããæ©åšã§äœæ¥ãããŠãããããªãçæ³çã§ããã¹ããŒããã©ã³ãã¿ãã¬ãããPCããããã®æ©åšã«ããã©ãŠã¶ã¯æèŒãããŠããŸããWebã¢ããªãå©çšããæµããäžå±€å éããŠããããšã§ãããã
ç·šééšã®ä»äºãJSã§èªååããã
ããŠãä»åäœãæååæŽåœ¢ã®ããã°ã©ã ã§ãããç·šééšã§è¡ãããŠããäœæ¥ãèªååããããšããçžè«ããå§ãŸã£ãŠããŸããç·šééšã§ã¯å®æçã«ã¡ãŒã«ãã¬ãžã³ãçºè¡ããŠããŸãããããã¯ãã¥ãŒã¹ãµã€ãã«æ¥ã ã¢ãããããèšäºã®èŠçŽãã¡ãŒã«ã§ãç¥ãããããšãããã®ã§ãã
ãããããµã€ãäžã®èšäºãã¡ãŒã«ãã¬ãžã³ã®æžåŒã«èœãšã蟌ãã®ã¯ããããªãã«åŽåãå¿ èŠã§ãããµã€ãäžã®èšäºã®äžèЧãWebã·ã¹ãã ããååŸã§ããããã«ãªã£ãŠããŸãããããã綺éºã«çªå·ä»ããããŸããã¿ã€ãã«ãã¿ã°ä»ãããŠãèªè ã«èªã¿ãããæŽåœ¢ããäžã§æäŸããã®ã§ãã
å®éãããããç°¡åãªæŽåœ¢åŠçãšããã®ã¯ããã¡ããã¡ãã§å®æçã«è¡ãããŠããŸããæäœæ¥ã§ããããšããããšãå€ãã®ã§ããã宿çã«è¡ãããäœæ¥ã¯ããã°ã©ãã³ã°ã§èªååãããšäŸ¿å©ã§ãããã¡ãããããããäœæ¥ã«ã¯å šãæ±çšæ§ããªãã®ã§ãããJavaScriptã䜿ã£ãæååæŽåœ¢äœæ¥ãã©ã®ããã«èªååããã®ãã®åèã«ãªããŸãããŸãããé¡ãšããŠé¢çœãã®ã§åãçµãã§ã¿ãŸããããããã§ã¯ããé¡ãã確èªããŠã¿ãŸãããã
ããé¡ã
Webã·ã¹ãã ããèšäºã¿ã€ãã«ãšURLã®äžèЧãåºåãããŸããèšäºã®ããããã«å¯ŸããŠãé£çªãã€ããŠãã ããã
å ¥åããŒã¿ã§ããèšäºã¿ã€ãã«ãšURLã®äžèЧã¯ä»¥äžã®ãããªãã®ã§ããããããèŠããšåãããŸãããèšäºã¿ã€ãã«ãURLãèšäºã¿ã€ãã«ãURL ... ãšäº€äºã«é 眮ãããŠããŸãã
ãªã³ã©ã€ã³çµå©åŒå ŽèŠåŠãéå§ããããã¬ãŒãŒã®æçŽã«åããåçµ
https://news.mynavi.jp/article/20200619-1056453/
Windows 10ã«Ubuntu 20.04 LTSãã€ã³ã¹ããŒã«ãã
https://news.mynavi.jp/article/liunx_win-51/
ããŒãPCãšåšèŸºæ©åšã®é£ä¿ãäžæ°ã«æ¥œã«ãªãããããã³ã°ã¹ããŒã·ã§ã³ã
https://news.mynavi.jp/kikaku/beginner_pc-3/
ããã以äžã®ããã«åºåããŸãã
[ 1] ãªã³ã©ã€ã³çµå©åŒå ŽèŠåŠãéå§ããããã¬ãŒãŒã®æçŽã«åããåçµ
https://news.mynavi.jp/article/20200619-1056453/
[ 2] Windows 10ã«Ubuntu 20.04 LTSãã€ã³ã¹ããŒã«ãã
https://news.mynavi.jp/article/liunx_win-51/
[ 3] ããŒãPCãšåšèŸºæ©åšã®é£ä¿ãäžæ°ã«æ¥œã«ãªãããããã³ã°ã¹ããŒã·ã§ã³ã
https://news.mynavi.jp/kikaku/beginner_pc-3/
åºæ¬çãªç»é¢ãäœãã
ãŸããããããããŒã«ãäœããšãã«æ°ãã€ãããã®ããã§ããã ãæè»œã«æŽåœ¢ãè¡ããããšããç¹ã§ããèªåã䜿ãã ãã§ããã°ãããã°ã©ã ããã£ãšæžããŠçµããã§ãè¯ãã®ã§ããããã誰ãã«äœ¿ã£ãŠãããããšæã£ãŠããå Žåã¯ãå®è¡æé ãç°¡åã«ããããšã倧åã§ãã
ã¡ãã£ãšããã¹ããæŽåœ¢ããã ããªã®ã«ãããŒã¿ããã¡ã€ã«ã«ä¿åããŠãã³ãã³ãã©ã€ã³ãèµ·åããŠã³ãã³ããæã¡èŸŒãã§ããã£ãŠããã°ã©ã ãå®è¡ããŠã»ã»ã»ãšããããã°ã©ããŒä»¥å€ã®äººã«éŠŽæã¿ã®ãªãäœæ¥ã匷èŠããããšã¯ã§ããŸããããã®ç¹ãWebãã©ãŠã¶ã§åãã¢ããªãªããHTMLãã¡ã€ã«ãããã¯ããŒã¯ããŠããã£ãŠããã©ãŠã¶ã§ãã®HTMLãã¡ã€ã«ãéãã ãã§åããããšãã§ããŸãã
ããã§ãç»é¢ã«å ¥åãšåºåã®äºã€ã®ããã¹ãããã¯ã¹ãé 眮ããå ¥åçšã®ããã¹ãããã¯ã¹ã«å ¥åããŒã¿ãã³ããŒïŒããŒã¹ãã§è²Œãä»ãããšãæŽåœ¢åŸã®ããã¹ããåºåçšã®ããã¹ãããã¯ã¹ã«åºåãããšããä»çµã¿ã§äœã£ãŠã¿ãŸãããã
HTMLã¯æ¬¡ã®ãããªãã®ã«ãªãã§ãããã
<!DOCTYPE html><html><meta charset="utf-8"><body>
<h3>å
¥å - 以äžã«ã¿ã€ãã«ãšURLã®äžèЧã貌ãä»ã</h3>
<textarea id="in_ta" rows="8" cols="80"></textarea>
<h3>åºå</h3>
<textarea id="out_ta" rows="8" cols="80"></textarea>
<script>
// ããã§æŽåœ¢ããã°ã©ã
</script>
</body></html>
倿ããã°ã©ã ãäœãã
ããŠããã®ããã«ããŒã¿æŽåœ¢ã®ããã°ã©ã ãäœãæã®æŠç¥ãšããŠããŸãã¯å ¥åããŒã¿ãJavaScriptã§æ±ãããã圢ã§ååŸããŠãããŠããã®åŸã§å¥œããªåœ¢ã§åºåãããšããææ³ã䜿ããŸããä»åã®ãããªç°¡åãªæŽåœ¢ã§ããã°ãå ¥åããŒã¿ãèªã¿ãªããããŒã¿ãæŽåœ¢ããŠåºåãšããææ³ãã§ããã®ã§ãããããã°ã©ã ã¯ã§ããã ãåçŽã«ããŠãããšãæ¹è¯ã容æã«ãªããŸãã
æåã«ãHTMLã®ããã¹ãããã¯ã¹(textarea)ããããã¹ããåãåºããããŒã¿ãå ¥åãããæ®µéã§ããŒã¿ãåºåããããã«ããŠã¿ãŸãã
// å
¥åãšåºåã®ããã¹ãããã¯ã¹ã®DOMãååŸ --- (*1)
const in_ta = document.querySelector("#in_ta")
const out_ta = document.querySelector("#out_ta")
in_ta.onkeydown = convertTextFromTA // ã€ãã³ãèšå®
// æŽåœ¢åŠçãå®è¡
function convertTextFromTA() {
// å
¥åãåŸã --- (*2)
const lines = getInputArray(in_ta.value)
// åºåãçæ --- (*3)
out_ta.value = convertText(lines)
}
ããã°ã©ã ã®(ïŒ1)ã®éšåã§ã¯ãJavaScriptã§ããã¹ãããã¯ã¹ãæäœã§ããããã«ãDOMãªããžã§ã¯ããååŸããŸãããããŠãonkeydownã®ã€ãã³ããèšå®ããããšã§ãããã¹ãããã¯ã¹å ã§äœãããŒãæŒããæã«ãconvertTextFromTA颿°ãå®è¡ãããããã«ããŸãã
(ïŒ2)ã®éšåã§ã¯ãå ¥åããã¹ãããã¯ã¹(in_ta)ã®å€ãååŸãããããJavaScriptã§æ±ããããé å(Array)åœ¢åŒ ã§ååŸããŸãã(ïŒ3)ã®éšåã§ã¯ãæŽåœ¢æžã¿ã®ããã¹ããåºåããã¹ãããã¯ã¹(out_ta)ã«èšå®ããŸãããªããgetInputArray颿°ãšconvertText颿°ã¯ãã®åŸã§äœæããŸãã
å ¥åããã¹ããé å圢åŒã§ååŸããã
ããã§ã¯ãå ¥åããã¹ããé å圢åŒã§ååŸããããã°ã©ã ãgetInputArray颿°ãäœã£ãŠã¿ãŸããããå ¥åããã¹ããæ¹è¡ã§åºåã£ãŠåè¡ã調ã¹ãŸãããã®éãã¿ã€ãã«ãURLãã¿ã€ãã«ãURLãšäº€äºã«ããŒã¿ã䞊ãã§ããããšãå©çšããŠã2è¡äžçµã§ããŒã¿ãååŸããããšã§ãã以äžãããã°ã©ã ã§ãã
// å
¥åããŒã¿ãé
å圢åŒã§åŸã
function getInputArray(textData) {
// ååŸã®ç©ºçœãããªã --- (*1)
const data = textData.replace(/^\s+/, '').replace(/\s+$/, '')
// æ¹è¡ã³ãŒããæããŠäžè¡ãã€ã«åè§£ --- (*2)
const lines = data.replace(/\r\n/g, "\n").split("\n")
// ã¿ã€ãã«ãšURLã®çµã«åãã --- (*3)
const result = []
let title = "", url = ""
for (let i in lines) { // åè¡ã調ã¹ã
let line = lines[i]
if (i % 2 == 0) { // 2è¡ããšäº€äºã«ããŒã¿ãåŸã
title = line
continue
}
url = line
result.push([title, url])
}
return result
}
2è¡ããšã«ããŒã¿ãé åã«è¿œå ããã ãã§ãããå ¥å¿µãªå眮åŠçãå¿ èŠã§ãããŸãã(*1)ã®éšåã§ã¯ãããã¹ãããã¯ã¹ã®ååŸã«ãã空çœãåé€ããŸããreplaceã¡ãœããã§ãæ£èŠè¡šçŸãå©çšããŠç©ºçœãåé€ããŸãã
(ïŒ2)ã®éšåã§ã¯æ¹è¡ã³ãŒããæãã€ã€ãäžè¡ãã€ã«åå²ããŸããOSããšã«ããã¹ãã®æ¹è¡ã³ãŒããç°ãªããŸããWindowsã§ã¯CRLF(\r\n)ãLinux/macOSã§ã¯LF(\n)ã®æ¹è¡ã䜿ãããŸããããã§ãæåã«CRLF(\r\n)ãLF(\n)ã«çµ±äžããŸãããããŠãsplitã¡ãœããã§LF(\n)ã§è¡ãåå²ããŸãã
ãããŠã(ïŒ3)ã®éšåã§foræ§æãå©çšããŠäžè¡æ¯ã«ããŒã¿ã調ã¹ãŸãããã®éãã¿ã€ãã«ãšURLãç¹°ãè¿ããããããè¡çªå·ã2ã§å²ã£ãäœãã0ã®æã«ã¿ã€ãã«ãèŠããŠãããŠã1ã®æã«ã¿ã€ãã«ãšURLããŸãšããŠçµæé å(result)ã«è¿œå ããããã«ããŸãã
åºåããã¹ããäœæããã
ç¶ããŠãé å圢åŒã®ããŒã¿ããããã¹ããåºåããããã°ã©ã ãäœã£ãŠãããŸããããå ¥åããŒã¿ã¯ã以äžã®ãããªé åããŒã¿ãšãªã£ãŠããŸãã
[[ã¿ã€ãã«,URL], [ã¿ã€ãã«,URL], ... ]
ãã®ãããªãåãåã£ãŠçªå·ãã€ããŠããŒã¿ãåºåããŸãããã®éãæ°å€ã¯ã¹ããŒã¹ãå ¥ããŠå³å¯ãããŸãã
// ããã¹ãã«å€æ
function convertText(input) {
const result = []
// å
¥åãç¹°ãè¿ãåºå --- (*1)
for (let i in input) {
const line = input[i]
const title = line[0] // ã¿ã€ãã«
const url = " " + line[1] // URL
const no = pad2(parseInt(i) + 1)
result.push(`[${no}] ${title}\n${url}`)
}
return result.join("\n")
}
// ã¹ããŒã¹ãå
¥ããŠäºæ¡å³å¯ãã§æãã --- (*2)
function pad2(s) {
const n = " " + s
return n.substr(n.length - 2, 2)
}
(ïŒ1)ã®éšåã§foræ§æãå©çšããŠç¹°ãè¿ãããŒã¿ãåŠçããŸãã(ïŒ2)ã®éšåã§ã¯ãæ°åã®åã«ã¹ããŒã¹ãå ¥ããŠäºæ¡å³å¯ãã«æããpad2颿°ãå®çŸ©ããŠããŸãã
å®è¡ããŠã¿ãã
ãªãããããŸã§ã®å®å šãªããã°ã©ã ããã¡ãã«ã¢ããããŸããããœãŒã¹ã³ãŒãã®éšåããconvert-text.htmlããšããååã§ä¿åããWebãã©ãŠã¶ã«ãã©ãã°ïŒããããããŠå®è¡ããŠã¿ãŠãã ããã
圢æããã°ã©ã ã®ãŸãšã
ä»åäœã£ãã®ã¯ãå ¥åããŒã¿ã«çªå·ãã€ããŠåºåããã ããšç°¡åãªãã®ã§ãããå®ã¯ãããå°ãè€éãªåŠçãå¿ èŠã«ãªããŸããæ¬¡åã¯ä»åã®ããã°ã©ã ãããŒã¹ã«æ¹é ããŠãããŸãããæ¥œãã¿ã«ã
èªç±åããã°ã©ããŒããããã¯ãã©ã«ãŠãããã°ã©ãã³ã°ã®æ¥œãããäŒããæŽ»åãããŠããã代衚äœã«ãæ¥æ¬èªããã°ã©ãã³ã°èšèªããªã§ããã ãããã¹ã鳿¥œããµã¯ã©ããªã©ã2001幎ãªã³ã©ã€ã³ãœãã倧è³å ¥è³ã2004幎床æªèžãŠãŒã¹ ã¹ãŒããŒã¯ãªãšãŒã¿èªå®ã2010幎 OSSè²¢ç®è ç« åè³ãæè¡æžãå€ãå·çããŠããã


