はじめに
最近、Meteor公式がGalaxyというMeteorプロジェクトのデプロイ&運用サービスを始めました。
ただ、価格情報を見れば分かるんですが、お試し気分ではなかなか手が出ないお値段設定です。
そこでHerokuです。Herokuは1日のうち8時間スリープに目をつぶれば無料で使えます。
24時間ずっと起動させておきたい場合は、hobby Planにすれば、その制約もなくなります(2015年10月23日現在で月額7ドル)。
さらにheroku標準では独自ドメインでSSL対応させる際に普通月額20ドル(2015年10月23日現在)かかりますが、CloudFlareなどのサービスを使えば実は実質無料でSSL対応できます。
(このCloudFlareを使ったSSL対応についても、そのうち記事書きましょうかね? ちなみにこの場合、SSLはherokuapp.comドメインでのデフォルトのものを使うことになります。閑話休題。)
すでに、 通常のMeteorプロジェクトをHerokuにデプロイする良記事がありましたので、リンクさせていただきます。基本はこちらの記事のとおりにやればOKです。
herokuにMeteorで作成したアプリケーションをデプロイする
(→2015/10/23時点で、この記事で紹介されているbuildpackではうまくいきませんでした。次に、私がいつも使っている https://github.com/AdmitHub/meteor-buildpack-horse
を試したところ、イイ線いってたんですが、悲しいかな。現在のMeteor1.2.0.2ではECMAScript2015のコードが混じっていると、開発時は問題ないがデプロイ時(つまり、Productionモード時)にminifyがエラーでコケるという問題があり、デプロイ途中で失敗。じゃあminifyさせなきゃいいじゃん! ということで、https://github.com/AdmitHub/meteor-buildpack-horse
をフォークしてminifyしないバージョン https://github.com/emadurandal/meteor-buildpack-horse を一時しのぎとして作りました。とりあえず、2015/10/23時点では私のこのbuildpackをお使いください。)
しかし、TypeScriptを使ったMeteorプロジェクトの場合は、この手順だけだとデプロイに失敗します。Herokuがtscコンパイラを見つけられないためです。
解決策
まず、前述で紹介した記事の通りに作業を進めます。(ただし、buildpackだけは私のhttps://github.com/emadurandal/meteor-buildpack-horse を使うように読み替えてください)
この時点ではまだ、デプロイに失敗してしまうのですが、さらに以下の手順を行えば、TypeScriptを使ったMeteorプロジェクトも動くようになります。
1) meteorhacks:npmをインストールします。
$ meteor add meteorhacks:npm
2) Meteorプロジェクトフォルダ直下に、以下の内容のpackages.json
を配置します(TypeScriptのバージョンはお好みで)。
{
"typescript": "1.6.2"
}
3) 一度、ローカルでMeteorプロジェクトを実行します(この時に自動生成されるファイルが、Herokuにデプロイするときに必要なため)。
$ meteor
4) gitリポジトリに、本件で作られた全てのファイルをコミットします。
5) herokuにデプロイを行います。
$ git push heroku master
通常のMeteorプロジェクトより、若干時間がかかりますが、デプロイに成功するはずです。
さいごに
いかがでしょうか。Meteor 1.2から標準でECMAScript2015に対応し、クラスなども使えるようになったため、TypeScriptを使うまでもない、というケースもあるかもしれません。
しかし、だんだんプロジェクトが大規模になってくると、TypeScriptの必要性は増してきます。
ちなみに私は、Meteor & TypeScript & Riot.jsという組み合わせで開発しています。Riot.jsもイイヨーw
まぁそれはともかく、みなさまも良いMeteor & TypeScriptライフをお過ごしください^^/
※2015/10/23現在、すでに述べたとおり、minifyの問題がありますが、そのうちMeteor本家がこの問題を解決してくれるでしょう。将来のアップデートを待ちましょう。「待ってらんねぇ!」という方、minifyしないという回避策を許容できる方のみ、私のbuildpackをお試しください。