Candid: Internet Computer上のアプリケーションインタフェースのための共通言語(日本語訳)

tokuryoo
DfinityJP
Published in
8 min readJan 3, 2022

Medium の DFINITY 公式の記事 Candid: A Common Language for Application Interfaces on the Internet Computer(2021/1/30) の日本語訳です。

Internet Computer のために開発された新しいインターフェース記述言語 Candid を導入することで、ホストされたコードをシームレスに統合することが可能になりました。

サービス記述ファイルをもとに、UIを自動生成し、ランダムテストを行うツールを開発しました。

DFINITY Foundation は、無限の計算能力を持つ世界初のウェブスピード・ブロックチェーンネットワーク Internet Computer を立ち上げることで、インターネットを自由でオープンなルーツに戻そうと取り組んでおり、開発者の体験を高め、より多くの選択肢を提供することに常にフォーカスしています。Internet Computerは、従来のスマートコントラクトをスケール可能にしたソフトウェアキャニスターをホストしており、WebAssemblyバイトコードを、コードが内部で実行されるメモリのページと バンドルしています。これらにより、開発者は、安全で止めることのできない、トークン化のようなブロックチェーン機能を利用した革命的な相互運用可能なアプリケーション、システム、インターネットサービスを構築することができ、これらはプロプライエタリなインフラ上ではなく、インターネット上に直接デプロイされることになります。

異なるプログラム同士が直接統合でき、サービスを簡単に構成・拡張できるパブリックブロックチェーン上で再考されたソフトウェアの宇宙の成長をサポートするために、私たちの言語チームは、Internet Computer のエコシステムを共同で構築する人々が、異なる言語で書かれていても、コードを完全にシームレスに接続できる Candid interface description language(IDL)を開発しました。

Candid とは?

Candid は、Internet Computer のために特別に作られたIDLで、異なるプログラミング言語で書かれたサービス間の通信を容易にするためのアプリケーションインタフェースの共通言語を提供するものです。

Candidの主なメリットの1つは、言語にとらわれず、Motoko、Rust、JavaScript など、異なるプログラミング言語で書かれたサービスとフロントエンド間の相互運用を可能にすることです。これにより、開発者は外部サービスのインターフェイスのアップグレードを気にすることなく、互いに依存し合うサービスを安全かつシームレスに構築することができます。

Candid を通して、私たちが目指したのは…

  • インターフェースとデータの説明を提供する: Candidを使用する開発者は、サービスのパブリックインタフェースを記述する機能を持ち、通常、キャニスターとしてデプロイされたプログラムのインターフェイスを記述します。開発者としては、Internet Computer で動作する外部サービスを非同期関数呼び出しとして呼び出すことができます。
  • 原則的な方法でインターフェースの進化をサポートする: Candidは、既存のクライアントを壊さずに行える変更を正確に指定することで、サービスインターフェースの進化をサポートします。例えば、既存のクライアントとの互換性を失わずに、新しいオプションパラメータをサービスに安全に追加できることを意味します。
  • Internet Computer の機能をサポートします: Candidは、特に Internet Computer 用のアプリケーションの開発に適しています。

Candidは、Protobuf、Thrift、JSON といった類似の IDL と Data Definition Language(DDL)からインスパイアされた部分もありました。しかし、Candidは、これらの他の技術にはない機能のユニークな組み合わせを提供します。

  • Candidは、単なる Data Definition Language ではなく、完全な Interface Description Language である。
  • Candidの実装は、Candidの値をホスト言語の型や値に直接マッピングすることができます。
  • Candid は本来、メッセージの引数に他のサービスやメソッドへの参照を含めることができる高次の言語です。
  • Candidは、queryアノテーションなど、Internet Computer 特有の機能をビルトインでサポートしています。
  • Candid は、サービスとそのインターフェースを、高次の用途も含めて、 健全かつコンポジショナルな方法でアップグレードするためのルールを定義しています。

Candid はどのように使うのですか?

Candidの主な目的は、何らかのホスト言語、例えば Motoko、Rust、JavaScript で書かれたプログラムを Internet Computer に接続することです。ほとんどの場合、プログラムのデータを Candid の値として扱う必要はありません。その代わりに、JavaScriptのようなホスト言語で、使い慣れたJavaScriptの値を使い、その値を Rust や Motoko で書かれたキャニスターに透過的に転送するために Candid に頼ることになります。Canister はその値を受け取り、Rust または Motoko のネイティブな値として扱います。

Candid の値を人間が読める形で直接確認できると便利な場合があります — 例えば、ロギング、デバッグ、コマンドラインでサービスとのやり取りを行う場合です。これらのシナリオでは、Candid の値をテキスト表示することができます。

Candidは、ほとんどの用途を標準的にカバーする型のセットを持つ強い型付けシステムです(一覧を見るには、私たちのSDKのページを参照してください)。この型のセットの背後にある哲学は、情報がエンコードされ、交換され、デコードできるように、データの構造を記述するのに十分であり、それ以上のセマンティック制約を記述しようとしないことです。Candidは、Motoko、Rust、JavaScript、その他の言語のいずれでコードを書いている場合でも、それぞれのホスト言語に適した合理的で標準的な選択に基づいてデータ型を自然にマッピングできるように、この型のセットをサポートしています。

Candid の型は,Candidサービス記述ファイル(.didファイル)を介してサービスを記述するために使用されます。このファイルは、手動で記述することも、サービス実装から生成することもできます.例えば Motoko で Canister を書いた場合、プログラムをコンパイルする際にコンパイラが自動的に Candid記述 を生成します。Rustなど他の言語では、Candid のインタフェース記述を手動で書く必要があります。型の力を借りて、サービス記述ファイルを元にUIを自動生成し、ランダムテストを行うツールを開発しました。

また、Candid はサービスのアップグレードの際にも役に立ちます。サービスは時間とともに進化します、つまり、新しいメソッドが追加されたり、既存のメソッドがより多くのデータを返したり、追加の引数を期待するようになります。通常、サービスの作者は既存のクライアントを壊さずにそれを実現したいです。Candid は、新しいサービスの型が以前のインターフェース記述を使用している他の全てのパーティといつ通信できるかを示す正確なサブタイピングルール(Coqで形式化される!)を定義することで、サービスが安全に進化するのを支援します。

もっと知りたい方は? Candid関連の資料をご紹介します…

Candid チュートリアルとリソース

  • Candid explainer video: Candidの使い方のビデオチュートリアルはこちらでご覧いただけます。
  • Candid documentation and tutorials: Candidに関するドキュメントは、こちらのSDKサイトで参照することができます。
  • Candid Crate: Candid crate は、Rust で Candid サービスまたはクライアントを作成するために使用できるシリアライズ/デシリアライズライブラリです。
  • Internet Computer agent library for JavaScript: このエージェントには、Candidのサポートが含まれています。
  • Community-supported libraries for Candid: 現在、HaskellElmAssemblyScriptKotlinに対応したライブラリが存在します。
  • Candid UI: このキャニスターは、Internet Computer 上で動作するキャニスターのフロントエンドUIを生成し、開発者が(ターミナルではなく)ウェブ上でキャニスターと対話できるようにするとともに、デバッグ機能を提供します。

--

--