Help us understand the problem. What is going on with this article?

初学者がハマってしまったplayframework

More than 1 year has passed since last update.

第2のドワンゴAdventCalendar10日目担当だったはずのD3vel0pperです。
昨日投稿できなかったのがすごく辛くなってます。。申し訳ありません。。。
インターンしただけの人でAdventCalendarに投稿しちゃうっていう無謀な人です。

Playframework使い始めてみようと思い立った

今回は、webのフレームワークであるPlayframework(公式はこちら)を使い始めてみたので、初めて見る人にでもわかるように少しづつ説明していきたいと思います。
実際まだ触り始めたばっかりなので、間違っていたらバシバシ編集していきます。。
世に出ている情報の多くは初心者殺し感半端じゃないんですよぉ。。。。

まずフレームワークとは

フレームワークとは、頻繁に使うことが多いような機能を、多くの人が利用可能にしたもののことで、例えばWebフレームワークでは、一からhtmlを編集したりルーティングを設定したり、http経由で投げられたリクエストを処理したりなどを設計、実装することなく、ストレスフリーに実行できるようにしたものがあります。

Playframeworkとは

Playframeworkはscala,及びjavaでwebアプリケーションを開発するときに広く使われているフレームワークです。現在はscalaとjavaを公式ではサポートしているようです(公式を参照)。
さぁ、これを使って自分もウハウハweb開発するぞーと思っていました。昨日のあの事件が起こるまでは...

何にハマったのか

ひとまず、公式に沿ってプロジェクトを立ち上げてみたはいいものの、IntelliJIDEAさんが、ジェネレートしてくれた以下のコードのviews.html.indexindexの部分が(darculaテーマなので)赤く輝いておられる。
エラーはcannot resolve the symbol "index"とのこと。

HomeController.scala
package controllers

import javax.inject._
import play.api._
import play.api.mvc._

/**
 * This controller creates an `Action` to handle HTTP requests to the
 * application's home page.
 */
@Singleton
class HomeController @Inject() extends Controller {

  /**
   * Create an Action to render an HTML page with a welcome message.
   * The configuration in the `routes` file means that this method
   * will be called when the application receives a `GET` request with
   * a path of `/`.
   */
  def index = Action {
    Ok(views.html.index("Your new application is ready."))
  }

}

これ、一番最初に自動でジェネレートされるなんの変哲も無いコードなのですが、これがすでに動かないので初めて触るものなのにこれで本当心が折れそうになりました。
しかし、そこはエンジニア魂の見せ所。ダメだ…と思った問題にこそ立ち向かっていかなければ…締め切りは過ぎたけども。
それで、ほんげーーーと思って格闘していました…

解決に至るまで

で、いろいろと調べて回っていたのですが、「そういえば、エラーそのまま入れれば出てくるんじゃね?ていうかそれ基本じゃ無い?」と思って「scala play テンプレート cannot resolve」と入力して調べていたら、ようやくこちらのページを見つけまして...

このページでも同じような症状に悩まされる人がいて、
みてみると、下の方に「.ideaを削除してみるといいよ!その後もう一回プロジェクトをIDEAのメニューからインポートしてみて!」って回答している人がいました。

ちなみに、同じような回答を見たことがあったので、すでに一度プロジェクトを閉じてから、.ideaフォルダを削除して、もう一度IntelliJを開き直す、っていうことを試していたのですが、確かに、IntelliJを再起動してたから、再起動せずにIntelliJ上から削除して再度プロジェクトをひらけばいけるのでは?と思い立ち、やって見ました。

そしたら・・・・
できましたよ!解決しました!
きちんと赤いエラー表示も消えて、きちんと読み込んでくれました!
試しにlocalhost:9000にアクセスしてみると、きちんと表示されました!

解決策

今回自分が解決した方法は以下です。

  1. IntelliJで開いているプロジェクトの中にある、「.idea」ディレクトリをIntelliJ上から右クリックで 削除する
  2. 一旦現在のプロジェクトをクローズする
  3. もう一度IntelliJの「File > Open」から該当のプロジェクトを開く
  4. それでもダメなら何度か繰り返してみる

自分はこれで解決しました。

今回学んだこと

導入記事だとしても、案外そんな簡単にはいかないんだぞ、ということですね。
なめてかかってた自分が恥ずかしいです。実際締め切りにも遅れてしまいましたし。
きちんとエラーが出たら、落ち着いて調べてみることが大切なのだな、と思いました。
これだけは言っておきたいです。
エラーが出たらそのエラーをコピペしてググる!
案外これで出てきたりするので、初学者仲間の人は覚えておいて欲しいです。

それでは、今回はこの辺で失礼します。。。

追記2017/04/15

別の解決方法が見つかったので、メモがてら共有します。
IntelliJのメニューから
「File」>「Invalidate Caches/restart」
を選ぶとうまくいくパターンもある模様です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away