Yumeville

Holochain デベロッパーパルス No.92

制作中の開発ツール

令和3年3月13日

概要

主にパフォーマンス、バグ修正、機能群(プロキシサーバー、ストレージコード、シャーディング、バリデーション証明書)に取り組んでいますが、いくつかの開発ツールにも取り組んでいます。hcコマンド、モックHDK、そしてほぼ完成したhAppバンドル仕様です。

トピック

  1. hc開発者用CLIが帰ってきた!
  2. モックHDK: Holochainを実際に起動することなくDNAをテストできる!
  3. hAppバンドルの仕様が基本的な用途に対応

hc開発者用CLIが帰ってきた!

Holochainのベテラン開発者なら、スイスアーミーナイフのようなツールであるhcコマンドを覚えているでしょう。そのhcコマンドが再び登場し、日々の開発で使えるようになりました。

サブコマンドはすでに実装されています。

  • hc dnaは、既存であるdna-utilコマンドの置き換えとなります。
  • hc dna init は、空のディレクトリとDNAのマニフェストファイルを作成します。
  • hc dna pack コンパイルされたWASM ZomeのコレクションとDNAマニフェストファイルをDNAファイルにパックします。既存のdna-util -cの代わりになります。
  • hc dna unpack は、DNA ファイルをコンポーネントマニフェストとコンパイル済みのWASM Zomeにアンパックします。これは、既存のdna-util -eを置き換えます。
  • hc appは、hc dnaと同じサブコマンドを持ちますが、hAppバンドル(DNAの集合体)用に動作します。バンドルの詳細については下記記載しております)。
  • hc sandbox はまだ完成していませんが、コンダクターの「サンドボックス」を生成して実行することができます。これは、アプリケーションをテスト実行するための一時的なコンダクターの構成(複数のコンダクター上の複数のインスタンス生成も含む)が行えます。

このツールはメインラインのHolonixではまだ利用できませんが、この以下のコマンドで試すことができます。

nix-shell https://github.com/holochain/holonix/archive/pr/bump-holo-nixpkgs-add-hc.tar.gz

上記のコマンでの作業が終わり、開発シェルに入れたら、hcツールが使えるようになっているはずです。

hc –version
holochain_cli 0.1.0

単純なhc dna inithc app initコマンド以外に、どのようなスキャフォールドが必要なのか、まだ検討中です。スキャフォールディングツールに何が必要か、もしアイデアがあれば、GitHubにて機能リクエストを作成し、「enhancement」というタグを付けてください。

テストについては?テストについては、各言語のネイティブツールが十分にカバーしています。

  • npm testを使って、Tryoramaで書かれたシナリオ/エンドツーエンドのテストを実行できます。
  • cargo testを使って、新しいmock HDKでユニットテストを実行することができます(下記参照)。

モックHDK: Holochainを実際に起動することなくDNAをテストできる!

ユニットテストとは、実行可能なコードの最小部分を対象としたテストのことで、テスト計画の基礎となるものです。しかし、これまでは、DNAのユニットテストに適したツールがありませんでした。

シナリオテストフレームワークのTryoramaは、統合テストを行うのに適しています。これは、DNAをホストするためにコンダクター(複数可)を起動します。しかし、これは特定の部分を個別にテストすることを目的としたユニットテストには向いていません。また、Tryoramaは多くのエッジケースをサポートしていません。予期せぬコンダクターのシャットダウンは簡単にモデル化できますが、ハードウェアエラーや悪意のあるピアがいる場合の状況などの他の状況はTryoramaでテストすることは不可能です。

そこで、ホロチェーンコアの開発者は、ホストコールの応答をシミュレートし、好きなエッジケースを導入できるモックHDKを導入しました。WASMテスト群には、CRUDホスト関数をモックした例が含まれています。こちらには、CRUDホスト機能をモックしたものを紹介します。

hAppバンドルの仕様が基本的な用途に対応

hAppの開発では、マイクロサービスのエコシステムのように、既存のDNAを組み合わせて新しいコンフィグレーションにすることが一般的なパターンになると考えています。実際、私たちにはそれが一番役立つでしょう。開発者が互いの優れたコードベースを利用できるようになれば、Holochainはより早く普及すると考えています。新しいアプリが既存のアプリと連携したり、ユーザーの既存のデータを活用したりすることで、開発者の作業や時間を削減し、より良いユーザーエクスペリエンスも実現できると考えています。

そのために、アプリケーションを構成するDNAの「束」(バンドル)を簡単に指定できるようにしたいと考えてきました。これを可能にすることで様々なニーズに対応できますが、ここではそのいくつかを紹介します。

  • ホロチェーンの中枢アプリ(DeepKeyなど)や他の人気アプリ(チャットやソーシャルメディアなど)など、既存のDNAに接続したい場合。
  • 既存のDNAの新しいコピーを作成し、ユーザーが同じコードベースを使ってプライベートな空間を生成できるようにする。
  • 1つのDNAを複数回クローンして、組織内のチャットルームなど、個別の小さなスペースを確保する。

hAppバンドルは、Holochain Reduxでも存在していましたが、今回RSM(ホロチェーン新バージョン)にも登場しました。上記のシナリオのうち、いくつか(クローニングやDNAのバージョン管理など)はまだサポートされていませんし、バンドルの仕様フォーマットもまだステーブルではありません。ですが、アドミンAPIではすでに使用されていますし(近いうちにTryoramahcツールでも使用されるでしょう)、hApp開発者がすでに使用している部分はかなり堅牢に見えますし、おそらく大きな変化はないでしょう。ここでは、何が機能し、何が変更されたかを説明します。

  • admin APIエンドポイントのInstallAppBundleは、廃止される予定のInstallAppに代わるものです。すでにInstallAppのすべての機能をサポートしており、将来的にはさらに多くの機能をサポートする予定です。
  • DNAバンドルのプロパティとUUIDを上書きできるDNAマニフェストはすでに存在しています。DNAマニフェストは、DNAバンドルのファイルをファイルパスだけでなく、URLで参照できるように少しだけ調整されています。
  • アプリバンドルには「スロット」があり、バンドル内の既存または新規のDNAに人間が読みやすいIDを与えます。将来的には、これらのスロットはDNAのクローニングにも使用される予定です。
  • Reduxのバンドル仕様とは対照的に、RSM(ホロチェーン最新フレームワーク)のDNAはブリッジ(他のDNAにリモートで関数を呼び出すこと)を行う前にブリッジするDNAを予め明示的にバンドルに表記する必要はなくなりました。セル(DNAのインスタンス)は、自分がハンドラーを持っている他のセルに対して、単純にブリッジコールを行うことができるようになっています。アクセスはケイパビリティベースのセキュリティによって許可または拒否されます。(これは、循環的な依存関係に注意しなければならないことを意味します)。

ボーナス:エコシステムの成長の兆し

最近、Holochainがオープンソースの開発者コミュニティで認知され、支持されていることを示すいくつかのことに気がつきました。

  • hAppの開発者は、機能を追加するプルリクエストを作成しています。それは、ヘッダーのタイムスタンプを指定できるようにするなど、自分たちのニーズに合ったものだけでなく、ローカルネットワークのためのmDNSピアディスカバリーのように、誰もが使えるものも含まれています。
  • このフォーラムスレッドでは、ローコード開発ツールキット(近日中にオープンソース化予定)を紹介し、Holochainとの連携を呼びかけています。また、ケニアで人気のコミュニティ通貨に対するHolochainの有用性を調査しています。
  • 開発者フォーラムへの参加は、この2ヶ月間で着実に増加しています。これは、ホロポートにElemental Chatが搭載されたことで、実際にHolochainを目にすることができるようになったことや、FOSDEM 2021やHello Decentralizationカンファレンスなどのイベントで認知度を高める活動を行ってきたことが影響しているのだと思っています。

ホロチェーンに興味があればこちらから!

もしあなたが開発者で、Holochainについて学んでいるのであれば、開発者フォーラムに参加して、他のフレンドリーなコミュニティメンバーと話してみることをお勧めします。もしあなたがアプリケーションを持っていて(あるいはアプリケーションのアイデアを持っていて)、そのアプリがHolochainをバックエンドに使用したらどのように動作するのか疑問に思っているなら、私は実装の詳細について話すのも好きです!(私のTwitterでのユーザー名は@pauldaoustです)。このコミュニティではコースも開催されており、現在はアプリケーション・アーキテクチャ・コースが開催されていますが、今後も同じイベントや他のイベントも開催される予定です!