Hello Gui
最初のGUIチュートリアルへようこそ!
これまで、curl
またはhc test
を使用してZomeとやり取りをしていましたが、GUIを使用すればもっと簡単になります。今回は、非常にシンプルなWebページを使用してHolochainアプリを操作する方法を学びましょう。
HTMLページを生成しましょう
まずは、すべてのGUIコードを格納する場所が必要です。これは、Holochainのzomeコードとは異なるソフトウェアになります。したがって、格納にはHolochainアプリケーション外の場所を選択しましょう。
まずはGUIが存在するフォルダを作成しましょう。
mkdir gui
cd gui
さあ、お気に入りのエディターでindex.html
という名前の新しいファイルを上記の場所で作成しましょう。 gui / index.html
となるはずです。次にindex.html
に単純なHTMLテンプレートを追加しましょう。
このモダンなテンプレートを追加しましょう。インデントがついていないので気を付けてください。
<!DOCTYPE html>
<html lang=“en”>
<head>
<meta charset=“utf-8” />
<title>Hello GUI</title>
<meta name=“description” content=“GUI for a Holochain app” />
</head>
<body>
</body>
</html>
<body>
タグの中にボタンを付け足しましょう。
<button type=“button”>Say Hello</button>
ちょっと見た目を優しいものにするために、water.css
スタイルシートを追加しましょう。
次のwater.cssリンクを<head>
タグ内に追加してください。
<link
rel=“stylesheet”
href=“https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css”
/>
これで、index.html
がこのようになるはずです。
シンプルなサーバを実行しよう
nix-shell
に入って、使用可能なすべての依存関係があることをまず確認してください。
すべて稼働したら、簡単なサーバを起動しましょう。
nix-shell
で実行python -m SimpleHTTPServer
そして、ブラウザのhttp://0.0.0.0:8000/
をご覧ください。次のようなものが表示されるはずです。
hc-web-client
前回のチュートリアルで作成したアプリと通信するときが来ました!この通信を簡単にするために、hc-web-clientが用意されています。これは HolochainのJavaScriptライブラリであり、アプリへのWebSocket接続を簡単にセットアップするために作られました。
WebSocket接続を開いておくと、HolochainアプリからGUIにメッセージを送信できるようになります。今回のチュートリアルではまだ実装していませんが、このプロセスに慣れておくのは将来的に良いことです。
Hc-web-clientの使用を簡単にするために、hc-web-clientのあるバージョンをコンパイルしたものを用意しています。
ここからダウンロードしてから、解凍してGUIディレクトリのルートに貼り付けましょう。
unzip hc-web-client.zip
ファイルは次の場所に格納してください。
gui/hc-web-client/hc-web-client-0.5.1.browser.min.js
gui/hc-web-client/hc-web-client-0.5.1.browser.min.js.map
終わりましたら、次のscript
タグをbody
タグ内に追加することで、コンパイル済みのjsファイルに簡単にリンクできます。
<script
type=“text/javascript”
src=“hc-web-client/hc-web-client-0.5.1.browser.min.js”
></script>
Zome関数を呼び出そう!
hc-web-client.jsライブラリをリンクしたので、バニラJavaScriptを使用して簡単なZome関数の呼び出しを行うことができます。 <body>
タグ内にこの関数を追加してください。
<script type=“text/javascript”>
ポート3401でHolochainへのWebSocket接続を次のように作成してください。
var holochain_connection = holochainclient.connect({
url: ‘ws://localhost:3401’,
});
次に、hello()
JavaScript関数を追加して、HTMLから呼び出すことができるようにします。
function hello() {
.thenを使ってHolochainが接続するのを待ってから、Zome関数の呼び出しを行います。
holochain_connection.then(({callZome, close}) => {
次の行でtest-instance
で稼働しているhello
という名前のzome内のhello_holo
zome関数を呼び出します。
callZome(‘test-instance’, ‘hello’, ‘hello_holo’)({args: {}})
そして、次の行で関数の結果をブラウザのコンソールに出力してください。
.then((result) => console.log(result))
})
}
最後に<script>
タグを閉じましょう。
</script>
このhello関数は、ポート3401
でWebSocketを介してアプリに接続し、hello_holo zome関数を呼び出し、結果をブラウザのコンソールに出力します。 さて、次にonclick
イベントハンドラーを追加して、ボタンでこの関数を呼び出すようにしましょう。 このボタンを<body>
タグ内に追加してください。
– <button type=”button”>Say Hello</button>
+ <button onclick=”hello()” type=”button”>Say Hello</button>
今のところこのようなコードになっているはずです。
アプリを起動しよう
GUIから関数を呼び出すには、Holochainアプリが稼働している必要があります。そして新しいターミナルウィンドウを開き、前回のチュートリアルで作成したアプリのディレクトリに移動して、nix-shellに入ってください。
cd holochain/core_concepts/cc_tuts
nix-shell https://github.com/holochain/holonix/archive/v0.0.31.tar.gz
その後、アプリを実行してください。
nix-shell
で実行アプリをコンパイル
hc package
サーバをポート3401で実行
hc run -p 3401
Zomeを呼び出そう
もう一方のターミナルウィンドウ(GUIコードがあるウィンドウ)で、まだSimpleHTTPServer
が実行されていない場合はSimpleHTTPServerを起動します。
nix-shell
で実行python -m SimpleHTTPServer
ブラウザを開き、0.0.0.0:8000
を開いてください。(既に開いている場合はページを更新してください)。ページは同じように見えているはずです。 次に、ブラウザの開発者コンソールを開き、ページのボタンをクリックしてみましょう。次のようなものが表示されるはずです。
やりました! GUIを使用してHolochainアプリを呼び出すことに成功しました!
出力値をレンダリングしよう!
htmlページでhello_holo
を呼び出した時の結果を見えるようにしましょう。
まずは、ボタンの下に次のHTMLを追加しましょう。
<div>Response: <span id=“output”></span></div>
id="output"
は、このelementをJavaScript関数から更新するために使用するものです。
hello
関数の下に次の行を今度は追加します。
結果値を取得するshow_output
関数の追加です。
function show_output(result) {
次の行で出力を挿入するelementを取得します。
var span = document.getElementById(‘output’);
次の行でzome関数の結果をJSONとしてパースします。
var output = JSON.parse(result);
elementの内容をZome関数の結果に設定します。
span.textContent = ‘ ‘ + output.Ok;
}
最後に、hello
関数を更新して、console.log()
の代わりに新しいshow_output
関数を呼び出しましょう。
– result => console.log(result),
+ result => show_output(result),
これでコードはこのようになっているはずです。
出力が上手く動いていることを確認しよう
Webブラウザで0.0.0.0:8000
に移動(既に開いている場合は更新してください)すると、次のように表示されるはずです。
次に、Say Helloボタンを押すと、responseが次のように得られます。
おめでとうございます! Holochainアプリと通信できる機能的なGUIが完成しました!