SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Remixを通じてWebを学ぶ

Remixで古き良き通信体験を取り戻そう──データ取得とデータ更新について解説

Remixを通じてWebを学ぶ 第4回

  • X ポスト
  • このエントリーをはてなブックマークに追加

Remixが再定義するWeb

 第1回でも触れましたが、Remixはフレームワークを構築するにあたっての哲学を公開しています。

 その中には、ネットワーク経由でサーバーがユーザーへ送信するデータの量を減らすこと、Web標準に則ってAPIを整備すること、その一環としてブラウザからのデータ送信にはHTMLフォームを活用することなどが書かれています。

 では、Remixの哲学の下で、ブラウザとサーバーの関係はどのようになったのか見てみましょう。

Remixの初期表示時のデータ取得

 まず、初期表示の際には、サーバー側でページの表示に必要なデータを取得し、データを埋め込んだHTMLをブラウザへと送信します(図4)。

図4:Remixの初期表示の通信イメージ
図4:Remixの初期表示の通信イメージ

 なんだか見覚えがありますね。そう、図1とほとんど同じことをやっているのです。ブラウザから見ると「サーバーにページを要求したら、しっかりとデータの入っているHTMLが返ってきたので、そのまま表示しますね」といった挙動になります。1998年のWebとほとんど同じことをやっていますね。

 1998年との差分は大きく分けて2点あります。ひとつは、③のHTMLがReactコンポーネントを使って構築されていることです。Reactのレンダリングを事前にサーバーで行うことで、サーバーサイドレンダリングと呼ばれている技術です。もうひとつは、HTMLの内容をブラウザに表示した後、JavaScriptが動き出し、HTMLから構築したDOMツリーを後追いでReactの管理下に置き、それ以降はシングルページアプリケーションとして動作するという点です。この挙動をReact用語でhydrate(ハイドレート)といいます。

Remixのシングルページアプリケーションとしてのデータ取得

 さて、初期表示の後にシングルページアプリケーションとして動作することは、同じRemix管理下の別のページに遷移したときのデータ取得や、データ送信後にページ内の表示を最新のものに改める際のデータ取得は、ブラウザ側のJavaScriptが主導して行うことになります。

 従来のシングルページアプリケーションであれば、ここでAPIサーバーへの非同期通信が大量に発生してしまいます。しかし、Remixはそうではありません。シングルページアプリケーションとしてのRemixは、初期表示の際に利用したものと同じ経路を使って、加工済みの最小限のJSONデータのみを取得するのです(図5)。

図5:Remixの非同期なデータ取得のイメージ
図5:Remixの非同期なデータ取得のイメージ

 従来であれば、②の部分はブラウザが担っていたのですが、Remixではサーバーが代わりに通信する形になっています。これによって、APIサーバーやデータベースサーバーに複数回のアクセスが必要なケースでも、ブラウザからは①と④の1往復分の通信を行うだけで、画面の表示に必要なデータを得ることができるのです。

Remixのデータ送信

 さて、最後にデータを更新するパターンです。<form> 要素を少しだけラップした <Form> コンポーネントを使用しますが、ほぼHTMLフォームの挙動そのままにsubmitの処理を行います(図6)。

図6:Remixのデータ送信のイメージ
図6:Remixのデータ送信のイメージ

 一見すると、図2の素朴なHTMLフォームの挙動と似ているように見えます。実際に、①と②の処理については、かなり近いことをしています。強いて言えば、データ取得のときと同様に、ブラウザからAPIサーバーに直接submitするのではなく、Remixのサーバーにsubmitしていますね。

 大きく違うのは、送信処理の完了後の挙動です。<form> によるHTMLフォームでは、送信後にページをリロードする挙動が発生しますが、Remixが拡張した <Form> コンポーネント(注:大文字はじまり)の通常の動作では、シングルページアプリケーションを保つために、リロードは発生しません。

 では、送信完了後の画面の再描画はどのように行うのかと言うと、③と④で示した通り、非同期なデータ取得を開始します。前項「Remixのシングルページアプリケーションとしてのデータ取得」で解説したのと同じ処理が、フォームの送信後にも発生するのです。画面遷移時の画面の初期化に利用するのと同じデータを再取得するのですから、画面に最新のデータが表示されることに疑いはありません。

 なお、④で新しいデータをUIに適用する際には、Reactの状態更新として流し込まれるので、実際に画面の中で再描画されるのは、フォームの送信前と変化があった項目のみとなります。

 素朴なHTMLフォームの挙動に、シングルページアプリケーションの良さを最低限だけ組み合わせた、Web標準とReactの両方へのリスペクトを感じるワークフローに仕上がっています。

次のページ
loaderによるデータ取得

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Remixを通じてWebを学ぶ連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 中川幸哉(ナカガワユキヤ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/18232 2023/09/06 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング