Holochainガイドブック

  1. ようこそ!
    1. まずはじめに
  2. dAppのプランニング
  3. ホロチェーンアプリを作ろう!:イントロダクション
    1. 様々なプラットフォームでの開発
    2. DNAイントロダクション:コンフィグレーション
    3. DNAイントロダクション:コード
    4. コマンドラインツールのイントロダクション
    5. 新プロジェクトを作ろう
    6. プロジェクトソースフォルダ
    7. アプリのコンフィグレーション
    8. Rustで作ろう
    9. AssemblyScriptで作ろう
    10. WebAssemblyへのイントロダクション
    11. プロトタイプバージョンからRustへ更新
    12. ホロチェーンアプリ一覧
  4. ホロチェーンアプリを作ろう!:Zomeコード
    1. Zomeの追加
    2. HDKのイントロダクション
    3. Zome定義イントロダクション
    4. アプリエントリータイプ定義
    5. ジェネシス
    6. Zome関数
    7. ケーパビリティ(Capability)
    8. データの読み書き(E)
    9. エントリーバリデーション(E)
    10. リンク(E)
    11. ノード対ノードのメッセージング(E)
    12. 外部のZomeの呼び出し(E)
    13. 暗号関数(E)
    14. バンドリング(Bundling)(E)
    15. シグナル発行(E)
    16. API DNA変数
    17. API関数一覧
  5. ホロチェーンアプリを作ろう!:パッケージング
    1. .hcbuildファイル
    2. .hcignoreファイル
  6. ホロチェーンアプリを作ろう!:テスト
    1. テスト実行
    2. Holochain-nodejsのイントロダクション
    3. コンフィグレーション
      1. 別方法でのコンフィグレーション
    4. シナリオテスト
      1. 設定
      2. Tapeでテスト
      3. 他のテストハーネス
    5. DNAインスタンス
      1. Zome関数の呼び出し
      2. 非同期ネットワークの扱い方
    6. 結果チェック(E)
    7. Conductor の手動設定
    8. インスタンス情報のアクセス
  7. ホロチェーンアプリを稼働しよう!:コンダクター
    1. 開発コンダクター
      1. ネットワークのコンフィグ
    2. プロダクションコンダクター
      1. TOML Config Filesへのイントロダクション
      2. エージェント
      3. DNA
      4. インスタンス
      5. インターフェース
      6. ブリッジ
      7. UIバンドル
      8. UIインターフェース
      9. ログ
      10. ネットワーキング
      11. パーシステントディレクトリ
    3. JSON-RPCインターフェースへのイントロダクション
    4. Conductor JSON-RPC API
      1. HTTP
      2. WebSockets
    5. アドミンコンダクター
  8. ホロチェーンアプリを作ろう!:UI
  9. ホロチェーンアプリを作ろう!:ブリッジング(E)
  10. ホロチェーンアプリの稼働開始!(E)
    1. バージョンリリースの作成(E)
  11. ホロチェーンアプリを作ろう!:応用編(E)
    1. JsonStringを理解しよう!
    2. アンドロイド開発!
  12. ホロチェーン拡張編(E)
    1. ホロチェーンのEmbedding(E)
      1. コアAPI(E)
    2. キー管理(DPKI)
    3. 命名規則
    4. HDKを作る
    5. ZomeAPI関数の実装
    6. Reduxアーキテクチャ
      1. ステートアクション(State Action)
    7. ステートアクター(State Actors)
  13. FAQ
  14. 用語集(E)
    1. エージェント(E)
    2. キー(E)
    3. DNA(E)
    4. Zome(E)
    5. ソースチェーン(E)
    6. 分散型ハッシュテーブル(DHT)(E)

1.ようこそ!

こちらのガイドブックはまだ未完成です。セクション名に(E)があるものはまだ未完成のもので中身はまだ空になっています。(E)がないセクションは完成しているものです。  

Holochainガイドブックへようこそ!Holochainは企業やコミュニティなど様々なグループが、ユーザーによってホスト及びバリデートされるアプリの構築を可能にするオープンソースなライブラリです。ユーザーに本来の権限を戻すことで、従来のクラウドサーバーやサードパーティサービスにおいて稼働するアプリよりも、遥かにユーザーの自主性を保つことが可能になります。 このようなアプリはP2Pや分散型アプリ(dApps)などと世間では名付けられています。

ブロックチェーン上で作られる「dApps」とHolochain上で作られる分散型アプリを区別するために我々は、Holochain上で作られる分散型アプリを「hApps」と呼んでいます。ブロックチェーン上で作られるアプリとHolochain上で作られるアプリの詳しい違いはこちら(現在翻訳中!)を参照して下さい。 

Holochainはクロスプラットフォームで稼働するアプリ構築そして運用のためのフレームワークです。hAppsのようなアプリを使用するユーザーは、ただアプリを使用するだけの存在に留まりません。hApps上で彼らはアプリのホスト及びネットワーク上のデータのバリデート(認証)の役目を担う「参加者」でもあるのです。hAppsはほとんどのメジャーなOSでの開発が可能であり更にどのデバイスでも稼働可能です。

P2P分散型アプリのメリットとしては、サーバ料金軽減、単一障害点の排除、柔軟性の高いガバナンスなどがあげられますが、Holochainであれば、これを更にレベルアップさせたアプリの構築がデスクトップ、ノートパソコン、Android(arm64)などで可能です。 (iOSでも論理的には可能で既にアプリを構築しているチームもいます)

このガイドブックはホロチェーンの仕組みをデータのバリデーションから繁殖まで、Holochain上でのアプリ開発のスタートダッシュのために必要な情報を記載しています。これがあればあなたも企業やコミュニティそして社会が必要な分散型アプリの構築が可能になります! 

Yes No
Last updated on 2019-05-18

1.1.まずはじめに

読者がHolochainで何をしたいかによって、このガイドブックの使い方が変わってくるはずです。まず最初にこのガイドブックのセクションごとの簡単な説明をしていきます。もし、説明を理解して「これだ!」と思うものがあれば、そのセクションから読むと良いでしょう!

DAPPのプランニング

読者:分散型アプリの概要を知りたいという人はこちらから!このセクションは、分散型アプリのメカニズムというのはどういうものなのか?何を作りたいのか決まっていて、作るためには何が必要なのか知りたい、自分が見逃している部分はないか、前提条件は間違っていないか知りたい、そんな人に向いています。

ホロチェーンアプリを作ろう!

読者: 熟練の開発者であろうと、プログラミングを始めたばかりであろうと、作りたいプロジェクトがあり、何ができて何ができないのかを実験したいのであれば、このセクションは読者にうってつけのはずです。Holochainアプリを作るとは技術的にどういうことなのかを知りたい、Holochainという言語を理解したい、そんな人にオススメのセクションとなります。

ホロチェーンアプリを稼働しよう!

読者:既にホロチェーンアプリを開発・デザインしていて、どうやって自分の開発•デザインしたアプリを世に出すかを知りたい、このセクションはそんな人にオススメです。「アプリのアップデートどうするのか?」「アプリのパフォーマンスをどう管理するのか?」「セキュリティのベストプラクティスは?」などの質問があればこちらを読みましょう。

ホロチェーン拡張編

読者: Holochainでアプリを作るのではなく、Holochain自体を理解した上で、別のやり方でHolochainの開発に貢献したい、Holochainをどうやって改良できるかアイデアを持っていてそれを実行するスキルを持ち合わせている、Holochainのソースコードやドキュメンテーションを読んでいて更に深く理解したい、Rustだけでなく、他の言語でもHolochainアプリを組めるようにしたい、まだサポートされていないOSやデバイスでもHolochainアプリを稼働できるようにしたい、このセクションは、このような人にオススメです!

Yes No
Last updated on 2019-05-29

2.dAppのプランニング

dAppってなに?

dApp とは分散型アプリの略です。これは、中央集権的サーバーにネットワーク全体(つまり全ユーザー)のデータをデータベース化して格納するのではなく、各ユーザーにデータを分散化させて格納するアプリのことを指します。

dAppを作る前に

基本的には下記の条件が揃えばあなたも分散型アプリが作れるでしょう!

・ホロチェーンのインストール

・コマンドラインツールの使い方

・「DNA」ファイルでのアプリのコンフィグ方法

・WebAssemblyへコンパイルされる言語での開発

・分散型アプリを作る思考方法

・UI構築

・分散型アプリのテスト方法

このガイドブックはあなたが自分の分散型アプリの開発を計画するうえで配慮するべきことなど、分散型アプリ(特にホロチェーンアプリ hApp)を作る上での必要な情報をそろえています。ホロチェーンアプリを作るには、まず中央集権的アプリケーションのデザイン思考から考えをシフトし、更にはブロックチェーンベースで作られているアプリからも考えをシフトしなければなりません。

まずこのセクションでは、ホロチェーンで使われている暗号技術の概要を説明します。更には、ホロチェーン上でアプリを作ることによってデータのパーミションやアクセス、セキュリティがどのように影響されるのかも説明していきます。ホロチェーン上では、データの管理が各ユーザによって分散的に行われているため、データの暗号化やパーミション設定がアプリ上のプライバシー保護に大いにかかわると考える人も多いはずです。

まずこのセクションでは、ホロチェーンで使われている暗号技術の概要を説明します。更には、ホロチェーン上でアプリを作ることによってデータのパーミションやアクセス、セキュリティがどのように影響されるのかも説明していきます。ホロチェーン上では、データの管理が各ユーザによって分散的に行われているため、データの暗号化やパーミション設定がアプリ上のプライバシー保護『に』大いにかかわると考える『ことになります』。ホロチェーンでアプリを稼働するということは、ユーザーがネットワークを退出すればそのユーザーに紐づくデータも一緒に持っていかれることを思い出してください。また、DHT(分散型ハッシュテーブル)をサポートするために各ユーザーが DHT のかけらを持っていることも忘れないでおきましょう。

また、分散型アプリを作るということは中央集権的アプリが用いるような、リソースのアクセス制限によって成り立つビジネスモデルとは違う観点から、価値の搾取方法を考えなければなりません。

ホロチェーンアプリで用いられる暗号技術

ホロチェーンアプリで用いられる暗号技術分散型システムは、中央集権的サーバーによるよりも暗号技術を大いに頼りにしています。なので、まず、これからホロチェーンで用いられている暗号技術の基本的なコンセプトを説明していきます。データの完全性、起源元、セキュリティなどがホロチェーンのアーキテクチャでどのように保証されているのかも下記を読めば分かるでしょう。ホロチェーンで使われている暗号技術は長年かけて有効性が実証されており hApp を作る上で欠かせない内容になってきます。

ハッシュ

ハッシュというのは情報の信頼性を保つために、データに対してハッシュ関数を掛けることによりランダムで一貫性のある文字列を生み出す暗号技術です。ハッシュはもとのデータが書き換われると必ず変わるため、データが改竄されたか否かをデータの内容を見ずとも明確化することに繋がります。

しかし、ハッシュを使って元のデータを取得するのは不可能です。ハッシュの目的は元のデータの信頼性を保証することにあります。同じデータであれば、永遠に同じハッシュ値を生み出しますし、データの内容が 1 バイトでも変わればハッシュ値は全く違ったものになります。

ハッシュ技術を用いることによってどんな大きいデータでもハッシュというポータブルな値で信頼性を保つことが可能になります。また、データとハッシュを組み合わせて使用することで、目録のようなデータベースを作り、分散化されたデータをいち早くネットワーク上で見つけることも可能になります!

ホロチェーンにおいて、ハッシュはコンテンツの所在を突き止めるために DHT 上でもホロチェーンのアーキテクチャ内部で使われています。なので、我々はあるアイテム(チェーンへのエントリー)に紐づけられているハッシュを「アドレス」とも名付けています。

電子署名はホロチェーンにおいては認証部分の役割を担っており、「このデータは誰の?」という質問の答えになります。電子署名は、ユニークでデータの信頼性を保つ点でハッシュと似ていますが、ハッシュのように元のデータを電子署名から取得することはできません。電子署名は公開鍵・秘密鍵のペアで成り立っています。

秘密鍵は著者(つまりデータの持ち主またはデバイス)の存在を明確にし、公開鍵は電子署名に使われた秘密鍵が妥当であるものだということを認証するために使われます。この鍵インフラは各ユーザーに個人のデータに対して管理者権限を付与することにより中央集権的システムで見られる単一障害点の問題解決に繫がっています。

エンクリプション

もし、読者がデータの認証だけでなく誰がアクセスできるか制限したい場合はどうすればよいでしょう?ホロチェーンでは2通りのエンクリプション(暗号化)があります。1つ目は対称鍵での暗号化(Symmetric Encryption)で2つ目は非対称鍵での暗号化(Asymmetric Encryption)になります。対称鍵暗号化は1つの鍵で暗号化も復元も行います。非対称鍵暗号化は暗号化と復元にそれぞれ別々の鍵を使用するようになっています。

暗号化というものは双方向のプロセスで、正しい鍵が暗号化されたデータを復元できるようになっています。暗号化技術は分散型プラットフォームに欠かせない技術ですが、鍵の安全管理や暗号化されたデータの肥大化などの課題がまだ残されています。

データアクセスパラダイム

これからホロチェーンでのデータへのアクセスの大まかな方法を 5 つに分けて説明します。ホロチェーンでは、複数の分散型アプリをリンクさせることによってこの 5 つのデータアクセス方法が入り混じっている事が多く、分散型アプリ同士でデータの交換をする必要があるという考えに基づき、アプリ同士でのブリッジングをサポートしています。データ管理モデルが全く違う2つの分散型アプリがデータの交換を行うためには、ブリッジを誰が使えて、どのデータがブリッジされて、ブリッジにより引き起こりうるタスク(通知など)がどのようなものなのかなどを明確にする必要があります。

ホロチェーンでのデータはデフォルトでパブリックネットワークにシェアされる仕組みになっていて、ホロチェーンで作られるアプリは、それぞれが別々に個別のネットワークを持つ仕組みになっており、データもアプリごとに分かれて管理されます。つまり、データの管理もアプリごとに定める人書ルールや共有ルールによって大いに変わっていきます。

パブリックネットワーク上のパブリックデータ

パブリックデータはBitTorrentのような仕組みと似ています。

  • 誰でもネットワークに参加できる
  • 誰でもネットワークから様々なデータをリクエストできる
  • ネットワーク上で最低でも1ノードがデータを共有していればそのデータは取得可能になる
  • データは必ずアプリで定められた最低ノード数によって共有されなければならない。最低数を下回った場合、ランダムで新しいノードがそのデータを共有する。
  • ローカルのみのデータは存在しない。

上記以外に、ホロチェーンでのデータは必ず電子署名が付いていないとならない。

プライベートネットワークでのパブリックデータ

プライベートネットワークでのパブリックデータ機能は、多くの場合パブリックネットワークが同一ですが、プライベートなネットワークでは暗号技術を用いてネットワーク自体へのアクセスを管理します。

また、データの送受信を行うために、各デバイスは他のデバイスとP2Pコネクションで接続しなければなりません。プライベートネットワークにすでに参加しているデバイスは新たに参加しようとしているデバイスに「チャレンジ」を課すことができます。これはチャレンジ・レスポンス認証と呼ばれているものに近いプロトコルです。新たに参加しようとしているデバイスはこのチャレンジに秘密鍵で電子署名をします。ネットワークの公開鍵はアプリのコンフィグレーションで設定されているので、ホロチェーン自体はこの新デバイスの秘密鍵と公開鍵を見比べて整合性が取れていない場合に参加しようとしているデバイスを拒絶することができます。データ自他はネットワーク内では共有可能になっていますので、ネットワークに参入(つまりログインのような仕組み)できたデバイスはネットワーク内のデータにフルでアクセスできます。

プライベートネットワークでの暗号化データ

ネットワーク内でのデータの暗号化は、アプリ開発者によって暗号化や復元の方法が異なってきます。

ホロチェーンはAES(高度暗号化標準)のような業界標準である暗号化技術を対称鍵および非対称鍵を採用している分散型アプリ開発者が使用できるようにしています。これは、ハッシュや電子署名ツールに加えての暗号化技術ですが、ホロチェーンのネイティブな認証メソッドにも影響が出かねないので注意しましょう。

ローカルのみのデータ

どのようなデータでも著作者によってバリデート後にネットワーク上に共有することなく格納することができます。ローカルのみのデータはデータの所有者にポータブルな個人情報やデータのデータベースを与えるようなイメージで、複雑な暗号技術や鍵ベースのセキュリティも必要ないのでデータのアクセスも所有者であれば容易に可能です。

ローカルデータもパブリックデータと同じくハッシュ値を持ちます。このハッシュは公開されているので、他のノードはデータ自体にアクセスせずに、このハッシュ値に基づくデータが存在していることは分かります。また、この仕組みを利用して、過去にローカルのみで存在するデータを公開するような分散型アプリ(不正行為を完全に防げるデジタル教室や簡単な推測ゲーム)を構築することも可能です。

サーバーを使用したハイブリッドモデル

ホロチェーンは既存の環境に容易にインテグレート出来るようにしています。ホロチェーンに接続されているシステムでAPIを用いれば、データの送受信が分散型アプリへ可能になります。例えば、スマホから個人のカレンダーの内容を分散型アプリへ送るなどといったことが可能になります。

現在ホロチェーンがインテグレート出来るようにされている環境は以下の通りです。

  • コマンドラインツール
  • Webサーバー
  • Android
  • Qt/QML
  • Unity 3Dゲームエンジン

セキュリティーベストプラクティス

分散型システムでよく目にする DAO ハックのようなセキュリティ問題を回避するためには、暗号化技術に合わせてユーザーをどのように保護するか考えなくてはなりません。

根本的には、開発者は望ましくないDHT(分散型ハッシュテーブル)へのアクセスをどのように防ぐか考えなければなりません。分散型アプリのDNAでしっかりアプリの膜(membrane)を作ることが第一になります。ユーザーがソースコードにアクセス出来るということは、DHT にアップロードされているデータへのアクセスもできるということです。なので、開発者はソースコード、特に DNA をデータへの鍵だと認識した上で開発を進める必要があります。また、ホロチェーンでは分散型アプリをフォークすることは容易(既存のネットワークに影響を与えない)になっており、オープンソースコードの利点を保ちつつリスク軽減ができています。

アプリ膜(Membrane

ホロチェーンアプリのセキュリティ強化はアプリ膜の定義から始まります。アプリ膜がしっかりしていないとソースコード自体が攻撃を受ける可能性が高いです。ホロチェーンは上記で説明したように複数の暗号化技術を用いてデータの起源元や不変性によるトラスト(信頼性)を構築していますが、このアプリ膜をしっかり作ることによりアプリの信頼性を一段と上げることが可能になります。セキュリティの強固さはアプリごとに異なるため、ホロチェーンでは状況に応じて柔軟にセキュリティを構築することが可能です。

シビル攻撃というのは大量の、取引履歴の全くないノードを使用してネットワークを攻撃する手法です。ブロックチェーンではこのシビル攻撃というのを Proof of Work というコンセンサスアルゴリズムで対処しています。Proof of Work ではノードが取引を認証するためにある一定のパズルを膨大な電気量を使って解く必要があるので、簡単に大量のノードを作らせないようにしています。ホロチェーンでは開発者がアプリ膜のシビルノードを特定できるように仕組みを作らないとなりません。

免疫システム(Immune System)

ホロチェーンではデータの認証をランダムにノード同士で行うように設計されています。これは、バリデーションルールを公平に履行することを保証するための仕組みであり、ネットワークの信頼性を保つためにある仕組みでもあります。これを、コンテンツバリデート用の「免疫システム」と名付けています。

もし、データが暗号化されている場合は復元のための鍵が必要になるので、ネットワーク内でのデータの暗号化はホロチェーンのネイティブの免疫システムに影響を及ぼすので、開発するときには注意しましょう。

ホロチェーンが活用できるシナリオ

  • P2Pプラットフォーム
  • サプライチェーンや非許可型なネットワーク
  • ソーシャルネットワーク
  • コラボレーションアプリ
Yes No
Last updated on 2019-05-29

3.ホロチェーンアプリを作ろう!:イントロダクション

アプリ開発

あなたがもし、ホロチェーンアプリを開発したいと思っているのであれば、まずホロチェーンアプリがどのようなものか理解する必要があります。

まず、ホロチェーンはあなたの分散型アプリを稼働するためのエンジンであることを言理解しましょう。このエンジンは、あなたのアプリがホロチェーンである程度定められたユニークなフォーマットによって作られていることが前提で稼働します。そのフォーマットがつまり「DNA」と呼ばれるものです。アプリの「DNA」は1つのファイルにGまとまられていて、ホロチェーンにマウントされ実行されます。

しかし、アプリを1つのファイルだけで作ることはほぼ不可能であり望ましいことでもありません。ですので、ホロチェーンでは開発者にアプリコードをフォルダ内で複数のファイルに分けて管理するツールを提供しています。更にはこの複数のファイルを1つの「DNA」フォーマットのファイルにビルドするツールも提供しています。

ホロチェーンと「DNA」について学ぶべきことは多いですが、まずは大まかな概念からみていきましょう。

ホロチェーンとDNA

まず、ホロチェーンの目的は暗号化されセキュアで、耐タンパー性を持ったP2Pアプリを作ることです。「DNA」ファイルはこの目的を達成するための基礎的役割を担っています。我々はアプリとアプリユーザをゲームのように捉えています。ゲームを遊ぶには、プレーヤーはある一定のルールに基づかなければなりません。でなければ、「同じ」ゲームを遊べているとは言えないでしょう。ホロチェーンでは、「DNA」ファイルにアプリのロジックとルールが格納されています。これにより、離れ離れのユーザー同士が同じ「DNA」を実行することにより、暗号化されセキュアな同一アプリを稼働することになります。

技術的には、ユーザー同士でデータの交換・認証が可能になることを意味しています。これにより、ユーザーは分散型P2Pでデータの整合性を疑わずに安心してデータのやり取りができるようになります。

ここで覚えておくべきことは、「DNA」の内容(コンフィグレーション、バリデーションルール、アプリケーションロジック)を開発者が変えた場合にユーザーがこれを稼働したとき、実質違うアプリを稼働したことと同じになります。もしここであなたが、「であれば、アプリのアップデートは分散型ネットワークでどのようにやるのか?」と疑問に思ったら鋭い観察です。アップデートについては、後程説明します。

ホロチェーンの具体的な内容に飛び込む前に、まずどのようなプラットフォームでホロチェーン開発が行われているか見ていきましょう。

Yes No
Last updated on 2019-05-25

3.1.様々なプラットフォームでの開発

ホロチェーンアプリはノートパソコンとPCだけで稼働するものではありません。ホロチェーンはRustで開発されているため、Rasberry Pisやアンドロイド機でもツールが整えば稼働するようになります。

 

現在、HoloSqapeというアプリの起動・停止をクロスプラットフォーム開発ツールがC言語用のバインディングをホロチェーンと利用することによって作られています。このツールはUbuntu(及びLinux)、MacOS、Windowsを考慮して作られています。もし読者がクロスプラットフォームGUI用の言語を探しているのであれば、HoloSqapeで使用されているQtとQmlがお勧めです。

 

Holosqapeのような、ホロチェーンアプリやインスタンスを起動・停止させるツールをホロチェーンでは「コンダクター」と名付けています。

 

ホロチェーンアプリを様々なプラットフォーム(ElectronやAndroid)で稼働させる別の方法として、ホロチェーン自体をネイティブアプリに組み込む方法があります。

 

ホロチェーンをAndroid上で開発できるように現在取り組みがなされています。技術的内容が気になるのであればこちらを参照ください。

 

これで、どのプラットフォームで開発が現在可能か分かったでしょう!次は本格的にホロチェーンアプリ開発について説明していきます!

Yes No
Last updated on 2019-05-25

3.2.DNAイントロダクション:コンフィグレーション

読者は開発者として「DNA」ファイルに直接かかわることはあまりありません。しかし、ホロチェーンアプリを開発するためには、「DNA」の役目と構造を理解することは不可欠です。

ホロチェーン「DNA」はJSONフォーマットで書かれています。キー/値ペアを格納しており、下記のように入れ子のツリー構造になっています。

{
  "property_name": "property_value",
  "nest_name": {
    "nested_property_name": "nested_property_value"
  }
}

基本的にJSONは性的データやコンフィグレーションのために使われますが、ホロチェーンの場合は、「DNA」ファイルはホロチェーンによって実行されるコンパイル後のコードも格納されています。

上記で説明したようにこの「DNA」ファイルを直接開発者が編集することは必要ありません。ホロチェーンのコマンドラインツールを使用することにより開発者の生ファイルからビルドされます。

この機能を果たすpackageコマンドについて知るためにはこちらを参照してください。

コンフィグレーション

「DNA」のコンフィグレーションに関しては、アプリフォルダに格納されている実際のJSONファイルからきます。アプリフォルダには複数のJSONファイルが入れ子になって格納されています。アプリフォルダのルートにはapp.jsonというファイルが無ければなりません。

この「app.json」ファイルはアプリの様々なプロパティを定義するファイルです。このファイルの中のいくつかのプロパティは必須の者でありホロチェーンはこの必須プロパティ無しではアプリを稼働できません。その他のプロパティはアプリごとにカスタマイズできるものになっています。

app.jsonのプロパティ

app.json のファイルはデフォルトではこのようになっています。

{
  "name": "Holochain App Name",
  "description": "A Holochain app",
  "authors": [
    {
      "indentifier": "Author Name <author@name.com>",
      "public_key_source": "",
      "signature": ""
    }
  ],
  "version": "0.0.1",
  "dht": {},
  "properties": null
}
Yes No
Last updated on 2019-05-27

3.3.DNAイントロダクション:コード

ホロチェーンアプリの機能は「Zomes」というモジュールの集合体によって形成されています。

「Zomes」はzomes というフォルダ内に格納され、各「Zomes」ごとに更にサブフォルダが用意され、そのサブフォルダ内に1つ1つの「Zome」のコンフィグレーションやコードがが格納されます。

この「Zomes」は他の「Zomes」の機能にアクセスすることも可能ですが、「Zome」を作るときは独立的に1つ1つ作られます。

「DNA」がパッケージされる段階では、この「Zome」はBase64でエンコードされその「Zome」に関わるコンフィグレーションファイルと結合されます。

コンフィグレーションファイルはJSONフォーマットで保存され、「Zome」フォルダに格納されます。デフォルトではzome.jsonと名付けられていますが、好きにカスタマイズできるようになっています。

デフォルトの状態ではこの「zome」ファイルは極めてシンプルで、description(zomeが何のためのものか人間が読めるようになっている記述)のプロパティしか含んでいません。

ホロチェーンが実行できるコードはWebAssemblyだけです。しかし、読者が直接WebAssemblyで開発することはなく、WebAssemblyにコンパイルされる言語(RustやAssemblyScript)で「Zome」を設計・構築していくようになります。WebAssemblyにコンパイルされる言語は多数で今でも増え続けています。

複雑に感じるかもしれませんが安心してください。これらのプロセスを簡潔にするツールは既に存在しており、読者が馴染みのある会得しやすい言語でホロチェーンアプリは開発出来るようになっています。

上記を踏まえた上で、アプリ開発の内容をこれから説明していきます。

Yes No
Last updated on 2019-05-26

3.4.コマンドラインツールのイントロダクション

ホロチェーンアプリ開発をシンプルに、そしてスピードアップさせるためにデザインされた、コマンドラインにインストールできるツールがホロチェーンにはあります。このガイドブックを読んで読者が実際に書いてることを実践してみたいと思ったらコマンドラインツールをインストールする必要があります。

コマンドラインツールをインストールには、Windowsはこちらを、MacOS/Linuxはこちらを参照してください。

インストール手順に加えて、こちらのREADMEを読むことによってコマンドラインツールの概要が理解できます。または、このガイドブックを読み続けることで、コマンドラインツールの概要は理解できます。

Yes No
Last updated on 2019-05-26

3.5.新プロジェクトを作ろう

全セクションで説明したコマンドラインツールを使えば読者のコンピュータにホロチェーンに必要なファイルやフォルダを含んだ新しいプロジェクトフォルダを生成することが可能です。

ホロチェーンアプリのための新プロジェクトフォルダを作るときはコマンドラインツールを使って作ることが勧められています。このアプローチは、新プロジェクトを立ち上げることは無論、既に出来上がっているアプリをホロチェーンに移行したい時にも使えます。

読者のターミナルでまず、新プロジェクトを立ち上げたい場所に移ってください。これから説明するコマンドは、読者が移行したディレクトリにホロチェーンアプリのためのフォルダを新たに作成します。

まずは、アプリの名前かプロジェクトの名前を考えてください。

下記のコマンドを読者のターミナルに貼り付けて、「your_app_name」の部分を読者の好きな名前に変えてください。次に「ENTER」キーを押せばコマンドが実行されます。

hc init your_app_name

hcとは、読者がホロチェーンコマンドラインツールを使用したいとターミナルに指示しています。initは、プロジェクトをイニシャライズするという意味です。your_app_nameは、アプリとフォルダ名のための引数になります。

これで、あなたの指定したディレクトリにホロチェーンアプリ構築用の必要最低限のファイルおよびフォルダが用意されたことになります。

次のセクションでは、「DNA」のソースフォルダの中身を1つ1つ説明していきます。

Yes No
Last updated on 2019-05-27

3.6.プロジェクトソースフォルダ

ホロチェーンのソースフォルダは下記のようになっています。「…」はフォルダを意味しています。

  • test
  • zomes
  • .gitignore
  • .hcignore
  • app.json

testはテストコードを書くためのスターターコードが入っています。

zomesはサブフォルダを格納しており、各フォルダは1つの「Zome」として機能します。「Zome」はDNAソースコードのサブモジュールのようなものです。

.gitignoreはGITバージョンコントロールを使用する際に無視するファイルを指定しています。

.hcignorehc コマンドラインツールのパッケージングコマンドで使用されます。

app.jsonはDNAの上位レベルのコンフィグレーションになります。

Yes No
Last updated on 2019-05-27

3.7.アプリのコンフィグレーション

「DNAイントロダクション:コンフィグレーション」でも説明したように、ホロチェーンアプリのソースフォルダにはapp.jsonというファイルが必ずあります。このファイルは大まかに2つの役目を果たしています。

    1. アプリを実行するとき、、ホロチェーンの動作(特にDHT(分散型ハッシュテーブル)やP2Pゴシップ機能)は、app.jsonのコンフィグレーションによって変わっていきます。
    2. app.jsonで読者が開発したアプリについて、ユーザーや他の開発者に情報(アプリ名や著者など)を提供することが出来ます。
プロパティ 内容
name アプリの名前
description アプリの説明
authors 開発者の連絡先や名前などの情報。複数人記述できるように配列になっている
authors.identifier 問い合わせ先の名前やメールアドレスを含む文字列
authors.public_key_source 公開ホストされている秘密鍵・公開鍵ペアの公開鍵暗号を参照できる
authors.signature アプリ開発者はここに、独自の秘密鍵で署名された文字列をここに含むことが出来る。アプリの信頼性を保つため
version アプリのバージョン。分散型アプリではバージョン管理が中央集権型アプリより一段と重要になってくるため、このプロパティは特に用心して使用してください。
dht DHTに関してホロチェーンが実装するコンフィグレーションオプションのプレースホルダー。DHTの動作をカスタマイズするためのもの
properties Propertiesでは、追加でアプリ固有のコンフィグ値を設定できる。アプリ開発者が好きに設定できるようになっており、設定された場合はZome APIのproperty関数で呼び出すことが可能になっている。

必要最低限設定するべきプロパティは以下の通りです。

  1. name
  2. description
  3. authors
  4. version

app.jsonを書き換える場合は、好みのエディタ(JSONフォーマットを認識できるものが最適)でapp.json を開き 、値を変えて保存すれば変更完了です。

Yes No
Last updated on 2019-05-27

3.8.Rustで作ろう

当初からホロチェーンアプリは多数の言語で開発されていくことを目指しています。初期のホロチェーンのプロトタイプではZomeはJavascript(ES5)かLisp(Zygomys)で開発されるようになっていました。新バージョンのホロチェーンのリボゾーム(Ribosome)では、JSとLispではなく、WebAssemblyがinterpret(解釈)されるようになっています。

これから、WebAssemblyについて大まかな説明をしていきますが、ホロチェーンアプリが開発できるWebAssemblyへのコンパイルが可能な最初の言語、Rustについてまず触れていきます。Rustのためにホロチェーンチームは最初のHDK(ホロチェーン開発キット)を開発しており、WebAssemblyへのコンパイルもこのHDKを使用して行います。

しばらくの間は、ホロチェーンアプリを開発する場合はRustでの開発が必須になりますが、「いつまでもそうなのか」というとそうではありません。特にAssemblyscriptというTypescriptベースの言語でのホロチェーンアプリの開発が次に可能になると言われています。もし読者が興味を持っているのであれば、好みの言語のためのHDKをどのように開発するかをこちらでも詳しく説明しています。

ウィキペディアから:「Rust言語は速度、並行性、安全性を言語仕様として保証するC言語、C++に代わるシステムプログラミング(英語版)に適したプログラミング言語」

Rustは強く片付けされた言語であり、P2Pアプリなどをセキュアに開発することに向いています。また、RustからWebAssemblyへコンパイルすることはとても簡単です。

読者がRustで開発したこと経験がなくとも安心してください。多くのホロチェーンアプリがオープンソースで書かれており、このガイドブックやRustのガイドブックなど、学ぶ方法は豊富です。

Rustを習得するためのチュートリアルなどは多数存在しますが、やはりオフィシャルのドキュメンテーション非公式翻訳版)をお勧めします。

これからのセクションでは、読者は「Rustで作る」というセクションを何回か目にすることになります。Zomeの開発は言語ごとに異なってくるため、まず最初に共通概要を説明した上でRustでどのように実装するのか説明していく形を取っています。

Yes No
Last updated on 2019-05-27

3.9.AssemblyScriptで作ろう

「Rustで作ろう」で説明したように、AssemblyScriptとは、Typescriptをベースにした言語であり、WebAssemblyにコンパイルされるように設計された言語です。ホロチェーンチームはAssemblyScriptの発展を著しく望んでおり、ホロチェーンアプリ開発のために必要な機能を備え、AssemblyScript用のHDKが開発できる状態になることを期待しています。AssemblyScript用のHDKの開発は2018の中旬から始まっていますが、現在壁にぶつかっており中々開発が進んでいません。

これに関しての、情報は随時弊社サイトでも更新していきますが、ホロチェーンの公式ニュースかhdk-assemblyscriptのレポジトリでも知らせていくでしょう。

Yes No
Last updated on 2019-05-27

3.10.WebAssemblyへのイントロダクション

現在翻訳中!

Yes No
Last updated on 2019-05-17

3.11.プロトタイプバージョンからRustへ更新

現在翻訳中!

Yes No
Last updated on 2019-05-17

3.12.ホロチェーンアプリ一覧

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.ホロチェーンアプリを作ろう!:Zomeコード

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.1.Zomeの追加

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.2.HDKのイントロダクション

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.3.Zome定義イントロダクション

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.4.アプリエントリータイプ定義

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.5.ジェネシス

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.6.Zome関数

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.7.ケーパビリティ(Capability)

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.8.データの読み書き(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.9.エントリーバリデーション(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.10.リンク(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.11.ノード対ノードのメッセージング(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.12.外部のZomeの呼び出し(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.13.暗号関数(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.14.バンドリング(Bundling)(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.15.シグナル発行(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.16.API DNA変数

現在翻訳中!

Yes No
Last updated on 2019-05-17

4.17.API関数一覧

現在翻訳中!

Yes No
Last updated on 2019-05-17

5.ホロチェーンアプリを作ろう!:パッケージング

現在翻訳中!

Yes No
Last updated on 2019-05-17

5.1..hcbuildファイル

現在翻訳中!

Yes No
Last updated on 2019-05-17

5.2..hcignoreファイル

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.ホロチェーンアプリを作ろう!:テスト

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.1.テスト実行

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.2.Holochain-nodejsのイントロダクション

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.3.コンフィグレーション

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.3.1.別方法でのコンフィグレーション

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.4.シナリオテスト

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.4.1.設定

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.4.2.Tapeでテスト

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.4.3.他のテストハーネス

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.5.DNAインスタンス

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.5.1.Zome関数の呼び出し

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.5.2.非同期ネットワークの扱い方

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.6.結果チェック(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.7.Conductor の手動設定

現在翻訳中!

Yes No
Last updated on 2019-05-17

6.8.インスタンス情報のアクセス

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.ホロチェーンアプリを稼働しよう!:コンダクター

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.1.開発コンダクター

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.1.1.ネットワークのコンフィグ

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.2.プロダクションコンダクター

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.2.1.TOML Config Filesへのイントロダクション

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.2.2.エージェント

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.2.3.DNA

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.2.4.インスタンス

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.2.5.インターフェース

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.2.6.ブリッジ

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.2.7.UIバンドル

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.2.8.UIインターフェース

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.2.9.ログ

現在翻訳中1

Yes No
Last updated on 2019-05-17

7.2.10.ネットワーキング

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.2.11.パーシステントディレクトリ

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.3.JSON-RPCインターフェースへのイントロダクション

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.4.Conductor JSON-RPC API

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.4.1.HTTP

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.4.2.WebSockets

現在翻訳中!

Yes No
Last updated on 2019-05-17

7.5.アドミンコンダクター

現在翻訳中!

Yes No
Last updated on 2019-05-17

8.ホロチェーンアプリを作ろう!:UI

現在翻訳中!

Yes No
Last updated on 2019-05-17

9.ホロチェーンアプリを作ろう!:ブリッジング(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

10.ホロチェーンアプリの稼働開始!(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

10.1.バージョンリリースの作成(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

11.ホロチェーンアプリを作ろう!:応用編(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

11.1.JsonStringを理解しよう!

現在翻訳中!

Yes No
Last updated on 2019-05-17

11.2.アンドロイド開発!

現在翻訳中!

Yes No
Last updated on 2019-05-17

12.ホロチェーン拡張編(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

12.1.ホロチェーンのEmbedding(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

12.1.1.コアAPI(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

12.2.キー管理(DPKI)

現在翻訳中!

Yes No
Last updated on 2019-05-17

12.3.命名規則

現在翻訳中!

Yes No
Last updated on 2019-05-17

12.4.HDKを作る

現在翻訳中!

Yes No
Last updated on 2019-05-17

12.5.ZomeAPI関数の実装

現在翻訳中!

Yes No
Last updated on 2019-05-17

12.6.Reduxアーキテクチャ

現在翻訳中!

Yes No
Last updated on 2019-05-17

12.6.1.ステートアクション(State Action)

現在翻訳中!

Yes No
Last updated on 2019-05-17

12.7.ステートアクター(State Actors)

現在翻訳中!

Yes No
Last updated on 2019-05-17

13.FAQ

HolochainのFAQはこちら!

Yes No
Last updated on 2019-05-17

14.用語集(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

14.1.エージェント(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

14.2.キー(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

14.3.DNA(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

14.4.Zome(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

14.5.ソースチェーン(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17

14.6.分散型ハッシュテーブル(DHT)(E)

現在翻訳中!

Yes No
Last updated on 2019-05-17