定制 david-canial/remote-config-tool 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

david-canial/remote-config-tool

Composer 安装命令:

composer require david-canial/remote-config-tool

包简介

PHP client library for Firebase Remote Config (build artifacts only).

README 文档

README

Firebase Remote Config を操作するための PHP クライアントライブラリです。

  • Google の service account を使って アクセストークンを取得
  • Remote Config の取得(ETag 付き)。
  • ETag を使った更新 および force update をサポート。

シンプルなスクリプト、バッチ処理、既存バックエンドへの組み込みなどに適しています。

インストール

必要環境

  • PHP 8.0+
  • Composer
  • Firebase プロジェクトと、Firebase Remote Config Admin 権限を持つ service account

Composer でインストールします:

composer require david-canial/remote-config-tool

service account と credentials の準備

  1. Google Cloud Console を開きます:

    • 「IAM と管理」→「サービス アカウント」
    • 新しい service account を作成(既存のものを使っても OK)
  2. 権限(ロール)の付与:

    • Firebase Remote Config を操作できるロールを付与します。例:
      • Firebase Remote Config Admin
      • もしくは同等の権限を含むカスタムロール
  3. JSON キーを作成:

    • service account 詳細画面 → 「キー」タブ → 「キーを追加」→「新しいキーを作成」→ JSON
    • ダウンロードした JSON ファイルを、例えば /path/to/service-account.json に保存
  4. Google 認証用の環境変数を設定:

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account.json"
  1. FIREBASE_PROJECT_ID を設定:
export FIREBASE_PROJECT_ID="your-firebase-project-id"

your-firebase-project-id は、JSON ファイル内の projectId か、Firebase コンソールのプロジェクト ID に対応します。

Laravel や Symfony などのフレームワークを利用している場合は、これらの値を .env に定義し、フレームワーク側で読み込ませても構いません。

静的ファサード RemoteConfig を使った簡単な利用例

インストールと環境変数の設定が完了したら、RemoteConfig ファサードを利用できます:

<?php

require __DIR__ . '/vendor/autoload.php';

use DavidCanial\RemoteConfigTool\RemoteConfig;

// アクセストークンを取得
$token = RemoteConfig::token();

// Remote Config(ETag 付き)を取得
$result = RemoteConfig::get();
$etag   = $result['etag'];
$config = $result['data'];

// 現在の ETag のみ取得
$etagOnly = RemoteConfig::etag();

// Remote Config の本体データのみ(ETag なし)
$dataOnly = RemoteConfig::config();

環境変数 FIREBASE_PROJECT_ID を使わず、明示的に projectId を指定することもできます:

$etag = RemoteConfig::etag('your-firebase-project-id');

ETag を使った Remote Config の更新

Firebase Remote Config では、他の更新を誤って上書きしないように、更新時に ETag を送信することが推奨されています。

parameters を一部変更する例:

use DavidCanial\RemoteConfigTool\RemoteConfig;

// 現在の設定を取得
$result = RemoteConfig::get();
$etag   = $result['etag'];
$config = $result['data'];

// 例: 特定の parameter を変更したい場合
$parameters = $config['parameters'] ?? [];

$parameters['example_param'] = [
    'defaultValue' => ['value' => '123'],
];

// 古い ETag を指定して Firebase に送信
$updateResult = RemoteConfig::update(
    ['parameters' => $parameters],
    $etag
);

$newEtag = $updateResult['etag'] ?? null;

もし ETag が古い場合(他のクライアントが先に更新していた場合など)、Firebase は HTTP 412 (Precondition Failed) を返します。その場合は:

  • RemoteConfig::get() で最新の ETag と設定を再取得する
  • 自分の変更をその最新設定に再適用してから、再度 update する

Force update(ETag を無視して上書き)

状況によっては、ETag チェックを無視して常に現在の設定を上書きしたい 場合もあります:

use DavidCanial\RemoteConfigTool\RemoteConfig;

// 新しい parameters を用意
$parameters = [
    'example_param' => [
        'defaultValue' => ['value' => 'force-update'],
    ],
];

$result = RemoteConfig::forceUpdate(['parameters' => $parameters]);
$newEtag = $result['etag'] ?? null;

注意: forceUpdate は他のクライアントによる変更を上書きする可能性があります。同時更新があり得る環境では慎重に使用してください。

RemoteConfigClient を直接利用する

より細かく制御したい場合や、独自の Guzzle クライアントを注入したい場合は、RemoteConfigClient クラスを直接利用できます:

use DavidCanial\RemoteConfigTool\RemoteConfigClient;
use GuzzleHttp\Client as HttpClient;

// 環境変数を利用してクライアントを生成
$client = new RemoteConfigClient();

// あるいは projectId と Guzzle クライアントを明示的に指定
//$http   = new HttpClient(['timeout' => 30]);
//$client = new RemoteConfigClient('your-firebase-project-id', $http);

// アクセストークンを取得
$token = $client->getToken();

// Remote Config を取得
$result = $client->get();
$etag   = $result['etag'];
$config = $result['data'];

.env を使った設定読み込み(任意)

このライブラリは、vlucas/phpdotenv を利用して .env を読み込み、 その上で RemoteConfigClient インスタンスを生成するヘルパーも提供しています:

use DavidCanial\RemoteConfigTool\RemoteConfigClient;

// 例: プロジェクトルートに .env がある場合
// .env
// FIREBASE_PROJECT_ID=your-firebase-project-id
// GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json

$client = RemoteConfigClient::createFromEnvFile(__DIR__ . '/..');

$result = $client->get();

createFromEnvFile($directory, $file = '.env') は次のことを行います:

  • 指定ディレクトリと .env ファイルの存在チェック
  • .env 内の環境変数を読み込み
  • 読み込んだ環境変数を元に RemoteConfigClient インスタンスを生成

エラー処理

よくあるエラーとその原因:

  • GOOGLE_APPLICATION_CREDENTIALS が未設定またはパスが誤っている:

    • google/auth ライブラリが、credentials を見つけられない場合に例外を投げます。
    • JSON ファイルのパスと、読み取り権限を確認してください。
  • FIREBASE_PROJECT_ID が未設定:

    • RemoteConfigClientRuntimeException を投げます。そのメッセージは:
      • "FIREBASE_PROJECT_ID が設定されていません。RemoteConfigClient のコンストラクタに projectId を渡すか、環境変数 FIREBASE_PROJECT_ID を設定してください。"
  • Firebase からの 4xx / 5xx エラー:

    • 資格情報不足、ETag の不整合、ペイロードフォーマットの不備などが原因で、Guzzle の HTTP 例外としてスローされます。
    • \GuzzleHttp\Exception\ClientException をキャッチすることで、レスポンスボディを確認できます。

基本的なエラーハンドリング例:

use DavidCanial\RemoteConfigTool\RemoteConfig;
use GuzzleHttp\Exception\ClientException;

try {
    $result = RemoteConfig::get();
} catch (ClientException $e) {
    $response = $e->getResponse();
    $status   = $response->getStatusCode();
    $body     = (string) $response->getBody();

    // Firebase から返ってきたエラー内容をログに出すなどの処理
} catch (\Throwable $e) {
    // 環境変数の不足、ネットワークエラー、JSON パースエラーなど
}

ライセンス

このパッケージは MIT ライセンス のもとで提供されます。商用・個人プロジェクトを問わず自由に利用できます。

remote-config-tool

remote-config-tool

remote-config-tool

david-canial/remote-config-tool 适用场景与选型建议

david-canial/remote-config-tool 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 5 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 01 月 06 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「php」 「Guzzle」 「firebase」 「remote-config」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 david-canial/remote-config-tool 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 david-canial/remote-config-tool 我们能提供哪些服务?
定制开发 / 二次开发

基于 david-canial/remote-config-tool 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 5
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 23
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-01-06