← すべての記事

KORENAがFourAを活用して木材価格指数を構築した方法

KORENAは、林業ポータル、オークションのPDF、10種類の通貨を基に、日次の欧州木材価格指数を構築しました。FourAはその背後にあるrequestレイヤーです。

欧州の木材価格データは、形式上は公開されているものの、実用上はそのまま使えない状態にあります。ある国はオーク材の価格を税抜きのユーロ/立方メートルで公開し、隣国はブナ材の価格を検索不可能なスキャン済みPDF内に現地通貨(税込)で掲載しています。さらに、立木、土場渡し丸太、選別されたオークションロットが、あたかも同一商品であるかのように並べて提示されることも珍しくありません。

生データは存在するものの、市場インテリジェンスとしては機能していませんでした。

KORENAはこの問題を解決するため、KORENA Timber Indexを立ち上げました。これにより、欧州の広葉樹、木材、スラブ材価格を誰でも無料で毎日参照できるようになりました。2026年半ば時点で、このインデックスは10カ国(ルーマニア、ドイツ、ブルガリア、ポーランド、フランス、オーストリア、イタリア、フィンランド、ノルウェー、スウェーデン)にわたる約24の樹種と170の地域別価格行、さらに汎EU市場層を追跡しています。

わずか2名のエンジニアリングチームでこれだけの範囲をカバーするため、KORENAはWeb取得の処理主体を1つに決める必要がありました。彼らはFourAを選び、すべてのリクエストをそこに集約しました。

Webへの単一ゲートウェイ

KORENAは初期段階で、すべての外部WebリクエストをFourA経由にするというアーキテクチャ上の決定を下しました。コードベース内に散在していたスクレイパー、場当たり的なスクリプト、カスタムコマンドを完全に排除しました。

これは利便性のためではなく、一貫性を確保するためでした。林業ポータルの挙動は多様です。静的なHTMLページもあれば、ブラウザでレンダリングして初めてデータが表示される最新のオークションプラットフォームもあります。政府サイトは多くの場合、低速で旧式、または厳格に保護されています。

すべてのトラフィックをFourAのリクエストインフラストラクチャに集約することで、KORENAはリトライ、バックオフ、ロギング、アラートの処理をすべてのデータソースで統一しました。また、取得したすべてのドキュメントをハッシュ化して保存し、監査用に最終価格まで追跡できるようにしています。

ソースに応じた適切な取得戦略の選択

サイトごとにスクレイピングロジックをハードコーディングする代わりに、KORENAは各データソースをデータベース内で特定のFourAエンドポイントに直接マッピングしています(詳細な分類については適切なタスクタイプの選択を参照)。これにより、コアなパースコードに手を加えることなく戦略を切り替えることができます。

  • Single (/single/): 静的HTMLページ、XMLフィード、直接のPDFダウンロード。ドイツの統計レポート、ブルガリアの国有林最新情報、ルーマニアの価格表など。高速かつ軽量で、大半のサイトにおける適切なデフォルトです。

  • Browser (/browser/): 実際のブラウザコンテキストを必要とするインタラクティブなWebアプリケーション。ポーランドのe-Drewnoオークションプラットフォームは、数値が表示される前にレンダリングが必要です。初期HTMLには有用なデータが含まれていません。

  • Proxy Finder (/proxy/): 最もアクセスが困難なターゲット向けのフォールバック。より強力なローテーションに加え、ハンドシェイクレベルのチェックに対応したunblocker: trueを備えています。

これはハードコードされたスクリプトではなくソースごとの設定であるため、サイト側が防御策を変更した際、KORENAはソースをSingleからBrowser、あるいはProxy Finderへと切り替えることができます。パース層がその影響を受けることはありません。

スキャンされたPDF:最大の難関

最新のWeb APIは単純です。自動化において最も困難なケースは、画像のみのPDFです。テキストレイヤーが一切存在しない、スキャン画像として公開された価格表やオークション結果がこれに該当します。人間にとっても煩わしいものですが、日次インデックスにとってはパイプラインを停止させる要因となります。

KORENAのパイプラインは、明確な役割分担によってこれらを処理します。

  • 取得: FourAが生のPDFバイトデータを毎日確実にダウンロードします。

  • テキスト評価: KORENAはファイル内に使用可能なネイティブテキストレイヤーが存在するかを確認します。

  • 処理と抽出: PDFがフラットな画像である場合、KORENAはページをラスタライズし、OCRとAIドキュメント抽出を実行します。その際、地域の林業専門用語を捕捉するためにカスタム言語ヒントと樹種辞書を適用します。

  • スキーマ検証: 出力は他のすべてのソースと同じスキーマに照らして検証されます。

ドキュメントを毎日確実に取得できなければ、これらは一切機能しません。それこそがFourAが担当する工程です。

取得と解釈:明確な責務の分離

FourAの役割は、生のバイトデータを確実に配信することです。木材に関する知識は一切必要ありません。これにより、KORENAは自身が得意とする領域、すなわち混沌としたデータを標準化されたインデックスへと変換することに100%のリソースを集中できます。ドメイン固有の処理はすべてKORENA側で完結します。HTMLはローカルでパースされ、デジタルPDFはpdfjs-distで読み取られ、スキャンされたPDFはOCR経由で処理されます。

正規化ステップは、生の数値をインデックスへと変換する工程です。立木価格は製材用丸太の価格とは異なり、税込の現地オークション結果は税抜の輸出見積価格と直接比較することはできません。生の数値を比較可能な市場インテリジェンスに変換するため、KORENAはすべてのデータを1つの基準に変換します。それが**立方メートルあたりのユーロ(税抜、持込渡し相当)**です。

これを正確に実行するため、システムは以下を考慮します。

また、このインデックスでは異なる市場層を分離して保持します。一般丸太、高付加価値木材オークション、小売リスティングは個別のカテゴリとして表示され、混ざり合うことはありません。プレミアムオークションのロットがベースラインを歪めることはありません。

この分離こそが重要です。FourAはWebアクセスを解決し、KORENAは木材データを解決します。一方が他方に依存するブラックボックスになることはありません。

木材価格の透明性が突如として急務となった理由

EU森林破壊防止規則(EUDR)をはじめとする欧州の厳格化する規制により、木材市場では完全なトレーサビリティとクリーンな調達文書の整備が求められています。価格の透明性は、その取り組みにおけるもう1つの不可欠な要素です。地域の市場価値を比較する森林所有者、見積もりを検証するバイヤー、基準価格を設定するデジタルマーケットプレイスはすべて、日次で更新される、地域に特化した比較可能なデータを必要としています。時代遅れの年次平均や、単発の局所的な数値ではありません。

2名のエンジニアで構成される少数精鋭のチームが、10か国にわたる予測不能な数百ものWebフォーマットに対応するにあたり、プロキシインフラの管理やブラウザ群の運用、サイトごとの修正作業に時間を割く余裕はありませんでした(詳細な試算はスクレイパー内製の隠れたコストを参照してください)。FourAがリクエスト層を処理することで、KORENAは樹種の正規化、OCRの最適化、価格設定ロジック、監査証跡といった、自社にしかできない本来のコア業務に集中する時間を取り戻しました。

かつて日々の木材価格を確認するには、地域のブローカーへ電話をかける必要がありました。現在では、誰でもtimber-index.korena.euで自ら価格曲線を描画できます。今後登場する同様のインデックス系プロダクトが、データ取得層を一から構築する時間はないはずです。それこそが、私たちが確信している点です。


公開Webデータを活用したプロダクトを構築中で、自前のスクレイパーやプロキシインフラの保守に課題を感じていませんか。FourAを始める