概要
第2話で動かしたHelloWorldコードの「なぜ?」に答える、技術深掘りレポートです。SPDXライセンスやpragmaといったお作法から、contractブロックの役割、そして核心技術である「状態変数」まで、コードを一行ずつ丁寧に解説。
なぜpublicでデータが読めるのか、なぜ変数がブロックチェーンに刻まれるのか。その仕組みを理解し、真にコードを書くための確かな知識の土台を築きます。
-

-
Solidity学習講座:最終版 目次(全20話)
基礎編 第1話:未来のインターネットへようこそ!Solidityとスマートコントラクトの全体像 第2話:準備は1分!ブラウザだけで開発できる「Remix IDE」の基本操作 第3話:記念すべき初コント ...
続きを見る
はじめに
第2話では、ブラウザ開発環境「Remix IDE」を使って、驚くほど簡単に最初のスマートコントラクトをデプロイし、動かす体験をしましたね。ターミナルに緑のチェックマークが表示され、「Deployed Contracts」セクションから自分の書いたメッセージを読み出せた瞬間の、あの小さな興奮を覚えていますか?
前回がツールの使い方に慣れる「HOW」の回だったとすれば、今回はコードの意味を理解する「WHAT」の回です。
あなたがコピー&ペーストしたあの短いコードは、決して魔法の呪文ではありません。一つ一つの単語や記号に、明確な意味と役割があります。今回は、あのHelloWorld.solのコードを一行ずつ、まるで精密機械を分解するようにじっくりと読み解いていきましょう。
この記事を読み終える頃には、あなたはSolidityプログラムの基本的な構造を理解し、単なる模倣から一歩進んで、自らの意思でコードを読み書きするための、強固な土台を手にしているはずです。
HelloWorld.sol コードの再確認
まず、第2話で私たちが書いたコードをもう一度見てみましょう。たった5行のシンプルなプログラムです。
Solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract HelloWorld {
string public message = "Hello, Web3 World!";
}
それでは、このコードを上から順番に解剖していきます。
セクション1:お作法の宣言(ライセンスとバージョン)
最初の2行は、本格的なプログラムが始まる前の「お作法」や「ルール宣言」にあたる部分です。
1. // SPDX-License-Identifier: MIT
行の先頭にある // は、コメントを意味します。つまり、この行はプログラムの動作には一切影響を与えません。人間がコードを読みやすくするためのメモ書きです。
では、何が書いてあるのでしょうか? これは「SPDXライセンス識別子」といって、「このソースコードはMITライセンスというルールに基づいて公開されていますよ」という宣言です。
ブロックチェーンの精神はオープンソース(ソースコードの公開)と透明性にあります。そのため、自分の書いたコードがどのようなルールで利用できるのかを明示することは、非常に重要な作法とされています。これを書いておくと、コンパイラ(コード翻訳機)からの警告を防ぎ、他の開発者との信頼関係を築くことにも繋がります。今は「コードを書く際の礼儀作法なんだな」くらいに覚えておけばOKです。
2. pragma solidity ^0.8.20;
pragma は、コンパイラに対する指示を出すためのキーワードです。「プラグマ」と読みます。
ここでは、「このコードは、Solidityのバージョン0.8.20以上、かつ0.9.0未満でコンパイルしてくださいね」とコンパイラに伝えています。
^(キャレット)の記号は、「メジャーバージョンが同じであれば、それより新しいマイナーバージョンやパッチバージョンでもコンパイルしてOK」という意味です。
なぜこんな指定が必要なのでしょうか? Solidityはまだ若く、活発に開発が進んでいる言語です。そのため、バージョンが違うとコードの書き方や機能が微妙に変わり、意図しないエラーや脆弱性の原因になることがあります。バージョンを固定することで、誰がいつ実行しても同じように動作することを保証しているのです。これも、安全なスマートコントラクトを書くための重要なお約束です。
セクション2:すべてを包む器(contractブロック)
contract HelloWorld { ... }
contractキーワード。これこそがSolidityプログラムの根幹です。
contractは、スマートコントラクトの本体を定義するための宣言です。JavaやPythonなどのオブジェクト指向言語に慣れている方なら、classによく似た概念だと考えると分かりやすいでしょう。
contractは、関連するデータや処理(関数)を一つにまとめるための「設計図」や「器」のようなものです。HelloWorldという名前をつけたこの器の中に、スマートコントラクトの機能やデータを詰め込んでいきます。そして、波括弧{ }で囲まれた部分が、そのコントラクトの有効範囲となります。
これから私たちが作るスマートコントラクトは、すべてこのcontractブロックの中に記述していくことになります。
セクション3:ブロックチェーンへの記録(状態変数)
string public message = "Hello, Web3 World!";
さて、いよいよ核心部分です。この一行に、スマートコントラクトの面白さが凝縮されています。この一行は、**状態変数(State Variable)**を宣言しています。
「状態変数」とは、コントラクト内に永続的にデータを保存するための変数のことです。ここに保存されたデータは、ブロックチェーン上に記録され、コントラクトが存続する限り(つまり半永久的に)保持されます。まさに「ブロックチェーンに刻まれる」データです。
この一行を、さらに細かく分解してみましょう。
string:データの「型」 これは変数がどのような種類のデータを保持するかを定義する**「型」**です。stringは「文字列(テキストデータ)」を意味します。今後、uint(符号なし整数)やaddress(イーサリアムのアカウントアドレス)など、様々な型を学んでいきます。public:外部への「可視性」public(パブリック)は、この変数が「誰からでもアクセス可能」であることを示す**「可視性修飾子」です。publicを指定すると、Solidityコンパイラが自動的にこの変数の値を読み取るための同名の関数(ゲッター関数)を生成します**。 思い出してください。第2話で、デプロイ後にmessageという青いボタンが表示されましたね。あれが、このpublicによって自動生成されたゲッター関数なのです。私たちがボタンを押したとき、裏側ではこの関数が呼び出され、ブロックチェーン上からmessageの値を読み取ってきていた、というわけです。message:変数の「名前」 これは、私たちがこの変数につけた**「名前」**です。コントラクトの内部でこのデータを扱う際には、messageという名前でアクセスします。= "Hello, Web3 World!":データの「初期値」=を使って、このmessageという変数に、コントラクトがデプロイされた時点での**「初期値」**を設定しています。この"Hello, Web3 World!"という文字列データが、ブロックチェーン上に永続的に記録される最初のデータとなります。
通常のプログラミングにおける変数が、プログラム終了時にメモリから消えてしまうのに対し、スマートコントラクトの状態変数は、一度書き込まれるとブロックチェーン上に残り続ける、という点が決定的に重要です。
まとめ:最初のコードの全体像
これで、HelloWorld.solのすべての部品を解き明かすことができました。
- まず、ライセンスとコンパイラバージョンという**「お作法」**を宣言し、
contractという**「器」**を用意し、- その器の中に、
messageという名前の、public(公開)でstring(文字列)型の**「状態変数」**を定義し、初期値を設定した。
これが、私たちの最初のスマートコントラクトの全貌です。このシンプルな構造こそが、NFTやDeFiといった複雑なアプリケーションの基礎となっています。例えば、NFTならばowner(所有者)のアドレスや画像のURLを、投票コントラクトなら候補者の名前や得票数を、それぞれ状態変数としてブロックチェーン上に記録していくのです。
お疲れ様でした!あなたはもう、Solidityコードをただの記号の羅列としてではなく、意味のある構造体として読み解くための第一歩を踏み出しました。
次回、**第4話「コントラクトの記憶装置!「状態変数」と基本のデータ型 (uint, string, address)」**では、スマートコントラクトの根幹である「状態変数」をさらに深掘りし、文字列以外にどんな種類のデータをブロックチェーンに保存できるのかを学んでいきます。
着実に、あなたのWeb3開発者としての知識は積み上がっています。この調子で進んでいきましょう!
-

-
Solidity学習講座:最終版 目次(全20話)
基礎編 第1話:未来のインターネットへようこそ!Solidityとスマートコントラクトの全体像 第2話:準備は1分!ブラウザだけで開発できる「Remix IDE」の基本操作 第3話:記念すべき初コント ...
続きを見る

