このガイドでは、vcpkg を使用して Azure SDK for C++ からライブラリをインストールし、CMake を使用してプロジェクトに統合するために必要な手順を開発者に提供します。 手順に従うことで、開発環境を設定し、C++ アプリケーションで Azure サービスの使用を開始できます。 Azure を初めて使用する場合でも、統合プロセスを効率化する場合でも、このドキュメントを使用すると、迅速かつ効率的に作業を開始できます。
[前提条件]
- 任意のテキスト エディター
- ターミナル
- C++ コンパイラ
- ギット
- CMake
- Azure サブスクリプション
- Azure CLI
git と CMake のインストールを確認する
スムーズな統合プロセスを確保するには、git と CMake がシステムに正しくインストールされていることを確認することが重要です。
git が正しくインストールされていることを確認するには、ターミナルで次のコマンドを実行します。
git --version
次のように、git 用に現在インストールされているバージョンを示す出力が表示されます。
git version <version>
CMake が正しくインストールされていることを確認するには、ターミナルで次のコマンドを実行します。
cmake --version
次のように、現在インストールされているバージョンの CMake を示す出力が表示されます。
cmake version <version>
vcpkg をインストールする
Azure SDK for C++ ライブラリを管理およびインストールするには、vcpkg を使用します。 vcpkg は、依存関係の処理プロセスを簡略化するクロスプラットフォーム パッケージ マネージャーです。
vcpkg をインストールするには、まず vcpkg リポジトリを複製します。 推奨される方法は、C++ プロジェクト ディレクトリではなく、開発環境の中央の場所に vcpkg を複製することです。 この例では、vcpkg はホーム ディレクトリに複製されます。
cd ~ git clone https://github.com/microsoft/vcpkg.git
vcpkg リポジトリが複製されたら、新しいディレクトリに移動し、
bootstrap-vcpkg.bat
スクリプトを実行します。cd .\vcpkg\ .\bootstrap-vcpkg.bat
vcpkg をブートストラップした後、それをパスに追加して、プロジェクト ディレクトリから vcpkg 実行可能ファイルにアクセスできるようにします。 コマンド例の
<path\to\vcpkg>
は、先ほど複製した vcpkg ディレクトリへのパスに置き換えてください。$env:Path = "$env:Path;<path\to\vcpkg>"
vcpkg ディレクトリがパスに追加されたことを確認するには、プロジェクト ディレクトリに戻り、次のコマンドを実行します。
vcpkg --version
次の出力が表示されます。
vcpkg package management program version <version>
ライブラリをインストールする
このセクションでは、vcpkg を使用して Azure SDK for C++ から必要なライブラリをインストールするプロセスについて説明します。 このセクションでは、マニフェスト モードで vcpkg を使用する方法を示します。これにより、他のコラボレーターと共有されている場合でも、プロジェクトの依存関係を管理するのに役立つ vcpkg プロジェクト ファイルがいくつか作成されます。
プロジェクトのルート ディレクトリから、次のコマンドを実行して、マニフェスト モードで新しい vcpkg プロジェクトを開始します。
vcpkg new --application
これで、プロジェクト ディレクトリに vcpkg.json ファイルと vcpkg-configuration.json ファイルが存在します。
次のコマンドを実行して、Azure SDK for C++ からプロジェクトに Azure Key Vault と ID ライブラリを追加できるようになりました。
vcpkg add port azure-identity-cpp azure-security-keyvault-secrets-cpp
vcpkg.json ファイルの内容は次のようになります。
{ "dependencies": [ "azure-identity-cpp", "azure-security-keyvault-secrets-cpp" ] }
Azure Key Vault リソースを作成する
このセクションでは、Azure CLI を使用して Azure Key Vault リソースを作成する方法について説明します。 この Key Vault リソースは、シークレットやキーなどの機密情報を安全に格納および管理します。
ターミナルで次のコマンドを入力して、Azure CLI を使用してログインします。
az login
ポップアップ ウィンドウを使用して Azure にログインします。
ポップアップ ブラウザー ウィンドウを使用してログインしたら、ターミナルで使用する Azure サブスクリプションを選択します。
次のコマンドを使用して Key Vault リソースを作成し、
<your-resource-group-name>
と<your-key-vault-name>
を独自の一意の名前に置き換えることを忘れないでください。az keyvault create --resource-group <your-resource-group-name> --name <your-key-vault-name>
出力には、
vaultUri
プロパティを持つプロパティの一覧が表示されます。 次のコマンドを使用して、プログラムで使用する環境変数に設定します。$env:AZURE_KEYVAULT_URL = "https://<your-key-vault-name>.vault.azure.net/"
- 最後に、Azure アカウントに Key Vault シークレットを操作するための適切なアクセス許可があることを確認します。 Azure portal の Key Vault リソースのアクセス制御 (IAM) ページで"Key Vault Secrets Officer" ロールを自分に割り当てることで、適切なアクセス許可を自分自身に付与できます。 IAM は、ID とアクセスの管理を意味します。
プロジェクトの設定
このセクションでは、Azure C++ プロジェクトを設定するために必要なフォルダーとファイルを作成するプロセスについて説明します。
プロジェクト ディレクトリのルートに、 CMakeLists.txt ファイルを作成します。 このファイルは、CMake プロジェクトを構成するために使用されます。 CMakeLists.txt ファイルに次のコードを追加します。
# Specify the minimum version of CMake required to build this project cmake_minimum_required(VERSION 3.30.0) # Set the path to the vcpkg toolchain file # Remember to replace the path below with the path where you cloned vcpkg set(CMAKE_TOOLCHAIN_FILE "/path/to/vcpkg-root/scripts/buildsystems/vcpkg.cmake") # Define the project name, version, and the languages used project(azure_sample VERSION 0.1.0 LANGUAGES C CXX) # Find and include the azure-identity-cpp package find_package(azure-identity-cpp CONFIG REQUIRED) # Find and include the azure-security-keyvault-secrets-cpp package find_package(azure-security-keyvault-secrets-cpp CONFIG REQUIRED) # Add an executable target named 'azure_sample' built from the main.cpp source file add_executable(azure_sample main.cpp) # Link the azure-identity and azure-security-keyvault-secrets # libraries to the azure_sample target target_link_libraries(azure_sample PRIVATE Azure::azure-identity Azure::azure-security-keyvault-secrets )
プロジェクト ディレクトリのルートで、 main.cpp ファイルを作成します。 main.cpp ファイルに次のコードを追加します。
#include <azure/identity.hpp> #include <azure/keyvault/secrets.hpp> #include <iostream> using namespace Azure::Security::KeyVault::Secrets; int main() { try { // Set Key Vault URL string auto const keyVaultUrl = std::getenv("AZURE_KEYVAULT_URL"); // Create Default Azure Credential to Authenticate. // It will pick up on our AzureCLI login auto credential = std::make_shared<Azure::Identity::DefaultAzureCredential>(); // Create Key Vault Secret Client SecretClient secretClient(keyVaultUrl, credential); // Create a Secret std::string secretName("MySampleSecret"); std::string secretValue("My super secret value"); secretClient.SetSecret(secretName, secretValue); // Get the Secret KeyVaultSecret secret = secretClient.GetSecret(secretName).Value; std::string valueString = secret.Value.HasValue() ? secret.Value.Value() : "NONE RETURNED"; std::cout << "Secret is returned with name " << secret.Name << " and value " << valueString << std::endl; } catch (Azure::Core::Credentials::AuthenticationException const &e) { std::cout << "Authentication Exception happened:" << std::endl << e.what() << std::endl; return 1; } catch (Azure::Core::RequestFailedException const &e) { std::cout << "Key Vault Secret Client Exception happened:" << std::endl << e.Message << std::endl; return 1; } return 0; }
ビルド 成果物の ビルド ディレクトリを作成します。
ビルドと実行
このセクションでは、CMake コマンドを使用してプロジェクトを構成してビルドし、プログラムを実行してすべてが正しく設定されていることを確認する方法について説明します。 このセクションのコマンドは、 build
ディレクトリ、 CMakeLists.txt
、 main.cpp
ファイルがあるプロジェクトのルートから実行する必要があります。
CMake を構成するには、次のコマンドを入力します。
cmake -B ./build
プロジェクトをビルドするには、次のコマンドを入力します。
cmake --build ./build
プログラムを実行するには、次のコマンドを入力します。
.\build\Debug\azure_sample.exe
プログラムには次の出力が必要です。
Secret is returned with name MySampleSecret and value My super secret value
トラブルシューティング
リソース グループが見つかりません
AzureCLI を使用して Key Vault インスタンスを作成するときに、次のエラーが発生した場合、Key Vault インスタンスを追加しようとしているリソース グループは存在しません。
(ResourceGroupNotFound) Resource group '<your-resource-group-name>' could not be found.
Code: ResourceGroupNotFound
Message: Resource group '<your-resource-group-name>' could not be found.
リソース グループを作成するには、次のコマンドを使用します。
az group create --name <your-resource-group-name> --location <your-resource-group-location>
詳細については、 Azure リソース グループの管理に関する AzureCLI ドキュメントを参照してください。
CMake の構成またはビルドで Azure パッケージが見つからない
CMake 構成またはビルド コマンドを実行するときに、次のようなエラーが発生した場合、 CMakeLists.txt
ファイルは、CMake プロジェクトが確立される前またはまったく vcpkg.cmake
モジュールを実行していません。
CMake Error at CMakeLists.txt:12 (find_package):
Could not find a package configuration file provided by
"azure-identity-cpp" with any of the following names:
azure-identity-cppConfig.cmake
azure-identity-cpp-config.cmake
Add the installation prefix of "azure-identity-cpp" to CMAKE_PREFIX_PATH or
set "azure-identity-cpp_DIR" to a directory containing one of the above
files. If "azure-identity-cpp" provides a separate development package or
SDK, be sure it has been installed.
CMakeLists.txt ファイルで、set(CMAKE_TOOLCHAIN_FILE "/path/to/vcpkg-root/scripts/buildsystems/vcpkg.cmake")
行がproject(azure_sample VERSION 0.1.0 LANGUAGES C CXX)
の上にあることを確認します。
次に、/path/to/vcpkg-root/
行のset(CMAKE_TOOLCHAIN_FILE "/path/to/vcpkg-root/scripts/buildsystems/vcpkg.cmake")
が vcpkg がインストールされた場所に更新されていることを確認します。
cmake コードの構文エラー
CMake 構成またはビルド コマンドを実行するときに、次のエラーが発生した場合、 CMakeLists.txt ファイルに \
を使用するパスが含まれている可能性があります。 この問題は、ウィンドウのパスを使用する場合に一般的な場合があります。
Syntax error in cmake code at
C:/Users/username/Desktop/CppProject/CMakeLists.txt:6
when parsing string
C:\Users\username\vcpkg\scripts\buildsystems\vcpkg.cmake
Invalid character escape '\U'.
Windows ではファイル パスで \
が使用されますが、CMake ではファイル パス内の /
のみが使用されます。 この問題は、すべての\
を、/
使用されるパスのに置き換えることで解決できます。
変更後もエラーが解決しない場合は、「変更後も CMake エラーが解決しない 」セクションを参照して、それらを解決する方法を確認してください。
変更後も CMake エラーが解決しない
CMake 構成コマンドを実行するときに、修正する変更を行った後も同じエラーが引き続き発生する場合は、CMake キャッシュをクリアしてみてください。 CMake キャッシュをクリアするには、ビルド ディレクトリの内容を削除してから、CMake 構成コマンドを再実行します。
CMake 3.30 以降が必要
CMake 構成コマンドを実行するときに、次のようなエラーが発生した場合は、CMake のバージョンの更新が必要になる場合があります。
CMake Error at CMakeLists.txt:2 (cmake_minimum_required):
CMake 3.30.0 or higher is required. You are running version 3.25.0
このエラーを解決するには、CMake のインストールをエラー メッセージに記載されているバージョンに更新します。
呼び出し元がリソースに対してアクションを実行する権限がありません
C++ サンプル プログラムを実行するときに、次のようなエラーが発生した場合、指定された Key Vault リソースのシークレットを操作するための適切なアクセス許可がありません。
Key Vault Secret Client Exception happened:
Caller is not authorized to perform action on resource.
If role assignments, deny assignments or role definitions were changed recently, please observe propagation time.
Caller: <redacted-application-information>
Action: 'Microsoft.KeyVault/vaults/secrets/setSecret/action'
Resource: <redacted-resource-information>
Assignment: (not found)
DenyAssignmentId: null
DecisionReason: null
Vault: <your-key-vault-name>;location=<your-key-vault-location>
適切なアクセス許可は、Azure portal または Azure CLI を使用してアカウントに付与できます。
Azure portal を使用してアクセス許可を更新するには、Key Vault リソースの アクセス制御 (IAM) ページに移動します。 [ 追加 ] ドロップダウンを選択し、[ ロールの割り当ての追加] を選択します。 [ ロール ] ページで、 Key Vault Secrets Officer ロールを選択し、ページの下部にある [次へ ] を選択します。 [メンバー] ページで、[ユーザー、グループ、またはサービス プリンシパル] の [アクセス権の割り当て] オプションのままにし、[メンバーの選択] リンクを選択します。 右側のポップアップで、ID を検索して選択し、ポップアップの下部にある [選択 ] を選択します。 選択した ID が [メンバー ] セクションの表に表示されます。 下部にある [ 確認と割り当て ] ボタンを選択します。 次に、[ 確認と割り当て ] ボタンをもう一度選択します。
Azure CLI を使用してアクセス許可を更新するには、次のコマンドを入力し、 <upn>
をユーザー プリンシパル名、 <subscription-id>
サブスクリプション ID、 <resource-group-name>
リソース グループ名、 <your-unique-keyvault-name>
を Key Vault インスタンス名に置き換えます。
az role assignment create --role "Key Vault Secrets Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
VS Code にエラーが含まれる
VS Code の使用時に include ステートメントの下にエラー行が表示される場合 (次の図を参照)、エディターはインクルード ディレクトリを検索する場所を認識しません。
vcpkg は、マニフェスト モードの場合、インクルード ヘッダーを build/vcpkg_installed/<vcpkg-platform-triplet>/include
に配置します。
プラットフォームに対応した vcpkg triplet と<vcpkg-platform-triplet>
を置き換えてください。
VS Code の設定にインクルード ディレクトリを追加するには、エラー行を含む include ステートメントにカーソルを合わせます。 次に、ポップアップの下部にある [クイック修正...] リンクを選択します。 クイック修正オプションで、["includePath": ${workspaceFolder}/build/vcpkg_installed/<vcpkg-platform-triplet>/include
に追加] オプションを選択します。 [C/C++ 拡張機能の構成] タブが開き、[インクルード パス] セクションの下にインクルード ディレクトリへのパスが表示されます。
Linux bootstrap-vcpkg で依存関係が見つかりませんでした
Linux で bootstrap-vcpkg.sh スクリプトを実行するときに、次のようなエラーが発生した場合は、スクリプトを実行するために必要なツールがインストールされていません。
Could not find zip. Please install it (and other dependencies) with:
On Debian and Ubuntu derivatives:
sudo apt-get install curl zip unzip tar
On recent Red Hat and Fedora derivatives:
sudo dnf install curl zip unzip tar
On older Red Hat and Fedora derivatives:
sudo yum install curl zip unzip tar
On SUSE Linux and derivatives:
sudo zypper install curl zip unzip tar
On Arch Linux and derivatives:
sudo pacman -Syu base-devel git curl zip unzip tar cmake ninja
On Alpine:
apk add build-base cmake ninja zip unzip curl git
(and export VCPKG_FORCE_SYSTEM_BINARIES=1)
ツールをインストールするには、Linux ディストリビューションのエラー メッセージで指定されたコマンドを使用します。 たとえば、Ubuntu では次のコマンドになります。
sudo apt-get install curl zip unzip tar
次に、 bootstrap-vcpkg.sh
スクリプトを再実行します。
Linux でツールチェーン ファイルが見つかりませんでした
CMake 構成コマンドを実行するときに、次のようなエラーが発生した場合、 vcpkg.cmake モジュールへのパスが正しく設定されませんでした。
CMake Error at /usr/share/cmake-3.28/Modules/CMakeDetermineSystem.cmake:176 (message):
Could not find toolchain file:
/path/to/vcpkg-root/scripts/buildsystems/vcpkg.cmake
Call Stack (most recent call first):
CMakeLists.txt:9 (project)
CMakeLists.txt ファイルで、vcpkg がインストールされた場所への正しいパスで set(CMAKE_TOOLCHAIN_FILE "/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake")
ステートメントを更新します。
Linux vcpkg のインストールに失敗しました
CMake 構成コマンドを実行するときに、次のようなエラーが発生した場合は、パッケージのシステム依存関係をインストールする必要があります。
CMake Error at /path/to/vcpkg/scripts/buildsystems/vcpkg.cmake:904 (message):
vcpkg install failed. See logs for more information:
必要なシステム パッケージを見つけるには、CMake 構成コマンドの出力で、 Could not find <system-package>
で始まる行を検索し、 <system-package>
を不足しているシステム パッケージに置き換えます。 この行の下には、不足しているシステム パッケージをインストールするコマンドが必要です。 そのコマンドを実行します。 次に、CMake 構成コマンドを再実行します。 不足しているシステム パッケージの数によっては、このプロセスを数回繰り返す必要がある場合があります。