ICP Rust CDK学習メモ
  • ICP Rust CDK学習メモ
  • ⚙️開発環境準備
  • 開発
    • テンプレート生成 (dfx new)
    • Frontend開発
      • 1. シンプルなHTML
      • 2. Canister呼び出し
    • Backend開発
      • 1. Hello
      • 2. データ更新/参照
      • 3. ic_cdk::caller()
      • 4. ic_cdk::call()
      • 5. 動的画像生成
      • 6. staticファイル参照
      • 7. HTTPS outcalls
      • 8. Threshold ECDSA
    • Bootcamp
      • Calculator ➕✖️➖➗
      • Homework diary 📔
      • Student wall 🎨
      • MotoCoin 🪙
      • The Verifier 👨‍🏫
      • The Dapp 🚀
  • サンプル
    • 📔Diary
  • 技術情報
    • 🪪Principal
    • 🪪Internet Identity
    • 🪙Token
    • 🖼️NFT
    • 🗝️VetKey
  • ツール
    • dfx
      • dfx identity
    • quill
  • 参考情報
    • 🔗リンク集
GitBook提供
このページ内
  • 1. プロジェクトの作成
  • 2. プロジェクト資材準備
  • (1) dfx.jsonの作成
  • (2) didファイルの作成
  • (3) Cargo.toml編集
  • (4) assets/message.txt (静的ファイル)
  • (5) プログラム
  • 3. ビルド & デプロイ
  • 4. 実行

役に立ちましたか?

GitHubで編集
  1. 開発
  2. Backend開発

6. staticファイル参照

前へ5. 動的画像生成次へ7. HTTPS outcalls

最終更新 1 年前

役に立ちましたか?

Backend Canisterにstaticファイルを含めたい場合にどのようにすればよいでしょうか。

FrontendのAsset Canisterでは、htmlファイルやjsファイル、pngファイルなどWebコンテンツに必要なファイルをCanisterへ格納できます。

一方、Backend Canisterの場合は、以下のDfinityサンプルを見た限りでは、Canisterにファイルを直接配置するのではなく、Rustのマクロを使用してビルド時に静的ファイルを取り込んでいるようです。

『』で解説したプログラムをベースに、応答文字列のうち「Hello」の部分を静的ファイルから読み込むようにしてみましょう。この例では、ファイルから参照するデータは文字列ですので、マクロを使用することにします。

1. プロジェクトの作成

$ cargo new icptest --lib
$ cd icptest

2. プロジェクト資材準備

(1) dfx.jsonの作成

『』と同じdfx.jsonを用意します。

{
  "canisters": {
    "backend": {
      "candid": "./backend.did",
      "package": "icptest",
      "type": "rust"
    }
  },
  "defaults": {
    "build": {
      "args": "",
      "packtool": ""
    }
  },
  "output_env_file": ".env",
  "version": 1
}

(2) didファイルの作成

service : {
    "greet": (text) -> (text) query;
}
[package]
name = "icptest"
version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["cdylib"]

[dependencies]
candid = "0.9.11"
ic-cdk = "0.11.3"

※2023年11月5日時点の最新バージョン

こんにちは

(5) プログラム

use std::include_str;

const MESSAGE:&str = include_str!("../assets/message.txt"); // "Hello"

#[ic_cdk::query]
fn greet(name: String) -> String {
  format!("{}, {}", MESSAGE, name)
}

3. ビルド & デプロイ

$ dfx start --clean --background
$ dfx deploy

4. 実行

Candid UIを開いて実行してみます。

『』と同じbackend.didを用意します。

(3) 編集

『』と同じCargo.tomlを用意します。

(4) (静的ファイル)

std::include_bytes!
QR code generator on the Internet Computer
1. Hello
std::include_str!
1. Hello
dfx.json
1. Hello
backend.did
Cargo.toml
1. Hello
assets/message.txt
src/lib.rs