これは2024年2月現在の情報です。後には状況が大いに変わってる可能性が極めて高いです。
概要
DartでSupabaseのEdge Functionを書くための手順はこのリンクが一番詳しそうなんですが、このサイトも公式も他のサイトも情報が古いのかそのままでは上手く行かないので試行錯誤したリンクとメモ。
注意点
・Function作る度にsupabase initする必要はない
supabase initはローカルにsupabase環境を作るための初期化コマンドなので、手順通りにinitすると関数1つ作る度にsupabase環境を新規に作ることになってしまう。
・事実上edge.yamlを作る必要がある
公式含めwebで見つかるドキュメントでは全く記載がないのですが、edge.yaml (.ymlではダメです) を記述することで関数名の設定やコンパイル(変換)したファイルの出力先を指定できるようです。何も設定しない場合はdart_edgeという関数名になり、出力先もカレントディレクトリのfunctionsフォルダに作られますが、2024年2月現在のsupabase edge functionsが想定するフォルダ構成とは異なる場所になるので設定なしでは手動で移動させない限り動きません。
edge.yamlをedge newコマンドで作られたedge functionフォルダのルートに配置すると設定を読み込んでくれるようです
supabase:
#関数名とその関数のエントリーポイント(main関数)があるdartファイルを指定
functions:
test: "lib/main.dart"
#supabase initしたフォルダ内のsupabaseフォルダを指定(絶対パス、相対パスどっちでもOK)
project_path: "../../supabase"
その他のオプションについてのドキュメント
・[期間限定] 旧バージョンのDartでコンパイルする必要がある
2024年2月現在のDart最新版(3.2.6)ではdart-edgeによるedge関数のコンパイル(JavaScriptへの変換)は上手くいきません。js相互運用の仕様が変わっているのですがdart-edgeがそれに追従出来ていないのが原因。
今のところ追従するまではfvmを利用して古いバージョンのDartでコンパイルするしかないようです。
#fvmインストール
dart pub global activate fvm
#fvmによるバージョンの切り替え(fvm useしたフォルダ内のみ有効)
fvm use 3.7.1
#fvm経由でコンパイル
fvm dart run edge build supabase_functions