メインコンテンツまでスキップ

ファンクションの作成(コードレベル)

本ガイドでは、実行環境の定義、実行ロジックの実装、ソースコードの管理、およびファンクションバージョンのデプロイを通じて、開発者がファンクションを作成する方法を説明します。

本ガイドは、UI 操作やジョブの実行ではなく、コードレベルにおけるファンクションの実装およびライフサイクルに焦点を当てています。

1. ファンクションの概念

ファンクションとは、量子計算またはハイブリッド計算のロジックをカプセル化した、再利用可能な実行ユニットを指します。

各ファンクションは、以下の要素で構成されます。

  • ランタイムテンプレート(フレームワークおよび実行環境)
  • ファンクションロジックを実装したソースコード
  • 1 つ以上のバージョン
  • ファンクションを呼び出し可能にするためのデプロイアーティファクト

2. ファンクションメタデータの定義

ファンクションを作成する際には、以下のメタデータの指定が必要です。

ファンクション名

ファンクション名は、プロジェクト内でファンクションを一意に識別するための名称です。

ルール:

  • 使用可能な文字:英小文字(a~z)、数字(0~9)、ハイフン(-)
  • スペースは使用不可
  • 最小文字数:2 文字
  • プロジェクト内で一意であること

これらのルールを満たしていない、または既に同名の関数が存在する場合、ファンクションの作成は失敗します。

説明(任意)

ファンクションの目的や想定される使用方法を説明するために、任意で説明文を設定できます。

3. ランタイムテンプレートの選択

ランタイムテンプレートは、以下の内容を定義します。

  • 実行環境
  • 量子または古典計算をサポートしているフレームワーク
  • ファンクションの初期構成

サポートされているテンプレートの例:

  • Qiskit
  • Braket
  • CUDA Quantum
  • PennyLane
  • その他のサポート対象環境

各テンプレートには、以下の内容が含まれます。

  • デフォルトの handler.py 実装
  • 互換性のあるランタイム実行環境
  • フレームワーク固有のヘルパーライブラリ

重要: ランタイムテンプレートはシステム固有のものです。

ファンクションを作成した後は、テンプレートを変更することはできません。

4. ファンクションバージョン

各ファンクションは、デフォルトのバージョン(例:v1)で初期化されます。

バージョンは、以下を表します。

  • ファンクションのソースコードの特定スナップショット
  • 個別に呼び出し可能なデプロイ単位

複数のバージョンを利用することで、開発者は以下を実現できます。

  • 実装を安全に反復・改善します。
  • 安定版に影響を与えずに新しいロジックをテストします。
  • 必要に応じて、以前の実装にロールバックします。

5. ファンクションロジックの実装

コアエントリーポイント:handler.py

handler.py ファイルには、ファンクションの主要な実行ロジックが含まれます。

ファンクションは、必ず processing(invocation_input) メソッドを公開する必要があります。

def processing(invocation_input):
# implement computation logic here
return result

invocation_input

  • 関数呼び出し時に渡される入力ペイロードを表します。
  • 通常、計算や回路構築に必要なパラメータが含まれます。

handler.py の主な役割:

  • 量子回路の構築
  • 実行ロジックの準備
  • 入力の検証
  • 実行結果の返却

依存関係の管理:requirements.txt

requirements.txtファイルには、ファンクションの実行に必要なすべての Python 依存ライブラリを指定します。

  • ここに記載されたライブラリは、デプロイ時に自動的にインストールされます。
  • 依存関係が不足している場合、デプロイまたは実行時にエラーが発生する可能性があります。

例:

qiskit
numpy

6. ソースコードの変更および拡張

開発者は、以下の方法でファンクションの実装をカスタマイズできます。

  • デフォルトのテンプレートコードを編集します。
  • 追加の Python モジュール(*.py)を追加します。
  • 既存のロジックを置き換える、または拡張するためにカスタムソースファイルをアップロードします。

本プラットフォームは、以下の両方をサポートしています。

  • 組み込みエディタによる直接的なコード編集
  • ローカルの Python ファイルのアップロード

すべてのソースコードの変更は、ファンクションのバージョン管理によって追跡されます。

7. 変更の保存およびバージョン作成

ソースコードが変更されるたびに、以下の処理が行われます。

  • 変更を保存すると、新しいファンクションバージョンが作成されます。
  • 各バージョンには、ソースコードの完全なスナップショットが保持されます。
  • バージョンは、デプロイ用に個別に選択できます。

この仕組みにより、制御された反復開発および試行錯誤が可能になります。

8. ファンクションバージョンのデプロイ

デプロイでは、特定のファンクションバージョンが実行可能なアーティファクトとしてパッケージ化されます。 デプロイ時には、以下の処理が行われます。

  • requirements.txt に記載された依存関係がインストールされます。
  • ソースコードの検証が行われます。
  • ファンクションバージョンが呼び出し可能な状態になります。

デプロイが正常に完了すると、以下が可能になります。

  • SDK または API を介してファンクションを呼び出します。
  • 実行ジョブの作成にファンクションバージョンを利用します。

9. 主要な制約およびベストプラクティス

  • ファンクション作成後は、ランタイムテンプレートを変更することはできません。
  • 各デプロイは、特定のファンクションバージョンに対応します。
  • デプロイ前に、必要なすべての依存関係を宣言してください。
  • バージョン管理を活用し、実験的な変更を安定版リリースから分離してください。

10. 次のステップ

ファンクションをデプロイした後、開発者は通常、以下の作業を行います。

  • SDK または API を使用して、プログラムからファンクションを呼び出します
  • デプロイ済みのファンクションを基に、実行ジョブを作成・管理します
  • 実行結果やログを監視します

詳細については、以下のガイドを参照してください。