Supabaseとは05:社内備品管理アプリに画像機能追加!セキュアなStorageを使ってみよう

外注ゼロで始める社内アプリ内製講座 〜 Supabaseで作る認証付き備品管理アプリ実践

Supabase(スーパーベース・スパベース)の使い方5回目となります。

今回はこれまで作成してきたWebアプリに、画像をアップロードする機能をつけます。Supabaseのstorage機能を使っていきます。

storageもまたセキュリティが高いのよね~

くまみ
くまみ

気になるわ!

なお前回までの記事を見ていない方は、まずはこちらをチェックしておいてくださいね。

SupabaseでStorage設定

まずはSupabase側でStorageの設定を進めておきましょう。最初に、ファイルを入れる箱(Bucket・バケツ)を作ります。

Bucketの作成

ログインし、プロジェクトを開きます。サイドバーのStorageを開き、【New bucket】をクリック。

下記のように設定しておきます。

  • Bucket Nameはimagesとしておきます。
  • Publicにチェックを入れます。Publicにすると、URLを知っていれば誰でもファイルにアクセスできるようになります。
  • Restrict file sizeには、ファイルサイズの上限をいれます。今回は5MBまでとします。
  • Restrict MIME typesには、保存するファイルの種類をいれます。今回はJPEGまたはPNG形式の画像ファイルのみ保存したいので、 image/jpeg,image/pngとします。

誰にでも見られたくない場合は、Privateを選んでね。すると、Webアプリのコードを通じてしかアクセスできなくなるから。

くまみ
くまみ

そんなことも簡単にできるのね!

Bucketのポリシー設定

次に、Bucketのポリシーを設定します。前回はデータベースにポリシーを設定しましたが、Supabaseでは、Bucketにもポリシーを設定し、細かくアクセス制限をかけられます。

ポリシーでは、Webアプリのコードを通じたアクセスを制御できます。

画像の新規作成、編集、削除を誰ができるか設定できるの。

くまみ
くまみ

まあ。色々できるのね。

作成したBucketをクリックします。【Policies】をクリックします。

【New policy】をクリックします。

今回は【For full customization】を選択します。

下記のように設定します。

  • Policynameを適当につけます。
  • Allowed operationでは、すべてにチェックを入れます。
  • Target rolesでは、今回はauthenticatedを選択します。これで、認証ユーザーのみがすべての操作(アップロード・閲覧・更新・削除)を行えるようになります。

テーブルにカラム(列)追加

画像が追加されたときには、データベースにパスをいれるようにします。これによって、パスを使って画像を表示することができます。

サイドバーのTable Editorより、テーブルを選びます。本記事ではbihinsテーブルを選択します。【Insert】ボタンをクリックし、Insert columnを選択します。

下記のように設定します。

  • Nameには、カラム(列)名をいれます。image_pathとしておきます。
  • Data Typeには、データ型をいれます。今回はtextにします。

Webアプリ側の修正

これでSupabase側の準備が整いました。次に、Webアプリ側に機能を搭載します。

Claude Code等で下記のように指示してコードを書いてもらいます。

Supabaseにimagesという名前のbucketを作りました。バケットはpublicです。認証ユーザーのみ操作できます。bihinを登録するときに、画像も登録できるようにしてください。登録した画像は、一覧や編集画面でも表示できます。画像の差し替えもできます。削除すると画像も消すことができます。なお、画像アップロート時に、bihinsのimage_pathカラムにパスを保存してください。

コードを搭載後、実際にテストしてみてください。

【テスト手順】

  • Webアプリにログイン
  • 画像を登録
  • SupabaseのTable Editor → bihinsテーブルのimage_pathカラムにパスが入ることを確認
  • SupabaseのStorage → imagesに画像が入っていることを確認
  • 編集・削除も実行

くまみ
くまみ

あら、ちゃんと画像が登録できるわ。なんだか嬉しい!

画像がちゃんとひょうじされると嬉しいよね。もし表示されない場合は、ポリシーを見直したりしてみて。

さいごに

Storage機能でも、色々とアクセス制御ができることをご紹介しましたが、いかがでしたか。

今回はPublic設定で手軽に進めましたが、Privateにすれば、「見る」ことにも制限をかけられます。さらにコードで署名付きURLを発行すれば、有効期限付きでファイルを共有することも可能です。

詳しくは公式ドキュメントのSigning URLsをご覧ください。

くまみ
くまみ

普段はそこまで必要ないかもしれないけど、いざという時は、ルールを強めにできるのが良いわね。

でしょ。

Supabase講座、また時々更新したいと思うので、ご興味あれば見てくださいね。

 

 

 

タイトルとURLをコピーしました