developers · Aug 12, 2025

開発者が語る、Quire APIで双方向同期を構築する方法

AI翻訳
· 英語版を見る

Quireと外部アプリケーション間の双方向データフローを示すQuire双方向同期アーキテクチャ図

最終更新日:2026年7月20日

TL;DR

Quireと他のアプリとの双方向同期には、両側からWebhookを受け取り、それぞれのAPIを呼び出して変更を反映させる中間層サーバーが必要です。構成はQuire ↔ あなたのアプリ ↔ 他のアプリというシンプルなものです。実装は4ステップ。まずWebhookサーバーを立ち上げ、Quireに登録し(プロジェクトのフォロワーとして追加)、他のアプリにも登録し、最後にQuire APIドキュメントのアクティビティタイプを使ってイベントを処理します。安全のためのルールは2つ。各変更の発生元にタグを付けて無限ループを防ぐこと、そしてQuireのタスクIDと他のアプリのアイテムIDの間でIDマッピングを保持することです。Googleカレンダー双方向同期アプリが実際の動作例です。

データが2つのアプリにまたがって存在すると、あらゆる操作が二重に行われるか、気づかぬうちに食い違ってしまいます。双方向同期は、QuireとほかのアプリがWebhookを通じて自動的に更新をやり取りすることで、この二重入力の問題を解消します。QuireのオープンなAPIは、まさにこのパターンのために作られています。

分断されたツールのコストはよく知られています。マッキンゼーの「ソーシャルエコノミー」に関する調査によると、知識労働者は本来の業務ではなく社内情報を探すことに、1週間のうちおよそ20%もの時間を費やしています。信頼できる同期の仕組みがあれば、この負荷の一部を自動的に取り除けます。

Googleカレンダー双方向同期アプリは、その代表的な例です。QuireのタスクとGoogleカレンダーのイベントは、手動で調整することなく常に一致し続けます。この記事では、同じ仕組みを他のアプリのAPIに対して構築する方法を順を追って説明します。

Googleカレンダー双方向同期はPremium以上のサブスクリプションティア向けの機能です。詳細は料金ページをご覧ください。

Quire双方向同期を構成する要素

コンポーネント 役割
Quireアプリ API認証情報を提供する。Webhookのためにプロジェクトのフォロワーとして登録される
中間層サーバー(あなたのアプリ) 両側からWebhookを受け取り、変更を反映するために各APIを呼び出す
他のアプリ(例:Googleカレンダー) 自身の側でのイベントの発生源であり、API書き込みの対象でもある
Quireアプリ設定内のWebhook URL QuireがアクティビティイベントをPOSTする送信先
IDマッピングテーブル QuireのタスクIDと他のアプリのアイテムIDを対応付ける
各変更に付ける発生元タグ 無限に更新が繰り返されるループを防ぐ

双方向同期のワークフローとは?

双方向同期を、2つのアプリの間の会話だとイメージしてください。Quireでタスクを更新すると、その変更が他のアプリに伝わります。逆に、そのアプリ側で何かが更新されると、Quireにも伝わります。こうして、情報はどこでも一貫した状態に保たれます。

Quire、ミドルウェア、外部アプリ間のイベントフローを示す双方向同期ワークフロー図

実装の手順は?

まず最初に必要なのは、Quireアプリのセットアップです。QuireのプロジェクトにAPI経由でアクセスするための認証情報を取得するため、アプリを1つ作成する必要があります。

Quire APIで独自のアプリを作成する手順については、こちらのブログ記事をご覧ください。

双方向同期を実装するには、QuireとGoogleカレンダーのような対象アプリの橋渡し役となる中間層アプリ(あなたのアプリ)を開発する必要があります。これは翻訳者のようなものだとイメージしてください。片方から情報を受け取り、それを処理し、もう片方に適切な指示を送ります。全体の流れはQuire ↔ あなたのアプリ ↔ 他のアプリとなります。

実際にどう構築すればよいか?

1. イベントを処理するアプリを用意する

双方向同期を実現するには、まず中間層として機能する独自のサーバーアプリを用意する必要があります。このアプリは、QuireとほかのアプリのどちらからもWebhook POSTリクエストを受け取る役割を担います。 サーバーには次のことができる必要があります。

  • QuireとほかのアプリからのHTTP POSTリクエスト(Webhookイベント)を受け取る。
  • イベントのペイロードを解析し、どのアクションを実行すべきか判断する。
  • 必要に応じてそれぞれのAPIを使い、Quireまたは他のアプリ側のデータを更新する。

このサーバーアプリは、Node.js、Python、Rubyなど好きな技術で構築できます。以下のセクションでは、Node.jsを使ってWebhookイベントを受信・処理するシンプルな例を示します。 QuireとほかのアプリからWebhookイベントを送信できるよう、サーバーはインターネットからアクセス可能にしておいてください。

Expressを使ったシンプルなNode.jsの例を紹介します。

const express = require('express');
const app = express();
app.use(express.json());

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

2. タスクの更新をあなたのアプリに送るWebhookをQuireに設定する

次に、Quireからのwebhookイベントを受信するためのルートをサーバーに作成する必要があります。

app.post('/webhook', (req, res) => {
  console.log('Received webhook event:', req.body);
  // TODO: イベントを処理し、API経由でQuireまたは他のアプリを更新する
  res.status(200).send('Event received');
});

この例では、Webhookのルートは/webhookなので、完全なURLは${your-host}/webhookになります。

このWebhook URLをコピーし、Quireアプリの設定に貼り付けてください。これにより、Quireはあなたのアプリへイベント通知をどこへ送ればよいかを認識します。

Webhook URLの設定フィールドを表示するQuireアプリ設定画面

さらに、同期したいプロジェクトのフォロワーとして、Quireアプリを登録する必要があります。これにより、あなたのアプリは関連する更新の通知を確実に受け取れるようになります。

Quire APIで通知を受け取る手順については、こちらのガイドをご覧ください。

3. 更新をあなたのアプリに送るWebhookを他のアプリ側に設定する

他のアプリ側の更新をQuireと同期させるには、そのアプリからのWebhookイベントを受け取るルートもサーバーに作成する必要があります。登録の流れは、上記で示したQuireの例と似ています。他のアプリ側で、イベント通知が中間アプリのWebhookエンドポイントに送られるよう設定し、サーバー側でそれらの受信イベントを適切に処理できるようにしてください。

4. 受信したイベントを処理し、それぞれのAPIを使ってQuireと他のアプリの両方のデータを更新する

アプリがQuireと他のアプリの両方からWebhookイベントを受信できるようになったら、それらのイベントを処理し、2つのプラットフォーム間でデータを同期するロジックを実装する必要があります。これには通常、次の作業が含まれます。

  • イベントのペイロードを解析し、何が変更されたか(タスクの作成、更新、削除など)を特定する。イベント構造の詳細については、Quire APIドキュメント - 通知イベントを参照してください。
  • 他のアプリ側にこれらの変更を反映するために、どのAPI呼び出しが必要かを判断する。
  • データの同期を保つため、Quireまたは他のアプリへ適切なAPIリクエストを送信する。
  • 更新が正しく紐づくように、QuireのタスクIDとあなたのアプリのアイテムIDの対応関係を維持する。

受信したイベントを丁寧に処理し、API経由でデータを更新することで、両側の変更が正確に反映され、信頼性の高い双方向同期を維持できます。

Node.jsとaxiosを使った例を紹介します。

const axios = require('axios');

app.post('/webhook', (req, res) => {
  const { type } = req.body.data;
  // アクティビティタイプの参照:
  // https://github.com/quire-api/quire-api/blob/master/docs/activity_types.md
  switch (type) {
    case 0: //Quireタスクが作成された
      onQuireTaskCreate();
      break; 
    case 1: //Quireタスクが削除された
      onQuireTaskDelete();
      break;
  }
  res.status(200).send('Event received');
});

// 他のアプリからQuireへのイベントを処理するルート
app.post('/anotherwebhook', async (req, res) => {
  const { isCreate, id, name, projectId } = req.body;
  if (isCreate) {
    // Quireプロジェクト内にタスクを作成する
    await axios.post(`https://quire.io/api/task/${projectId}`, { name });
    // 必要に応じて、あなたのアプリのidとQuireのタスクidの対応関係を保存する
  } else {
    // マッピングロジックを使って対応するQuireのタスクidを取得する
    const taskOid = getTaskIdByAppEventId(id, projectId);
    // Quireプロジェクトからタスクを削除する
    await axios.delete(`https://quire.io/api/task/${taskOid}`);
  }
  res.status(200).send('Event processed successfully');
});

この例は、他のアプリからの作成・削除イベントを処理し、Quireと同期させる方法を示しています。適切なエラー処理を実装し、信頼できる同期のためにIDマッピングを維持するようにしてください。

押さえておくべき重要なポイントは?

安全のためのルールは2つあり、最初の実装で必ずつまずく失敗パターンをカバーしています。

  • 各変更の発生元を追跡すること。自分の同期処理がトリガーした更新にはタグを付け、それがWebhookとして跳ね返ってきた際には無視します。これを怠ると、Quireが他のアプリに変更を送信し、そのアプリがWebhookを送り返し、サーバーが再びQuireに送信し、というループが永遠に続いてしまいます。
  • データ形式の一貫性を保つこと。Quire内であるものを意味するフィールド(Markdown形式の説明文など)は、カレンダーイベントの説明文やプレーンテキストのissueメモなど、対象のフォーマットに変換される前に、明示的な変換処理が必要になる場合があります。

次のステップは?

オープンなAPIとWebhookを組み合わせることで、Quireとその他のツールは競合し合う2つの情報源ではなく、単一の信頼できる情報源になります。まずは最小限の同期(1つのイベントタイプ、1方向のみ)から始め、ループが端から端まで正しく機能することを確認してから範囲を広げていきましょう。

関連記事:Quire APIで外部ツールを連携する — n8nを例に — 独自サーバーを構築するより先に、ノーコードの自動化ツールから始めたい場合の実例です。

大きな目標を次の小さな一歩へと分解するタスク管理ソフトウェア

よくある質問

Quireと他のアプリとの双方向同期とは何ですか?

Quireでの変更が他のアプリに反映され、そのアプリでの変更もQuireに反映される、双方向の接続です。Googleカレンダー双方向同期アプリが実際の動作例です。

Quire APIで双方向同期を構築するには何が必要ですか?

API認証情報を持つQuireアプリ、Webhookを受け取れるインターネットからアクセス可能な中間層サーバー、そして両方のAPI間でイベントを変換するロジックです。バックエンドの言語は何を使っても構いません。

中間層アプリはどのような役割を果たしますか?

Quireとほかのサービスをつなぐwebhookイベントを受け取り、どのAPI呼び出しを行うべきかを判断し、QuireのタスクIDと他のアプリのアイテムIDのマッピングを維持する、翻訳者のような役割を担います。

無限に同期ループが発生するのをどう防げますか?

各変更の発生元を追跡し、自分自身の同期処理によって引き起こされた更新は無視するようにします。この対策がないと、あらゆる更新が2つのアプリの間を永遠に行き来し続けてしまいます。

Googleカレンダー双方向同期を利用するには、どのQuireプランが必要ですか?

Premium以上です。現在のティアごとの制限は料金ページで確認できます。

Whiter
Software Engineer