はじめに
- Java楽しんでいますか
- この記事では以下のことを書いています
- Javaおよびツールのインストール(on macOS 10.15.7)
- 雛形プロジェクトの動かし方
- Azure Functionsへのデプロイ
- 「Java開発者のためのAzure入門 (2021/4/6– 2021/5/9)」というキャンペーンへの投稿記事です
- 私はElixirというプログラミング言語を使って、「【毎日自動更新】Java開発者のためのAzure入門(2021/4/6–2021/5/9) LGTMランキング!」という記事を自動更新しています
- 当初は、これと同じことをJavaでやってみようと考えていました
- ただそれだとただキャンペーンに参加するためだけの記事になってしまう気がしました
- 自分にとっても面白くはないので、別のことはないかと模索しました
- 自分の役に立つことはないかと
- そこでおもいついたのが、Seventyになんなんとする母がスマートフォンに最近、買い替えまして、その操作の練習支援になるようなことをしたいとおもいました
- みうらじゅんさんの「親孝行プレイ」に通じるものがあるかもしれません
- ごめんなさい、まだ読んでいないです
- 「「ない仕事」の作り方1」は読んでいます
- ところが最近、Javaに触れる機会が少なかったのでさてどこから手をつけようかと逡巡してしまいました
- それで次にとった行動は、「Azure Java」で検索してたどり着いたAzureの公式ドキュメントをそのままやってみるということです
- 以下のドキュメントをみていくとよさそうです
この記事を書いている人
- Javaは使ったことがありますが、ここ5年くらいはほとんど触っていません
- 個人開発でリリースしているandroidアプリはメンテナンスを続けています
- オートレースオンデマンド再生
- 読書日記
- ご利用のみなさま、ありがとうございます
- 個人開発でリリースしているandroidアプリはメンテナンスを続けています
- 最近はElixirというプログラミング言語が大のお気に入りでございます
① 環境構築
- macOS Catalina 10.15.7
- Oracle JDK、JREを以前インストールしていた
- まずは、環境を構成するを丁寧にやってみませふ
Oracle JDK、JREのアンインストール
- macOSでのJDKのアンインストール
- macOSでのJREのアンインストール
- 上記に従ってすすめました
- なんかこわい
- おっかなびっくりだけど公式の手順なので迷わず行けよ、行けばわかるさ、ありがとう!
- なぜアンインストールしたのかについては、環境を構成するというところで、Azul Zulu for Azure - Enterprise Edition JDK buildsのインストールがすすめられていて、なんとなく同じようなものが2つあるのはよくないのかなあとおもったからです
- 共存できたのかもしれませんし、
- 詳しくはよくわかっていないのですが、JDKの新しいリリース・モデ および提供ライセンスについて が関係しているようにおもいます
Java11 のインストール
- https://www.azul.com/downloads/azure-only/zulu/?version=java-11-lts
- ここから.dmgをダウンロードしてダブルクリック
- 画面の指示通りすすめればこわくない
- インストーラーの画面はなんだか楽しそう!
~/.zshenv
export JAVA_HOME=`/usr/libexec/java_home`
- と書いていました
- いつ書いたのかはとんと思い出せないのです
$ source ~/.zshenv
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home
$ java -version
openjdk version "11.0.10" 2021-01-19 LTS
OpenJDK Runtime Environment 21.1-(Zulu-11.45+27-macosx_x64)-Microsoft-Azure-restricted (build 11.0.10+9-LTS)
OpenJDK 64-Bit Server VM 21.1-(Zulu-11.45+27-macosx_x64)-Microsoft-Azure-restricted (build 11.0.10+9-LTS, mixed mode)
Apache Mavenのインストール
$ brew install maven
$ mvn -v
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: /usr/local/Cellar/maven/3.8.1/libexec
Java version: 1.8.0_282, vendor: Azul Systems, Inc., runtime: /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "mac os x", version: "10.15.7", arch: "x86_64", family: "mac"
Visual Studio Code
- 私はすでにインストール済みでした
- 重宝しております
- ありがとうございます
Java Extension Pack
- リンク先に飛んで、
Install
ボタンを押す
Visual Studio Code 用 Azure Functions 拡張機能
- リンク先に飛んで、
Install
ボタンを押す -
Visual Studio Codeが立ち上がって、そちらで
Install
ボタンを押す
② ローカル プロジェクトを作成する
- リンク先の通りにやればいいのですが、最初のフォルダ選択は、中身が空の
myFunction
ディレクトリを選択すると吉です - ディレクトリ作ってくれるだろうと高を括ってすすめるとぶちまけられます
- なんのことだかわからない方は何事も経験なので
~/Desktop
でも選んでやってみるとわかりますが後始末が面倒なのでおすすめしません- もしやっちまったら、
ls -la
とかして日付をみて、ぶちまけてしまったファイルやフォルダを消していくとよいでしょう
- もしやっちまったら、
- なんのことだかわからない方は何事も経験なので
- 「provide an app name (アプリ名を指定してください) : [myFunction-12345] 」のところの
12345
という数字は、Visual Studio Codeが表示していた値を変更せずにそのままエンターを押しました
③ 関数をローカルで実行する
-
F5
を押しますと、azure-functions-core-toolsのインストールがはじまりました- Azure Functions Core Tools のインストールに書いてあるようなことです
- イゴいた、イゴいた
- ここまでポチポチやっただけで、自らはJavaのコードを一切書いていません
- デフォルトで以下のコードが生成されています
-
name
をキーとするクエリパラメータの値を、"Hello, " + name
して返すプログラムです -
@HttpTrigger
のところはなにやらごちゃごちゃしていますが、とりあえず景色だとおもって関数本体に目を通してみるとそんなに難しいことは書いてありません
src/main/java/com/function/Function.java
package com.function;
import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import java.util.Optional;
/**
* Azure Functions with HTTP Trigger.
*/
public class Function {
/**
* This function listens at endpoint "/api/HttpExample". Two ways to invoke it using "curl" command in bash:
* 1. curl -d "HTTP Body" {your host}/api/HttpExample
* 2. curl "{your host}/api/HttpExample?name=HTTP%20Query"
*/
@FunctionName("HttpExample")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
// Parse query parameter
final String query = request.getQueryParameters().get("name");
final String name = request.getBody().orElse(query);
if (name == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
} else {
return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
}
}
④ Azure へのサインイン
- リンクの通りに進めます
- すでにAzureのアカウントは持っていましたし、すんなりいきました
- まだもっていないよ〜 という方は、
- Azure | クラウドコト始め l まずは"Azure"に登録してみよう l 初心者向け01 にて詳しく丁寧に解説されています! のでご参照ください
- そうそう、なにせ私には日本マイクロソフト賞④の受賞実績がありますから、Azureのアカウントは持っているのでありますよ
- もう一度言います
- $\huge{日本マイクロソフト賞④}$
- を受賞したことがあります
- その原動力となったのはElixirが好きだというただ一点です
- その話はまた別の機会に
⑤ Azure にプロジェクトを発行する
- リンクの通りに進めます
-
awesome-test-12345
と、Enter a globally unique name for the function app
に対して今回は入力してみました
⑥ Azure で関数を実行する
- リンクの通りに進めます
- イゴいた、イゴいた
⑦ リソースをクリーンアップする
- 私の場合ですとリソースグループ
awesometest12345
を削除しました
まとめ
- ポチポチしただけですが、Azure FunctionsにJavaのプログラムをデプロイできました
- 次は、本題のタイマをトリガとしてAzure FunctionsでJavaのプログラムをイゴかす方法を書きたいとおもいます
あわせて読みたいオススメ記事
最後の最後に
Elixirって何よ という方へ
- ちょいちょいElixirを散りばめました
- 2020/12/26時点くらいのスクリーンショット
- Elixirについてもっと知りたい方は下記の本をオススメします
-
elixir.jp Slackの
#autoracex
というところに私は入り浸っておりますのでお気軽にお声がけください -
勉強会が頻繁に行われています
- 私がよく参加している勉強会です
- autoracex 【毎週月曜】 主催
- Sapporo.beam 【毎週水曜】
- OkazaKirin.beam 【毎週木曜】
- fukuoka.ex/kokura.ex 【毎月2~3回】
- NervesJP 【毎月1回】
(@piacerex さん作 )
-
「「ない仕事」の作り方」は、2021年本屋大賞 『発掘部門』にて、「超発掘本!」に選ばれております。本屋大賞に選ばれたから読んだのではなく、その前から私は推していました。証拠は、2021/04/09にアップロードしたLT資料に紹介をいれています。紹介文は「私の5分の話なんかより、この本を1時間〜2時間かけて読んだほうがよっぽどいい」です。 ↩
-
どうしてAzure Functionsにすぐ飛びつけたのかというと、AWSの話で申し訳ありませんが、Lambdaっぽいものを探そうとしてたどり着きました。じゃあ、その前のLambdaとの馴れ初めは忘れてしまいました。 ↩