Azure Toolkit for IntelliJ で Azure Functions ローカル実行時のエラー

.NET Framework1.0 が世に出た時から仕事で C# を使っていますが、Java は15年ぐらい前に少し触った程度の私です。これから IntelliJ IDEA と Spring Boot を使ってあれこれ試していきたいと思います。どっちも初心者なので、突っかかったところ正直に書いていきたいと思います。

## 別の IntelliJ + Spring Boot 記事

- [IntelliJ IDEAで Spring Boot を Azure App Service (WebApps)へデプロイする](https://qiita.com/takashiuesaka/items/ad63c7774fef3d75ebcc)
- [Spring Boot (Spring Security) で Azure App Service の認証 (EasyAuth) を使う](https://qiita.com/takashiuesaka/items/03640c0c371eca015915)

## 先に結論

「Azure Functions Core Tools is not found」というエラーになった場合の対処です。

- Azure Functions プロジェクトを作る前に Azure Functions Core Tools の func.exe へのパスを Azure Toolkit for IntelliJ プラグインに設定してください。
- パス設定する前にプロジェクト作ってしまったら、実行構成を開いて func.exe へのパスを設定してください。

## 今回は Spring Boot じゃないんだけど

タイトルの通り、IntelliJ IDEA で Azure Functions の新規プロジェクトを作成し、ローカル実行しようとしました。
Java での Azure Functions プロジェクト作成はとても簡単です。Azure Toolkit for IntelliJ プラグインをインストールすると新規プロジェクトに Azure Functions っていうのが増えていますので、それを選択するだけです。Trigger の種類が少ないですが、これからもっと増えていくことが期待できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222127/42e4235b-be4c-f9f6-22e2-4ab3b9f66de1.png)

で、じゃあテンプレが作られたので実行してみよう・・・と実行するとよくわからないエラーになります。
修正前にキャプチャし損ねたので画像がないのですが、Azure Functions Core Tools is not foundというメッセージが表示されていました。

## 何度やっても Azure Functions Core Tools is not found が表示され続ける

Azure Functions Core Tools の func.exe へのパスがわからないよ、というエラーなので、Azure Toolkit for IntelliJ の設定画面で指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222127/ffa80cf5-5f3c-6809-c4f8-6738968875bb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222127/f7d6e510-30e2-8cad-b64b-2c9bc24c8aa6.png)
この画像の func.exe へのパスは、 Azure Functions Core Tools の切り替えツールである、funcvm を使用しているのでこんなパスですが、他のインストール方式を使っている場合は全然違うパスのはずなので各自のインストール結果に合わせてください。

funcvm について興味がある方は [Azure Functions Core Tools の複数バージョンを切り替える](https://qiita.com/takashiuesaka/items/c2d7e1b299e3c50963ab) を参考にしてください。

よし、これでOKだろう、と思って再度実行しても同じエラー、Azure Functions Core Tools is not found が表示され続けます。
（修正後は二度と表示されないのでキャプチャがありません。失敗。）

## 実行構成を修正する

何度 func.exe へのパスを指定し直しても、バージョンを変えても同じエラーが出続けます。正直、この段階で心が折れそうになったのですが、ふとしたことがきっかけで修正されました。

実行構成を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222127/bd55abd8-08e1-531c-0b85-e22e00b979c2.png)

あれ、こっちにも Azure Functions Core Tools へのパスを指定する箇所があるじゃないですか。指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222127/50aaec29-c886-4e80-ba2f-b52ad1de9cf9.png)

## 動いた！

Azure Functions Core Tools が動いて、メソッドが Functions として認識されたことを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222127/928d89da-b263-12af-d21d-5d3451cda91a.png)

ブラウザからも確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222127/8efa1776-0779-f9ee-301c-cd2080545230.png)
ばっちりですね。

## まとめ

再現性を確認するために、別の新しい Functions プロジェクトを作ってローカル実行すると、今度はエラーが起こらず無事に起動しました。

この結果からの推測ですが、Azure Toolkit for IntelliJ プラグインは、プロジェクト作成時に Azure Functions Core Tools へのパスが指定されていれば、実行構成にそのパスを設定しますが、指定されていないと Azure Functions Core Tools パスを不明のまま実行構成をセットアップしてしまうのではないかと思われます。

そして、プロジェクト作成後に Azure Toolkit for IntelliJ プラグインの構成に Azure Functions Core Tools へのパスを指定しても、既存の実行構成には反映されなかったのでしょう。

知っていればすぐ解決できることですが、知らないと無駄にハマりますね、こういうのは。