❄️

Snowflakeの実践力向上!「Frosty Friday」に挑戦するための準備と環境構築

に公開

🚀 はじめに

Snowflake の学習を進める中で、こんな悩みを持つことはありませんか?

  • 「ドキュメントは読んだけど、実際に手を動かす機会が少ない」
  • 「業務で使う機能は偏っていて、Snowflake の全容を把握できていない気がする」

学習リソースとしては、Snowflake 公式が提供している QuickstartsBadge プログラム も非常に充実しています。これらは新機能を体系的に学ぶのに最適で、まさに「教科書」として素晴らしい教材です。

一方で、公式ハンズオンは「手順通りに進めれば正解にたどり着ける」ように丁寧に設計されているため、「要件だけを与えられて、自分でゼロから解法を考える」 という、現場で求められる応用力を鍛えるには、少し物足りなさを感じることもありました。

そんな中、とある事情で 「Frosty Friday」 というコミュニティの存在を知り、触れる機会をいただきました。

そのため、その機会を最大限に活かして自身のスキルアップを図るべく、Frosty Friday に継続的に挑戦することに決めました。
その解法や学びを記事としてアウトプットしていくことで、同じようにステップアップを目指す方々の参考になれば幸いです。

今回はその記念すべき第0回として、Frosty Friday とは何か? そして 挑戦するためのアカウント登録やGitHub準備 についてまとめます。

❄️ Frosty Friday とは?

Frosty Friday は、Snowflake に関するコーディング課題が金曜日に公開されるコミュニティサイトです。
(2025/11/20時点ですでに「WEEK150」まで問題が出ています。)

特徴

  • 実践的な課題: 単なる SQL の抽出だけでなく、データロード、半構造化データ(JSON/XML)、GeoSpatial(地理空間情報)、ストリーム&タスク、Java UDF など、Snowflake の機能をフル活用する課題が出題されます。
  • レベル分け: Basic(初級)、Intermediate(中級)、Hard(上級)と難易度が分かれており、段階的にスキルアップできます。
  • コミュニティ: 世界中の Snowflake ユーザーが挑戦しており、解法をシェアし合う文化があります。

単に「動けばいい」だけでなく、「Snowflake らしい書き方(ベストプラクティス)」を学ぶのに最適な教材です。

🛠️ 挑戦環境のセットアップ

それでは、実際に挑戦するための環境を整えていきましょう。

Step 0: Frosty Friday へのユーザー登録

課題を見るだけなら登録は不要ですが、自分の解答を提出したり、リーダーボード(順位表)に参加したりするためにはユーザー登録が必要です。

提出フロー:

  1. Frosty Friday 公式サイト でアカウント登録する。
  2. 課題を解き、コードを自分の GitHub (Gist等でも可) に公開する。
  3. 課題ページのコメント欄に、その GitHub URL を投稿して提出する。

Step 1: Snowflake 環境の準備

既存の検証環境があればそれを使いますが、本番環境とは切り離すことを強くお勧めします。

専用の Database / Schema / Warehouse の作成
課題ごとにオブジェクトが散乱しないよう、専用の箱を用意しておきます。
また、コスト事故を防ぐためにリソースモニターも設定しておくと安心です。

-- 管理用ロールになる (SYSADMIN推奨)
USE ROLE SYSADMIN;

-- 1. 専用ウェアハウスの作成 (X-SMALLで十分)
CREATE OR REPLACE WAREHOUSE FF_WH
  WAREHOUSE_SIZE = 'XSMALL'
  AUTO_SUSPEND = 60   -- 60秒アイドル状態が続くと自動停止(コスト節約)
  AUTO_RESUME = TRUE; -- クエリが投げられたら自動再開

-- 2. 安全策:リソースモニターの作成と割り当て (任意ですが推奨)
-- (ACCOUNTADMIN権限が必要です)
USE ROLE ACCOUNTADMIN;
CREATE OR REPLACE RESOURCE MONITOR FF_MONITOR
  WITH CREDIT_QUOTA = 5 -- 月間5クレジットで停止
  TRIGGERS ON 100 PERCENT DO SUSPEND;

ALTER WAREHOUSE FF_WH SET RESOURCE_MONITOR = FF_MONITOR;
USE ROLE SYSADMIN; -- ロールを戻す

-- 3. 専用データベースの作成
CREATE DATABASE IF NOT EXISTS FROSTY_FRIDAY;

-- 4. 課題ごとにスキーマを切る運用にする予定
-- 課題は100週以上あるため、ゼロ埋め (WEEK_001) にしておくとソートしやすく便利です
CREATE SCHEMA IF NOT EXISTS FROSTY_FRIDAY.WEEK_001;

-- (任意) チームで取り組む場合などは専用ロールを作成して権限を付与
-- CREATE ROLE IF NOT EXISTS FF_ROLE;
-- GRANT USAGE ON WAREHOUSE FF_WH TO ROLE FF_ROLE;
-- GRANT USAGE ON DATABASE FROSTY_FRIDAY TO ROLE FF_ROLE;
-- GRANT USAGE ON SCHEMA FROSTY_FRIDAY.WEEK_01 TO ROLE FF_ROLE;

Step 2: GitHub リポジトリの準備

書いた SQL コードは、Snowsight(SnowflakeのWeb UI)に残すだけでなく、GitHub で管理することをおすすめします。
提出時にURLが必要になるだけでなく、自身のポートフォリオとしても活用できます。

ディレクトリ構成案
以下イメージのようにWeek ごとにフォルダを分ける構成案としています。
各週のフォルダに README.md を置いて、学んだことや詰まったポイントをメモしておくと資産になります。

my-frosty-friday-solutions/
├── README.md          # 全体の説明
├── week01/
│   ├── README.md      # Week1のメモ・解説
│   └── solution.sql   # 解答クエリ
├── week02/
│   ├── README.md
│   ├── setup.sql      # データ準備用クエリ
│   └── solution.sql
...

とりあえず私は以下のGitHubリポジトリを作成しました。
https://github.com/yujmatsu/Publication_Source

🧠 取り組み方とマイルール

ただ漫然と解くだけではもったいないので、以下のルールで取り組んでいきます。

  1. 公式ドキュメントを必ず参照する
    • 解けたとしても「なぜその関数を使うのか」「他の方法はないか」をドキュメントで裏取りを可能な限りする。
  2. コストを意識する
    • 無駄なスキャンをしていないか、ウェアハウスのサイズは適切か、常に意識します。
  3. アウトプットする
    • 解法だけでなく、「どこで詰まったか」「何が学びだったか」を Zenn 記事として残します。

🏃‍♂️ 今後の予定

まずは Week 1: Basic から順に挑戦していきます。
外部ステージからのデータロードといった基礎的なところからスタートするようです。

せっかく技術系のブログも始めたばかりなので、記事を書き続けるモチベを保つという意味でも「やってみた」記事頑張ってやっていこうと思います!

2025/11/20時点ですでに「WEEK150」まであるので、2日に1つ実施したとしてもほぼ1年かかる計算。1日1つでも半年がかり。(笑)

📚 参考リンク

Discussion