algolia+netlify

Algoliaを2年半ぶりにアップデートした

2022/08/08

背景

このブログで利用しているAlgoliaを2年半ぶりにアップデートしようとふと思ったので, 作業ログとして残す.

gatsby-plugin-algoliaのアップデート

まずは, yarn upgrade-interactive --latest でgastby-plubin-algoliaをアップデートする.
アップデート前が v0.3.4 で, アップデート後は v0.26.0 になった.

gatsby-plugin-algolia はgatsbyのbuild時に, Algoliaに検索対象のデータを登録してくれるもののため, gatsuby build を実行してみると...

failed to index to Algolia A replica index is already replica of another index
Error: A replica index is already replica of another index

というエラーが出た.
調べてみると、2021年4月12日にVirtual Replicaという機能がリリースされていたことと, v0.4.0 からbuildする毎にインデックスを再作成することになったことがわかったので, gatsby-config.js を以下のように修正した.

gatsby-plugin-algolia v0.4.0

module.exports = {
  plugins: [
    {
      resolve: `gatsby-plugin-algolia`,
      options: {
        // 以下を追加
        enablePartialUpdates: true,
      },
    }
  ],
}

ローカルでbuildできたので, Netlifyにアップロードしてみると...

NetlifyのNode.jsのバージョンアップ

Netlifyにアップロードしてみると以下のようなエラーが出た.

5:33:55 PM: error gatsby-plugin-algolia@0.26.0: The engine "node" is incompatible with this module. Expected version ">=12.13.0". Got "10.24.1"

NetlifyのNode.jsのバージョンは .node-version ファイルで指定することができるため, ローカルのバージョンに合わせて以下のようにした.

v14.15.4

再度gatsbyの設定

うまくいったように思えたが, 二回目以降のdeployから以下のようなエラーが出るようになった.

when enablePartialUpdates is true, the objects must have at least one of the match fields. Current object:

matchFields を指定していなかったことが問題だったため, 設定をしたところうまくいった.

module.exports = {
  plugins: [
    {
      resolve: `gatsby-plugin-algolia`,
      options: {
        enablePartialUpdates: true,
        // 以下を追加
        matchFields: ['objectID', 'id', 'title', 'createNumber', 'category'],
      },
    }
  ],
}

algoliasearchのバージョンアップ

v3.35.1 からバージョンアップしてみると, v4.14.2 になった.

algoliasearch は実際にAlgoliaに問い合わせしてくれるモジュールなため, 検索をしてみると検索結果が0になってしまった.

調べてみると, searchメソッドの引数の仕様が以下に変わっていた.

search: <TObject>(query: string, requestOptions?: RequestOptions & SearchOptions)

なので, algoliaIndex.search({ query: word}) から algoliaIndex.search(word) に変更することでローカルではヒットするようになった.

再度NetlifyのNode.jsのバージョンアップ

gatsby-plugin-algolia はNetlifyでも順調に動き, algoliasearchもローカルでうまく動いていたので問題ないかと思いきや, 以下のようなエラーが出た.

*** Error in `node': free(): invalid size: 0x00007fc91c002960 ***

Node.jsのバージョンもあっているし, 調べてもそれっぽいのはヒットしなかったが,
低レイヤーでのエラーなので, とりあえずバージョンアップをしてみたら動いたのでよしとする.

v15.14.0

かなり適当だったが, これでアップデート完了.

Twitterフォロー待ってます!