読者です 読者をやめる 読者になる 読者になる

アニメイトラボ開発者ブログ

株式会社アニメイトラボの開発者ブログです


アニメイトラボ開発者ブログ

developer.animatelab.com


Scala&Play初心者がハマった落とし穴と解決策について

こんにちは、sugiyanです。

前職では社内SEでシステム管理してたり、Spring frameworkとSorlを利用してECサイトを作っていました。

私は2015年の11月に入社し、現在はScalaとPlay framewokを使った機能を作成しております。

なぜ、今回Scalaを選択したかと言いますと、

  • 今後のプロジェクト規模がどの程度の負荷になるか想定しづらい
  • 規模が不明な為、一定以上の実行速度が保証される言語が望ましい
  • 今後も末永く使用されるシステムになるので、保守しやすい言語が望ましい
  • Javaの経験が一番長い上、Scalaに挑戦してみるのは好ましい機会

という理由から、今回Scalaをメイン言語として選択しました。

まだまだScala初心者ですが頑張っています!!

さて、今回は私がScala&Playを使い始めて一カ月の間で盛大にハマった件について書こうと思います。

多くのプロジェクトもそうだと思うのですが、決まった文言を出力する時はプログラム上に直に書くのではなく、Propertiesファイルなどの様々なファイル形式で外出しするケースが多いと思います。

その外部ファイルから取り出した文字列をView(画面)へと渡す際のPlay frameworkの2.3.9と2.4.4でのバージョンでの動作違いに関してお伝えしたいと思います。

この記事はanimateLAB Advent Calendar 201516日目の記事です。

環境について

  • IntelliJ IDEA 15.0.1
  • Scala 2.11.7
  • Play framework 2.3.9( or 2.4.4)

上記の環境にて今回のサンプルを作ります。以下では、【1】2.3.9と【2】2.4.4それぞれのケースをまとめています。

【1】 Play framework 2.3.9の場合

1.「conf」フォルダ内に「messages」ファイルを作成します。

2.先ほど作成した「messages」ファイル内に画面に出力したい文言を追加します。 f:id:sugiyan-anilab:20151215185913p:plain

3.「controllers」フォルダ内の「Application」にmessageに追加した文言が出せるように修正します。 f:id:sugiyan-anilab:20151215185932p:plain ここでindexページにMessagesを使用して、messageファイルに追加した文言を渡しています

4.ここで一度ローカル環境で動作確認。 f:id:sugiyan-anilab:20151214181523p:plain

無事できました。割と簡単です。

この調子で2.4.4も上手く動くといいですね・・・

【2】 Play framework 2.4.4の場合

2.3.9の時と1〜3までは手順が一緒なので、割愛します。

ただし出力する文言を「hello!PlayFramework2.3.9!」→「hello!PlayFramework2.4.4!」に変更してます。

f:id:sugiyan-anilab:20151216100831p:plain

動きません。

理由としてはPlay framework2.3から2.4になった際に「Messagesの仕様が変わった」ためです。

詳しい変更内容にご興味がある方はPlay frameworkの公式サイトをご覧ください。

それではこちらの対応をしていきます。

参考にした文献はこちら。※英語ですPlay frameworkの公式サイト

上記のページを読むと「Application」の修正が必要なことが分かります。

1.「Application」を以下の内容で修正 f:id:sugiyan-anilab:20151215190140p:plain

1-1.動作確認 f:id:sugiyan-anilab:20151216100843p:plain またエラーです・・・

先ほどの修正でobjectからclassにしたので「routes」で上手くルーティングできなかったようです。

次もPlay frameworkの公式サイト見ていきます。

いくつかやり方があるようではありますが、今回は「routes」を修正します

2.「routes」を修正。 f:id:sugiyan-anilab:20151215190200p:plain

2-1.動作確認 f:id:sugiyan-anilab:20151216100853p:plain エラーメッセージが変わりましたが、やたら長い・・・

内容を見る限りInjectしなさいと怒られているようです。

3.「Application」を以下の内容で修正 f:id:sugiyan-anilab:20151215190309p:plain

3-1.動作確認 f:id:sugiyan-anilab:20151214185829p:plain

ようやく動きました!

2.3.9に比べるとやたらと長い道のりでした。

バージョンが2→3なら大幅な仕様変更はやむなしだと思っていましたが、2.3→2.4でここまでやり方が変わるとは想像しておらず、解決までに時間がかかりました・・・

ひとまずは動く形になったので、一件落着。

最後に

今回は、Pray frameworkのバージョンごとでの違いで、私が盛大にハマってしまった件について記述させて頂きました。

他のやり方もあるとは思いますので、これから少しづつ覚えていこうと思います。

ちなみにこのケースは当初Play framework2.3.9で開発をしていたものを、諸事情で2.4.4に変更した際に発生した弊害です。

言語もそうですが、フレームワークがバージョンアップした場合にも充分な注意が必要ということですね。 大変、教訓になりました。参考にしていただければ嬉しいです。

※余談ではありますが、Play framework2.4はまだまだ日本語のドキュメントが少ないのが現状です。 (2.3以下はいっぱいあるんですが・・・)

これから日本語の記事がもっと増えるといいなぁと切に願います。

他力本願は良くないので、私も日本語の記事が書けるように頑張ります!