プロジェクトを操作するQ#

Azure Quantum Development Kitのリリースでは、プロジェクトを定義Q#できます。プロジェクトは、互いのリソースにアクセスできる複数Q#のファイルを含むフォルダー構造です。 プロジェクトは、再利用可能なライブラリを作成し、ソース コードを論理的に整理するのに役立ちます。

Q#プロジェクトには、qsharp.jsonという名前のマニフェスト ファイルと、指定したフォルダー構造内の 1 つ以上の *.qs ファイルが含まれていますQ#。 ユーザーが VS Code で *.qs ファイルを開くか、Jupyter Notebookまたは Python ファイルで をproject_root設定すると、コンパイラはマニフェスト ファイルの周囲のフォルダー階層を検索し、プロジェクトのスコープを決定します。 マニフェスト ファイルが見つからない場合、コンパイラは 1 つのファイル モードで動作します。 プロジェクトは Q# 手動で作成することも、VS Code で直接作成することもできます。

前提条件

プロジェクトを定義するQ#

Q#プロジェクトは、qsharp.jsonマニフェスト ファイルと src フォルダー (ソース ファイルを含むQ#) の存在によって定義されます。どちらもプロジェクトのルート フォルダーに存在する必要があります。 プログラムの場合 Q# 、コンパイラは Q# プロジェクト フォルダーを自動的に検出します。 Python プログラムと Jupyter Notebook の場合は、呼び出しでプロジェクト フォルダーを Q# 指定する qsharp.init 必要があります。 ただし、プロジェクトの Q# フォルダー構造は、すべての種類のプログラムで同じままです。

プロジェクトのフォルダー階層を Q# 示す図。

プロジェクト フォルダーの定義 (Q# プログラム)

VS Code で *.qs ファイルを開くと、 Q# コンパイラはフォルダー構造内で qsharp.jsonマニフェスト ファイル を上方向に検索します。 マニフェスト ファイルが見つかると、コンパイラは src ディレクトリのすべてのサブフォルダーを検索して *.qs ファイルを検索し、すべての操作または関数をキャッシュし、マニフェスト ファイルの除外規則に従って、すべての *.qs ファイルでそれらの操作と関数を使用できるようにします。

たとえば、次のフォルダー構造を指定します。

  • Teleportation_project
    • qsharp.json
    • src
      • RunTeleport.qs
      • TeleportOperations
        • Teleport.qs
        • PrepareState
          • PrepareState.qs

ファイル /src/TeleportOperation/PrepareState/PrepareState.qs を開くと、コンパイラは次のようになりますQ#。

  1. /src/TeleportOperation/PrepareState/qsharp.json ファイルを確認します。
  2. /src/TeleportOperationqsharp.jsonを確認します。
  3. /src でqsharp.jsonを確認します。
  4. qsharp.jsonを確認/します。
  5. /プロジェクトのルート ディレクトリとしてを確立し、マニフェスト ファイルの設定に従って、プロジェクトのルートの下にあるすべての *.qs ファイルを含めます。

マニフェスト ファイルの作成

マニフェスト ファイルは、必要に応じて authorlicense.ints フィールドを含めることができる、qsharp.jsonという名前の単純な.json ファイルです。 実行可能な最小マニフェスト ファイルは、文字列 {}です。 VS Code でプロジェクトを Q# 作成すると、最小限のマニフェスト ファイルが自動的に作成されます。

{}

マニフェスト ファイルの例

マニフェスト ファイルでプロジェクトのスコープを定義する方法の例を Q# 次に示します。

この例では、 author が指定された唯一のフィールドであるため、このディレクトリ内のすべての *.qs ファイルとそのすべてのサブディレクトリがプロジェクトに Q# 含まれます。

{
    "author":"Microsoft"
}
{
    "author":"Microsoft",
    "license":"MIT"
}

プロジェクト内では Q# 、マニフェスト ファイルを使用して VS Code Q# リンター設定を微調整することもできます。 既定では、3 つのリンター ルールは次のとおりです。

  • needlessParens: default = allow
  • divisionByZero: default = warn
  • redundantSemicolons: default = warn

マニフェスト ファイルを使用して、各ルールを 、warn、または errorのいずれかにallow設定できます(例:

{
    "author":"Microsoft",
    "lints": [
        {
          "lint": "needlessParens",
          "level": "allow"
        },
        {
          "lint": "redundantSemicolons",
          "level": "warn"
        },
        {
          "lint": "divisionByZero",
          "level": "error"
        }
      ]
}

Q# プロジェクトの要件とプロパティ

次の要件と構成は、すべての Q# プロジェクトに適用されます。

  • プロジェクトに含める *.qs ファイルはすべて src という名前のフォルダーの下に存在する必要があります。このフォルダーは、プロジェクト のルート フォルダーの Q# 下にある必要があります。 VS Code でプロジェクトを Q# 作成すると、 /src フォルダーが自動的に作成されます。
  • qsharp.json マニフェスト ファイルは、src フォルダーと同じレベルにする必要があります。 VS Code でプロジェクトを Q# 作成すると、 qsharp.json ファイルが自動的に作成されます。
  • 使用可能なソース ファイル内の操作と関数には、ステートメントを使用して open アクセスできます。
open MyMathLib;
...
    Multiply(x,y);

または名前空間を使用して参照します。

MyMathLib.Multiply(x,y);

プログラムの場合 Q# のみ

  • 定義できる *.qs ファイルは、 Q# プロジェクト内に @EntryPoint() 1 つだけです。
  • 定義を含む @EntryPoint() *.qs ファイルは、マニフェスト ファイルの下の任意のレベルに配置できます。
  • プロジェクト内の任意の場所 Q# にある *.qs ファイルからキャッシュされた操作または関数は、VS Code の予測テキストに表示されます。
  • 選択した操作または関数の名前空間がまだ追加されていない場合、VS Code は必要な open ステートメントを自動的に追加します。

プロジェクトを作成する Q# 手順

  1. VS Code ファイル エクスプローラーで、プロジェクト のルート フォルダーに使用Q#するフォルダーを右クリックし、プロジェクトCreateQ#選択するか、フォルダーを開いて [コマンド パレット>Q#の表示] を選択します。>プロジェクトCreateQ#します。

  2. VS Code は、 フォルダー内に最小限のqsharp.json マニフェスト ファイルを作成し、テンプレート ファイルを /src 含むフォルダーを Main.qs 追加します。

  3. 必要に応じてマニフェスト ファイルを編集します。 「マニフェスト ファイルの例」を参照してください。

  4. フォルダーの下にソース ファイルを Q# 追加して /src 整理します。

  5. Python プログラムまたはJupyter NotebookからプロジェクトにQ#アクセスする場合は、 を使用してルート フォルダーパスqsharp.init設定します。 この例では、プログラムがプロジェクトのルート フォルダーと同じフォルダー内にあると仮定します Q# 。

    qsharp.init(project_root = './Teleportation_project')
    
  6. VS Code でファイルのみを Q# 使用している場合、ファイルを Q# 開くと、コンパイラは qsharp.json マニフェスト ファイルを検索し、プロジェクト ルート フォルダーを決定し、サブフォルダーで *.qs ファイルをスキャンします。

注意

手順 2 でマニフェスト ファイルとフォルダーを /src 手動で作成することもできます。

プロジェクトの例

この量子テレポート プログラムは、先ほど示したフォルダー構造に基づくプロジェクトの Q# 例であり、VS Code のローカル シミュレーターで実行されます。 Azure Quantum ハードウェアまたはサードパーティのシミュレーターでプログラムを実行するには、プログラムをコンパイルして Azure ワークスペースに接続する手順については、「 プログラムの概要 Q# 」と「VSCode 」を参照してください。

この例では、次のディレクトリ構造を使用します。

  • Teleportation_project
    • qsharp.json
    • src
      • RunTeleport.qs
      • TeleportOperations
        • Teleport.qs
        • PrepareState
          • PrepareState.qs

qsharp.json マニフェスト ファイルには、作成者フィールドとライセンス フィールドが含まれています。

{
    "author":"Microsoft",
    "license":"MIT"
}

Q# ソース ファイル

1 つの小さな違いがある場合、 @EntryPoint() ステートメント - ソース ファイルは、プログラム、Python プログラム、またはJupyter Notebookで同じですQ#。

メイン ファイル RunTeleport.qs にはエントリ ポイントが含まれており、Teleport.qs の名前空間をTeleportLib参照します。

namespace RunTeleport {

    open TeleportLib;   // references the TeleportLib namespace in Teleport.qs

    @EntryPoint()       // @EntryPoint() not necessary for Python or Jupyter Notebook programs
    operation RunTeleportationExample() : Unit {
        use msg = Qubit();
        use target = Qubit();

        H(msg);
        Teleport(msg, target);    // calls the Teleport() operation from Teleport.qs
        H(target);

        if M(target) == Zero {
            Message("Teleported successfully!");
        
        Reset(msg);
        Reset(target);
        }
    }
}

Teleport.qs は、操作をTeleport()定義し、PrepareState.qs から操作をPrepareBellPair()呼び出します。

namespace TeleportLib {

    open PrepareBell;     // references the PrepareBell namespace in PrepareState.qs
 
    operation Teleport(msg : Qubit, target : Qubit) : Unit {
        use here = Qubit();

        PrepareBellPair(here, target);      // calls the PrepareBellPair() operation from PrepareState.qs
        Adjoint PrepareBellPair(msg, here);

        if M(msg) == One { Z(target); }
        if M(here) == One { X(target); }

        Reset(here);
    }
}

PrepareState.qs ファイルには、ベル ペアを作成するための標準の再利用可能な操作が含まれています。

namespace PrepareBell {    
    
    operation PrepareBellPair(left : Qubit, right : Qubit) : Unit is Adj + Ctl {
        H(left);
        CNOT(left, right);
    }
}

プログラムの実行

プログラムを実行している環境のタブを選択します。

このプログラムを実行するには、VS Code で RunTeleport.qs ファイルを 開き、[実行] を選択 します