Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

元インフラエンジニアが
Scalaを触ってつまづいたところ。

4,985 views

Published on

Scala関西2017発表資料。

Published in: Internet
  • Hey guys! Who wants to chat with me? More photos with me here 👉 http://www.bit.ly/katekoxx
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

元インフラエンジニアが
Scalaを触ってつまづいたところ。

  1. 1. 元インフラエンジニアが Scalaを触ってつまづいたところ。 セプテーニ・オリジナル 尾上 貴子
  2. 2. 目次 • 自己紹介 • なぜインフラエンジニアがScalaのエンジニアになったのか • Scalaを始めるまで • 知識ゼロからScalaを触ってみた • ここ4ヶ月の流れ • Scala研修中につまづいたところ • Scalaのここが好き • まとめ
  3. 3. 自己紹介 • 名前:尾上 貴子 • 所属会社:セプテーニ・オリジナル • 所属プロジェクト:GANMA! (マンガアプリの開発部署) • Scala歴:4ヶ月
  4. 4. なぜインフラエンジニアが Scalaのエンジニアになったのか • セプテーニ・オリジナルは エンジニア50 ~ 60人ぐらいのScalaメインの会社で、 インフラエンジニアは2人しかいなかった • インフラの設計・構築・運用まで全部1人でやってた • プロジェクトはどんどん増えていくけど、 インフラエンジニアは増えない • 限界はやってくる • 専属のエンジニアは廃止、インフラは全員でみようとなり、 みなさんと一緒にScalaを書くことになった
  5. 5. Scalaを始めるまで • インフラエンジニアとして、 Terraform・Chef・Dockerをメインに触っていた • ここ3年ぐらいTerminalしか触っていない、 IDEの使い方忘れているレベル
  6. 6. 知識ゼロから Scalaを触ってみた
  7. 7. ここ4ヶ月の流れ • 5 ~ 6月 Scalaの新卒研修に相乗り • 7 ~ 8月 Specs2を使ったTDD研修 Play Frameworkで掲示板を作る研修 • 8月 ~ 現在 DDD研修中
  8. 8. Scalaの新卒研修 • 外部の講師を呼んでコップ本を教材としてを学ぶ • 1日4時間 * 週2日で、理解を深めるための課題が出る • 最初の課題は 「forを使ってみよう」 最後の課題は 「(※チャレンジ) Traversableを継承したコレクションを自作しよう」
  9. 9. Specs2を使ったTDD研修 • Specs2の使い方とテストの大事さを学ぶ
  10. 10. Play Frameworkで 掲示板を作る研修 • ゲームの進捗を投稿して確認できるものを作った (実用性は全く考えていません)
  11. 11. DDD研修 • エリックさんの本を読んで、 先程の掲示板をDDDを使用したものに作り直す
  12. 12. Scala研修中につまづいたもの • for ~ yield • メソッドの戻り値 • andThen(関数合成の方) • 共変・反変 (つまづいたものが多かったので、 今回はこちらの話はしません)
  13. 13. Scala研修中につまづいたもの • コレクションメソッド • プレースホルダ構文 • implicit • エラー処理 (try~catch・Try・Option・Eitherの使い分け)
  14. 14. これらよりも1番つまづいたのは、 Scalaを読み解くことだった
  15. 15. 1番つまづいた • Scalaはシンプルに書くことができ、 始めは、何がどうなっているのかわからなかった ↑と↓は同じ
  16. 16. コレクションメソッド Listの操作
  17. 17. コレクションメソッド いっぱいある。 いったいどれから覚えれば良いのだろう?
  18. 18. S-99(Ninety-Nine Scala Problems)の 28問目まで説いて学んだ。 http://aperiodic.net/phil/scala/s-99/ 28問目までがリストの操作を学ぶ問題。 その先は数学的な問題になる。
  19. 19. 4ヶ月やって暗記できている コレクションメソッド • map・flatMap • contains・find・exists • head・headOption・last・lastOption・tail • isEmpty・nonEmpty
  20. 20. map・flatMap • map・flatMapはコレクションの要素を変換する • mapは引数のnを処理して値を返す • flatMapはnを処理して 結果値を連結したリストを返す 同じ結果を返すこともできる
  21. 21. mapとflatMapの違い • mapは単語ごとの複数のリストで返しているが、 flatMapは全てを連結した1つのリストを返している
  22. 22. contains・find・exists • containsは特定の値があればtrueを返す • findは一致する最初の値をOption型で返す • existsはListに1つでも一致する値があればtrueを返す
  23. 23. head・headOption last・lastOption・tail • head・headOptionはListの先頭の値を返す • last・lastOptionは末尾の値を返す • tailは先頭の値以外を返す
  24. 24. isEmpty・nonEmpty • isEmptyは値がなければtrue nonEmptyは値があればtrue
  25. 25. 様々な便利メソッドが用意されているので シンプルに書くことができる
  26. 26. プレースホルダ構文を覚えると もっとシンプルに書ける
  27. 27. プレースホルダ構文 • 関数リテラルの短縮形のようなもの
  28. 28. プレースホルダ構文 • 変数名が必要でないところは _(アンダースコア)で置き換えられることがあ る
  29. 29. 引数が2つの時も使える
  30. 30. 全てのところに 使えるわけではない • 同じ引数を2回以上利用するものでは使えないたり、 他にも使えるときと使えないときがあるので、 「置き換えられることがある」
  31. 31. エラー処理
  32. 32. try ~ catch • 他の言語と同じように使える。 • catchの中身はcase文で複数書くこともできる。
  33. 33. Scalaではtry~catchだけでなく、 エラー処理に 使用できる型が複数ある
  34. 34. Option・Try・Eitherは 成功するか失敗するかわからない時に使うもの。 失敗時の動作をどうしたいかで使い分ける。
  35. 35. Option • Optionの子クラスにSomeとNoneがいて、 値があるときはSome(value)で返し、 それ以外のときはNoneで返す
  36. 36. Try •SuccessとFailureで値を取得していて、 例外発生時はFailureにThrowableを入れてくれる
  37. 37. Either • Eitherは2つの型どちらかの値を保持する型。 例えば、失敗時に例外を保持することによって Tryと同じような用途に使うことができる
  38. 38. エラー処理も型を使いこなすことにより、 シンプルに書ける
  39. 39. implicit 暗黙のクラス・パラメーター
  40. 40. 暗黙のクラスは 隠しコマンドのようなもの
  41. 41. 暗黙のクラス • 既存のクラスは変更せずに、 メソッドを追加して拡張するように振る舞う 偶数か判断するimplicitクラス
  42. 42. 既存のクラスを変更しないことにより、 安全に直感的(シンプルに)書ける (隠しコマンドのようなものなので乱用すると混乱するかも。)
  43. 43. http://gakuzzzz.github.io/slides/i mplicit_reintroduction/#1 暗黙のパラメーターは がくぞーさんのimplicit再入門へ。
  44. 44. (※チャレンジ)研修中の課題 以下のシグネチャを持つliftメソッドを実装してください。 このメソッドは、任意の1引数関数を、 Option型を引数にとりOption型を返す関数に変換するメソッドです。 すなわち、liftメソッドは、以下の仕様を満たすものとします。
  45. 45. 私の解答 これでも間違いではない
  46. 46. 模範解答
  47. 47. Scalaのここが好き
  48. 48. • シンプルに書ける • 便利なメソッドや書き方が たくさん用意されているので、 それに頼ることができる 好き
  49. 49. まとめ • コレクションメソッドいっぱい用意されている • プレースホルダ構文で、 変数名はアンダースコアで省略できる • エラー処理ではOption・Try・Eitherと 複数の型が用意されている • 暗黙のクラスは既存のクラスを変更しないので 安全に直感的に書くことができる

×