Skip to main content

電卓の機能で整数を使う

このチュートリアルでは、基本的な算術演算を行うためのいくつかのパブリックエントリポイント関数を持つ単一の Actor を作成して、簡単な電卓プログラムを書いていきます。

このチュートリアルでは、Actor は Calc と名付けます。このプログラムは cell 変数を使用して、電卓操作の現在の結果を表す整数を格納します。

このプログラムは以下の関数呼び出しをサポートしています:

  • add 関数は入力を受け取り、加算を実行する。

  • sub 関数は入力を受け取り、減算を実行する。

  • mul 関数は入力を受け取り、乗算を実行する。

  • div 関数は入力を受け取り、除算を実行する。

  • clearall 関数は、以前の操作の結果として保存された cell 値をクリアして、cell 値をゼロにリセットします。

また、div関数には、プログラムがゼロで割り切ろうとするのを防ぐためのコードも含まれています。

始める前に

チュートリアルを始める前に、以下を確認してください:

  • ダウンロードとインストールの説明に従って、SDK パッケージをダウンロードし、インストールする。

  • ローカルコンピューターで動作しているすべての Canister 実行環境を停止する。

このチュートリアルの所要時間は約 20分です。

新しいプロジェクトを作成する

このチュートリアルのための新しいプロジェクトを作成します:

  1. ローカルコンピューターでターミナルシェルを開きます(まだ開いていない場合)。

  2. Internet Computer のブロックチェーン・プロジェクトに使用しているフォルダがある場合は移動します。

  3. 以下のコマンドを実行し、新しいプロジェクトを作成します:

    dfx new calc
  4. 次のコマンドを実行して、プロジェクトディレクトリに移動します:

    cd calc

デフォルトの設定を修正する

このチュートリアルでは、デフォルトの dfx.json 設定ファイルを修正して、メインプログラムにもっと具体的な名前を使えるようにしましょう。

デフォルトの設定ファイル dfx.json を修正します:

  1. 設定ファイル dfx.json をテキストエディタで開いてください。

  2. Main キーの設定を、デフォルトの main.mo プログラム名から calc_main.mo に変更します。

    例:

    "main": "src/calc/calc_main.mo",

    このチュートリアルでは、ソースファイルの名前を main.mo から calc_main.mo に変更してどのように設定ファイル dfx.json の設定がコンパイルするソースファイルを決定するかを簡単に説明しています。

    より複雑な Dapp では、単一の main プログラムファイルではなく、複数のソースファイルを使用することがあります。さらに複雑なアプリケーションでは、複数のソースファイルの間に特定の依存関係があり、それを dfx.json 設定ファイルの設定を使って管理する必要があるかもしれません。このようなシナリオでは、複数の Canister とプログラムが dfx.json ファイルに定義されているので、複数のファイルをすべて main.mo という名前で管理すると、ワークスペースをナビゲートしづらくなります。各プログラムの名前は重要ではありませんが、dfx.json ファイルで設定した名前がファイルシステム内のプログラムの名前と一致することが重要です。

  3. 変更を保存して、ファイルを閉じて続行します。

デフォルトのプログラムを修正する

このチュートリアルでは、デフォルトのプログラムを基本的な算術演算を行うプログラムに置き換える必要があります。

デフォルトのプログラムを置き換えるには:

  1. 必要であれば、プロジェクトディレクトリに留まっていることを確認します。

  2. 以下のコマンドを実行して、テンプレートの main.mo ファイルをコピーし、 calc_main.mo という名前のファイルを新規に作成します:

    cp src/calc/main.mo src/calc/calc_main.mo
  3. テキストエディタで src/calc/calc_main.mo ファイルを開き、既存の内容を削除します。

  4. このコード をコピーして calc_main.mo ファイルに貼り付けてください。

    このサンプルコードでは、整数(Int)のデータ型を使用しているため、正負の数を使用できることにお気づきでしょう。もし、この電卓の関数が正の数しか使えないように制限したい場合は、データ型を変更して、自然数(Nat)のデータしか使えないようにすればよいでしょう。

  5. 変更を保存して、ファイルを閉じて続行します。

ローカルキャニスター実行環境の起動する

calc プロジェクトをビルドする前に、開発環境でローカルに動作している Canister 実行環境に接続するか、アクセス可能なサブネットに接続する必要があります。

ローカルでネットワークを起動するには dfx.json ファイルが必要なので、プロジェクトのルートディレクトリにいることを確認する必要があります。このチュートリアルでは、ターミナルシェルをふたつ用意し、一方のターミナルでネットワーク操作を開始・確認し、もう一方のターミナルでプロジェクトを管理できるようにします。

ローカル Canister の実行環境を起動するには、次のようにします:

  1. ローカルコンピューターで新しいターミナルウィンドウまたはタブを開きます。

  2. 必要であれば、プロジェクトのルートディレクトリに移動します。

    • これで、2つのターミナルが開いた状態になっているはずです。

    • プロジェクトディレクトリを、現在の作業ディレクトリとする必要があります。

  3. 以下のコマンドを実行して、お使いのマシンのローカル Canister 実行環境を起動します:

    dfx start

    ローカルネットワークを起動すると、ターミナルにネットワーク操作に関するメッセージが表示されます。

  4. ネットワーク操作を表示しているターミナルは開いたままにして、新しいプロジェクトを作成した元のターミナルをフォーカスしてください。

Dapp の登録、ビルド、デプロイ

ローカルの Canister 実行環境に接続した後、ローカルで Dapp の登録、ビルド、デプロイができます。

ローカルに Dapp をデプロイするには:

  1. 必要に応じて、まだプロジェクトのルートディレクトリにいることを確認します。

  2. 以下のコマンドを実行して、Dappを登録、ビルド、デプロイしてください:

    dfx deploy

    dfx deploy コマンドの出力は、実行した操作に関する情報を表示します。

Canister で電卓の機能を確認する

これで、プログラムがローカルのキャニスター実行環境上に Canister としてデプロイされました。このプログラムは dfx canister call コマンドを使用してテストすることができます。

デプロイしたプログラムをテストするには、以下のようにします:

  1. dfx canister call コマンドを使用して、calc キャニスター add 関数を呼び出し、次のコマンドを実行して入力引数 10 を渡します:

    dfx canister call calc add '(10)'

    シングルクォーテーションと括弧で囲まれた引数を渡すと、インターフェース記述言語(IDL)がその引数の型を解析するので、引数の型を手動で指定する必要はありません。

    コマンドが add 関数に対して期待される値を返すことを確認します。例えば、プログラムは次のような出力を表示します:

    (10)
  2. 以下のコマンドを実行して、mul 関数を呼び出し、入力引数3を渡します:

    dfx canister call calc mul '(3)'

    コマンドが mul 関数に対して期待される値を返すことを確認します。例えば、このプログラムでは次のような出力が表示されます:

    (30)
  3. 以下のコマンドを実行して、sub 関数を呼び出し、入力引数として number 型の 5 を渡します:

    dfx canister call calc sub '(5)'

    コマンドが sub 関数に対して期待される値を返すことを確認します。例えば、このプログラムでは次のような出力が表示されます:

    (25)
  4. 次のコマンドを実行して、div関数を呼び出し、入力引数5を渡します:

    dfx canister call calc div '(5)'

    コマンドが div 関数に対して期待される値を返すことを確認します。例えば、プログラムは次のような出力を表示します:

    (opt 5)

    div 関数がオプションの結果を返すことに気がついたかもしれません。このプログラムは、 div 関数がゼロ除算エラーの場合に null を返せるようにするために、結果をオプションにしています。

    このプログラムのセル変数は整数なので、その関数を呼び出して負の入力値を指定することも可能です。例えば、次のようなコマンドを実行します:

    dfx canister call calc mul '(-4)'

    すると、以下のように返されます:

    (-20)
  5. clearall 関数を呼び出して、cell の値を 0 にリセットすることを確認します:

    dfx canister call calc clearall

    すると、このプログラムでは次のような出力が表示されます:

    (0)

ローカル Canister の実行環境を停止する

Dapp のテストが終了したら、ローカル Canister 実行環境を停止して、バックグラウンドで実行し続けないようにします。

ローカル Canister の実行環境を停止するには、以下の手順に従います:

  1. 操作が表示されているターミナルで、Control-C キーを押して処理を中断します。

  2. 以下のコマンドを実行して、ローカル Canister の実行環境を停止します:

    dfx stop