Solidityとは?重要性や将来性について

Solidityは、EVM(Ethereum Virtual Machine)を搭載したブロックチェーン上でスマートコントラクトを作成するためのプログラミング言語です。スマートコントラクトは、ブロックチェーン上で自動的に実行されるプログラムで、取引や契約の条件をコード化します。これらのコントラクトは、特定の条件が満たされたときに自動的に実行されます。

Solidityは、スマートコントラクトを作成するための主要な言語であり、その構文はJavaScriptに似ていてプログラミング初心者にとっても学びやすいです。また、Solidityは静的型付け、継承、ライブラリなどの機能を提供しています。

Solidityは、ブロックチェーンとスマートコントラクトの普及によりその重要性が増しています。ブロックチェーンは、分散型のデータベースであり、データの改ざんが非常に難しいという特性を持っています。これにより、信頼性の高い取引やコントラクトの実行が可能となります。スマートコントラクトは、このブロックチェーン上で動作するプログラムで、自動的に取引を実行することができます。

例えば、ある人が他の人にETH(Ethereumの通貨)を送るという取引を考えてみましょう。この取引はスマートコントラクトによって自動的に実行され、その結果はブロックチェーン上に記録されます。このプロセス全体は、中央の管理者や仲介者なしに行われます。

このような理由から、Solidityとスマートコントラクトの知識は、ブロックチェーン技術を活用したアプリケーションを開発するために非常に重要です。また、ブロックチェーン技術は金融業界だけでなく、ヘルスケア、サプライチェーン、不動産など、さまざまな産業での応用が期待されています。そのため、Solidityのスキルは今後ますます重要になると予想されます。

おすすめの学習方法・コミュニティ

CryptoZombies

CryptoZombiesはゾンビをテーマにしたゲームを作成しながらSolidityの基本を学ぶことができる無料のオンラインチュートリアルです。ブラウザ上でインタラクティブに学習ができるため、開発環境の設定なども必要ないので初心者でも簡単にSolidityを学習することができます。主要なコースでは日本語でも学習できるので英語が苦手な方でも大丈夫です。

実際のゲームを作成することで、実践的なスキルを楽しみながら身につけることができます。チュートリアルは複数のレッスンに分かれており、基本的な概念から徐々に難易度が上がっていきます。コードを書きながら学ぶことができるので、学習が効果的でお勧めされることの多い学習コンテンツです。

UNCHAIN

UNCHAINはdApp開発をするための実践的な学習コースを豊富に提供している学習サービス&コミュニティで株式会社shiftbaseによって運営されていました。現在はサービスが終了していて学習サイトや公式サポートはなくなっていますが、Githubには当時の学習コンテンツが公開されていて、Discordのコミュニティ自体も残っているので学習に十分に活用できます。

実際のブロックチェーン上にスマートコントラクトをデプロイしてフロントエンドまで含めて作成できるため、Solidityを使ってどのようにdAppを開発・ローンチするのかを実践的に学習することができます。CryptoZombieでSolidityの基礎を学習したらUNCHAINに参加してテストネットにdAppをデプロイしてみるのがオススメです。

Solidity以外にもRustでスマートコントラクトを書くブロックチェーンのdApp開発の学習ができます。Discordのコミュニティがあるので学習でつまずいたら該当のチャンネルで質問することでコミュニティメンバーのサポートを受けることができます。メンバー同士の勉強会なども盛んで、1人で学習することに不安がある人にオススメです。

Web3 University

Web3 UniversityはWeb3学習のサービスで英語の解説記事やYouTube動画などの教材が豊富です。Alchemyなど主要なプレーヤーやVCたちがパートナーとなっていて、Alchemy UniversityのEthereum Developer Bootcampなどのリリースも一緒にやっているみたいです。

英語が問題ない人は海外の学習コンテンツや記事などから情報収集をするとタイムリーな情報にもアクセスしやすいですし、分野によっては日本語の情報がないこともあるので英語のコンテンツも積極的に利用することをオススメします。

Solidityの基礎知識

基本的なデータ型

Solidityには、bool、int、uint、address、bytesなどの基本的なデータ型があります。

  1. bool: 真偽値を表すためのデータ型で、trueまたはfalseの値を持つことができます。
  2. int / uint: 整数を表すためのデータ型です。intは符号付き整数(負の数を含む)を、uintは符号なし整数(0以上の数)を表します。また、これらの型はビット数を指定することができ、例えばuint8uint16uint256などとすることができます。ビット数を指定しない場合、デフォルトはuint256またはint256となります。
  3. address: Ethereumのアドレスを表すためのデータ型で、20バイトの値を持つことができます。これは主に、ETHの送金やスマートコントラクトの所有者の管理などに使用されます。
  4. bytes1, bytes2, …, bytes32: 固定長のバイト配列を表すためのデータ型です。例えば、bytes1は1バイト、bytes32は32バイトのデータを表します。
  5. bytes, string: 可変長のバイト配列と文字列を表すためのデータ型です。bytesは任意の長さのバイト配列、stringはUTF-8エンコードされた文字列を表します。

変数

Solidityでは、状態変数とローカル変数があります。これらの違いと、それぞれがどのように使用されるのかを理解することが重要です。

状態変数 (State Variables): 状態変数は、スマートコントラクトの永続的なデータを保存します。これらの変数はブロックチェーン上に保存され、スマートコントラクトの状態を形成します。状態変数は、スマートコントラクトの関数間で共有され、スマートコントラクトが呼び出されるたびに永続化されます。状態変数の値は、トランザクションを通じてのみ変更できます。

solidity
contract MyContract {
    // 状態変数
    uint public myStateVariable;
}

ローカル変数 (Local Variables): ローカル変数は、関数内でのみ使用される一時的な変数です。関数が終了すると、ローカル変数の値は破棄されます。ローカル変数は、関数の実行中に一時的なデータを保存するために使用されます。

solidity
contract MyContract {
    function myFunction() public {
        // ローカル変数
        uint myLocalVariable = 10;
    }
}

状態変数は、スマートコントラクトの状態を管理するために使用され、ローカル変数は一時的な計算やデータの操作に使用されます。また、状態変数の変更はガス(Ethereumの計算コスト)を消費しますが、ローカル変数の変更はガスを消費しません。スマートコントラクトの開発ではガス代を以下に抑えるかはとても大事な要素になってくるので効率的なコードを書くためには、これらの変数を適切に使い分けることが重要です。

関数

Solidityの関数は、スマートコントラクトのロジックを制御します。関数の宣言方法、引数と戻り値、そして関数修飾子(public、private、internal、external)について学びます。

制御構造

if-else文、ループ(for、while)、およびエラーハンドリング(require、revert、assert)などの制御構造について学びます。

構造体と配列

Solidityの構造体は、関連するデータを一緒にグループ化するためのカスタムデータ型を作成するために使用されます。また、配列は同じ型の複数の変数を格納するために使用されます。

マッピング

Solidityのマッピングは、キーと値のペアを格納するためのデータ構造です。これは、JavaScriptのオブジェクトやPythonの辞書に似ています。

イベント

Solidityのイベントは、スマートコントラクトの状態の変更を外部のリスナーに通知するために使用されます。

鵜川 佑稀

エンジニア。一橋大学商学部商学科卒。2022年にブロックチェーン・Web3の業界に入り、ドバイに移住してDeFiのスマートコントラクトやL1チェーンの開発に従事。現在は福岡在住。