🍨

F# で Web アプリケーション開発を ~App Serviceに添えて~

2022/12/25に公開

これは Microsoft Azure Tech Advent Calendar 2022 の 18 日目の投稿です。
(ひょぇ~、投稿が一週間も遅れてすみません 💦)

F# に入門したての初心者が、Web アプリケーションのプロジェクトを用意し、デフォルトのサンプルアプリを Azure App Service にデプロイして公開するところまでやってみました。

この記事を読むとわかること

  • SAFE スタックを用いた Web アプリケーション開発の始め方
  • SAFE スタックを用いた Web アプリケーションを Azure App Service にデプロイする方法

注意とお願い 🙇

F# の記事と題しておきながら、F# のコードはほとんどでてきません。期待されてた方ごめんなさい 😓

これからも F# and/or SAFE スタックを触っていくつもりなので、知見がたまったら別途記事にできたらよいな。。。

また .NET Core のインストールや Azure アカウントの作成は終わっている前提で話を進めていきます。
それらの話題が気になる方は本記事の最後の参考資料をご参照ください。

動作を確認した環境

  • macOS 13.1
  • WSL 上の Ubuntu 20.04.5 LTS

(Windows 上でも動きそうだけど未検証です)

F# って?

マイクロソフトが開発した .NET 向けのマルチパラダイム言語です。

本家ドキュメントマイクロソフトのドキュメントではそれぞれ

# 本家
F# empowers everyone to write succinct, robust and performant code

# マイクロソフト
F# は、簡潔性、堅牢性、パフォーマンスの高いコードを書くためのユニバーサル プログラミング言語です。

と宣伝されており、簡潔性、堅牢性、パフォーマンスの高さが特徴だそうです。

うーむ。まだ私にはピンとこないです。違いがわかるまでもうちょっと使い込んでみます 😓

SAFE スタックって?

F# で Web アプリケーション開発をサポートする選択肢は結構多く[1]、F# 初心者の私はそれだけで最初ちょっと圧倒されてしまいました。

そんな中、この SAFE スタックは Azure (App Service)との連携すること前提という謳い文句だったので、これを使ってみることにしました。

ちなみに SAFE のそれぞれの文字は次のワードの頭文字だそうです。

ここではそれぞれについて深くは触れないので、興味がある方は上のリンクより詳細をご確認ください。

SAFE スタックを用いた開発にに必要なツール

本家ドキュメントによると以下のものが必要です。

Quick Start - SAFE Documentation (safe-stack.github.io)

  • .NET 6 SDK[2]
  • node.js (v16.x)[3]
  • npm (v8.x)[4]
  • Azure CLI[5]
    • → Azure App Service へデプロイする場合のみ必要

Web アプリケーション開発を始める

ここから実際に SAFE スタックを使って Web アプリケーション開発を始めていきます。

SAFE プロジェクト用のテンプレートは初回時のみインストールが必要です。

SAFE プロジェクト用のテンプレートインストール
$ dotnet new install SAFE.Template

以下のコマンドでプロジェクトを作成します。
-o 以降はプロジェクト名なので、適宜よき名前に変更してください。

$ dotnet new SAFE -o MySAFEApp

ローカル環境で動かしてみる

ローカル環境で開発用サーバーを動かしてみましょう。
以下のコマンドを実行し、途中でエラーが出て止まったりしなかったら準備 OK。

$ cd MySAFEApp

# ローカル用ツールのインストール
$ dotnet tool restore

# 開発用サーバーを動かす
$ dotnet run

ブラウザで http://localhost:8080/ を開いてください。
以下のような画面が表示されるはずです。

ローカル環境で動かした様子

App Service への デプロイ

最後は App Service にデプロイします。

私が SAFE スタックって良いな~と感じたところのひとつは、Azure ポータルなどを使って事前に自分で App Service 環境を準備しなくても SAFE スタックくんが良い感じ?に用意してくれるところです。

次のコマンドを実行するだけで OK !
途中で Azure のログインを求められたら指示にしたがってログインしてください。

$ dotnet run -- Azure

無事に処理が終われば、以下のように App Service(+ リソースグループ、App Service プラン)が作成され、そこにアプリケーションがデプロイされています。

AzureポータルでデプロイしたAppServiceアプリを確認

Azure ポータルなどで確認できる URL にアクセスして、先ほどローカル環境で確認したのと同じ(※ 背景はリクエスト毎に変わるみたい)画面が表示されれていれば無事にデプロイが成功したようです。やったね

AppService上で動いている様子

※ デフォルトでは App Service プランの location が WestEurope だったり、Usage Tiers が Free だったりするので、良しなに変更する必要があります。
プロジェクトルートにある Build.fs のここら辺を触ると良さそう(なのですが、時間が足りず未検証です)
https://github.com/toku345/my_safe_app/blob/9594d8097bca4adff2c3cea7cd861aa239511220/Build.fs#L31-L46

まとめ

SAFE スタックを使って Web アプリケーション開発を始める ~ App Service にデプロイする、をお見せしました。
.NET や Azure CLI のインストールや Azure アカウントの開設を除けば 30 分もかからずに(デフォルトのサンプル)アプリを公開出来ちゃいます。
すごいですね 😮[6]

ぜひ皆さまも、これを機に F# を触ってみては如何でしょうか?

参考資料

F# を学ぶ

https://fsharp.org/

https://dotnet.microsoft.com/ja-jp/learn/fsharp

https://learn.microsoft.com/ja-jp/dotnet/fsharp/what-is-fsharp

SAFE スタックを学ぶ

https://safe-stack.github.io/docs/

.NET Core、、Azure アカウントの作成方法は本記事では取り上げません。
以下の本家のサイトや、他にもわかりやすく説明されているサイトがたくさんあるのでそちらをご参照ください。

.NET Core をインストールする

Azure を始める

脚注
  1. 参照: Web 開発での F# | Microsoft Learn ↩︎

  2. .NET 7.0.1 でも試してみたのですが動きませんでした。.NET 6.0.404 では動作することが確認できました。 ↩︎

  3. 手元の環境で試してみたところ v18.12.1 でも動作することが確認できました。 ↩︎

  4. npm v9.2.0 でも試してみたのですが動きませんでした。npm v8.19.3 では動作することが確認できました。 ↩︎

  5. 2.43.0 で動作することを確認しました ↩︎

  6. ただ、TODO アプリなのにアプリケーションがアンロードされちゃうとデータが揮発するなど、このままではアプリとしてはちょっと使えないです。私はここら辺を改善できるようチャレンジしてみる予定です。その内容も記事にできるといいな 😅 ↩︎

Discussion