Windows 環境構築手順書の話

Windows 環境で Play + Scala + Scala.js + MongoDB 開発環境構築の手順書。他の方のショートカットになれば。

  1. Windows Update
  2. Firefox をインストール
  3. Google 日本語入力をインストール
  4. (ChangeKey をインストール)
  5. (TouchKey をインストール)
  6. 管理者権限の PowerShell で
    1. スクリプトの実行ポリシーを変更
      Set-ExecutionPolicy RemoteSigned
    2. Chocolatey とその他諸々をインストール

  7. JDK をインストール
  8. JDK の Path をシステム環境変数に追加
  9. JAVA_HOME をシステム環境変数に追加
  10. sbt をインストール
  11. IntelliJ IDEA をインストール
  12. Node.js をインストール
  13. Node.js の Path を追加
  14. MongoDB をインストール
    1. MongoDB の Path を追加
    2. 設定ファイル mongodb.conf を記述
      systemLog:
         destination: file
         path: path\to\mongodb.log
         logAppend: true
      storage:
         dbPath: path\to\db
      net:
         bindIp: 127.0.0.1
         port: 27017
      setParameter:
         enableLocalhostAuthBypass: false
    3. MongoDB をサービスに登録
      mongod.exe --config "path\to\mongod.conf" --install --serviceName MongoDB
    4. 管理ツール -> サービス から MongoDB を選んで起動
  15. RoboMongo をインストール
    1. Create で新しいコネクションを作成
  16. PhantomJS をインストール
  17. PhantomJS を展開して Path を通す

Service で DB から find する際のキーによって戻り値型を Option と List で変えたい場合にどうしたらいいか考えてみたけどどうなんでしょうという話

Service で DB からあるキーでデータをひろいたい。かつ、キーによって戻したいデータの型が Option だったり List だったりするとする。Service にキーごとのメソッドを生やせばいいけどダサいしたくさん書くのがいやなのでジェネリックに書けないか考えてみたけどいい方法なのかわからないので晒す。コードは Scala です。

※追記あり。いろいろご指摘をいただきました。

“Service で DB から find する際のキーによって戻り値型を Option と List で変えたい場合にどうしたらいいか考えてみたけどどうなんでしょうという話” の続きを読む

サーバーサイド初心者が Play Framework 2.4 + Scala + Silhouette で認証認可動かしてメール認証を自前実装した話

なんか結果的に Play Framework の主要な機能について触れることになったっぽいので、Play + Scala の入門というかチュートリアル的成長譚。Web サービスとかどう作っていいかわからん!という私向け。

Play Framework 2.4 + Scala + Silhouette(認証認可ライブラリ) を使ってWebサービスの基本になりそうなところまで作ってみたお話。永続化は mongoDB でやったよ。

完成形は github で公開してます。

Play Framework ぜんぜんわからん。2.4系から変わりすぎ。Webよくわからんよー。認証認可どうしたらいいいんだ、ライブラリ使ったらいいのか。永続化とかどうするんですかね… という私みたいな初心者向け弾丸ツアーです。特に認証認可ライブラリ Silhouette については日本語での解説が全然ないので、役に立ったらいいな(宣伝)。

“サーバーサイド初心者が Play Framework 2.4 + Scala + Silhouette で認証認可動かしてメール認証を自前実装した話” の続きを読む

Play Framework 2.4 で reverse router の absoluteURL を Controller 外で使ったら RequestHeader がねーよって言われて解決した話

小ネタ。

reverse router (controller.routes クラス)を使って URL を取得しようとした時

val link = routes.HogeController.piyo(fuga).absoluteURL()

これを controller 外で呼ぶと

Cannot find any HTTP Request Header here

とかいってエラーになる。

結論から言うと、absoluteURL のシグネチャは

def absoluteURL()(implicit request: RequestHeader): String

なので、absoluteURL() を呼ぶメソッドが Controller から呼ばれること前提で

def hoge()(implicit request: RequestHeader): String = {
  routes.HogeController.piyo(fuga).absoluteURL()
}

とかするときれいにまとまった。

よかったね。

Play Framework 2.4 Scala + Specs2 + Mockito + Guice DI でテスト素人がテストに挑戦した話

Play Framework 2.4 をちまちま触っているのですが、モダンな開発といえば自動テストはかかせないよな〜〜〜〜〜〜〜と思いつつずっと出来てなかったので触りました。

案の定、いろんなことに引っかかったし、とくに Play 2.4 から本格導入された Guice による動的DIとかと絡んで、どうすれバインダーってなってたし、モックとか Mockito とか聞いたことあるけど、どうやったらいいんですかね〜ってなったし、Futureってどう評価したらいいんだ…とかとか、いろいろあるのでまとめました。

慣れればできそうなので、テストとか Play + Specs2 + Mockito はあんまり、みたいな人、自分みたいな初心者に役に立てばいいなぁ。

“Play Framework 2.4 Scala + Specs2 + Mockito + Guice DI でテスト素人がテストに挑戦した話” の続きを読む

Scala の Future と Promise で Android の Callback 地獄を緩和した話

Android というより Java のライブラリで頻出する Callback パターン呼び出し連鎖

def setImage(id: Stiring) = {
  User.load(id, new OnLoadCallback {
    override def onSuccess(userJson: String) {
      Json.parse[User](userJson, new JsonParseCallback {
        override def onSuccess(user: User) {
          Image.load(user.imageUri, new OnLoadCallback {
            override def onSuccess(image: Image) {
              view.setImage(image)
            }
          }
        }
      }
    }
  }
} // >つらい<

みたいのを Scala 標準のライブラリに含まれる Future と Promise で殺す話。
いわゆる Listener についてはこの方法だと解決しないので、このへんを参照してほしい。

“Scala の Future と Promise で Android の Callback 地獄を緩和した話” の続きを読む

2015年も終わりそうなので Scala で Android をはじめる方法をまとめたのでぜひみんな2016年は Scala で Android を書きましょうという話

iOS では Swift での開発が本格化して関数型っぽい言語による開発が世間一般に浸透し始めた2015年ですが、Android 開発といえばクソみたいなのは相変わらずで Java6 でもうね。という感じですがいかがお過ごしでしょうか。

そんななか本日は Android を Scala で開発する方法をまとめた話。年末だしね。Kotlin じゃないよ。ごめんね。

“2015年も終わりそうなので Scala で Android をはじめる方法をまとめたのでぜひみんな2016年は Scala で Android を書きましょうという話” の続きを読む