Cloudflare Pagesに手動でページをアップロードする
はじめに
このBlogはCloudflare Pagesを使用して公開しています。
Cloudflare Pagesは無料からWebサイトをホスティングできるサービスです。
サイトのデプロイにはGitHub連携を使用して、基本的には自動で行うことができます。サポートしているFrameworkも非常に多く、ほとんど設定をせずにサイトの公開ができます。
この記事ではあえてそのGithub連携を使用しないページの公開を試してみます。Direct Uploadsを参考に、wrangler
コマンドを使用したアップロードを試してみます。
環境
- Node.js v18.16.0
- wrangler 3.0.1
手順
準備
まずは、wrangler
をインストールし、Cloudflare Pagesにログインします。ブラウザでログインできるので簡単です。
npm install -D wrangler
npx wrangler login
ログインできたらCloudflare Pagesの新規プロジェクトを作成します。ここでは、sandboxというプロジェクトを作成します。
❯ npx wrangler pages project create
✔ Enter the name of your new project: … sandbox
✔ Enter the production branch name: … main
✨ Successfully created the 'sandbox' project. It will be available at https://sandbox-bcv.pages.dev/ once you create your first deployment.
To deploy a folder of assets, run 'wrangler pages deploy [directory]'.
これで準備は完了です。
index.html
のアップロード
アップロードする簡単なページを作成します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Sample Site</title>
</head>
<body>
<h1>Sample Page</h1>
</body>
</html>
上記をindex.html
として保存します。ディレクトリ構造は以下のような感じです。
❯ tree -I node_modules
.
├── package-lock.json
├── package.json
└── src
└── index.html
wrangler
コマンドを使ってアップロードします。2023年6月4日現在、ドキュメントにはwrangler pages publish
を使うように記載がありますが、3.0.1
ではdeprecatedになっているようです。新しいコマンドとして、wrangler pages deploy
が準備されているようなので、それを使用します。
❯ npx wrangler pages deploy src
🌍 Uploading... (1/1)
✨ Success! Uploaded 0 files (1 already uploaded) (0.27 sec)
✨ Deployment complete! Take a peek over at https://*****.sandbox-***.pages.dev
これでデプロイ完了です。表示されたURLにアクセスするとページが表示されているのが確認できます。
❯ curl https://sandbox-***.pages.dev
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Sample Site</title>
</head>
<body>
<h1>Sample Page</h1>
</body>
</html>
Functionsの使用
CloudflareにはFunctionsと呼ばれるサーバーでコードを実行できる仕組みも準備されています。この機能を使うと認証機能やフォーム機能などサーバーでの処理が必要な機能も実装することができます。
CloudflareのCloudflare Workersというサービスが利用されているようです。
ここでは、Functionsの機能を使って新しいエンドポイントを作成してみます。rootディレクトリにfunctions
というフォルダを作成し、その中にJavaScriptのファイルを作成していきます。作成したファイル1つ1つがエンドポイントとなります。
❯ tree -I node_modules
.
├── functions
├── package-lock.json
├── package.json
└── src
└── index.html
注意としては、必ずwrangler
コマンドを実行するカレントディレクトリにfunctions
を作成してください。
次に、/functions/helloworld.js
を作成します。
export function onRequest(context) {
return new Response("Hello, world!")
}
アップロードし、確認をします。
❯ npx wrangler pages deploy src
✨ Compiled Worker successfully
🌍 Uploading... (1/1)
✨ Success! Uploaded 0 files (1 already uploaded) (0.40 sec)
✨ Uploading Functions bundle
✨ Deployment complete! Take a peek over at https://5b0b4e73.sandbox-bcv.pages.dev
❯ curl https://sandbox-bcv.pages.dev/helloworld
Hello, world!
無事にエンドポイントが作成されました。functions
配下にディレクトリを作成すると、URLのパスにセグメントを追加していくことができます。
おわりに
今回の記事では、Cloudflare PagesでGitHub連携を使用せずに直接アップロード操作をしてみました。次回は、このブログでも使っているSveltkitをCloudflare Pagesと一緒に使った場合、どのようなプロセスでアップロードされるかを追っていきたいと思います。