アプリ開発者のためのsim1hの紹介
概要
GitHubリポジトリを随時確認している方は、ここ数週間で新たに追加されたネットワークシミュレーターsim1hに気付いたかもしれません。sim1hが何であり、自分にどのような影響があるのか疑問に思っている方は、このDev Pulseを読めば、sim1hの使用方法と重要性が理解できるでしょう。sim1hはhAppsをテストするための重要なツールであり、より有用なテストとテスト時間の短縮を可能にしています。
sim1hと呼ばれるネットワークシミュレーションツールを開発しているという、うわさが広まっていたことは我々も気が付いていました。(Leadership&Org Update 14を参照)。このため、我々はこの新しいツールの概要を開発者コミュニティに提供したいと考えました。テスト中に貴重な情報を迅速に収集するという点で様々なことができるため、私たちはこのツールにワクワクしています。そして、hApp開発者がこのツールを直ぐに使用できるようにしたいと思っています。それを念頭に置いて、sim1hが何なのか、なぜこれが重要なアップデートであるのか、およびsim1hを既存のテストフレームワークに統合する方法について説明しましょう。
トピック
- sim1hとその重要性
- sim1hを使ってみよう
- 次のステップ
詳細
sim1hとその重要性
sim1hは単一の中央集権型デバイスでP2Pネットワーク全体をシミュレートするためのツールです。開発者は、ネットワークを介して送信されるすべてのデータを把握できます。コンダクターコンフィグレーションでsim1hを選択すると、すぐに多くのネットワークノードのエンドツーエンドなユーザーエクスペリエンスを考慮したhApp(holochainアプリ)の実行とテストが開始できます。私たち自身のhAppのためにもこのツールを現在使っています。
Sim1hは、リアルなテストネットワークを1台のマシンから展開し、複数のノードがやり取りをするネットワークアクティビティを確認できるため、sim1hは現テストツールに対して重要な追加機能になります。もちろん、sim1hを使用してテストおよびデバッグしたコンポーネントをHolochain本体に結合することも実現しながら、同時に我々の到達目標である分散型ネットワークのライブラリであるlib3hの開発も続行します。
デバッグ
Holochainの分散的性質により、ネットワークのステージング、デバッグ、およびネットワークアクティビティの分析は、今までにない問題に直面しました。この中でも最大の課題は、ネットワーク全体に関する情報を単一のデバイスから閲覧する方法がないため、開発者が何がうまく機能していて何が問題なのかを判断することが困難でした。仮に、Holochainスタック全体をバグなしで、Open Alpha Testnetに突入した場合でも(もちろんアルファ版なのでバグがあることは予想しています)、デバッグを必要とする内部および外部のhAppが他にまだ多数あることも課題でした。
最初は、HolochainノードとHoloPortがデバッグのために単一の中央ノードにログやその他の診断情報を送信するようにしようとしていました。幸いなことに、sim1hは負荷を削減しながらこの目標を達成することに成功しています。これは、特別なデバッグおよび分析コード無しに、ノード同士が通信しているすべての情報が、閲覧可能なシミュレートされたネットワークであるからです。分散型アプリケーションは、通常、ネットワーク上で通信されるすべての情報を誰かに見せることは普通行わいことですが、短期的なデバッグのニーズを満たすsim1hはとても重要なツールとなっています。
並行開発
Sim1hは、ネットワークコンポーネントの並行ステージングを可能にし、これまで使用してきたタンデムステージングフレームワークから並行ステージングへの移行を可能にしています。sim1hでテストとデバッグを行うことにより、全体のスタックの個々のコンポーネントが予想どおりに機能しているという自信を得ることができます。Holochainフレームワーク自体は、テスト段階でのlib3hと同様に、テスト段階とメモリのみ使用のネットワークではうまく機能します。ただし、この2つ(holochain+lib3h)を組み合わせると、分析とテストに時間がかかってしまう複雑な動作が多数発生します。
Sim1hはHolochainフレームワークとネットワーキングを完全に機能するHolochainスタックに統合し、hApp開発者が現実を模擬した環境でhAppのテストと使用を可能にしています。これにより、多くの問題が一度に解決されます。後は、反復作業でシステム全体の一部を少しずつより良いものに置き換えることができます。これにより、納品時間の短縮とテスト機能の面で大幅な改善がもたらされます。
sim1hを使ってみよう
開発環境でGitHubを使用する方法の詳細については、sim1hのGitHubページを確認することをお勧めします。前述でも説明したように、我々のhAppでテストするために既にsim1hを使用しています。
Holochainリリースv0.0.31-alpha1では、sim1hが組み込まれています。実装するには、コンダクターコンフィグレーションでネットワークタイプとして選択するだけです。
[network]
type = "sim1h"
dynamo_url = "http://localhost:8000"
URLがDynamoDBインスタンスを指す場合、AWSが管理する中央のDynamoDB(まだ完全サポートはされていません)、ローカルマシン上の独自のインスタンス、またはテストサーバー(LANまたはVPNからアクセス)に指定ことができます。Nix shellで、dynamodbおよびdynamodb-memoryコマンドを使用して、ローカルインスタンスを起動してください。
さらに、Holochainコンダクターを起動するときに、AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYの 2つの環境変数を設定する必要があります。これらは、DynamoDBに接続するためにsim1hで使用しているAWSクライアントライブラリであるRusotoによってアクセスされます。これらが設定されていない場合、Rusotoは接続を行う前に停止してしまい、コンダクターのログに停止情報が表示されます。
注: AWSの外部でローカルのDynamoDBインスタンスを実行する場合は、LANまたはVPN上に設定してセットアップする必要があります。AWSの認証情報に接続されていないので、アクセスキーでのデータベースへのアクセスを拒否します。ただし、Rusotoがアクセスキーを必要とするため、上記2つの変数は設定する必要があります。AWS_SECRET_ACCESS_KEYは任意でよろしいですが、異なる鍵によって異なるスペースが作成されるため、AWS_ACCESS_KEY_IDは慎重に選択する必要があります。これは、例えば、複数のチームが同じアプリを別々にテストしたい場合に別々のAWS_ACCESS_KEY_IDで隔離されたテスト環境を構築する場合に役立ちます。
次のステップ
Sim1hにより、Holochainスタックとそれに接続されたhAppの両方のネットワークテストの面は大きな進歩を遂げています。過去数週間でこの進歩を目の当たりにした我々は、次のステップであるib3hの完全なP2Pソリューションに更に近づくものの開発作業をすぐに開始しました。現在選択している短期的なソリューション(AWSとDynamoDB)には、Holochainコンポーネントとのやり取りに関して独自の問題があります。たとえば、各DNAは、AWSにテーブル名にDNAハッシュを使用したDBテーブルがあります。AWSではテーブルを手動で作成し、テーブルごとにアクセス許可を設定する必要があるため、アクセス許可の管理には時間がかかっているなどの問題があります。
さらに、テスト環境であっても、AWSでホストされているデータベースに依存しないように我々は努めています。私たちの目標は、主に既存のHolochainとlib3hコードに基づいた、テスト用の集中ノードを用意することです。それまでの間は、sim1hを使用すれば、テスト中に開発者が抱えていた多くの問題が解消されると考えています。皆さんのフィードバックをお待ちしています。
Holochainフォーラム
Holochain Forumの「Conversations That Matter」に参加して、sim1hについて議論し、あなたのプロジェクト進捗状況をみんなに共有してください!
開発ステータス
Holochain Coreリリース: 0.0.32-alpha2| 変更ログ 次リリース:0.0.33-alpha1
Holonixリリース:v0.0.37
Try-o-rama(エンドツーエンドテストツール)リリース:v0.1.1