Solidityは何?
Solidityとはプログラミング言語の名前で、Ethereumのブロックチェーン上で動作するプログラム(コントラクト)を記述することができるプログラミング言語です。
SolidityはC++、Python、JavaScriptを参考に、Ethereum Virtual Machine(EVM)の操作を目的に作られています。Solidityは静的言語で継承やライブラリ、ユーザーが定義した複雑な型をサポートします。
Solidityで投票やクラウドファンディング、匿名のオークションやマルチシグウォレットなどを作成することができます。
コントラクトをデプロイする際には最新バージョンのSolidityを使うことが推奨されています。
Solidityはどのように動作するか?
Solidityはスマートコントラクトを構築および設計するために使用されます。
SolidityのコードはEthereumバイトコードにコンパイルされ、Ethereum仮想マシン(EVM)によって実行され、Ethereum上で動作するアプリケーションとなります。
EVMとは、Ethereum Virtual Machineの略称で、Ethereumスマートコントラクトの実行環境を提供します。

スマートコントラクトは、第三者を介さずに信頼性の高い取引を行うことを可能にします。これらの取引は追跡可能であり、取り消すことはできません。
スマートコントラクトを作成および記述するために一般的に使用されるプログラミング言語には、Serpent、Solidity、Mutan、LLLなどがあります。
Solidityをサポートするブロックチェーンプラットフォーム:
- Ethereum
- Binance Smart Chain
- Ethereum Classic
- Tron
- Avalanche
ガスコスト
SolidityをEthereumメインネットで使用する場合、追加のコストが発生します。このコストはEthereumのガスシステムに基づいています。
ガスはマイナーへの支払いに使用され、彼らがコードを安全にブロックチェーンネットワーク上で実行できるようにするための手段を実行します。
スマートコントラクトを書く際には、ガスコストがスマートコントラクトのパフォーマンスに影響を与える可能性があることを忘れないでください。
ガス料金はストレージスロットごとに支払われるため、Solidityコードを実行するすべての操作にコストがかかります。
実行に多くのガスを必要とするスマートコントラクトは、長期的に使用するのが困難です。
ガスを最適化することで、Solidityコードの実行時のコストを削減できます。最も重要な方法のいくつかは、既存のライブラリを使用し、関数の使用を最小限に抑えることです。
不要なバイトコードをスマートコントラクトに追加する代わりに、そのロジックをライブラリに移すことで、スマートコントラクトのサイズを小さくすることができます。
Solidityのデータ種類

Solidity言語は、他のオブジェクト指向言語で一般的に見られるほとんどのデータ型をサポートしています。
- Boolean – Boolean型は、条件が真の場合に「1」、偽の場合に「0」を返します。これは条件の状態に依存します。
- Integer – Solidityでは、整数値を符号付きまたは符号なしにすることができます。また、ランタイム例外をサポートしており、「uint8」や「uint256」といったキーワードも使用可能です。
- String – 文字列型のデータタイプです。
- Modifier – スマートコントラクトのコードを実行する前に、modifierは条件が妥当かどうかを確認することが一般的です。
- Array – Solidityの構文は他のオブジェクト指向言語に似ており、一次元配列および多次元配列の両方をサポートしています。
さらに、Solidityプログラミングでは、データ構造をenum、演算子、ハッシュ値にマッピングすることで、特定のストレージ位置に保存された値を返すことができます。
Solidityの必要なツール
- node.js
- Ganache: ローカル開発時に Ethereum プライベートブロックチェーンを可視化するツールです。
- Truffle: Ethereum アプリケーション開発におけるフレームワークです。
- MetaMask: イーサリアムブロックチェーンに対応した仮想通貨ウォレットです。
Solidityの制限点
しかし、どの言語にも独自の制限があり、Solidityも例外ではありません。
スマートコントラクトをデプロイした後は、Solidityコードをアップグレード、修正、または追加することが一切できません。そのため、mainnetにデプロイする前に、すべてを慎重にチェックする必要があります。
Solidityは、CやJavaのような長い歴史を持つ言語に比べると、まだ「若い」言語です。そのため、場合によっては、ニーズを満たすためのライブラリが十分に揃っていないことがあります。
まとめ
この記事では、現在トレンドの Web3(Web3.0)を実現する為に、ブロックチェーン上で動作する仕組みである Solidity を理解し、開発環境を構築していきます。