ç¹å®çšéã«ç¹åããããã°ã©ãã³ã°èšèªãšããã®ã¯äœ¿ãåæãè¯ãããã®åéã§ç¬å çãªå°äœã確ç«ã§ããŸããä»å玹ä»ããSolidityã¯ã人æ°ã®ä»®æ³é貚ã®ãã©ãããã©ãŒã ãã€ãŒãµãªã¢ã (Ethereum)ãäžã§åäœããã¹ããŒãã³ã³ãã©ã¯ããéçºããã®ã«åºã䜿ãããŠããŸããä»åã¯ãã¹ããŒãã³ã³ãã©ã¯ãã«ã€ããŠç޹ä»ããç°¡åãªSolidityã®ããã°ã©ã ãå®è¡ããæ¹æ³ã解説ããŸãã
Solidityãšã¯ã©ããªèšèªãªã®ã
ä»å玹ä»ãããSolidityãã¯ããããªãã«äººæ°ã®ããã°ã©ãã³ã°èšèªã§ããããã°ã©ãã³ã°èšèªã®ã©ã³ãã³ã°ãå ¬éããŠããTIOBE Index(https://www.tiobe.com/tiobe-index/)ã®ã2024幎6æã®éèšã§ã¯ãSchemeãBashãF#ãšãã£ãèšèªã«ç¶ããŠã47äœã«ã©ã³ã¯ã€ã³ããŠããŸãã
ããã°ã©ãã³ã°èšèªã®Solidityã¯ãJavaScriptãC++ã«ãã䌌ãŠããŸããéçåä»ãèšèªã§ããã倿°ã宣èšããéã«ã¯å€æ°ã®åãæç€ºããå¿ èŠããããŸãããŸããC++ã«äŒŒããªããžã§ã¯ãæåããµããŒãããŠããŸãã
-

Solidityã®Webãµã€ã
ãšã¯èšããSolidityã¯äžè¬çãªOSäžã§å®è¡ãããã®ã§ã¯ãªããEthereumãšãããã©ãããã©ãŒã äžã§ã¹ããŒãã³ã³ãã©ã¯ããšããŠåäœããŸãããã®ãããSolidityã«é¢é£ããæè¡ã«ã€ããŠç°¡åã«ãŸãšããŠã¿ãŸãããã
ãããã¯ãã§ãŒã³ãä»®æ³é貚ã«ã€ããŠ
ããããããããã¯ãã§ãŒã³ãšã¯äœã§ããããããããã¯ãã§ãŒã³ã¯ãããŒã¿ã忣çã«ç®¡çããããã®æè¡ã§ããäžèšã§èšããªãã忣åã®ããžã¿ã«å°åž³ããšèšãããšãã§ããŸãããã®ããžã¿ã«å°åž³ã¯ãããŒããšåŒã°ããè€æ°ã®ã³ã³ãã¥ãŒã¿ãŒã«åæ£ããŠååŒã®èšé²ãä¿åããŸãã
å šãŠã®ããŒãã«ãããŠãåäžã®ããžã¿ã«å°åž³ãä¿æãããŸãããããã¯ãã§ãŒã³ã®ä»çµã¿ã«ãããå®å šã«å šãŠã®ååŒãå ¬éå°åž³ã«èšé²ããããããç¹å®ã®ç¬¬äžè æ©é¢ã«äŸåãããéææ§ã®é«ãååŒãã§ããŸãã
ãããã¯ãã§ãŒã³ã¯ãä»®æ³éè²šïŒæå·é貚ïŒã®æèã§èªãããããšãå€ãã®ã§æ··ä¹±ããã¡ãªã®ã§ãããå³å¯ã«èšããšãä»®æ³é貚ãšãããã¯ãã§ãŒã³ã¯å矩ã§ã¯ãããŸããããããã¯ãã§ãŒã³ã®æè¡ãåºç€ãšããŠéçšãããŠããã®ãä»®æ³é貚ã§ããã€ãŸãããããã¯ãã§ãŒã³ã®å¿çšäŸã®äžã€ãä»®æ³é貚ãšããèš³ã§ãã
ã¹ããŒãã³ã³ãã©ã¯ãã§å®çŸã§ããããš
ãããã¯ãã§ãŒã³ã®å®å šæ§ãšéææ§ãæŽ»ããããšã§ãä»®æ³é貚以å€ã«ãããŸããŸãªå¿çšãå¯èœã§ãããã®å¿çšã®éµãšãªãã®ããã¹ããŒãã³ã³ãã©ã¯ããã§ãã
ã¹ããŒãã³ã³ãã©ã¯ããšã¯ãããã°ã©ãã³ã°ã«ãã£ãŠèªåçã«å®è¡ãããå¥çŽã§ãåå売買ãä¿éºå¥çŽãªã©ãããŸããŸãªèªåååŒã«æŽ»çšã§ããŸããä»å玹ä»ããSolidityã¯ãã¹ããŒãã³ã³ãã©ã¯ããéçºããããã®ããã°ã©ãã³ã°èšèªã§ãã
ã¹ããŒãã³ã³ãã©ã¯ããå©çšããŠã鳿¥œãã¢ãŒãäœåã®èäœæš©ãä¿è·ããããæç¥šã·ã¹ãã ãå®çŸãããããã®ã«ã掻çšã§ããŸãããµãã©ã€ãã§ãŒã³ç®¡çã§ã¯ã補åã®çç£ããæµé販売ãŸã§ã®å šããã»ã¹ã远跡ããŠéææ§ã確ä¿ãããããåœé åã®é²æ¢ãå¹ççãªåšåº«ç®¡çã«ã掻çšã§ããŸãã
ã€ãŒãµãªã¢ã ã«ã€ããŠ
ããã§ããã€ãŒãµãªã¢ã (Ethereum)ããšããã®ã¯ããããã¯ãã§ãŒã³æè¡ãåºã«ãã忣åã®ãã©ãããã©ãŒã ã§ããã€ãŒãµãªã¢ã ã®ãã©ãããã©ãŒã ã§äœ¿çšãããé貚åäœããã€ãŒãµ(Ether)ããšåŒã³ãŸããã€ãŒãµãªã¢ã ã®ç¹åŸŽã¯ããããæ¯ããæè¡ãåãªãé貚ãšããŠã®äœ¿çšã«ãšã©ãŸãããããŸããŸãªããžã¿ã«å¥çŽãã¢ããªã±ãŒã·ã§ã³ã®å®è¡ãã©ãããã©ãŒã ãšããŠæ©èœããŠããç¹ã«ãããŸãã
ãããŠãSolidityã¯ãã€ãŒãµãªã¢ã ã®ãããã¯ãã§ãŒã³äžã§åäœããã¹ããŒãã³ã³ãã©ã¯ããèšè¿°ããããã®ããã°ã©ãã³ã°èšèªã§ããSolidityã䜿çšããããšã§ãå¹ççã«ã¹ããŒãã³ã³ãã©ã¯ããäœæã§ããŸãã
-

ã€ãŒãµãªã¢ã ã®Webãµã€ã
Solidityã®éçºç°å¢ãæŽããã
å眮ããé·ããªããŸãããããããã¯ãã§ãŒã³ãšã¹ããŒãã³ã³ãã©ã¯ãã®é¢ä¿ã«ã€ããŠçè§£ã§ããªããšãSolidityã®æå³ãåãããªãã®ã§èª¬æããŸãããããã§ã¯ãSolidityã®ããã°ã©ã ãæžããŠå®è¡ããŠã¿ãŸãããã
Solidityãå®è¡ããããã«ããããããªã€ãŒãµãªã¢ã ã®ãã¬ãŒã ã¯ãŒã¯ããããŸããTruffleãHardhatãWaffleãFoundryãªã©ããããŸãããããããã¬ãŒã ã¯ãŒã¯ã䜿ãäºã§ã¹ããŒãã³ã³ãã©ã¯ãã®ã¢ããªãéçºã§ããŸãã
ãšã¯èšããSolidityãæè»œã«è©Šãã«ã¯ãRemixãšåŒã°ãããªã³ã©ã€ã³ã®éçºç°å¢ã䜿ãããšãã§ããŸããRemixã䜿ãã°ãããã°ã©ã ãã³ã³ãã€ã«ããŠæè»œã«å®è¡ã§ããŸãã
äžçªç°¡åãªããã°ã©ã ãRemixã§å®è¡ããŠã¿ãã
ããã§ã¯ããã©ãŠã¶ã§ãã¡ã(https://remix.ethereum.org/)ã®Remixã«ã¢ã¯ã»ã¹ããŸãããããããšæ¬¡ã®ãããªç»é¢ã衚瀺ãããŸããRemixã䜿ããšãããžã§ã¯ããäœæããSolidityã®ããã°ã©ã ãã³ã³ãã€ã«ããããããã€ããããšæè»œã«ã¹ããŒãã³ã³ãã©ã¯ãã®éçºãå¯èœãšãªããŸãã
ããã§ã次ã®ç»é¢ã®ããã«ãç»é¢å·ŠåŽã®äžããäºçªç®ã«ããã¢ã€ã³ã³(å³1)ãã¯ãªãã¯ããŠãFile Explorerãã衚瀺ããŸãããããããŠã(å³2)ãã¯ãªãã¯ããŠ(å³3)ã®ã- create new workspace -ããã¯ãªãã¯ããŸãã
ç¶ããŠãã¯ãŒã¯ã¹ããŒã¹ã®ãã³ãã¬ãŒããéžã¶ç»é¢ã衚瀺ãããŸããä»åã¯ãSolidityã§ããã°ã©ã ãäœã£ãŠãã¹ãããã ããªã®ã§ãBlankãéžãã§[OK]ãã¿ã³ãæŒããŸãããã
ãããŠãFile Explorerã®ãã¡ã€ã«ã¢ã€ã³ã³(次ã®ç»é¢)ãã¯ãªãã¯ããŠãæ°èŠãã¡ã€ã«ãäœæããŸããããã§ã¯ãæ Œèšã衚瀺ããã ãã®ããã°ã©ã ãäœããŸãã®ã§ããHello.solããšãããã¡ã€ã«ãäœæããŸãããã
ãããŠãå³åŽã«è¡šç€ºããããšãã£ã¿ãŒéšåã«ä»¥äžã®ãããªã³ãŒãã貌ãä»ããŸããããããã¯ãç°¡åãªæ Œèšãè¿ã颿°ãå®çŸ©ãããã®ã§ãã
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract HelloContract {
function sayHello() public pure returns (string memory) {
return unicode"é»ã£ãŠããã®ã«æããã話ãã®ã«æããã";
}
}
ãªããã³ãŒãã貌ãä»ãããšãã»ãã¥ãªãã£ã®èŠåã衚瀺ãããŸãã®ã§ãå 容ã確èªããŠã[OK]ãã¿ã³ãæŒããŸãããããªããèŠåã¯ãã³ãŒããçè§£ããŠè²Œãä»ããŠããã®ããè©æ¬ºã«æ³šæããããã«ãšãã確èªã§ããããã°ã©ã ã®ãã¹ããããŠããéãã¯åé¡ãããŸãããã宿ã«ä»äººã®æžããã³ãŒããä¿¡é Œããªãããã«ããŸãããã
ãã®Solidityã®ããã°ã©ã ã確èªããŠã¿ãŸãããã1è¡ç®ã§ã©ã€ã»ã³ã¹ã瀺ãã2è¡ç®ã§ãpragma solidity ããŒãžã§ã³ãã®ããã«ãSolidityã®å¿ èŠããŒãžã§ã³ãæç€ºããŸããã^0.8.0ããšèšè¿°ããããšã§ãSolidityã®ããŒãžã§ã³ã0.8.0以äžã§ããããšãæå®ããŸãã4è¡ç®ã§ã¯ãHelloContractãšããååã®ã¹ããŒãã³ã³ãã©ã¯ããå®çŸ©ããŸããã³ã³ãã©ã¯ãã¯ãSolidityã®åºæ¬åäœã§ããããããã¯ãã§ãŒã³äžã«ãããã€ãããã³ãŒããšããŒã¿ãå«ã¿ãŸãããããŠã5è¡ç®ã§sayHello颿°ãå®çŸ©ããŸãããã®é¢æ°ã§ã¯æ Œèšãè¿ããŸãã
ç¶ããŠããã®ããã°ã©ã ãã³ã³ãã€ã«ããŠã¿ãŸãããããšãã£ã¿äžéšã®å®è¡ãã¿ã³ãã¯ãªãã¯ããããç»é¢å·ŠåŽã®äžãã4çªç®ã®ã¢ã€ã³ã³ãSolidity compilerããã¯ãªãã¯ããŠãã³ã³ãã€ã©ã®ããã«ãéããŠãCompile Hello.solããã¯ãªãã¯ããŸãã
ãã®åŸãã³ã³ãã€ã«ããããã°ã©ã ããããã€ããŸããç»é¢å·ŠåŽã®äžãã5çªç®ã®ã¢ã€ã³ã³ãDeployâŠããã¯ãªãã¯ããŠããã«ãéããŠããªã¬ã³ãžè²ã®ãDeployããã¿ã³ãã¯ãªãã¯ããŸãããããšãããã«ã®äžçªäžã«ã> HELLOCONTRACT AT 0XâŠããšããå°ããã«ã衚瀺ãããŸããããã§ããã®ããã«ãã¯ãªãã¯ããŸãã
ã¡ãªã¿ã«ãããããã€(Deploy)ããšã¯ãäœæããããã°ã©ã ããã€ãŒãµãªã¢ã ãããã¯ãã§ãŒã³äžã«é 眮ããããšãæããŸããïŒããã§ã¯äœãã¢ã«ãŠã³ããæå®ããŠããªãã®ã§ããã¹ãç°å¢ã§åäœãããã®ã§ãããã®ãã¹ãäœæ¥ã§è²»çšãçºçããããšã¯ãããŸãããïŒ
ãããã€ããã³ã³ãã©ã¯ãã®ããã«ãéããšãsayHelloããšãã颿°åãšåããã¿ã³ãäœæãããŠããã®ã確èªã§ããã§ããããããã§ããã®ãã¿ã³ãæŒããŠã¿ãŸãããããããšããã¿ã³ã®äžã«ãèšå®ããæ Œèšã®ã¡ãã»ãŒãžã衚瀺ãããŸãã
以äžãRemixã®äœ¿ãæ¹ãç°¡åã«èª¬æããŸãããã¹ããŒãã³ã³ãã©ã¯ããäœãã«ã¯ãããã°ã©ã ãäœã£ãŠã³ã³ãã€ã«ããããã€ãããšããæé ãèžãå¿ èŠããããŸããããã®IDEã¯ãšãŠãããã§ããŠããŠãããã°ã©ã å®è¡ãŸã§æå°éã®æéã§å®çŸã§ããããã«ãªã£ãŠããŸãã
FizzBuzzåé¡ãè§£ããŠã¿ãã
次ã«ãæ¬é£èŒã§æ¯åäœæããŠãããFizzBuzzåé¡ãè§£ãããã°ã©ã ãSolidityã§äœæããŠã¿ãŸãããã
å ã»ã©ãšåæ§ã®æé ã§ãFizzBuzz.solãšãããã¡ã€ã«ãäœæããããã«äžèšã®ãããªããã°ã©ã ãèšè¿°ããŸãããã
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// ã©ã€ãã©ãªãåã蟌ã
import "@openzeppelin/contracts/utils/Strings.sol";
// ã³ã³ãã©ã¯ãã®å®£èš
contract FizzBuzzContract {
// getFizzBuzz颿°ãå®çŸ©
function getFizzBuzz(uint32 maxNum) public pure returns (string memory) {
string memory result = "";
for (uint i = 1; i <= maxNum; i++) {
bool isFizz = (i % 3 == 0);
bool isBuzz = (i % 5 == 0);
string memory numStr = Strings.toString(i); // æ°å€ãæååã«å€æ
if (isFizz && isBuzz) {
numStr = "FizzBuzz";
} else if (isFizz) {
numStr = "Fizz";
} else if (isBuzz) {
numStr = "Buzz";
}
result = string.concat(result, numStr); // æååã®çµå
result = string.concat(result, " / ");
}
return result;
}
}
ããã°ã©ã ãå®è¡ããã«ã¯ãå ã»ã©ç޹ä»ããããã«ãã³ã³ãã€ã«ãšãããã€ã®äœæ¥ãè¡ããŸãããããšããããã€ããã«ã®äžæ¹ã«ããgetFizzBuzzããšãããã¿ã³ãšãã®å³åŽã«å ¥åããã¯ã¹ã衚瀺ãããŸããããã§ãå ¥åããã¯ã¹ã«100ãªã©ãšå ¥åããŠãããã¿ã³ãæŒããŸãããããšã1ãã100ãŸã§ã®FizzBuzzã®çµæã衚瀺ãããŸãã
ããã°ã©ã ã確èªããŠã¿ãŸããããFizzBuzzContractãå®çŸ©ãããã®äžã§ãgetFizzBuzz颿°ãå®çŸ©ããŸããforæã䜿ã£ãŠã1ãã颿°ã®åŒæ°ã«æå®ããmaxNumãŸã§ã®FizzBuzzãå€å®ããŠçµæãè¿ããŸãã
ãªããæååãçµåããã®ã«ãstring.concatã¡ãœãããå©çšããå¿ èŠããã£ãããæ°å€ãæååã«å€æããã®ã«ã©ã€ãã©ãªãå¿ èŠã ã£ããããŸããSolidityã¯JavaScriptã®ããã°ã©ã ã«äŒŒãŠãããšããªããããæååã®æäœãè¡ãå Žåã«ã¯ãããã»ã©æ°è»œã«æäœã§ããªããšããå°è±¡ããããŸãã
ãŸãšã
以äžãä»åã¯ãã€ãŒãµãªã¢ã äžã§ã¹ããŒãã³ã³ãã©ã¯ããéçºããã®ã«å©çšããããã°ã©ãã³ã°èšèªãSolidityãã«ã€ããŠç޹ä»ããŸããã
Solidityãåããããã«ã¯ãã€ãŒãµãªã¢ã ãåãããã©ãããã©ãŒã ãçšæããªããšãããªãã®ã§ãããRemixãšããå°çšIDEãçšæãããŠããã®ã奜å°è±¡ã§ããããããå©çšããããšã§ãã¹ããŒãã³ã³ãã©ã¯ããSolidityã«ã€ããŠãæè»œã«åŠç¿ãé²ããããšãã§ããŸãã
ã©ããªçŽ æŽããããã©ãããã©ãŒã ããã£ãŠããæŠå¿µãé£ããã£ãããããŒãã«ãé«ãã£ãããããšãåŠç¿ããããšããæ°ãåãããŠããŸããŸãããã®ãããªãªã³ã©ã€ã³ã§æ°è»œã«è©ŠããIDEãçšæãããŠããããšã¯å€§ããªã¡ãªããã§ãã
èªç±åããã°ã©ããŒããããã¯ãã©ã«ãŠãããã°ã©ãã³ã°ã®æ¥œãããäŒããæŽ»åãããŠããã代衚äœã«ãæ¥æ¬èªããã°ã©ãã³ã°èšèªããªã§ããã ãããã¹ã鳿¥œããµã¯ã©ããªã©ã2001幎ãªã³ã©ã€ã³ãœãã倧è³å ¥è³ã2004幎床æªèžãŠãŒã¹ ã¹ãŒããŒã¯ãªãšãŒã¿èªå®ã2010幎 OSSè²¢ç®è ç« åè³ãæè¡æžãå€ãå·çããŠãããçŽè¿ã§ã¯ããå®è·µåãã¢ãããã Pythonã«ããã¢ã«ãŽãªãºã ã®æç§æž(ãã€ããåºç)ããã·ãŽããã¯ãã©ã PythonèªååŠçã®æç§æž(ãã€ããåºç)ããããã«äœ¿ãã!æ¥åã§å®è·µã§ãã! Pythonã«ããAIã»æ©æ¢°åŠç¿ã»æ·±å±€åŠç¿ã¢ããªã®ã€ããæ¹ TensorFlow2察å¿(ãœã·ã )ãããã³ã¬ã§ãã£ããåŠã¶Python(ãã€ããåºç)ããªã©ã








