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

More Related Content

PPTX
iOSエンジニアのためのScala入門
PPTX
ScalaでASICやFPGA用の回路を設計するChisel
PDF
頑張りすぎないScala
PDF
Non-Functional Programming in Scala
PDF
BigDLでScala × DeepLearning に入門した話
PDF
[事例紹介]Scalaで物流倉庫システム作ったよ
PDF
20150207 何故scalaを選んだのか
PDF
Scala.js触ってみた
iOSエンジニアのためのScala入門
ScalaでASICやFPGA用の回路を設計するChisel
頑張りすぎないScala
Non-Functional Programming in Scala
BigDLでScala × DeepLearning に入門した話
[事例紹介]Scalaで物流倉庫システム作ったよ
20150207 何故scalaを選んだのか
Scala.js触ってみた

What's hot (20)

PDF
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
PDF
ScalaでBacklogの通知bot作ったで
KEY
PlayFramework1.x基礎編
KEY
Scalaはじめました!
PDF
Scala Daysに行ってみて - あるいはスイス旅行記 -
PDF
Scala Performance Tuning Tips
PDF
SIerでScalaを使うために私がしたこと
PDF
【ScalaMatsuri2016】関西のScalaコミュニティ紹介
PPTX
Scala採用の背景とその後 @ hitomedia night #5
PDF
Contributing to Scala OSS from East Asia #ScalaMatsuri
PDF
とりあえず使えるSBT
PDF
Scala Warrior and type-safe front-end development with Scala.js
PDF
[Scalamatsuri2016]あ、社内コミュニティ
PDF
ScalaにまつわるNewsな話
PDF
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
PPTX
Do you like scala
PDF
Swaggerでのapi開発よもやま話
PDF
PDF
Introduction of SQL Anti-pattern at Phpcon Hokkaido
PDF
Scala超入門 - 2014/12/13 Scala関西勉強会
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
ScalaでBacklogの通知bot作ったで
PlayFramework1.x基礎編
Scalaはじめました!
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Performance Tuning Tips
SIerでScalaを使うために私がしたこと
【ScalaMatsuri2016】関西のScalaコミュニティ紹介
Scala採用の背景とその後 @ hitomedia night #5
Contributing to Scala OSS from East Asia #ScalaMatsuri
とりあえず使えるSBT
Scala Warrior and type-safe front-end development with Scala.js
[Scalamatsuri2016]あ、社内コミュニティ
ScalaにまつわるNewsな話
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
Do you like scala
Swaggerでのapi開発よもやま話
Introduction of SQL Anti-pattern at Phpcon Hokkaido
Scala超入門 - 2014/12/13 Scala関西勉強会
Ad

Viewers also liked (20)

PDF
Scala の関数型プログラミングを支える技術
PPTX
Play2 scalaを2年やって学んだこと
PDF
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
PDF
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
PDF
What Dotty fixes @ Scala関西サミット
PDF
Real world android akka
PDF
[AWSマイスターシリーズ] Amazon SQS / SNS
PDF
Deep Learning with GPUs in Production - AI By the Bay
PDF
20170721 future of reactive architectures
PDF
DeNAの機械学習・深層学習活用した 体験提供の挑戦
PDF
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
PDF
バイナリニューラルネットとハードウェアの関係
PPT
大規模Perl初心者研修を支える技術
PDF
AWS サービスアップデートまとめ 2014年3月
PDF
CTFはとんでもないものを 盗んでいきました。私の時間です…
PDF
MySQL 8.0で憶えておいてほしいこと
PDF
Go入門
PDF
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQS
PDF
TensorFlow XLAの可能性
PDF
Using Raspberry Pi GPU for DNN
Scala の関数型プログラミングを支える技術
Play2 scalaを2年やって学んだこと
Scala/Scrum/DDD 困ったこと50連発ガトリングトーク!!
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
What Dotty fixes @ Scala関西サミット
Real world android akka
[AWSマイスターシリーズ] Amazon SQS / SNS
Deep Learning with GPUs in Production - AI By the Bay
20170721 future of reactive architectures
DeNAの機械学習・深層学習活用した 体験提供の挑戦
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
バイナリニューラルネットとハードウェアの関係
大規模Perl初心者研修を支える技術
AWS サービスアップデートまとめ 2014年3月
CTFはとんでもないものを 盗んでいきました。私の時間です…
MySQL 8.0で憶えておいてほしいこと
Go入門
AWS Black Belt Techシリーズ Amazon SNS / Amazon SQS
TensorFlow XLAの可能性
Using Raspberry Pi GPU for DNN
Ad

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

PPTX
Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷
PDF
こわくないScala
KEY
Dev love関西 forslideshare
PDF
Scala 初めての人が Heroku で Web アプリを公開するまで
PPTX
とある初老インフラエンジニアの憂鬱
PPTX
EKSを動かしてみた話
PDF
Error handling in Erlang and Scala
PPTX
Scalatronで楽しく学ぶ関数型プログラミング
Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷
こわくないScala
Dev love関西 forslideshare
Scala 初めての人が Heroku で Web アプリを公開するまで
とある初老インフラエンジニアの憂鬱
EKSを動かしてみた話
Error handling in Erlang and Scala
Scalatronで楽しく学ぶ関数型プログラミング

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