【Solidity】第4章第1回:配列の基本:固定長と動的配列

本記事では、Solidityにおける配列の基本的な仕組みについて解説します。固定長配列と動的配列の違いや使い方を理解することで、効率的なスマートコントラクトの設計が可能になります。
0. 記事の概要
この記事を読むメリット
- 配列の基礎理解:固定長配列と動的配列の特徴と違いを学べます。
- 適切なデータ構造の選択:プロジェクトに合った配列の使い方を選べるようになります。
- 実践力の向上:配列操作の具体例を通じて、コントラクト設計のスキルが向上します。
この記事で学べること
- 固定長配列と動的配列の基本
- 配列操作の実例(追加、削除、検索)
- よくあるエラーとその解決策
1. 配列とは?
1.1 配列の基本構造
配列は、同じデータ型の値をまとめて格納できるデータ構造です。Solidityでは、配列は固定長と動的の2種類に分類されます。
1.2 固定長配列と動的配列の違い
以下に、両者の違いを表でまとめます:
固定長配列 | 動的配列 |
---|---|
サイズが固定されており変更不可 | サイズが可変で要素を追加・削除可能 |
メモリ消費が少ない | 柔軟性が高い |
初期化時にサイズを指定 | 初期化時にサイズ指定不要 |
2. 固定長配列の基本

2.1 固定長配列の定義
// 固定長配列の例
contract FixedArrayExample {
uint256[5] public fixedArray = [1, 2, 3, 4, 5];
}
動作解説
uint256[5]
で固定長配列を定義しています。この場合、配列のサイズは5に固定され、変更できません。
2.2 固定長配列の操作
固定長配列はサイズが固定されているため、要素を追加・削除することはできません。ただし、インデックスを指定して要素を上書きすることは可能です。
// 固定長配列の操作
contract FixedArrayOperations {
uint256[5] public fixedArray = [1, 2, 3, 4, 5];
function updateElement(uint256 index, uint256 value) public {
require(index < fixedArray.length, "無効なインデックスです");
fixedArray[index] = value;
}
}
動作解説
指定されたインデックスの要素を新しい値に更新します。
3. 動的配列の基本

3.1 動的配列の定義
// 動的配列の例
contract DynamicArrayExample {
uint256[] public dynamicArray;
function addElement(uint256 value) public {
dynamicArray.push(value);
}
}
動作解説
動的配列はpush
メソッドを使用して新しい要素を追加できます。
3.2 動的配列の削除
// 動的配列の要素削除
contract DynamicArrayDelete {
uint256[] public dynamicArray = [1, 2, 3, 4, 5];
function removeElement(uint256 index) public {
require(index < dynamicArray.length, "無効なインデックスです");
dynamicArray[index] = dynamicArray[dynamicArray.length - 1];
dynamicArray.pop();
}
}
動作解説
要素を削除する際には、削除対象の要素を配列の最後の要素で上書きし、pop
で最後の要素を削除します。
4. よくあるエラーとその解決策

4.1 インデックス範囲外エラー
配列操作時に有効なインデックスをチェックすることで、このエラーを防ぐことができます。
4.2 メモリ不足エラー
動的配列を扱う際に大量の要素を追加すると、ガス不足が発生する可能性があります。必要なガス量を見積もり、処理を分割することが有効です。
5. 練習問題
以下の課題に挑戦してみましょう:
- 固定長配列に新しい要素を追加しようとした場合のエラーを確認してください。
- 動的配列に複数の要素を追加し、そのすべてを削除する関数を作成してください。
6. まとめ
本記事では、Solidityにおける配列の基本について学びました。固定長配列と動的配列の特性を理解し、それぞれの適切な使用方法をマスターすることで、効率的なコントラクト設計が可能になります。