0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure FunctionからHULFT Squareを実行してみた

Last updated at Posted at 2025-08-28

はじめに

こんにちは。すぎもんです:grinning:
HULFT Squareのジョブを外部サービスから起動したいというケースは多いと思い
過去に「AWS Lambdaを使ってHULFT Squareを実行してみた」をという記事をご紹介しました。
実際の業務ではAWS以外のサービスでも同じことをしたい場合もあると思います。

そこで今回は、Microsoftが提供するサーバーレスコンピューティングサービスである
Azure Functionを使用して、HULFT Square を実行することが出来るか試してみます。
これにより、Azureから任意のタイミングでHULFT Squareを実行させることが出来ます。

今回やること

image.png
今回は外部のPCから、Azure Function (関数アプリ) を実行し、HULFT Squareを稼働させます。

実施するのに必要な設定

HULFT Square側の設定

0.HULFT Squareのスクリプトを実行させるAPIジョブ(WebAPI公開)の用意

Azure側の設定

1.関数アプリ作成
2.パラメーターを環境変数に設定
3.関数アプリにPythonのモジュールをデプロイ
4.API Managementの設定

HULFT Square側の設定

0.HULFT Squareのスクリプトを実行させるAPIジョブ(WebAPI公開)の用意

image.png

事前にHULFT Squareを実行させるのに必要なREST APIジョブの設定をしてください。
設定の仕方は過去の記事を参照ください。
コマンドを使って外部からHULFT Squareを実行する方法

Azure側の設定

1.関数アプリ作成
2.パラメーターを環境変数に設定
3.関数アプリにPythonのモジュールをデプロイ
4.API Managementの設定

1.関数アプリ作成

Azure Function (関数アプリ) は、「Microsoft Azure」が提供する、サーバーレスアーキテクチャを実装するためのサービスです。
この機能を使用することによって汎用性の高い実装が可能になります。

image.png
ここでは関数アプリ(Azure Function)を作成し、HULFT Squareを実行させるのに必要な設定をしていきます

検索バーから「関数アプリ」と検索します
image.png

「新規作成」を選択後今回は「従量課金」のプランを選択します
image.png

「関数アプリの作成」画面が出てくるので設定していきます
image.png
Pythonのバージョンは2025年7月時点のものです

image.png

設定したら 確認および作成 を押下します。

ーーー

2.パラメーターを環境変数に設定

ここでは HULFT Square を実行するのに必要な値を環境変数に設定します

リソースが作成されたら「環境変数」を押下します
image.png

〇環境変数には下記を入れます

名前
FUNCTION_NAME ご自身で命名したAzure関数アプリの名前
mail HULFT Squareのログイン用メールアドレス
pass HULFT Squareのログイン用パスワード
Tokens HULFT Squareのリフレッシュトークン
JobURL HULFT SquareのREST APIジョブのURLエンドポイント

3.関数アプリにPythonのモジュールをデプロイ

Azure functionにローカルPCからモジュールを入れる方法はいくつかありますが、今回は VS Code を使用します。

➀VS Codeをインストール
お持ちでない方はご自身のPCにVS Codeをインストールしてください。

➁ VS CodeにAzure Functions拡張機能のインストール
VS CodeをPCにインストールが完了したら、Azure Functions拡張機能をインストールします。
VS Codeの左側のサイドバーの [拡張機能] アイコンをクリックし、Azure Functions と検索してインストールします。
※詳細はMicrosoftの公式仕様書にも記載がありますので、Visual Studio Code 用 Azure Functions 拡張機能をこちらからもダウンロード可能です。

➂プロジェクトの作成とPythonコードの保存
VS Codeで新しいフォルダーを作成し、Azure Functionsプロジェクトを作成します

  1. [F1キー] を押してコマンドパレットを開き、Azure Functions: Create New Project... を選択します

function2.png

任意のローカルPCのパスを選択します
(ここで指定するフォルダの階層にAzurefunctionが紐づきます)
function8.png

プロジェクトの言語として Python を選択します
function3.png

Skip virtual environment を選択します
function4.png

テンプレートとして HTTP trigger を選択します
function5.png

function6.png

FUNCTION を選択します
function7.png

ここまででローカルのPCと関数アプリを紐づけることに成功しました
その際、自動的にファイルがいくつか作成されたと思います。
ここからは作成されたファイルを編集していきます。

実行したいPythonを設定

今回デプロイするファイルの中身は下記になります

image.png

➀ 実行に必要なPythonのライブラリー

 使用するファイル名:requirements.txt
 上記ファイルの中に必要なライブラリを下記のように登録します

requirements.txt
# DO NOT include azure-functions-worker in this file
# The Python Worker is managed by Azure Functions platform
# Manually managing azure-functions-worker may cause unexpected issues

requests

➁ 実行したいPythonファイル
 使用するファイル名:function_app.py
 上記ファイルの中に必要なPythonコードを下記のように登録します

function_app.py
import json
import requests
import os
import logging

import azure.functions as func

FUNCTION_AND_ROUTE_NAME = os.environ.get('FUNCTION_NAME', 'MyDefaultValue')

app = func.FunctionApp()

@app.function_name(name=FUNCTION_AND_ROUTE_NAME)
@app.route(route=FUNCTION_AND_ROUTE_NAME, methods=["get", "post"])
def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    # Step 1: メールとパスワードを使ってログインAPIでアクセストークンを取得する
    email = os.environ.get('mail')  # 環境変数からメールを取得
    password = os.environ.get('pass')  # 環境変数からパスワードを取得
    url = "https://app.square.hulft.com/v1/users/login"
    payload = json.dumps({"email": email, "password": password})
    headers = {"Content-Type": "application/json"}

    try:
        response = requests.request("POST", url, headers=headers, data=payload)
        response.raise_for_status()  # HTTPエラーをチェック

        logging.info(f"Login API Response: {response.text}")  # 応答内容をログ出力

        response_data = json.loads(response.text)
        access_token_email_password = response_data["accessToken"]

    except requests.exceptions.RequestException as e:
        logging.error(f"Request failed: {e}")
        return func.HttpResponse(
             "Request failed due to network issues",
             status_code=500
        )
    except KeyError:
        logging.error(f"AccessToken not found. Response: {response.text}")
        return func.HttpResponse(
             "AccessToken not found",
             status_code=500
        )

    # Step 2: リフレッシュトークンを使用して、Login APIでアクセストークンを取得する
    refresh_token = os.environ.get('Tokens')  # 環境変数からリフレッシュトークンを取得
    url = "https://app.square.hulft.com/v1/rest-api-token"
    payload = json.dumps({"refreshToken": refresh_token})
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {access_token_email_password}"
    }

    try:
        response = requests.request("POST", url, headers=headers, data=payload)
        response.raise_for_status()
        access_token = json.loads(response.text)["accessToken"]
    except requests.exceptions.RequestException as e:
        logging.error(f"Refresh token request failed: {e}")
        return func.HttpResponse(
             "Refresh token request failed",
             status_code=500
        )
    except KeyError:
        logging.error("Access token not found in refresh token response")
        return func.HttpResponse(
             "Access token not found in refresh token response",
             status_code=500
        )

    # Step 3: 取得したアクセストークンを使ってHTTPクライアントからREST API Job Endpointを実行する
    job_url = os.environ.get('JobURL')
    headers = {
            "Authorization": f"Bearer {access_token}",
            "X-HSQ-Async": "true"
        }

    try:
        response = requests.post(job_url, headers=headers)
        response.raise_for_status()

        logging.info(f"Job API Response: {response.text}")

        return func.HttpResponse(
             "Successfully executed HULFT Square Job",
             status_code=200
        )
    except requests.exceptions.RequestException as e:
        logging.error(f"Job request failed: {e}")
        return func.HttpResponse(
             "Job request failed",
             status_code=500
        )

    except Exception as e:
        logging.exception("An unexpected error occurred")  
        return func.HttpResponse(
             "An unexpected error occurred",
             status_code=500
        )

紐づいたローカルのファイルを選択し、実行したいPythonのコードを入れます。
記入後は [Ctrl + S] で保存できます。
image.png

ローカルでテスト実行確認をしたい場合は local.settings.json にも値を設定してください

デバッグ実行   :F5キー
デバッグ強制停止 :Shift + F5キー

local.settings.json
{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "python",,
    "FUNCTION_NAME": "<ご自身で命名したAzure関数アプリの名前>",
    "mail": "<HULFT Squareのログイン用メールアドレス>",
    "pass": "<HULFT Squareのログイン用パスワード>",
    "Tokens": "<HULFT Squareのリフレッシュトークン>",
    "JobURL": "https://<HULFT SquareのREST APIジョブのURLエンドポイント>"
  }
}

➃デプロイする
作成が完了したらデプロイをします
VS Codeで F1キーを押してコマンドパレットをいてください
Azure Functions: Deploy to Function App... を選択します
ご自身のデプロイしたいAzure functionを選んでください
image.png

デプロイに成功するとAzure Portalの関数アプリの画面にデプロイした関数の名前が表示されます。
image.png

デプロイ後に実行させます
HTTPトリガー は Azure function の標準機能で実行させるURLを取得するすることが出来ます
➀デプロイした関数アプリの名前を押下
➁「関数のURLの取得」を押下
➂画面右に「関数のURLを取得」というバーが表示されるのでそこから実行するURLを取得します

image.png

4.API Managementの設定

Azure API Management はAzure functionを実行させることが出来るもう一つの方法になります。
この機能を使用することで実行にIP制限をかけたり、実行のログを取得したりすることが可能になります。
image.png

ここではこの機能を使って実行に必要なURLを取得する方法をご紹介します。

➀API Management作成

検索バーで「API」と入力し ”API Managementサービス” を選択
image.png

[ 作成 ] を押下して必要項目を入力していきます
image.png

image.png
入力が完了したら「作成と確認」を押下してください。
しばらくするとリソースが作成されたことを確認出来ます。

➁API Management と Azure functionを紐づけます

作成したリソース名を選択し下記の順番でAzurefunctionと紐づけます
[作成したリソース] - [APIs] - [API] - [Add API] - [Function APP]
image.png

[Browse]を選択
image.png

関数アプリの [選択] を押下して作成したAzurefunctionを選択します
image.png

これでAPImanagementとAzure Functionの紐づけは成功しました。

➂実行するためのエンドポイントとキー取得

作成したAPIを選択し下記の手順で開いていきます
[作成したAPIs] - [POST] - [Test] - [Add API]

[Request URL] が確認出来るのでこのエンドポイントを使用します
image.png

APIキーを使わない場合
[settings] のタブで[Subscription required] にチェックを入れなければAPIキーなしで実行させることが可能です
image.png

APIキーを使用する場合は下記から取得出来ます
[サブスクリプション] - [・・・] - [キーの表示/非表示] - [主キー]
image.png

実行してみた

最後に上記で取得したエンドポイントを使って実際に実行してみたいと思います。

image.png

実際にブラウザーから実行してみました。

image.png

ログを見ると正常に実行出来たことが確認出来ます。
image.png

最後に

今回は AzureからHULFT Squareを実行させましたが、いかがでしたでしょうか。

業務の中ではAzure上のサービスの動作をトリガーにHULFT Squareを動かすことも多いのではないでしょうか

このブログでは、今後も様々なTopics記事や接続検証等、皆さんの参考になるような記事を投稿していきたいと思います!
ここまで読んでいただきありがとうございました。それでは、また!:raised_hand:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?