メインコンテンツへスキップ

30日間で21バージョン、OCAP Playgroundはどう変わったのか?

ArcBlock
ArcBlockOCAPPlayground

先月の7月は、私が北京で過ごしたこの10年間で最も暑い月でした。私が担当するOCAP Playgroundは終始急ピッチで開発が進められ、7月だけで21の内部バージョンをリリースし、バージョン番号は 0.7.3 から 0.11.2 まで進みました。この記事をお読みになる頃には、オンライン版のバージョン番号はすでに 0.11.2 を超えている可能性が高いでしょう。

なぜこれほど多くの内部バージョンがあるのでしょうか?バージョンのリリースには時間がかからないのでしょうか?これほど多くの新バージョンを苦もなくリリースできるのは、私たちが非常に速いペースでデリバリーできるからだと胸を張って言えます。Playgroundの各新バージョンは、ビルドから公開まで10分以内で、しかもすべて自動化されています。ArcBlock技術チームがどのようにしてこのデリバリー速度を身につけたのか気になる方は、ArcBlockの技術VPによる記事「数十のRepoを自在に扱うには?」を読んでみてはいかがでしょうか。

前置きはこのくらいにして、以下はGitHubから取得したPlaygroundの直近30日間のコードマージ履歴です(実際にはこのページに収まりきっていません)。

PR一覧

インターネット製品に携わったことのある方は、こう思うかもしれません。1か月にこれほど多くのイテレーションを行うにあたり、いったいいくつの目標を設定したのか、と。OCAPサービス上に構築された最初のアプリケーションであるPlaygroundは、開発者がOCAPサービスに触れる窓口です。すべてのイテレーションは一貫して、開発者がいかに快適に使えるようにするかを軸に進められました。具体的には、次の重要な目標が含まれます。

  • 開発者がクエリを素早く入力し、実行できるようにする
  • 開発者がクエリ結果を直感的に閲覧し、そこから発見や着想を得られるようにする
  • OCAPサービスのより多くの機能を公開する
  • 今後のイテレーションや拡張を容易にし、高いコード品質を確保する

ArcBlockプロジェクトの進捗を追っている方は、こう尋ねるかもしれません。私も時々Playgroundを開いているけれど、画面にそれほど大きな変化は見当たらない、と。ここからは、これらのイテレーションが実際にどこに反映されているのかを詳しく見ていきます。

改善されたテーブルビュー:Table View

人間が読みやすいデータ表示

改善後のテーブルビューでは、OCAPサービスから返されるデータを可能な限り人間が読みやすい形式に整形します。たとえば、Bitcoinネットワーク上の送金額やアカウント残高はBTC単位で桁区切り付きの数値に、ブロックサイズはKB、MB形式の数値に整形されます。以下の図をご覧ください。

インタラクティブなデータ表示

改善後のテーブルビューでは、アカウントアドレス、トランザクションアドレス、ブロックアドレスを、対応するブロックエクスプローラー(たとえば blockchain.cometherscan.io)へ移動できるリンクとして整形し、開発者が自分でコピー、貼り付け、検索する手間を省きます。以下の図をご覧ください。

ネストされたデータへの対応

テーブルビューは、単純な行列形式の結果表示だけでなく、多階層にネストされたデータにも対応し、内側のデータをポップアップレイヤーで表示できます。以下の図をご覧ください。

特に大きなテーブル

クエリで返されるデータが多い場合、そのすべてをテーブルビューに収めると非常に窮屈で読みにくくなります。そのような場合は、縮小表示したテーブルで重要なフィールドを優先して表示し、ユーザーがテーブルを展開した後ですべての行と列を表示します。以下の図をご覧ください。

改善されたチャートビュー:Chart View

「文章より表、表より図」という言葉があります。適切なデータ可視化は、データに含まれるパターン、特徴、さらには問題まで一目で捉えられるようにします。そのため私たちも、ブロックチェーンデータをどのように可視化するかの研究に多くの時間を費やしました。以下は、その具体的な進展のうち2つです。

ブロックチェーンの資金フロー可視化:Sankey Diagram

ブロックチェーンネットワークは巨大な価値流通ネットワークであり、価値を運ぶ媒体がトランザクションです。Sankey Diagramはネットワークフローを非常に直感的に可視化できるため、次のような可視化対応を追加しました。

クエリ結果にトランザクションデータが含まれ、そのトランザクションに送信者と受信者が含まれている場合、Playgroundが自動的に検出し、チャートの種類にSankeyのサポートを追加します。たとえば次のクエリです。

{
  transactionsByAddress(sender: "1NSc6zAdG2NGbjPLQwAjAuqjHSoq5KECT7") {
    data {
      blockHash
      blockHeight
      fees
      feesOverWeight
      hash
      index
      total
      lockTime
      numberInputs
      numberOutputs
      size
      strippedSize
      version
      virtualSize
      weight
      witnessHash
      inputs {
        data {
          account
          blockHash
          blockHeight
          index
          txHash
          preOutput
          preTx
          value
          script
          sequence
          scriptType
          txHash
          txIndex
        }
      }
      outputs {
        data {
          account
          blockHash
          blockHeight
          index
          script
          scriptType
          txHash
          txIndex
          value
        }
      }
    }
  }
}

ここだけの話ですが、Sankey Diagramを使っている最中に、可視化を通じてデータのバグを発見し、担当の同僚にフィードバックしました。

ブロック一覧データの可視化:BlockList

実物になぞらえた視覚的な表現も、データをより生き生きとさせ、その特徴を鮮明に浮かび上がらせます。ブロックに詰め込まれているのはトランザクションで、箱のようなものです。それなら、なぜ箱の形でブロックデータを表現しないのでしょうか?

クエリ結果にブロック一覧が含まれている場合、PlaygroundはBlockListチャートへの対応を自動的に追加します。たとえば次のクエリです。

{
  blocksByHeight(fromHeight: 500000) {
    data {
      height
      hash
      total
      size
      transactions {
        data {
          blockHash
          blockHeight
          fees
          feesOverWeight
          hash
          index
          total
          lockTime
          numberInputs
          numberOutputs
          size
          strippedSize
          version
          virtualSize
          weight
          witnessHash
          inputs {
            data {
              account
              blockHash
              blockHeight
              index
              txHash
              preOutput
              preTx
              value
              script
              sequence
              scriptType
              txHash
              txIndex
            }
          }
          outputs {
            data {
              account
              blockHash
              blockHeight
              index
              script
              scriptType
              txHash
              txIndex
              value
            }
          }
        }
      }
    }
  }
}

より高いエンジニアリング品質

製品の使いやすさだけでなく、コード品質や拡張性なども重視しています。これらへの投資には大きな複利効果があるからです。具体的には、次の取り組みを行いました。

主要モジュールへの自動テストの追加

バグ発生率を下げ、イテレーション速度を維持するため、Playgroundの主要コードの大部分にユニットテストを追加しました。コードをマージする際には、すべてのテストに合格することが前提条件となります。現在、リポジトリ全体のブランチカバレッジは 33% に達しています。以下の図をご覧ください。

コードカバレッジレポート

styled-componentsによるコンポーネントスタイルの管理

フロントエンドプロジェクトが大きくなると、スタイルをどのように管理するかも重要な課題になります。私たちは styled-components を使ってコンポーネントのスタイルを管理し、各フロントエンドコンポーネントの凝集度を高め、アプリケーションの異なる部分のスタイル間における結合度を下げています。現在、コードリポジトリにはグローバルスタイルを除いて独立したスタイルファイルはありません。

sentryによる本番環境のエラー収集

バグのないソフトウェアを書ける人はいません。私たちも例外ではありません。しかし、バグが発生したときにすぐ把握し、最速で修正することは、誰にでもできるわけではありません。私たちは本番環境に sentry を統合してJSエラーを収集しています。ユーザーの利用中に発生したあらゆるエラーが捕捉され、slackを通じて各プロジェクトの担当者に送信され、可能な限り速やかに修正されます。

その他の改善

コードスタイルを維持するため、travis-ciではwarningレベルのスタイル警告も強制的にエラーとし、開発者に修正を求めています。ソフトウェア開発の世界でも割れ窓理論が作用することを、私たちはよく理解しているからです。今日それを無視すれば、いつか手痛いしっぺ返しを受けます。また、チームメンバー間でのコード再利用を促進し、車輪の再発明を減らすため、storybook も統合してリポジトリ内のフロントエンドコンポーネントを管理しています。これにより、新しいメンバーもすぐに使えるコンポーネントを素早く把握できます。

新たな製品の方向性:Playbook

社内での議論の中から、新しい製品形態であるPlaybookが生まれました。これは、ブロックチェーン開発者がOCAPサービス上で行った研究や発見を調査、記録、共有しやすくするものです。現在、Playbookはすでに初期形態ができあがっており、もう少し磨き上げれば近いうちに公開できるでしょう。興味のある方は、私が執筆した「Introduction to OCAP Playbook」をぜひお読みください。読むのが面倒な方は、スクリーンショットだけでもご覧ください。

おわりに

私が「OCAP Playground入門ガイド」で述べたように、現代のシステムの多くはバックエンドが大きく、フロントエンドが小さい構成です。7月全体のOCAPサービスのフロントエンドにおける進展は以上のとおりですが、バックエンドではさらに多くのことを行いました。今後の記事で皆さんにご紹介します。

気がつけば、もう8月です。私たちはこれまでどおり、定めたロードマップに沿って前進し続け、ArcBlockのエコシステム構築に力を尽くします。最近はフロントエンド、バックエンドのエンジニアも多数募集しており、勤務地は北京とシアトルです。ブロックチェーン業界に興味があり、私たちの仕事の進め方に共感してくださる方は、ぜひご連絡ください。求人情報はこちらです。もちろん、私に直接履歴書を送っていただいても構いません(WeChat:feweekly)。

このページに関わるもの

製品

  • OCAP active

    チェーンごとにクライアントを用意するのではなく、一つのインターフェースでチェーン上のデータを問い合わせるためのプロトコル。ArcBlock が関連特許を保有しています。