ããã«ã¡ã¯ãèã®ç©´ã©ãã®H.Hã§ãã
çªç¶ã§ãããçããã¯æ®æ®µä½¿ã£ã¦ãããã©ã¦ã¶ã¯ä½ã§ããããï¼
ç§ã¯æ®æ®µããChromeã使ã£ã¦ããããã®ããã°ãChromeã使ã£ã¦æ¸ãã¦ãã¾ãã
å
æ¥ããæ¡å¼µæ©è½ãChromeã«å
¥ããã«ããæ©è½ã®èª¬æãèªãã§ãã¾ããã
説æã®ä¸ã«Githubã®URLãè¨è¼ããæ¡å¼µæ©è½ã®ã½ã¼ã¹ã³ã¼ããå
¬éããã¦ãããJavaScriptãªã©ã®ç¥èãããã°ä½æå¯è½ã¨ãããã¾ããã
ã¾ãGoogleããç°¡åãªæ¡å¼µæ©è½ãä½æãããã¥ã¼ããªã¢ã«ãå
¬éããã¦ãã¾ããã
ããã§ããã¥ã¼ããªã¢ã«ã§å
¬éããã¦ããæ¡å¼µæ©è½ã®å®éã«ä½ã£ã¦ã¿ããã¨ã«ãã¾ããã
ä»åã¯æ¡å¼µæ©è½ã®ä½æããæã®æé ã¨ãããã°ã®æ¹æ³ã説æãã¦ããã¾ãã
Chromeã®æ¡å¼µæ©è½ã¨ã¯
Chromeæ©è½ã¯Chromeã¦ã§ãã¹ãã¢ãªã©ããChromeã«è¿½å ãããã¨ã§ãæ¨æºã«ã¯ç¡ãæ©è½ã®è¿½å ãè¡ããã®ã§ãã
ã©ã®ãããªæ¡å¼µæ©è½ãChromeã«å
¥ã£ã¦ãããã®ç¢ºèªã¯ã以ä¸ã®æ¹æ³ã§ç¢ºèªãã§ãã¾ãã
ã»ãchrome://extensions/ãã¨ãã©ã¦ã¶ã®ã¢ãã¬ã¹ãã¼ã«å
¥ãã
ã»Chromeã®è¨å®ããæ¡å¼µæ©è½ãé¸ã¶
å
¬éããã¦ããæ¡å¼µæ©è½ã«ã¯ãGoogle製ã®ãã®ã¯ãã¡ããGoogle以å¤ã®ä¼æ¥ãå人ãéçºããæ¡å¼µæ©è½ãå¤ãå
¬éããã¦ãã¾ãã
Chromeã®æ¡å¼µæ©è½ã¯ jsonãã¡ã¤ã«ãHTMLãã¡ã¤ã«ãJavaScriptãã¡ã¤ã«ãCSSãã¡ã¤ã«ã§æ§æããã¾ãã
jsonã»ã»ã»manifest.jsonã¨ããååã§ä½æãããæ¡å¼µæ©è½ã®è¨å®ãªã©è¨è¿°ãã
HTMLã»ã»ã»ãã©ã¦ã¶ä¸ã§æ¡å¼µæ©è½ãåä½ãããã¡ãã¥ã¼ãè¨å®å¤æ´ç¨ã®ãã¼ã¸ãè¨è¿°ãã
JavaScriptã»ã»ã»æ¡å¼µæ©è½ã®åä½ãè¨è¿°ãã
CSSã»ã»ã»æ¡å¼µæ©è½ãé©ç¨ããCSSã®å
容ãè¨è¿°ãã
æ¡å¼µæ©è½ã®ä½ãæ¹ã説æããæ¥æ¬èªã®ãã¼ã¸ãããã¤ãããã¾ããããæççãªæ
å ±ãå¤ãã£ãã§ããä»åã¯ãGoogleãå
¬éãã¦ãããã¥ã¼ããªã¢ã«ã®å
容ã«å£ã£ã¦ãå®éã«éçºã®æµãã説æãããã¨æãã¾ãã
æ¡å¼µæ©è½ãä½ãããã«å¿
è¦ãªãã®
æ¡å¼µæ©è½ãä½ã£ã¦åä½ãããããã«å¿
è¦ãªãã®ã¯ä»¥ä¸ã®äºã¤ã§ãã
ã»Chromeãã¤ã³ã¹ãã¼ã«ãããPC
ã»HTMLãªã©ãç·¨éããããã®ããã¹ãã¨ãã£ã¿
ä»åã¯macOS Calalina 10.15.3ã¨Chromeã®ãã¼ã¸ã§ã³81ã使ç¨ãã¾ãã
Googleãå
¬éãã¦ããæ¡å¼µæ©è½ã®ãã¥ã¼ããªã¢ã«ã«ã¤ãã¦
æ¡å¼µæ©è½ã®ä½ãæ¹ã«ã¤ãã¦ã¯Googleããµã¤ãã§å
¬éãã¦ãã¾ãã
ç´¹ä»ããã¦ããã®ã¯ç¹å®ã®ãµã¤ãï¼developer.chrome.comï¼ã®èæ¯è²ãå¤æ´ãããã¿ã³ãæã¤æ¡å¼µæ©è½ã«ãªãã¾ãã
å®éã«åããã¨ãã®ãããªè¡¨ç¤ºã«å¤ããã¾ãã
æ¡å¼µæ©è½ã®ä½ãæ¹
1.ä½æ¥ãã£ã¬ã¯ããªã®ä½æ
æ¡å¼µæ©è½ãæ§æãããã¡ã¤ã«ãã¾ã¨ããããã®ãã£ã¬ã¯ããªãä½æãã¾ãã
æ¡å¼µæ©è½ããã©ã¦ã¶ã«è¿½å ããæã¯ãé¢é£ãã¡ã¤ã«ãã¾ã¨ãããã£ã¬ã¯ããªãæå®ãããã¨ã«ãªãã¾ãã
ãã£ã¬ã¯ããªã®ååã¯æ¡å¼µæ©è½ã®ååãªã©ã«ã¯åæ ãããªãã®ã§ãããããããååã§ä½æãã¦åé¡ããã¾ããã
2.manifest.jsonãã¡ã¤ã«ã®ä½æ
æ¡å¼µæ©è½ã«é¢ããè¨å®ã¯ãã®ãã¡ã¤ã«ã«è¨è¿°ããäºã«ãªãã¾ãã
æä½éå¿
è¦ãªå
容ã¯ãæ¡å¼µæ©è½ã®åå(name)ã»ãã¼ã¸ã§ã³(version)ã»æ¡å¼µæ©è½ã®è©³ç´°ãªèª¬æ(discription)ã»ãããã§ã¹ããã¼ã¸ã§ã³(manifest_version)ã«ãªãã¾ãã
ï¼2020/4/20ç¾å¨ããããã§ã¹ããã¡ã¤ã«ã®ãã¼ã¸ã§ã³ã¯2ãæå¹ã«ãªãã¾ããï¼
æä½éå¿
è¦ãªmanifest.jsonã®å
容ã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
{ "name": "Getting Started Example", "version": "1.0", "description": "Build an Extension!", "manifest_version": 2 }
以éã¯manifest.jsonã«å¿
è¦ãªå
容ã追è¨ãã¦ããäºã«ãªãã¾ãã
3.æ¡å¼µæ©è½ã®åæå¦ç
æ¡å¼µæ©è½ãåããã«ãããåæè¨å®ã¨ãã¦å¿
è¦ãªå
容ãããå ´åã¯ãbackgroundã¨ããè¦ç´ ãmanifest.jsonã«è¿½è¨ãã¾ãã
ã¾ãGoogleã®ãµã³ãã«ã§ã¯ãã¼ã«ã«ã¹ãã¬ã¼ã¸ã«å¤ã®èªã¿æ¸ããã権éï¼storageï¼ã¨ããã©ã¦ã¶ã«å®éã«è¡¨ç¤ºããã¦ããå
容ã®èªã¿è¾¼ã¿ãè¡ãããã®æ¨©éï¼declarativeContentï¼ãã¤ããããã«ãpermissionsã¨ããè¦ç´ ã追å ãã¾ãã
backgroundã®ä¸ã§æå®ããã¦ããJavaScriptãå®è¡ããã¾ããä»åã¯background.jsã¨ãã¦ãã¾ãã
manifest.json
{ "name": "Getting Started Example", "version": "1.0", "description": "Build an Extension!", "permissions": ["declarativeContent", "storage"], "background": { "scripts": ["background.js"], "persistent": false }, "manifest_version": 2 }
background.js
chrome.runtime.onInstalled.addListener(function() { chrome.storage.sync.set({color: '#3aa757'}, function() { console.log('The color is green.'); }); chrome.declarativeContent.onPageChanged.removeRules(undefined, function() { chrome.declarativeContent.onPageChanged.addRules([{ conditions: [new chrome.declarativeContent.PageStateMatcher({ pageUrl: {hostEquals: 'developer.chrome.com'}, }) ], actions: [new chrome.declarativeContent.ShowPageAction()] }]); }); });
background.jsã¯manifest.jsonã¨åããã£ã¬ã¯ããªã«é
ç½®ãã¾ãã
background.jsã¯ä»¥ä¸ã®äºã¤ããã¨ãè¡ã£ã¦ãã¾ãã
ã»ãã¼ã«ã«ã¹ãã¬ã¼ã¸ã«Key-Valueå½¢å¼ã®å¤ãä¿åï¼colorã¨ããå称ã«å¯¾ãã¦ã#3aa757ãä¿åãã¦ãã¾ãï¼
ã»ä»åã®æ¡å¼µæ©è½ãæå¹ã«ãããã©ããã®å¤å®ï¼è¡¨ç¤ºããã¦ãããã©ã¦ã¶ã®ãã¹ããdeveloper.chrome.comã¨ä¸è´ãã¦ããå ´åã®ã¿æå¹ï¼
4.æ¡å¼µæ©è½ã®æä½ãè¡ãHTMLã®è¿½å
次ã«èæ¯è²ãå¤æ´ãããã¿ã³ã表示ããé¨åãä½æãã¾ãã
æ¡å¼µæ©è½æä½ãããããã®ãã¼ãã¯HTMLã§è¨è¿°ãã¾ãã
ä»åã¯åç´ãªãã¿ã³ãä¸ã¤ã ãã®HTMLãä½æãã¾ããååã¯popup.htmlã¨ãã¾ãã
popup.html
<!DOCTYPE html> <html> <head> <style> button { height: 30px; width: 30px; outline: none; } </style> </head> <body> <button id="changeColor"></button> </body> </html>
backgroud.jsã¨åæ§ã«manifest.jsonã«page_actionã¨ãããpopup.htmlãå¼ã³åºãå®ç¾©ã追å ãã¾ãã
ã¾ããpage_actionã®default_iconã«ã¢ã¤ã³ã³ç»åãå®ç¾©ãã¾ããããã«è¡¨ç¤ºããã¦ããç»é¢ãæä½ãããããpermissionsã«activeTabã追å ãã¾ãã
manifest.json
{ "name": "Getting Started Example", "version": "1.0", "description": "Build an Extension!", "permissions": ["activeTab","declarativeContent", "storage"], "background": { "scripts": ["background.js"], "persistent": false }, "page_action": { "default_popup": "popup.html", "default_icon": { "32": "images/get_started32.png" } }, "manifest_version": 2 }
ã¢ã¤ã³ã³ã®å®ç¾©ã«æ¸ããã¦ããæ°å¤ã®"32"ã¯ç»åã表示ããå ´æã®æå®ã¨ãªãã¾ãã
å®éã«åããã¨ã¢ãã¬ã¹ãã¼ã®æ¨ªã®æ¡å¼µæ©è½ã®ã¢ã¤ã³ã³ã«ããã®ç»åã¯ä½¿ç¨ããã¾ãã
ãã¥ã¼ããªã¢ã«ã§ã¯ï¼ã¤å®ç¾©ããã¦ãã¾ãããä»åä½æããæ¡å¼µæ©è½ã§ã¯32ãå®ç¾©ããã¦ããã°åé¡ããã¾ããã
5.æ¡å¼µæ©è½ã®å¦çã®è¿½å
ä»åã®æ¡å¼µæ©è½ã®æ ¹å¹¹ã¨ãªãèæ¯è²ãå¤æ´ããå¦çã追å ãã¾ãã
æ©è½ã®å¼ã³åºãã¯popup.htmlã«JavaScriptã®å¼ã³åºãã追è¨ãã¾ãã
JavaScriptã®ååã¯popup.jsã¨ãã¾ãã
popup.html
<!DOCTYPE html> <html> <head> <style> button { height: 30px; width: 30px; outline: none; } </style> </head> <body> <button id="changeColor"></button> <script src="popup.js"></script> </body> </html>
popup.js
let changeColor = document.getElementById('changeColor'); chrome.storage.sync.get('color', function(data) { changeColor.style.backgroundColor = data.color; changeColor.setAttribute('value', data.color); }); changeColor.onclick = function(element) { let color = element.target.value; chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { chrome.tabs.executeScript( tabs[0].id, {code: 'document.body.style.backgroundColor = "' + color + '";'}); }); };
popup.jsã®ä¸ã§ã¯ã以ä¸ã®ï¼ã¤ã®ãã¨ãè¡ã£ã¦ãã¾ãã
1)popup.htmlã®ä¸ã®ãã¿ã³ã®è¦ç´ ãåå¾
2)backgroud.jsã®ä¸ã§å®ç¾©ããcolorã®å¤ãåå¾ãã¦1)ã§åå¾ãããã¿ã³ã®èæ¯è²ã«è¨å®
3)ãã¿ã³ã®è¦ç´ ã«1)ã§åå¾ããå¤ãvalueã®å¤ã¨ãã¦å®ç¾©
4)ãã¿ã³ãæ¼ããå ´åã«å®è¡ããå¦çï¼onClickã®å¦çï¼ã®å®ç¾©
ãã®é¨åã§æ³¨æç¹ãï¼ç¹ããã¾ããããã¯ä¸è¨ã®å¦çã®4ã¤ç®ã®onClickã®å¦çã®è¿½å ã§ãã
page_actionã§å®ç¾©ããHTMLã«ã¯onClickãªã©ã®on~ã§å§ã¾ãå®ç¾©ãè¨è¿°ã§ããªãã¨ããå¶ç´ããããããJavaScriptã®ä¸ã§å¦çã追å ããå¿
è¦ãããã¾ãã
ä»®ã«HTMLã«ç´æ¥è¨è¿°ããå ´åãChromeã«ç»é²ããéã«ã¨ã©ã¼ã¨ãªãã¾ãã
6.ãªãã·ã§ã³ãã¼ã¸ã®è¿½å
ç´°ããªè¨å®ãã§ããæ¡å¼µæ©è½ãä½æããå ´åãè¨å®ç¨ã®ç»é¢ããã£ãæ¹ãè¯ãå ´åãããã¾ãã
ãã®å ´åã«ä½¿ç¨ããã®ããªãã·ã§ã³ãã¼ã¸ã§ãã
HTMLãã¡ã¤ã«ã¨JavaScriptãã¡ã¤ã«ã§è¨è¿°ãããã®èªã¿è¾¼ã¿ãmanifest.jsonã«è¨è¿°ãã¾ãã
ä»åã¯ååãoptions.html,options.jsã¨ããèæ¯è²ã®å®ç¾©ãåãæ¿ããæ©è½ãã¤ãã¾ãã
option.html
<!DOCTYPE html> <html> <head> <style> button { height: 30px; width: 30px; outline: none; margin: 10px; } </style> </head> <body> <div id="buttonDiv"> </div> <div> <p>Choose a different background color!</p> </div> </body> <script src="options.js"></script> </html>
options.js
let page = document.getElementById('buttonDiv'); const kButtonColors = ['#3aa757', '#e8453c', '#f9bb2d', '#4688f1']; function constructOptions(kButtonColors) { for (let item of kButtonColors) { let button = document.createElement('button'); button.style.backgroundColor = item; button.addEventListener('click', function() { chrome.storage.sync.set({color: item}, function() { console.log('color is ' + item); }) }); page.appendChild(button); } } constructOptions(kButtonColors);
manifest.json
{ "name": "Getting Started Example", "version": "1.0", "description": "Build an Extension!", "permissions": ["activeTab","declarativeContent", "storage"], "background": { "scripts": ["background.js"], "persistent": false }, "page_action": { "default_popup": "popup.html", "default_icon": { "32": "images/get_started32.png" } }, "options_page":"option.html", "manifest_version": 2 }
7.æ¡å¼µæ©è½ã®ä¸è¦§ç»é¢ã«è¡¨ç¤ºããã¢ã¤ã³ã³ã®è¨å®
æå¾ã«æ¡å¼µæ©è½ã®ä¸è¦§ç»é¢ã«è¡¨ç¤ºããéã®ã¢ã¤ã³ã³ãå®ç¾©ãã¾ãã
å®ç¾©ãè¨è¿°ããå ´æã¯manifest.jsonã§ãã
manifest.json
{ "name": "Getting Started Example", "version": "1.0", "description": "Build an Extension!", "permissions": ["activeTab","declarativeContent", "storage"], "background": { "scripts": ["background.js"], "persistent": false }, "page_action": { "default_popup": "popup.html", "default_icon": { "32": "images/get_started32.png" } }, "icons": { "48": "images/get_started48.png" }, "options_page":"option.html", "manifest_version": 2 }
ã¢ã¤ã³ã³ã®å®ç¾©ã«æ¸ããã¦ããæ°å¤ã®"48"ã¯ç»åã表示ããå ´æã®æå®ã¨ãªãã¾ãã
ãã®ç»åã¯ãæ¡å¼µæ©è½ã®ä¸è¦§ç»é¢ã詳細ãã¼ã¸ã§ä½¿ç¨ããã¾ãã
ãã¥ã¼ããªã¢ã«ã§ã¯4ã¤å®ç¾©ãæ¸ããã¦ãã¾ããã48ã ããå®ç¾©ããã°ä»åã®å ´ååé¡ããã¾ããã
å®éã«åããã¦ã¿ã
å®éã«åããã«ã¯ãæ¡å¼µæ©è½ã®ä¸è¦§ã表示ããã¦ããç»é¢(chrome://extensions)ã«ç§»ãä½æãããã¡ã¤ã«ãå
¥ã£ããã£ã¬ã¯ããªãèªã¿è¾¼ã¾ãã¾ãã
èªã¿è¾¼ãã«ã¯ãããããã¼ã¢ã¼ããæå¹ã«ãã¦ããå¿
è¦ãããã¾ãã
ä¸ã®ç»åã®ããã«ç»é¢ã®å³å´ã®ãããããã¼ã¢ã¼ããéããªã£ã¦ããã°åé¡ããã¾ããã
ã¢ãããã¼ãã¯ç»é¢å³å´ã®ãããã±ã¼ã¸åããã¦ããªãæ¡å¼µæ©è½ãèªã¿è¾¼ããããä½æãããã£ã¬ã¯ããªãèªã¿è¾¼ã¿ã¾ãã
æåããã¨Getting Started Exampleã¨ããååã®æ¡å¼µæ©è½ã追å ããããã©ã¦ã¶ã®ã¢ãã¬ã¹ãã¼ã®æ¨ªã«æ°ããæ¡å¼µæ©è½ã®ã¢ã¤ã³ã³ã表示ããã¾ãã
ä»åã¢ã¤ã³ã³ã¯èã®ç©´ã©ãã§é
å¸ãã¦ããã¡ã¤ãã¡ããã«ãã¾ãããæ¡å¼µæ©è½ã®ä¸è¦§ãã¼ã¸ã«è¡¨ç¤ºãããç»åã¯iconsã®48ã®ç»åãã¢ãã¬ã¹ãã¼ã®æ¨ªã«è¡¨ç¤ºãããç»åãpage_actionã®default_iconã®32ã®ç»åã使ç¨ããã¾ãã
å°ããã§ãããã¢ãã¬ã¹ãã¼ã®é£ã«ã¡ã¤ãã¡ããã®ã¢ã¤ã³ã³ã表示ããã¾ãã
ã°ã¬ã¼ã¢ã¦ããã¦ããã®ã¯ããã©ã¦ã¶ã§ãdeveloper.chrome.comãã表示ãã¦ããªãããã§ããç»é¢ã移åãã¦ããã¹ãåãbackground.jsã®å
容ã¨ä¸è´ããã¨ã¢ã¤ã³ã³ãã«ã©ã¼ã«ãªãæ©è½ãæå¹ã«ãªãã¾ãã
ã¢ã¤ã³ã³ãæ¼ãã¨ãã¢ã¤ã³ã³ã®ä¸ã«popup.htmlã®å 容ã表示ããã¾ãã
ãã®ç·è²ã®ãã¿ã³ãæ¼ãã¨ããdeveloper.chrome.comãã®ç½è²ã®èæ¯ãç·è²ã«å¤ããã¾ãã
ã¾ãã¢ã¤ã³ã³ãå³ã¯ãªãã¯ããæã«è¡¨ç¤ºãããã¡ãã¥ã¼ã®ä¸ã®ãªãã·ã§ã³ãé¸æããã¨options.htmlã§è¨è¿°ããå 容ã表示ããã¾ãã
ãªãã·ã§ã³ãã¼ã¸ã§å¥ã®è²ãé¸æãã¦ãããä¸åº¦æ¡å¼µæ©è½ã®ã¢ã¤ã³ã³ã®ãã¿ã³ãæ¼ãã¨æå®ããè²ã«å¤ããã¾ãã
ãããã°æ¹æ³
æ¡å¼µæ©è½ã®ãããã°æ¹æ³ã¯åæå¦çã®background.jsã¨å®éã®æ©è½ã®popup.jsã§ç°ãªãã¾ãã
1.background.jsã®ãããã°æ¹æ³
background.jsã¯æ¡å¼µæ©è½ã®è©³ç´°ãã¼ã¸ã«ç§»åãã¦ããã¥ã¼ã®æ¤è¨¼ã¨ããã¨ããã§ç¢ºèªãã¾ãã
ããã¯ã°ã©ã¦ã³ããã¼ã¸ã®ãªã³ã¯ãæ¼ãã¨ãã£ããããã¼ãã¼ã«ã表示ããã¦ãã½ã¼ã¹ã確èªãããã¨ãã§ãã¾ãã
注æç¹ã¯ãã¬ã¤ã¯ãã¤ã³ããå¹ããªãã®ã§ãã³ã³ã½ã¼ã«ã¸ã®åºåãªã©ã§åä½ã®ç¢ºèªãè¡ãå¿
è¦ãããç¹ã§ãã
ä¸ã®ç»åã§ãã¬ã¤ã¯ãã¤ã³ããè¨å®ãã¦ãã¾ãããæ¢ã¾ããã¨ãªãå¦çãé²ã¿ã¾ãã
2.popup.jsã®ãããã°æ¹æ³
popup.jsã¯ä¸ã®ç»åã®ããã«popup.htmlã表示ããã¦ããé åã§å³ã¯ãªãã¯ãæ¼ãã¦ã表示ãããæ¤è¨¼ãããã£ããããã¼ãã¼ã«ã表示ãããã¨ã§ãåä½ç¢ºèªãå¯è½ã§ãã
ãã¡ãã¯ãã¬ã¤ã¯ãã¤ã³ããåä½ããã®ã§ãé常ã®JavaScriptã®ããã«åä½ç¢ºèªãããã¨ãå¯è½ã§ãã
ã¾ã¨ã
Chromeã®æ¡å¼µæ©è½ã®ãã¥ã¼ããªã¢ã«ã§ã¯ãã®å¾æ§ã
ãªãµã³ãã«ã®ç´¹ä»ãªã©ãããã¾ããæéãè¦ã¤ãã¦ãããã«ãåãçµã¿ããã¨æãã¾ãã
ã¾ããä»åã¯JavaScriptã§ç»é¢ã®èæ¯è²ãå¤ããå¦çãè¡ãã¾ããããCSSã§åãæ¿ããæ¹æ³ãããã¾ãã
å®éã«ä½ã£ã¦ã¿ã¦ãç»é¢ã®è¡¨ç¤ºããã©ã¦ã¶å
ã ãã§å¤æ´ã§ããã®ã§ãç»é¢è¡¨ç¤ºã®å¤æ´ã®ãã¹ããæ¬çªç°å¢ã«å½±é¿ãä¸ããã«åä½ç¢ºèªãããªã©æ§ã
ãªæ´»ç¨æ¹æ³ãããã¨æãã¾ããã
P.S
èã®ç©´ã©ãã§ã®éçºã«å°ãã§ãèå³ãæã£ã¦ããã ããæ¹ã¯ãæ¡ç¨èª¬æä¼ãã«ã¸ã¥ã¢ã«é¢è«ã¨ããå ´ã§ãã£ã¨æ·±ãã話ããããã¨ãã§ãã¾ãããã²ãæ°è»½ã«ç³ãè¾¼ã¿ããã ããã°å¹¸ãã§ãã
èã®ç©´ã©ãã®ã¨ã³ã¸ãã¢ããéçºããã»ã¹ã®å
容ã§ãã£ããããä»å£ä½è¦ã¾ããï¼ãã¨ãã£ããªã¿ã¯ãã¼ã¯ã§ãã£ãããä½ã§ããå¿ããã¾ãã
â»ç¾å¨ã¯ãªã³ã©ã¤ã³ã«ã¸ã¥ã¢ã«é¢è«ã®ã¿åãä»ãã¦ããã¾ãã(2020/4/20æç¹)
ï¼WantedlyãLAPLASã§ã®æ¡ç¨ãè¡ã£ã¦ããã¾ãï¼
ã¨ãã®ããªã©ãã§ã¯ããã¤ãã¿ã¼ã§æ å ±çºä¿¡ãã¦ãã¾ãããã²ãã©ãã¼ãã¦ãã ããï¼ twitter.com
5æ14æ¥ã«ãã¨ãã®ããªæ¡ç¨èª¬æä¼ 5/14 ãªã¿ã¯ä¼æ¥ã§åãã¨ã³ã¸ãã¢ã®é åã«ã¤ãã¦ããªã³ã©ã¤ã³ä¼ç¤¾èª¬æä¼ãéå¬ãã¾ãã