Scala初心者がPlay2.2を使ってtwitter連携アプリを作ろうとしたときにハマった罠

飛び入りで、芸者東京さんの勉強会で、初心者にScalaを教えるという勉強会をしてきた時の話です
http://partake.in/events/5c793335-6b54-43f5-ac6f-6234b0847308


事例1

sbt0.12.xのlauncherがインストールされていた

それで、Play2.2やろうとすると、エラーでる(0.13のlauncherが必要)

初心者だとそのエラーの意味が、すぐにはわからない

「sbtどうやって入れた?いつ頃入れた?」

「homebrewでいれました」

brew updateする

sbt以外のものも大量にupdateされて、とても時間を消費する


事例2

sbtでOutOfMemoryエラーでる

インストール方法によるが、少なくともhomebrewは、デフォルトではJVMのオプション設定されないらしい*1

結論としては、ここに書いてある
http://www.scala-sbt.org/0.13/tutorial/ja/Manual-Installation.html

-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M

などを必ず設定しましょう。なのだが

homebrew(もしくは、その他の似たようなツール)の詳しい仕組みや使い方知らない、ことが多い。

「which sbt」って打って

whichも知らないこと多い。コマンドの使い方とか知らないと、「sbtが古い」だけわかっても、それを解決する部分もハードル高い

そもそも講師もそれほど、homebrewすごく詳しいわけではないし、なんかScalaの話関係なく、homebrewの話題で盛り上がる・・・ScalaやPlay2にたどり着かない・・・

「え、こんなに苦労するなら、もうとりあえずpaulp/sbt-extrasを全員に使わせよう」と自分は提案する(あ、windowsの人はどうするのか問題残るけど・・・)

「まぁ環境構築苦労するのも含めて勉強でいいのでは」という意見もあり、あえて苦労させる



事例3

windowsだと、sbt起動した後に固まったように見える

講師陣も理由がわからない

ivy2のcache削除、sbtの設定変更、「pathの日本語やスペースのせいでは?」など色々試す

あれ、.ivy2観察してみると、容量増えていってるから、downloadされてる・・・?固まってない・・・?

自分が
「そういえば、play2はコンソールの表示をいじっていて、ivyの解決や、jarのdownloadの際に、一旦表示した行を消して、その上に上書きするような凝ったことをやっているが、その動作がwindowsではうまくいかなく、固まったようにみえるというバグ(?)があった!!!」
と思い出す

原因判明

「.ivy2の容量が増えてるのを観察しながら、download終わるの待ってね♡」と、アドバイスしてる講師側も「なにを言ってるんだおまえは」的な心境になりながら、「.ivy2の容量が増えてるのを観察」させるという謎な行為を強いる



事例4

これはScala関係ないが

twitterディベロッパーページで、新規にtwitterのアプリが作れないよー?」

「え、作れたけど?」

情報が錯綜、人によって違う?原因不明?

これ Twitterのアプリケーション新規登録時に、開発者のTwitterアカウントと携帯電話の関連付けが必須になった模様。

なんだと・・・・、しかもつい最近(ここ1〜2ヶ月)からか・・・

もう面倒くさいから、講師側で作ったkey公開するから、アプリ登録できなかった人は、これ使って!

(アプリ作り始める)

「あれ、さっきまで正常に動いてたのに、表示されなくなりました」

人人人人人人人人人人人人人人人人人人人人人人人人人人_
> みんなで同じkey使ってたから簡単にrate limit超えた <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

うっ、辛い・・・





などです。なので、結局セットアップで勉強会の全体4時間のうちの半分(2時間以上)を消費する人が多数で、実際にコード書く時間が1時間くらいとかそういう感じでした。play2のzipダウンロードして使うと、一部の問題は発生しませんが、あれはあれでデメリットもあるので・・・。
一人でプログラミングしてると気づかない地雷が大量にあって勉強になりました

*1:設定したほうがいいよ、というメッセージだけ一応ある https://github.com/Homebrew/homebrew/blob/3fbcdd0e/Library/Formula/sbt.rb#L30