SlideShare a Scribd company logo
元インフラエンジニアが
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

What's hot (20)

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

Viewers also liked (20)

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

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

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

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