Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Day 1 of 30 Days of Solidity Challenge: Build Your First Click Counter Smart Contract 🚀

2025年10月02日に「Dev.to」が公開したITニュース「Day 1 of 30 Days of Solidity Challenge: Build Your First Click Counter Smart Contract 🚀」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

「30 Days of Solidity Challenge」初日は、クリックカウンターのスマートコントラクト構築を通じてSolidityの基礎を学ぶ。状態変数の宣言、数値の増減関数、イベント発行により、ブロックチェーン上でのデータ保存や変更方法を実践的に習得。対話型ブロックチェーンアプリ開発の第一歩となる。

ITニュース解説

ブロックチェーンの世界では、スマートコントラクトと呼ばれる特別なプログラムが中心的な役割を果たす。このスマートコントラクトは、一度ブロックチェーンにデプロイされると、設定されたルールに基づいて自動的に実行される。改ざんが非常に困難なブロックチェーンの特性を活かし、信頼性の高いシステムを構築するための基盤となる技術だ。

今回の「30 Days of Solidity Challenge」の初日では、最も基本的なスマートコントラクトの一つである「クリックカウンター」の構築を通じて、ブロックチェーン上でデータを保存し、変更する仕組みの基礎を学ぶ。これは、より複雑な分散型アプリケーション(dApps)を理解し、開発するための第一歩となる。

Solidityは、このスマートコントラクトを記述するためのプログラミング言語である。コードの冒頭にある// SPDX-License-Identifier: MITは、このコードがMITライセンスで公開されていることを示す。また、pragma solidity ^0.8.20;は、このスマートコントラクトがSolidityのバージョン0.8.20以降でコンパイルされることを指定するもので、開発環境を適切に設定するための重要な記述だ。

スマートコントラクト自体は、contract ClickCounter { ... }というブロックで定義される。このClickCounterという名前が、このコントラクトの識別子となる。このコントラクトは、クリック数を記録し、その数を操作するための機能を提供する。

このクリックカウンターの核となるのは、現在のクリック数を保存する変数だ。コードではuint256 private _count;と記述されている。ここで_countは「ステート変数」と呼ばれ、スマートコントラクトの「状態」や「記憶」をブロックチェーン上に恒久的に保存する役割を持つ。uint256は「256ビットの符号なし整数」を意味し、非常に大きな正の整数を格納できるデータ型だ。privateというキーワードは、この変数がClickCounterコントラクトの内部からのみ直接アクセス可能であることを示し、外部からの不正な変更を防ぐための基本的なセキュリティ対策である。この_countの値は、コントラクトがブロックチェーンにデプロイされた後も、その状態が永続的に保持される。

スマートコントラクトの操作は「関数」を通じて行われる。このクリックカウンターには、主に四つの関数が定義されている。

一つ目はgetCount()関数だ。function getCount() external view returns (uint256)と定義されている。この関数は、現在_countに保存されているクリック数を外部に公開するために使われる。externalは、この関数がコントラクトの外部から呼び出すことができることを意味する。viewというキーワードは、この関数がコントラクトのステート変数(_count)を読み取るだけで、その値を変更しないことを保証する。returns (uint256)は、この関数がuint256型の値を返すことを示している。

二つ目はclick()関数だ。function click() externalと定義され、_count += 1;という行で_countの値を1増やす。この関数を外部から呼び出すことで、ブロックチェーン上に記録された_countの値が実際に更新される。これがまさに「データをブロックチェーン上で変更する」操作だ。

三つ目はunclick()関数だ。function unclick() externalと定義され、_countの値を1減らす。ただし、この関数には重要な条件チェックが含まれている。require(_count > 0, "ClickCounter: count already zero");という行だ。requireは、指定された条件が真である場合にのみ処理を続行し、偽の場合は指定されたエラーメッセージとともに処理を停止させるための機能だ。ここでは、_countが0より大きい場合のみ数を減らすことができ、すでに0であれば「カウントはすでにゼロです」というエラーメッセージを出して処理を中断する。これは、意図しない負の値への変更を防ぎ、スマートコントラクトの堅牢性(壊れにくさ)を保つ上で非常に重要だ。

四つ目はreset()関数だ。function reset() externalと定義され、_count = 0;という行で_countの値を0に戻す。これもまた、ブロックチェーン上のステート変数を変更する操作である。

スマートコントラクトが実行した操作の結果を、外部のアプリケーション(例えば、ウェブサイトのユーザーインターフェース)に知らせるために、「イベント」という仕組みが使われる。スマートコントラクトは、関数が呼び出されたり、特定のアクションが完了したりしたときに、イベントを「発行」する。このイベントはブロックチェーンのトランザクションログに記録され、外部のアプリケーションはこのログを監視することで、コントラクトの動きをリアルタイムで追跡できる。

クリックカウンターのコードには、event Clicked(address indexed caller, uint256 newCount);event Unclicked(address indexed caller, uint256 newCount);event Reset(address indexed caller);という三つのイベントが定義されている。例えば、click()関数が実行された際には、emit Clicked(msg.sender, _count);という行でClickedイベントが発行される。msg.senderは関数を呼び出したアドレス(ユーザー)を示し、_countはその時点での新しいクリック数を示す。indexedキーワードは、イベントを検索する際に特定のパラメータ(ここではcaller)を効率的に絞り込めるようにするための目印となる。これにより、ウェブアプリケーションなどは「誰がクリックしたか」や「新しいカウント値は何か」といった情報をイベントから取得し、画面に表示するなどしてユーザーにフィードバックできる。

このクリックカウンターは、ブロックチェーン上での「状態の保持」「状態の変更」「変更の外部通知」という、スマートコントラクトの最も基本的なサイクルを示している。このシンプルな構成が、やがて複雑な金融サービスやゲーム、サプライチェーン管理など、多岐にわたる分散型アプリケーションの基盤となる。

スマートコントラクトを実際に動かすためには、イーサリアムのテストネット(GoerliやSepoliaなど)にデプロイする必要がある。テストネットは、実際のイーサリアムネットワークと同じように機能するが、本物のお金(ETH)ではなくテスト用の通貨を使うため、安全に実験や開発ができる環境だ。さらに、このスマートコントラクトの機能をウェブブラウザから利用できるように、Reactやethers.jsといった技術を使ってウェブインターフェースを構築することも可能だ。これにより、ユーザーはボタンをクリックするだけでブロックチェーン上のカウンターを操作できるようになる。

この初歩的なクリックカウンターの構築を通じて、Solidityのステート変数の使い方、ブロックチェーンの状態を変更する関数の記述方法、そしてdAppsにおいて外部との連携に不可欠なイベントの役割を理解できる。これらは、システムエンジニアとしてブロックチェーン技術に関わる上で、非常に重要な学習成果となる。この一歩が、ブロックチェーンを活用したインタラクティブなアプリケーション開発の扉を開くだろう。

関連コンテンツ

関連IT用語