本文へ移動
Launch ドキュメントに戻る

Markdown をダウンロードGitHub の原文

AI を使用した Licentivo Launch 連携

現在未公開の変更ではアカウント ID の交換を採用しています。具体的な責務と移行上の制約は 購入期間とアカウント SDK の境界を参照してください。Launch が購入期間を計算し、Licentivo SDK がライセンスを実行します。

Launch 管理画面の 運用ツール → AI クイック連携 は、AI コーディングツールに渡せる英文のタスク指示を生成します。現在のストア、既存のソフトウェア、公開済みプランの実際の公開設定を使用し、AI に公開 Launch クライアントパッケージのインストール、実際の API の呼び出し、業務操作への権限チェックの組み込み、連携テストの完了を要求します。

アプリ連携ページの 連携チェックとコード / AI クイック連携 ナビゲーションからも同じ機能にアクセスできます。手動開発では AI は不要です。9 言語の手動連携ガイドを直接参照できます。

生成前の準備

  1. Launch でソフトウェアと販売プランを作成し、プランを Licentivo 製品とライセンスポリシーに関連付けます。
  2. テストする sandbox または live 環境にプランを公開します。
  3. Launch の公開 URL に顧客ソフトウェアからアクセスできることを確認し、本番環境では HTTPS を使用します。
  4. アプリ連携 → 連携チェックとコード で製品情報を取得し、製品マッピングと署名公開鍵がチェックに合格したことを確認します。
  5. export、save、render など、保護する実際の業務操作を明確にし、「ソフトウェア全体」とだけ書かないでください。

製品設定が完了していなくてもドラフトを生成できますが、ドラフトには入力が必要な項目が明示され、納品可能な連携設定として使用できません。製品と環境の設定後に再生成してください。

管理画面でプロンプトを生成する

  1. Go、Python、C#、Java、JavaScript / Node.js、Rust、Ruby、C、C++ から選択します。Web バックエンド方式は Go を使用し、別の SDK 言語としては数えません。
  2. Windows、Linux、macOS または該当プラットフォームと、デスクトップ、Web バックエンド、バックグラウンドサービスのプロジェクトを選択します。
  3. 既存のプロジェクト構造、起動方法、画面フレームワーク、保護する業務機能を英語で入力します。パスワード、鍵、顧客データ、非公開ソースコードは入力しないでください。
  4. 既存のソフトウェアと sandbox / live 環境を選択します。Launch は現在のストア URL、Launch と Licentivo の製品マッピング、環境、署名公開鍵を自動的に取得します。
  5. プレビューのパッケージバージョン、インストールコマンド、ドキュメントリンク、入力済みの接続関数を確認し、プロンプトをコピーまたはダウンロードします。
  6. プロンプトを自分の AI コーディングツールに渡し、プロジェクトの変更、コンパイル、ローカルテストを完了させます。

Launch はブラウザー内でテキストを生成するだけです。AI サービスへの自動接続、プロジェクトのアップロード、生成されたプログラムの開発者に代わった実行は行いません。

プロンプトは SDK のダウンロード場所を AI に伝えます

現在の 0.1.6 の 9 言語の公開インストール検証はすべて成功しており(9/9)、以下のレジストリコマンドとネイティブダウンロードはすべて検証済みです。Java の Maven Central ファイルと 4 件の署名、Rust の crates.io の正確なバージョン、および管理画面で生成されるすべての初期化コードも、独立した利用者によるチェックを完了しています。v0.1.6 GitHub Release にはネイティブパッケージとオフラインファイルも用意されています。

生成されたプロンプトには、選択した言語に対応する固定バージョンの公開インストール方法を必ず含めます:

Go:         go get github.com/spf86/licentivo-launch-sdk/pkg/launchclient@v0.1.6
Python:     python -m pip install licentivo-launch==0.1.6
C# / .NET: dotnet add package Licentivo.Launch --version 0.1.6
Java:       com.licentivo.launch:launch-client:0.1.6
Node.js:    npm install @licentivo/launch@0.1.6
Rust:       cargo add licentivo-launch@=0.1.6
Ruby:       gem install licentivo-launch --version 0.1.6
C / C++:    https://github.com/spf86/licentivo-launch-sdk/releases/tag/v0.1.6

公開ソース、各言語の README、現在のリリース状況は以下にあります:

選択した言語の Launch パッケージのみをインストールします。v0.1.6 には公式 Licentivo SDK v0.11.6、デフォルトアダプター、リンク設定が組み込まれているため、公式 SDK を別途インストールする必要はありません。

プロンプトは連携方法を AI に伝えます

設定済みのプロンプトには管理画面で生成された接続関数が含まれます。この関数にはストアの公開 URL、Launch 製品と Licentivo 製品のマッピング、署名公開鍵、決済環境が入力済みです。AI は 2 つの内部製品番号を推測したり手入力したりする必要も、launch-config.json や product.json を作成する必要もありません。

サーバー側の非公開 config.yaml は Launch ウェブサイトの実行専用であり、顧客アプリ、プロンプト、インストールパッケージに絶対に含めてはいけません。

AI は以下のライフサイクルに従って顧客ソフトウェアを変更する必要があります:

Connect/connect → Login or Restore → RunFeature → Logout / Close
                                      └──────────→ ReleaseDevice (explicit device unlink only)
  • Connect/connect は Launch クライアントを作成し、組み込みの公式 SDK を初期化します。それ自体はアカウントのログインや機能の認可を意味しません。
  • Login は顧客が現在のストアに登録したメールアドレスとパスワードを使い、そのアカウントの製品認証情報を取得します。
  • Restore は安全なストレージから記憶済みのセッションを復元します。セッションがない場合はログインを表示し、明示的な拒否をオフラインでの成功と見なしてはいけません。
  • RunFeature はエクスポート、保存、レンダリング、バックグラウンドタスクなどの実際の業務操作を必ず囲む必要があります。ボタンを無効にするだけでは実行箇所でのチェックの代わりになりません。
  • Logout はまず公式 SDK の統一ログアウトを呼び出し、その後アカウントセッションを消去します。ReleaseDevice は同じ明示的ログアウト処理の互換エントリーポイントです。Close による通常終了ではデバイスの紐付けを保持します。
  • SDK がハートビート、フローティング席、ランタイムルールを実行できるよう、クライアントオブジェクトはアプリの実行中維持してください。

Web アプリは信頼できるバックエンドでのみ認可チェックを実行します。Node.js / Electron では認証情報と SDK をメインプロセスまたはサーバー側に置き、ブラウザーとレンダラープロセスにはライセンスの秘密情報を保存しません。

AI が納品すべきもの

プロンプトは AI に以下の内容を完了して報告するよう要求します:

  1. 既存プロジェクトの言語バージョン、依存関係の管理、起動と終了のフロー、保護が必要な実際の業務操作を確認します。
  2. 上記の固定バージョンのコマンドで Launch パッケージを 1 つインストールし、対象言語の README にある実際のインターフェースを確認します。
  3. 顧客アカウントのログイン、エラー表示、安全なセッション復元を追加し、パスワードや完全なライセンスをソースコードやログに保存しません。
  4. 管理画面で提供される接続関数で初期化し、製品番号、署名公開鍵、設定ファイルを独自に作り出しません。
  5. 各保護対象の業務操作の実行箇所で RunFeature または対象言語のメソッドを使用し、回数の計上と再試行を正しく処理します。
  6. アカウントの失敗、メールアドレス未確認、権利の同期中、未購入、期限切れ、停止、デバイス数の上限、ネットワーク障害、オフライン期限切れを区別します。
  7. 通常終了、ログアウト、明示的なデバイス解放を実装し、ストア、アカウント、製品、環境ごとにキャッシュを分離します。
  8. プロジェクトに適したコンパイルとテストを実行し、最後に変更したファイル、機能マッピング、実際の結果、顧客の受け入れ確認手順を列挙します。

AI がコードを出力した後も、開発者は機能名が Licentivo ポリシーと完全に一致することを確認し、実際の sandbox ストアアカウントでエンドツーエンドテストを完了する必要があります。

プロンプトに含めない内容

プロンプトには公開可能なストアのオリジン、製品マッピング、環境、パッケージバージョン、署名公開鍵のみを含めます。以下の内容をプロンプトに含めてはいけません:

  • 顧客のメールアドレス、パスワード、ログインセッション、リフレッシュトークン;
  • 完全なライセンス、デバイス認証情報、ローカルのライセンスキャッシュ;
  • Licentivo 管理 API Key;
  • Stripe、PayPal、Waffo、Paddle のキー;
  • データベース接続、master_key、サーバー側の config.yaml;
  • 外部ツールに渡す必要のない非公開ソースコード、業務データ、ログ。

Launch の公開設定チェック、AI ドラフト、ローカルコンパイルは、実際の決済、ライセンス発行、外部アクティベーションの成功を証明するものではありません。決済サンドボックス、ストアアカウント、Licentivo 環境は個別に受け入れ確認が必要です。

連携後の受け入れチェックリスト

  • 新規顧客がログインでき、未確認のメールアドレスと誤ったパスワードに対して、情報を過度に漏らさない明確な案内が表示される。
  • 購入済みアカウントは対象機能を実行でき、未購入、期限切れ、停止中のアカウントは同じ業務コードを実行できない。
  • 再起動後はセッションの復元に成功し、認可チェックに合格した場合にのみ利用を継続できる。
  • 有効なオフラインポリシーが機能し、オフラインライセンスの期限切れ後は拒否される。明示的な 401/403/404 をオフラインでの成功に切り替えない。
  • 機能の利用回数は業務が成功した場合にのみ正しく確定され、失敗や再試行で重複して減算されない。
  • 通常終了ではデバイスの紐付けを保持する。明示的なログアウトではまず公式 SDK の統一ログアウトを呼び出し、取り消し待ちのログを保持して実際の結果を報告する。
  • アプリの実行中はフローティング席のハートビートが継続し、異常終了後の回収時間は現在のライセンスポリシーに適合する。
  • ストア、アカウント、製品、環境を切り替えても、別の ID のキャッシュを再利用しない。

より詳しい自動および外部の受け入れ確認の境界は acceptance.md を参照してください。

ソース配布パッケージでプロンプト生成器を使用する

licentivo-launch-0.1.6-source.zip には、独自のツールで同じ構造のプロンプトを生成しやすいよう、以下のファイルが含まれています:

  • internal/httpapi/web/integration-prompts.js:ページやサーバーに依存しないプロンプト生成モジュール;
  • scripts/integration-prompts.test.mjs:ローカル Node テスト;
  • internal/httpapi/web/integration-state.js と scripts/integration-state.test.mjs:設定ドラフトの分離と古い検証結果の消去;
  • このガイド、各言語の連携パッケージ、サンプル、受け入れ確認の説明。

モジュールは integrationTargets と buildIntegrationPrompt(options) をエクスポートします。オプションには language、appKind、platform、projectNotes、feature、merchantOrigin、environment、検証済みの report があり、{ text, ready, title, code } を返します。report を指定しない場合はドラフトのみが生成されます。レポートを手動で改ざんして公開設定チェックを回避することはできません。

ES モジュールに対応した開発ツールでは、ソースパッケージのルートディレクトリからローカルドラフトを生成できます:

@'
import { readFile, writeFile } from 'node:fs/promises';
const source = await readFile('internal/httpapi/web/integration-prompts.js', 'utf8');
const { buildIntegrationPrompt } = await import(
  'data:text/javascript;base64,' + Buffer.from(source).toString('base64')
);
const prompt = buildIntegrationPrompt({
  language: 'python',
  appKind: 'desktop',
  platform: 'windows',
  projectNotes: 'Existing Python desktop application. Add account sign-in and protect report exports.',
  feature: 'export'
});
await writeFile('integration-prompt.md', prompt.text, 'utf8');
console.log(prompt.title);
'@ | node --input-type=module

このコマンドは未設定のドラフトを生成するだけで、AI やライセンスサービスを呼び出しません。実際の連携には自分の Launch インスタンスに戻り、既存のソフトウェアと環境を選択して公開設定を含むバージョンを再生成してください。

ローカル生成器を検証する:

node --test scripts/integration-prompts.test.mjs scripts/integration-state.test.mjs