投稿者:Mitsuhiro Okamoto | 投稿日:2011年11月29日(火) 03:21

Heroku_logo2purple_rgb

みなさんHerokuはどの言語でお使いですか?個人的にはNode.jsが一番好きですが、古くからサポートされているRubyが一番多いでしょうか。

Herokuでは現在、Cedarスタック(Beta)上では公式に6つのプラログラム言語をサポートしています。

各言語は、RubyGem(Ruby)やnpm(Node.js)、pip(Python)といったパッケージマネージャーと合わせて利用するようにデザインされています。そしてPlay!の様にフレームワークをプラットフォームレベルでサポートしている点も大きな特徴です。

これらの言語やフレームワークで作られたアプリケーションをGit pushで受け取ると(正確にはpre-receive hook)、Dynos間に素早く展開出来るようにプログラムをSlugと呼ぶ塊にします。いわゆるHerokuの世界でのアプリケーションのパッケージです。

このSlugを作る際に、あらかじめアプリケーションがどの言語を使って作成されたの判断することでマルチ言語を実現しています。各言語の判断には、その言語固有のファイルがあるかどうかと優先順位で判断します。

各言語の判断基準と優先順位は以下の通りです。(こちらBlog記載時の実動作をベースとしており、今後変更される可能性があります)

例えばGemfileとpackage.jsonが両方あった場合には、Gemfileが優先されてRubyアプリケーションだと認識されます。

優先度言語 / FW判断ファイル
1 Ruby /Gemfile
2 Node.js /package.json
3 Clojure /project.clj
4 Python /requirements.txt
5 Java /pom.xml
6 Scala /Bulit.sbt
7 Play! /conf/application.conf
- PHP 上記ファイル無し(未アナウンス)

 

アプリケーションを構築する際のご参考になれば幸いです。

 

多言語プラットフォームに関してはAdamのBlog postもご参照下さい。
http://blog.heroku.com/archives/2011/8/3/polyglot_platform/

 
Slugの詳細については以下の記事もご参照下さい。
http://devcenter.heroku.com/articles/slug-compiler