最近Herokuの料金プランが変更され、無料枠が1日最大18時間までになりました。Pagesに移行させました。料金変更だけが理由ではないのですが、移行する労力を割くに値する価値があると十分に判断できる材料が揃ったので、移行させた、という背景です。例に挙げて、移行にどういう作業が必要になったかについてまとめておこうと思います。Pagesに移行するためには、これまでHerokuで提供していたものと同じように振る舞うような、何らかのHTMLやCSSファイルを用意する必要があります。使って既存のアプリのコードを極力変更せずに静的ファイルを生成する方法でした。既存の開発手順をそのままに保ちたいという理由から、今回は後者のSitespecを利用する方法を選択しました。編集に携わる開発者達が既にSinatraの使い方を覚えていたので、新たなフレームワークの学習を強いることに抵抗があったというのも理由の一つです。いう記事も書いていて、導入方法などについてはこの記事により詳しく書いています。分かりやすい説明が書かれていて、もはや説明するまでもないという状況だと嬉しいんですが、一応細かい点について説明しておきます。Pagesにファイルを配置したときの挙動について説明します。一般的には、HTML、CSS、JavaScript、画像などのファイルを配置することになると思います。いうパスでアクセスできます。このときレスポンスのContent-Typeには、それぞれのファイルの拡張子に応じた値が含まれます。なるので、一般的なブラウザでこれにアクセスすると対象ファイルをダウンロードするような挙動になると思います。存在しない場合は404が返ります。生成しなければならないということに注意する必要がありました。移行にあたってはRackアプリ側には変更を加えない予定でしたが、唯一この対応のためにアプリ側にも変更を加える必要がありました。どちらも同じHTMLが返るという挙動はHerokuで動いている状態でも実現可能なため、先に両方で動くコードに変更して、その上で移行する、という手順を踏めました。いうパターンに即しているかどうかによって、少し挙動が変わります。<owner>の部分は、r7kamuraやincrementsのような文字列が入るので適宜読み替えてください。(以降ユーザページと呼びます)。(以降プロジェクトページと呼びます)。場合はプロジェクトページですね。Pages用のブランチとして認識され、このブランチにPushするとページが更新されます。ブランチが使われます。生成された静的ファイルを置くようにしています。生成された静的ファイルを置いています。ブランチに設定しておくと、レポジトリにアクセスしたとき最初にソースコード側を表示できるので、ちょっと便利です。この違いは意外と厄介で、プロジェクトページの場合はサブディレクトリを利用するような形式になるので、静的ファイルに書くURLもそれに応じた相対パス、あるいは絶対パスに変更する必要があります。絶対パスを利用していると、後述するようにプロジェクトページにカスタムドメインを設定してアクセスした場合は、パスのサブディレクトリ部分は不要ということになります。場合は、試しにまずユーザページとして公開してみて、うまく動作することを確認した後にプロジェクトページに変更しました。最後にドメイン周りの設定についてです。いうファイルがあると、そのファイル内に書かれたドメイン名を認識してくれます。見たほうが良いでしょう。いうドメイン名が記載されています。先にテスト用に別のレポジトリでCNAMEファイルを置いて設定を済ませていると、例え新しいレポジトリにCNAMEを置いてDNSサービス側を更新しても、古い方のレポジトリのデータを表示し続けてしまう可能性があるので、重複しないように気を付けましょう。公開されているものの移行だったので、試験用のCNAMEのレコードをつくってそちらで疎通確認を行ったあとで実行しています。テストで試すときは、レコードのTTLを短めに設定しておくと、間違った値を与えたときに幾らか修正しやすくなると思います。Pagesへの移行時に行った作業は以上になります。長めに書きましたが、実作業時間としては丁寧にやって3時間ぐらいで移行できたので、わりと簡単に移行できるほうだと思います。Pagesがどう設計されているかについて触れられているので、興味があれば読んでみると面白いかもしれません。