実際に書いてみる!Solidityでmappingを使う方法【初心者向け】

初心者向けにスマートコントラクト開発に使われる言語Solidityでmappingを使う方法について詳しく解説しています。Ethereum上にアプリケーションを作成したい場合はSolidityを使用しますが、書き方を理解しておきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

今回は、Solidityでmappingを使う方法について解説します。

スマートコントラクトの実装を行う際に頻出なので、ぜひ書き方を覚えておきましょう。

 

なお本記事は、TechAcademyのブロックチェーンオンライン講座の内容をもとに作成しています。

 

田島悠介

今回は、Solidityのmappingについて勉強しよう。

大石ゆかり

田島メンター!mappingというのは何ですか~?

田島悠介

mappingはSolidityでの配列のようなものだね。まずは基本の書き方を説明するよ。

大石ゆかり

お願いします!

mappingとは

mappingとは、Solidityで使用する配列のような機能です。

Solidityとは、Ethereumでコントラクトコードを実装する際に利用するプログラミング言語の名称で、スマートコントラクトを実行するために必要なコードです。

ブロックチェーンとは、仮想通貨等の取引データを分散して管理する仕組みのことです。ブロックチェーン単体では、仮想通貨の取引や、取引履歴の確認を行うことができます。

そのスマートコントラクトの機能を実装するには、Solidityというコントラクト指向言語を使用します。

配列とは、値を入れる箱なのですが、箱の中身をいくつかの部屋に分けることで、1つの箱に複数の値を入れることができるプログラムの基本的な仕組みです。

配列で重要考え方として、値が入っている部屋を数字で表すということです。そして、一番最初の値が入っている部屋を0で表示します。つまり、0号室に1番目の値が入っているということです。

1番目の値なのに、0番目の部屋に入っているという意味になるのですが、この前提を抑えることで配列という概念を理解することができます。

 

mappingの書き方

基本構文

mapping(key => value) public ステート変数名

 

解説

mappingと記載することで、mappingを利用した配列のような処理が可能になります。

(key => value) では、配列の0号室というkeyに1番目の値というvalueが入ることを意味しています。

publicはアクセス修飾子を指定しています。

ステート変数名とは、オブジェクト指向言語で言うインスタンス変数のようなものです。

 

[PR]ブロックチェーンで挫折しない学習方法を動画で公開中

アクセス修飾子

アクセス修飾子とは、どの位置からアクセス可能であるかを設定するものです。

アクセス修飾子には4つの種類があります。

public

publicで指定された場合は、指定した場所(内部)からも、指定していない場所(外部)からもアクセス可能です。

 

private

privateで指定した場合は、そのcontractからのみアクセス可能です。

 

external

externalで指定した場合は、指定していない場所(外部)からのみアクセス可能です。

 

internal

internalで指定した場合は、そのcontractと、そのcontractの子からアクセス可能です。

子という概念はプログラミング独自の概念です。

そのプログラム自身を親と考え、自身を元に派生して実装された部分を子と考えます。

 

田島悠介

mappingの基本の形と、アクセス修飾子についてだよ。

大石ゆかり

上の基本構文例の”public”の部分がアクセス修飾子で、その内容によってどこからアクセスできるかを指定するんですね。

田島悠介

次に、実際の例でmappingの書き方を確認してみよう。

mappingを実際に書いてみよう

銀行口座管理用のmappingコード

pragma Solidity ^0.4.11
contract BankAccount
struct User {
  address addr;
  unit amount;
}
mapping(unit => User) public Users;

 

解説

1行目のpragma Solidity ^0.4.11では、Solidityプログラムを宣言しています。

2行目のcontract BankAccountでは、銀行口座を意味するBankAccountのcontract作成を意味しています。

3行目のstruct User {では、struct型の銀行口座の名義人Userを意味しています。

4行目のaddress addr;では、名義人のアドレスを意味しています。銀行口座で言うと口座番号のイメージです。

5行目のunit amount; では、口座残高を意味しています。

6行目の}では、3行目の処理を終了することを意味します。

7行目のmapping(unit => User) public Users;では、mappingにより、配列のようなイメージでmappingによる値の格納を宣言しています。

ここでは、keyにunit型、valueには、User型で設定した構造体の内容を格納しています。

 

今回は、Solidityでmappingを使う方法について解説しました。

実際にコードを書きながら理解していきましょう。

 

田島悠介

mappingの具体的な記述例を見てみたよ。

大石ゆかり

ここでのstructというのは何を指すんですか?

田島悠介

これは型のひとつで、構造体を扱うものなんだ。データ型についてもおさらいしておこう。

大石ゆかり

分かりました。ありがとうございます!

また、オンラインのプログラミングスクールTechAcademyでは、ブロックチェーンオンライン講座を開催しています。

ブロックチェーン技術の仕組みを理解し、実際に分散型アプリケーションを開発することができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

この記事を監修してくれた方

中本賢吾(なかもとけんご)
アジマッチ有限会社 代表取締役社長

開発実績:PHPフレームワークを利用した会員制SNS・ネットショップ構築、AWSや専用サーバー下でLinuxを使用したセキュアな環境構築、人工知能を利用したシステム開発、店舗検索スマホアプリ開発など。

その他にも地域の職業プログラマー育成活動を行い、2018年には小学生がUnityで開発したオリジナルAndroidアプリをGooglePlayでリリース。ゲームで遊ぶより作ろうぜ!を合言葉に、小学生でも起業できる技術力を育成可能で有ることを証明し続けている。