2024.11.14
いまさらNode.jsを知ろう~環境構築も~
2015.10.02
プログラミングScalatraをHerokuに公開する
Scalatraとは
Scala + Sinatra (Ruby発のマイクロフレームワーク)
要するに、Scalaで超簡単にWebサービスを作れるフレームワークです。
Herokuとは
Gitの操作のみでデプロイが出来るPaaS(Platform as a Service)
要するに、Gitで超簡単にWebサービスを公開できる便利サービスです。
当初はRuby向けとしてローンチされましたが、今ではPHPやNode.js、Scalaまで使うことができます。
基本、無料です。
ちなみに
これから紹介する手順は全てMacのためのものです。
もちろんWindowsでもScalaやHerokuを使えますが、手順が異なりますのでご注意をば
Heroku準備
まずは、Herokuのアカウント登録をしましょう。(https://www.heroku.com/)
Herokuを使うためのツール群(Heroku Toolbelt)をインストールしましょう。(https://toolbelt.heroku.com/)
ターミナルから
heroku login
と実行しましょう。
登録したアカウント情報を入力すれば、Herokuを使う準備は完了です。
超簡単ですね。
Scala準備
次に、Scalaの準備をしましょう。
Macユーザなら、もちろんHomebrewは導入済みですよね?導入してない方は是非この機会に
さて、Scalaや、その他のライブラリのインストールはHomebrewからコマンド一発で行います。
brew install scala sbt typesafe-activator giter8
以上です。
Scalatraプロジェクトの作成
Scalaの準備も出来ましたので、Giter8を利用して、Scalatraプロジェクトを作成しましょう。
ターミナルで適当なディレクトリに移動して
g8 scalatra/scalatra-sbt
とコマンドを叩けばOKです。途中、色々と聞かれるので、必要な情報を入力してください。
例)
g8 scalatra/scalatra-sbt organization [com.example]: org.kt name [My Scalatra Web App]: sampleapp version [0.1.0-SNAPSHOT]: servlet_name [MyScalatraServlet]: SampleAppServlet package [com.example.app]: org.kt.sampleapp scala_version [2.11.6]: sbt_version [0.13.8]: scalatra_version [2.4.0-RC2-2]: Template applied in ./sampleapp
これでScalatraプロジェクトの作成は終わりです。超簡単ですね。
sbtでサーバを動かしてみよう
せっかくプロジェクトが出来たので、Herokuに公開する前に、一度動かしてみましょう。
Scalaのプロジェクトを起動するには、SBT(Scala Build Tool)を使用します。
ターミナルから
cd sampleapp sbt > container:start
と叩けば、ローカルで起動します。
http://localhost:8080/にアクセスして、Hello Worldと表示されればOKです!
開発環境
これからコードを書いていくために、ここいらで開発環境を準備しましょう。
私はEclipseが苦手なので、Intellij IDEAのCE版をつかいます。
Macなので、Homebrew caskで一発です。
brew cask install intellij-idea-ce
WindowerやHomebrew導入してない人はHPから落としてきてください。
次に、ScalatraのプロジェクトをIntellij IDEAで開けるようにちょちょっと設定します。
まずは、project/plugins.sbtに下記を追加します。
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")
その後、ターミナルから
sbt > gen-idea
を実行すると、Intellij IDEAに必要なファイルを生成してくれます。
生成が完了したら、Intellij IDEAを起動してImport Projectからプロジェクトを開きましょう。
Herokuにデプロイするための準備
ここから、作成したプロジェクトをHerokuにデプロイするための準備をします。
ここまでは超簡単でしたが、ここからは少しむずかしいです。
RubyをデプロイするためのサービスにScalaをデプロイする訳ですから、多少ゴニョゴニョする必要があります。
めんどいのは一度キリなので、我慢して進みましょう。
脅しもこれぐらいにして、早速準備していきましょう。
ちなみに、これから紹介する手順は、Scalatraのページにも書いてます。そちらも参照してみてください。
Step 1 Jetty設定
project/build.scalaを開き、
"org.eclipse.jetty" % "jetty-webapp" % "9.2.10.v20150310" % "container",
を
"org.eclipse.jetty" % "jetty-webapp" % "9.2.10.v20150310" % "compile;container",
に変更しましょう。
Step2 SBT Start Script用プラグインの設定
project/build.sbtを、下記の内容で作りましょう。
addSbtPlugin("com.typesafe.sbt" % "sbt-start-script" % "0.10.0")
続いて、project/build.scalaを開き、
lazy val project = Project ( "idealidea", file("."), settings = ScalatraPlugin.scalatraSettings ++ scalateSettings ++ Seq(
を
lazy val project = Project ( "idealidea", file("."), settings = seq(com.typesafe.sbt.SbtStartScript.startScriptForClassesSettings: _*) ++ ScalatraPlugin.scalatraSettings ++ scalateSettings ++ Seq(
に変更しましょう。ScalaのSbtを起動するためのスクリプトを読み込む設定を追加してます。
Step3 mainメソッドの作成
HerokuがScalaアプリケーションとして認識するにはmainメソッドが必要になります。
Herokuのために用意してあげましょう。
場所はsrc/main/scala/JettyLauncher.scalaです。
import org.eclipse.jetty.server.Server import org.eclipse.jetty.servlet.{ DefaultServlet, ServletContextHandler } import org.eclipse.jetty.webapp.WebAppContext import org.scalatra.servlet.ScalatraListener import org.ktada.sampleapp.SampleAppServlet # ★ 自分で用意したサーブレット名 object JettyLauncher { def main(args: Array[String]) { val port = if(System.getenv("PORT") != null) System.getenv("PORT").toInt else 8080 val server = new Server(port) val context = new WebAppContext() context.setContextPath("/") context.setResourceBase("src/main/webapp") context.setEventListeners(Array(new ScalatraListener)) context.addServlet(classOf[SampleAppServlet], "/*"); # ★ 自分で用意したサーブレット名 context.addServlet(classOf[DefaultServlet], "/"); server.setHandler(context) server.start server.join } }
基本は↑をコピペで大丈夫です。★の箇所のみ、自分のアプリ名に応じて変えてください。
そろそろ飽きてきた?もうちょっとだから頑張って。
Step4 JDKバージョンの指定
Herokuでは、デフォルトでJDK1.6を使用するらしい(2015.7.30現在)です。
今回作ったScalatraのプロジェクトを動作させるにはJDK1.7である必要があるので
Herokuに「JDK1.7を使って」って教えてあげましょう。
プロジェクトのトップディレクトリにsystem.propertiesというファイルを作成しましょう。
内容は、下記の通りです。
java.runtime.version=1.7
これで、HerokuでScalatraを動かすための準備は終わりました。いよいよデプロイです。
Heroku デプロイ
冒頭でも述べたとおり、HerokuへのデプロイはGitをつかいます。
ターミナルから、プロジェクトのトップディレクトリに移動して
git add . git commit -m "initial commit" heroku create --stack cedar git push heroku master
はい、これでデプロイ完了です。ズラズラーっとメッセージが出ると思います。
もし、途中でエラーになったら、随時修正してください。
多分、途中のどこかの作業が漏れてるか間違ってるかです。
デプロイが完了したら、heroku openとコマンドを叩けば、
ブラウザでデプロイしたアプリを見ることが出来ます。
どうです?超簡単でしたか?面倒だって?
いえいえ、上にも書いたとおり、めんどい作業は初回のみです。
次からは修正してgit add/commitしてgit push heroku masterすればデプロイできます。
では、よいScalaライフを。
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索