ハッカソンで使い勝手のよさそうな Microsoft のサービス (主に Azure) の紹介 2022年9月版

## 更新履歴

- 2022/09/11 Power Platform を追加
- 2022/10/01 Custom Vision を追加

## 本文

今日は、こちらの記事の更新版を書いていこうと思います。

https://qiita.com/okazuki/items/b7a35278ecb1fd63a8c9

前の記事を書いてから2年近くたっていて本当に状況が変わっています。時がたつのは早いですね。

## 本記事の目的

ハッカソンはアイデアを短期間で実装することが肝なので、アイデアのコア部分の実装に集中して周辺の付帯的な部分はありものを組み合わせたり、バックエンドが必要なときはクラウドの PaaS や FaaS 系のサービスあたりを使ってさくっとデプロイしてしまいたい所ですよね。なので、この記事ではそういった用途に使い勝手のよさそうなサービスをざっと紹介しようと思います。

## AI 系サービス

Azure Cognitive Services というブランドでいろいろなサービスが提供されています。

https://azure.microsoft.com/ja-jp/services/cognitive-services/

これは基本的に事前にトレーニングされた AI を Web API として呼び出せる形でデプロイできます。中には少しカスタマイズしたりしたうえで API としてデプロイできるものもあるので使いようによってはとても面白いものができるかもしれません。いくつか使い勝手のよさそうなものをピックアップしたいと思います。

### 使い方の流れ

色々ありますが、どれも Azure のポータル (https://portal.azure.com) で自分が使いたい API に対応するリソースを新規作成して、エンドポイントと API キーを取得して、それを使ってアプリケーションから REST API を叩くか各言語ごとに提供されている SDK を使って呼び出す形になります。

普通の API を提供しているサービスだと利用登録をしてキーを発行というような流れになると思いますが、それとは少し違うので気を付けてください。各サービスごとにクイックスタートのドキュメントのリンクをつけているので、興味のあるサービスがある場合は Azure のアカウント (サブスクリプション) を作った後にクイックスタートの手順に従ってセットアップしてみてください。

### 音声系

#### 音声からテキストへの変換

最近はモバイルデバイスで音声からテキストに変換するような機能もあったりしますがサーバーサイドで音声からテキスト変換をしたりするケースやマイク以外からの入力（音声ファイルなど）でも文字おこしをしたいといったものに使えます。

各言語向けに SDK も提供されていたり、サンプルも GitHub で公開されているので、ある程度プログラムを書ける人であれば、このクイックスタートのドキュメントを開いて自分の使いたい言語のタブを開くのが一番わかりやすいと思います。

https://docs.microsoft.com/ja-jp/azure/cognitive-services/speech-service/get-started-speech-to-text?tabs=terminal&pivots=programming-language-java

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70288/ffbb5905-4bd1-8019-f6df-8366b64e4f6d.png)

#### テキストから音声への変換

逆に喋らせたい！！という場合にはテキストから音声への変換を行うこともできます。
こちらも同様にクイックスタートに各言語での使い方が書いてあるので見てみると良いと思います。

https://docs.microsoft.com/ja-jp/azure/cognitive-services/speech-service/get-started-text-to-speech?tabs=terminal&pivots=programming-language-java

### 言語系

次は言葉を理解する系の AI サービスの紹介をします。これは結構使い勝手いいものがあるのでお勧めです。

#### 質問応答

質問に対して回答を返してくれる API を簡単に作れます！使い方のイメージとしては質問文と回答文のペアをどんどん登録していって学習させると、質問文に対して回答を返してくれる API が作れるようなものです。

https://azure.microsoft.com/ja-jp/services/cognitive-services/question-answering/#overview

イメージとしてはこんな感じで問い合わせると回答をくれるような機能を提供するアプリの裏側として使えます。画像は英語ですが日本語でも利用可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70288/67474c34-d4c8-8ad5-09d9-a26f124fbec7.png)

質問文は完全一致ではなく、ある程度よきにはからってくれます。1つの回答文に対して質問文は複数パターン入れたりできるので、それでチューニングを行い精度を上げていく形になります。

その他に質問文に「こんにちは」を入れて回答文に「こんにちは、私は〇〇です」のようなものを入れたりしておくと、なんとなく会話出来てる風な API に仕立てることもできます。使い方は無限大！！

主な利用用途は質疑応答チャットボットの裏側で動くナレッジベースといったものですが、使いようによっては他にも利用できると思います。

こちらもクイックスタートのドキュメントの流れにそって使い始めてみるのが良いと思います。

https://docs.microsoft.com/ja-jp/azure/cognitive-services/language-service/question-answering/quickstart/sdk?pivots=studio

#### 翻訳

翻訳機能を提供する API も作ることが出来ます。こちらがクイックスタートになります。

https://docs.microsoft.com/ja-jp/azure/cognitive-services/translator/quickstart-translator?tabs=csharp

翻訳機能についてはイメージしやすいと思います。日本語テキストから英語のテキストにしたり逆に英語から日本語にしたり。とても簡単に利用できるので、何か海外の人向けのサービスや日本人が海外に行ったときのサービスに組み込んだりするのにお勧めです。

### 視覚系

次に画像を解析する視覚系のサービスを紹介します。

#### Computer Vision

こちらは画像を解析してくれる API になります。例えば画像を投げ込むと、これはどんな画像なのか？ということを JSON 形式で返してくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70288/45488f13-b7ef-8fa1-1bb9-2fc0097977ec.png)

その他に以下のように画像の、どの場所に何が含まれているかといった結果も返してくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70288/231caf35-e06a-66f6-2343-83a6d17c451a.png)

こちらもクイックスタートから始めるのが一番とっつきやすいと思います。

https://docs.microsoft.com/ja-jp/azure/cognitive-services/computer-vision/quickstarts-sdk/image-analysis-client-library?tabs=visual-studio&pivots=programming-language-csharp

ただ、結果が英語なんじゃが…となると思いますが、言語のカテゴリーで紹介した翻訳の API を併せて使うことで日本語化が可能です。Computer Vision を使う場合には併せて使うと良いでしょう。

#### OCR (文字認識)

Computer Vision の一部になるのですが便利なので個別に紹介したいと思います。端的にいうと光学文字認識 (OCR) が出来ます。画像を渡すと書いてある文字が結果として返ってきます。これもアイデア次第では何かに使えると思います。OCRで文字を読んで翻訳 API にかけるだけでカメラで撮った英語の看板を日本語に翻訳してくれるようなアプリとかに使えると思います。

クイックスタートのドキュメントはこちらになります。

https://docs.microsoft.com/ja-jp/azure/cognitive-services/computer-vision/quickstarts-sdk/client-library?tabs=visual-studio&pivots=programming-language-csharp

## Custom Vision

自分で画像をトレーニングさせて、例えば猫と犬を認識するような Web API を作ることが出来ます。トレーニング用の画像を自分で準備してラベル付けを行う必要がありますが、画像を見て判断するようなアプリの裏方として使いやすいと思います。

製品紹介ページはこちらになります。

https://azure.microsoft.com/ja-jp/products/cognitive-services/custom-vision-service/

ドキュメントのトップページはこちらになります。

https://learn.microsoft.com/ja-jp/azure/cognitive-services/custom-vision-service/

ドキュメントの中のクイックスタートを見ると使い方がわかりやすいと思います。こちらがトレーニングの方法です。

https://learn.microsoft.com/ja-jp/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier

トレーニングした結果を実際にアプリから使う方法はこちらになります。

https://learn.microsoft.com/ja-jp/azure/cognitive-services/custom-vision-service/quickstarts/image-classification?tabs=visual-studio&pivots=programming-language-csharp

## Bing Image Search

Bing 系の API も色々あるのですが、個人的に一押しなものを紹介したいと思います。名前のとおりテキストから画像を検索してくれる API です。

https://www.microsoft.com/en-us/bing/apis/bing-image-search-api

説明ページとドキュメントが英語しかないというのがハードルが高いのですが…この API を使うと画像検索が使えるようになります。私は以前この API と OCR の API を組み合わせて英語のレストランのメニューの写真をとって、レストランのメニューの料理名の画像を返すといったようなアプリを作ってみました。地味に便利。

https://qiita.com/okazuki/items/d867a29f711f8e96857c

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70288/964c3c7b-de1c-bd8b-5d6d-78a858c9b7fb.png)

## 作ったアプリをデプロイしたい

ここまでは簡単に使える Web API として使えるサービスを紹介してきました。ハッカソンでは API を使うだけではなく自分たちで作った Web アプリケーションや Web API をデプロイして動かす必要があると思います。その時に使えるサービスを紹介したいと思います。

### Azure App Service

このサービスを使うと .NET, Node.js, Java, Python, PHP で作られたアプリケーションを非常に簡単にデプロイして動かすことが出来ます。

https://azure.microsoft.com/ja-jp/services/app-service/

こちらのサービスも各言語ごとにデプロイをするクイックスタートがあるので自分の使う言語にあわせて確認してみてください。

https://docs.microsoft.com/ja-jp/azure/app-service/quickstart-nodejs?tabs=windows&pivots=development-environment-vscode

https://docs.microsoft.com/ja-jp/azure/app-service/quickstart-php?tabs=cli&pivots=platform-linux

https://docs.microsoft.com/ja-jp/azure/app-service/quickstart-java?tabs=javase&pivots=platform-linux-development-environment-maven

https://docs.microsoft.com/ja-jp/azure/app-service/quickstart-python?tabs=flask%2Cwindows%2Cazure-cli%2Cvscode-deploy%2Cdeploy-instructions-azportal%2Cterminal-bash%2Cdeploy-instructions-zip-azcli

https://docs.microsoft.com/ja-jp/azure/app-service/quickstart-ruby?tabs=cli

https://docs.microsoft.com/ja-jp/azure/app-service/quickstart-dotnetcore?tabs=net60&pivots=development-environment-vs

自分の推し言語が対応していない…という場合には Docker イメージにしてしまえば Docker もサポートしているので動かすことが出来ます。こちらは英語ドキュメントしかないのですが、クイックスタートページがあります。

https://docs.microsoft.com/en-us/azure/app-service/quickstart-custom-container?tabs=dotnet&pivots=container-linux-vscode

Kubernates を立てたりするのはハッカソン的には若干オーバーキルな気がするのでサクッと作ってサクッと動かすのには Azure だと Azure App Service が一番手っ取り早いと思います。

## DB が欲しい…

DB 系サービスもありますが DB 系は割とお金がかかるので価格表と自分の持っている料金枠との相談で作るといいと思います…
MysQL, PostgreSQL, SQL Database (SQL Server) あたりの RDBMS が作れますが、一番安上がりなのは SQL Database のサーバーレスプラン（使ってないと落ちる）を選んで、データ量やマシンスペックもケチったものになると思います。

使い慣れてない DB だとシンドイかもしれませんが、もし RDBMS をサクッと作りたいのであれば、個人的にはそれがお勧めです。

https://azure.microsoft.com/ja-jp/products/azure-sql/database/

https://azure.microsoft.com/ja-jp/services/postgresql/

https://azure.microsoft.com/ja-jp/services/mysql/ 

## ローコード・ノーコード系

Microsoft のノーコード・ローコード系のサービスの Power Platform も Power Apps でサクッと画面作ったり Power Automate でフローを組んだりetc...と色々できます。

https://powerplatform.microsoft.com/ja-jp/

会社のほうで触ったりしてるような人も最近はちらほら増えてきてるのではないかと思います。
なのでハッカソンでも使えたりすると便利なのになぁ…と考える方もいらっしゃると思います。

そうはいっても Microsoft 365 テナントとライセンスが必要なのでハードルが高いそう！と思われるかもしれませんが、一応無料で短期間使える開発用の環境を整えることが出来るようになってます。

こちらのサイトにテナントの作成からライセンスの付与までまとまっています。

https://qiita.com/nayoshik/items/0890e1261b6b40b69c15

Power Platform 系の使い方は Microsoft Learn に色々なコンテンツがあるので、そちらを見ていただくのがわかりやすいと思います。Power Apps の初級のコンテンツのみに絞り込んだ検索結果に以下のリンクからアクセスできるので参考にしてください。

https://docs.microsoft.com/ja-jp/training/browse/?products=power-apps&expanded=power-platform&levels=beginner&resource_type=learning%20path

## まとめ

以上、簡単にですが便利に使えそうな API と自分たちが作ったアプリを動かすために使えるサービスを紹介しました。ハッカソンはスピードが命なので普段使いのサービスがあるのであれば、そちらでやるのもいいと思いますが Azure には無料枠もあったりするので気になってる方はぜひ使ってみてください。

https://azure.microsoft.com/ja-jp/free/