Scala 関西勉強会


2014/09/20

# Skinny Scala祭りとか

@aa7th? さん

- 学習曲線の話とか聞けた
- 言語設計者の方の思想を聞けた

## 関西も盛り上げていこうと思った

- 東京は「もういいよね」感なので。
- 関西待ってるだけじゃヤバイ

## SkinnyFramework

- Scala製ふるすたっく web フレームワーク
- Scala on Rails
- Scalatraベース(超シンプルなフレームワーク)

- Servletコンテナ上で動く
- 国産( @seratch さん )

### How do I use?

- http://skinny-framework.org/
- 空Zipファイルがおいてるから、それをダウンロードして試すのが速い
 - ( Homebrew, YEOMANでも可 )
- ./skinny run
- localhost:8080

- Scaffolding
 - ./skinny g scaffolding members member name:String ...
 - ./skinny db:migrate
  - 開発はデフォルトでh2 Database. 設定は application.conf
 - ./skinny run
 - localhost:8080/members でもう出る。

### 中身

```scala
package controller

class RootController extends ApplicationController {
	def index = {
		set("name", "Scalaなんとか")
		render("/root/index")
	}
}
```

### SkinnyResource

- Restful web Resource
- 変更したい箇所はoverrideして書き換えればok
- SkinnyResource を使わない CRUDサンプル in Qiita

### View

```
<%@val name: String %>
hellow, ${name}
```

こんな感じ

#### View Tmeplate

- Scalate を使ってる
- 形式は Mustache, Scaml, Jade, SSP ( default は SSP )
 - Jade は何かちょっとややこしい？

### Skinny-ORM


- ScalikeJDBC Base
- SkinnyCRUDMapper Traintを継承すると使える
- Play2 でも他のフレームワークで使える

### その他

- Validator, extends ValidationRule Trait
- ReverseScaffold 
- Assets(Less, Sass,Scala.js...)
- Mail
- FactoryGirl
- etc...

### Deploy

- war ファイルにして tomcat, jetty に配置
- Heroku もサポートしたら、ScalaとHerokuの相性がいまいち( ホントはどうにかしたいらしい )

### 感想

- 直感で使いやすい
- Scala の難しい文法がわからんでもとりあえず大丈夫

- マニュアルやせらさんのブログ記事とか、Scalatraの情報などを元に割とつまらなく簡単なものは作れた
- Scafolldingが

### 参考資料

全部セラさんの記事

http://seratch.hatenablog.jp/


# 英語とScalaと私と？

curet が skinny 製

@daisky さん

Scala祭りの再演

せっかく作ったのでもう一度(前の10人ぐらいしか聞いてなかったから)


## 僕は英語が苦手です ( I'm not good at English )

TOEIC Score: 300 点

日本語文献は増えてきた

トラブルシューティングだと stackoverflow とか…

- 英語の本(Functional Programming Scala)を読んでる
- 技術書の英語はパターンあるから、Google翻訳でなんとか意味がとれる


# FAQ ? 参加登録時アンケートの質問に答えてみる

@kitora_naoki さん シナジーマーケティング(株)

確率統計テキストマイニング、など。

- Haskellとどのくらい違う？
 - -> だいぶ違う
 - Haskell: 純粋関数型言語
 - Scala: 非純粋関数型言語

- どうやって他の人に教育、学習させているのか？
 - 教育らしい教育をやってません
 - しいて言えば、コードレビュー？ペアプロ

- Java ではなく Scalaを使うことを
 - Scala使います
 - 熱意と覚悟
- Scala のいいところ
 - いろいろ
- わるいところ
 - コンパイルが遅い
 - ヒープダンプが解析にくい
 - Java のイマイチな所を引き継いでる
  - 型消去など
- JavaとScalaの違い
 - 問題の視点を切り替えた方がいい
 - データ構造が違う
 - Java:List (配列リスト)
 - Scala:List (単方向リスト)
 - 関数型言語では再帰をよく使うから、単方向にしている？


# PHPからScalaへ…その後

@UAdachi さん From Chatwork


## Chatwork のなんとか

ビジネスチャットツール

## PHP から Scalaへ

まだ Scala プロダクションは動いてませんよ。

「チャットワーク　ビール」で検索


## なぜ？

- 静的型付け言語を使いたい
- 合宿やったの3月終わり
 - 進捗道ですか？
 - 学習（5月中旬〜）
 - プロジェクト発足( 7月上旬〜 )
 - 社内勉強会( 8月下旬〜 )

## 独習時期

- PLAY で APIを作ってみる
- コップ本とか。

### 成果

- SCALAの文法ぐらい

## Join

加藤さん @j5ik2o さん( 糖質制限、肉、、、 )がChatworkにJoinしたから、一緒に。

### 課題

- 簡単なデータ構造
- 数列、単語カウンター、検索？
- Akka で Map/Reduce

## レビュー

プルリクしてレビュー

### 成果

パターンマッチ使えるように鳴った。高階関数が使えるように鳴った。

## プロジェクト発足→ペアプロ

7月中旬

- リモートペパプロ
- ペアプロ:ソロ = 3:7 の時間割合
- ソロの時は見よう見まねで

### 成果

効率的にできた

- monadic programing へようこそ

## ペアプロのいいところ

- 自然とコーディングに集中できる

## ペアプロで大切なこと

1. 大切なこと
 - だらだらやらない
 - 終了後にコードを噛み砕く時間を用意
 - たまには雑談する（コンパイル中とか）

## どうやってリモートで？

screenHero

- 自分のキーボードでペアプロできる
- さくさく（自分が詰まってる時に相手の画面をさくっと見せてくれる）
- エディタの設定は諦める
 - Emacs派 vs Vim派(かとじゅんさん)

## matome

Scalaに移行します宣言
- ビズリーチさんと勉強会できた
- 採用（かとじゅんさん）が来た

今後のChatworkに期待してください


# さくさくアンドロイド

amaya @0x17E さん

LT

- ライブラリを使わない時はおとなしくJavaの方がいい

## Scaloid

https://github.com/pocorall/scaloid

- XMLから開放
- ただし、Scaloid を使うので、細かい所までいじろうとしたらXMLさわるはめに…

## Macroid

https://github.com/macroid/macroid

- Scaloid より XML から開放
- 比較的新しいので公式ドキュメント以外がない
- DSLの癖が強い


## Android-sdk-plugin

Android開発用のsbtPlugin

- ビルドが遅い


# ぼっち.scala

@tnoda_ さん

Scalaリア充はsbtのバグ踏んで爆発してください

## Scalaぼっちの学習

ZPD概念（教育学的なアレ）

人でできるかも、と、誰かと一緒ならできるかも、のギャップの差がZPD。

## 効率のよい学習に必要なもの（でぼっちに(ry

- 適切なガイダンス    => MOOC
- 適切なフィードバック => オンラインジャッジ
 - 段階的にフィードバックがいる


- 目標が遠いと、違う方向に行ってしまう
- 適切な、ガイダンス、フィードバックがアレば順序立てていける。

ぼっちだと、圧倒的に不利よね

## ぼっちでもできる学習法



### MOOC 
大々的にやってる基本無料で利用できる大学の講義
- http://coursera.org
 - Scala で検索
 - Odasky センセイの講義が出てくる
 - わからんかったら、とりあえず一番上を押したらいいよ

### オンラインジャッジ

わかりやすく言えば、仕様→納品→検収

1. プログラミングコンテスト主演害者が公開してることが多い
2. 直ぐに結果を知ることができる
3. 他の人の回答を参考にすることができる
3. コンテストに参加しなくてもいい

Scalaを使えるサイト

1. HackerRank / Scala 2.11 (おすすめ
2. Atcoder    / 2.9.1 (おすすえｍ
3. Codeforces / 2.11.2 (問題文の英語が稀に酷い


#### www.hackerrank.com

コンテスト。決まった課題、決まった期間で正確さなどを競う

社会人でも参加できる長い開催期間

関数プログラミング限定コンテスト

開催期間１０日間、参加人数が少ない。

オンラインジャッジはいつでも使える。
難易度の幅は広い

ProjectEulerの問題採点もしてくれる

#### atcoder.jp

他の人の回答を見て勉強できる

初心者用の問題が用意されている

# とりあえず使える sbt

@kuchitama さん

http://www.slideshare.net/KiyotakaKunihira/scala-beginners4-publish

## sbt

- Simple (???)
 - 本家でもSimple消えた
- Scala Build Tool 

## 0.13.5

から ver1 に向けて準備段階

## .sbt or .scala

- 基本は .sbt に。
- 複雑な処理は .scala に
 - 再利用できそうなら plugin

## Typesafe Activator

- sbt-np plugin いらず
- scala,java,playのひな形生成
- play2,3 では標準

## デモ

- `activator new`

- `activator ui` : ウェブ画面で

## 基本の設定

- (key)(method)(setting[s])
- method:
 - := キーに対して settings を更新
 - += キーに Settingを追加
 - など


## 依存ライブラリの取得

- % : Scala のバージョンを指定して依存性を解決
 - Javaのライブラリを使いたいときはこっち
 - groupid % artifactid % revision
- %% : Scalaのバージョンを自動的に追加して依存性
 - groupid %% artifactid %% revision
- Configuration
 - 使う時だけ依存性を解決させる
 - groupid %% artifactid %% revision % Configuration



## まとめ

- activator で簡単プロジェクト作成
- 依存ライブラリの取得は %, %% 
- 基本のsbtタスクは覚えやすい