SlideShare a Scribd company logo
SierでScalaを試した結果
Web系に転職した話
Scala 福岡 2019
株式会社サイバーエージェント
細西 伸彦
1
自己紹介
● 細西 伸彦 スクィーラ@bake_nezumi
● 42歳
● エンジニア
● 株式会社サイバーエージェント アドテクスタジオ所属(2018年7月~)
● 1999年~2018年までユーザー系システム子会社に勤務してました
(福岡)
● Scala歴は5年くらい
2
今日話すこと
● 経歴
● 前職での役割
● SIerでScalaを部分導入した話
● SIerでScalaの完全導入はできなかった話
● 技術選定をどのように行っていたか
● Web業界へ転職した話
3
経歴
4
経歴 (20代)
22歳~(福岡)
大学卒業後、物流系企業のシステム子会社に入社
ひたすら仕様書を元にコーディング
主にC、SQL、VB6
24歳 ~28歳(東京)
親会社へ出向
物流システムの要件定義、自社、他SIerへの仕様説明、現場導入など
この頃は仕事であまりコードを書いてなかった
5
経歴 (30代)
● 開発を希望し福岡に戻る
● 自社の開発手順標準化
RUPベース
設計書様式、設計手順、開発手順、テスト手順
● 自社フレームワーク構築(受託スクラッチ開発用)
Java, Struts, Seaser2 + Excel設計書からのボイラープレート生成
● フレームワークの維持、展開
開発ガイドラインの作成、機能拡張、標準化適用、トラブルシュート
10名規模 ~ 100名規模くらいのものを数プロジェクト担当
● 34歳くらい~
技術責任者の立場になり、選定権限を得る
6
前職での役割
7
前職での役割
● 開発プロセスは基本ウォーターフォールで行っていた
主な理由
管理手法が確立されており計画に対する実績の進捗が把握しやすい
(受託開発は基本納期がマスト)
トラブらないためには
計画と実績の乖離が少ない必要がある
→ 型にはめる
● できること、できないことを明確にする
→ はまらない要素は?
● ブレが大きいと考えられる部分は先に潰す
8
前職での役割
9
受託プロジェクトA
標準化チーム
要件定義/後工程見積 設計/開発 テスト/導入
開発フレームワークメンテナンス
標準化メンテナンス
プロトタイプ 性能試験
受託プロジェクトB
要件定義/見積 設計/開発 テスト/導入
プロトタイプ 性能試験
標準化教育 標準化教育
技術的な流動要素を
引き受けるチーム
顧客との契約の単位
SIerでScalaを部分導入した話
10
Scala導入のきっかけ
2014年、自社製WMSパッケージ新規開発の企画が立ち上がり、
アーキテクチャ策定を任された
Strutsベースのフレームワークは限界を迎えており刷新を決意
● 長年の拡張により肥大化、複雑化し新規拡張が困難
● StrutsがすでにEOL
プロトタイプにPlay Frameworkを選定し検証
→ 問題無いと判断し作り上げた
11
Play Frameworkを選定した理由
ScalaもJavaも使えるから
12
Scalaが使えることが選定理由になった理由
● 現代的な記述様式を学べる
○ パターンマッチ
○ イミュータブルなプログラミングスタイル
○ など
● Java資産の利用が可能
● 個人的なモチベーションが上がる
○ 他に自信を持って布教できる
13
Scala部分導入時のアーキテクチャ概略
Java 8
Play 2.3
Bootstrap
JQuery
アプリケーション
RDB
Doma2
14
JDBCREST
Client Front Server
自作フレームワーク
Java 8
Play 2.3
アプリケーション
Doma2
自作フレームワーク
アプリケーション
Back Server
JDBC
自作したフレームワークおよびライブラリ
● UIコンポーネントのサーバーレンダリング (Twirl利用)
● Pub/Subのブリッジ(Akka利用)
● - DomaとPlayの統合
アプリケーション(業務処理)
● サーバー処理
● 画面
Scalaの利用箇所
15
Scala
Java
すべてJava
YAML, JavaScript
言語
全体コード量の
3%くらい
できたこと、できなかったこと
できたこと
● Scalaアプリケーションの開発基盤構築
● 自チーム内のScala布教(3名程度)
できなかったこと
● アプリケーション(業務処理)をScalaで作ること
16
SIerでScalaを完全導入はできなかった話
17
Scalaの適用範囲を広げる際の障壁
● 開発者の確保ができない
受託開発の特性上、プロジェクト発足時に協力会社より要員を募って
体制を作るが、Scalaエンジニアは市場に居ない
→ 自社で育てないと事実上不可能
● 保守、運用に自信が持てなかった
構成上アプリケーションを一部Scalaにすることは問題なくできた。
が、1プロダクト内に2言語あると機能追加のコストが読めない状況
になる上要員が限られる
18
とはいえ
Play Framework初利用となった自社WMSパッケージは規模として大きすぎたため、
2,3人程度で開発可能な案件にて実行に移そうと思った
19
もうひとつの課題
O/RMapperをどうするか、決めかねていた
現状利用しているDomaに不満はなかった
※Doma
コンパイル時のコード生成 & チェック
2Way SQL対応テンプレート
依存ライブラリなし
を特徴としたJavaのDBアクセスライブラリ
https://github.com/domaframework/doma
20
DomaをScalaから直接使ってみた
JavaでDomaを利用したコード
21
DomaをScalaから直接使ってみた
ScalaでDomaを利用したコード
22
ちょっと苦しいけどいけそうに見える
23
しかしEntity
Javaで作った場合のEntity
24
しかしEntity
Scalaで作った場合のEntity
25
アノテーションがつらい。。
26
やはり無理があったため、Wrapperを作った
(2017年)
https://github.com/bakenezumi/domala
27
Domalaの利用例
Application
28
Domalaの利用例
Entity
29
JavaコードとScalaコードの比較
30
Domalaの現況
Daoの利用について、ほぼJavaと同様に書けるようになったため実行に踏み切ろうとし
ていた矢先・・・
利用していたScala Meta ParadiceがEOL
※ Scala Meta Paradice
アノテーションマクロを実現するScalaのコンパイラプラグイン
experimentalなライブラリであったため仕方がない。。。
打開策が考えられていないので現在開発は中断しています
Macro Paradiceに実装を変更
or
sbt pluginにしてコードジェネレート
31
SIerでScalaを完全導入はできなかった話
いろいろとあがいたものの、フルScalaのアプリケーションを受託開発で開発することは
できなかった
でもDomala作成を通し、社内外で様々な意見を聞くことができ、
個人的にはよい経験になった
32
技術選定をどのように行っていたか
33
技術選定をどのように行っていたか
基本指針
● 組織のスキルとマッチすること
○ 無理はしない
○ ガイド類、サンプル類は厚めに準備した方が開発は回った
● 楽しいこと
○ つらみが少ない
○ サクサク感
● 影響が大きいものは他者に委ねず最終的に自分で決めること
34
技術選定をどのように行っていたか
ライブラリの選定基準
● コミュニティが活発であること
○ ガイドがしっかりしている
○ 日本語の情報もできれば欲しい
● 捨てられること
○ 依存性がない、もしくは少ない
● なるべく自分で作らないこと
→ 作りたくなったらOSS化した方がいいかも
35
Web業界に転職した話
36
転職のきっかけ
スカウトメールがきっかけ
特に転職活動は行っていなかった
● 年齢に不安があった
● 人間関係、仕事内容に大きな不満はなかった
● 機会があれば、という思いはあった
広告配信という全く未知の分野であったが、大量トラフィック、分散並列処理、機械学習
といった前職でやりたくても出来なかった仕事ができることがとても魅力的に感じた
37
転職で悩んだこと
勤務地が東京という点だけがネック
というのも
● 住宅ローン持ち
● 家庭持ち(妻と小3と小5の子供2人)
のため移住か単身で転職かを選択する必要があった
家族会議の結果「単身で転職」をとった
快く送り出してくれた妻には本当に感謝しています
38
転職後の現在
仕事はとても楽しい
● 開発プロセスはスクラム
○ 自社サービスなのでプロダクトにフォーカスしてスケジュールできる
● 型にはめなくていい
○ 周りはみんなエンジニア
● Scalaを思う存分書ける
○ Finagle web server
○ MacWire DI library
○ ScalaPB protocol buffer compiler
○ Scanamo DynamoDB access
○ circe JSON library
○ Doobie Functional JDBC Layer
○ cats
39
転職して気づいたこと
● 危機感が重要だということ
○ 今効果が出せていることが未来も効果を出せるとは限らない
○ 変化しつづけられれば年齢は関係ない
● 好きな仕事を見つける
○ 他人の期待に沿おうとするとツライ
○ 自分の軸はあったほうがいい
○ やりたいことがあったら周りを巻き込む努力が必要
40
ご清聴ありがとうございました
41

More Related Content

Similar to SierでScalaを試した結果 Web系に転職した話

DXに立ち向かうための マインドセット(公開用)
DXに立ち向かうための マインドセット(公開用)DXに立ち向かうための マインドセット(公開用)
DXに立ち向かうための マインドセット(公開用)
真一 藤川
 
エンタープライズ SaaS の初期成長戦略
エンタープライズ SaaS の初期成長戦略エンタープライズ SaaS の初期成長戦略
エンタープライズ SaaS の初期成長戦略
Tomoe Sawai
 
メンバーズグループ福岡Meetup/リモート常駐している派遣の話(和気登志子)
メンバーズグループ福岡Meetup/リモート常駐している派遣の話(和気登志子)メンバーズグループ福岡Meetup/リモート常駐している派遣の話(和気登志子)
メンバーズグループ福岡Meetup/リモート常駐している派遣の話(和気登志子)
Members_corp
 
アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜
MicroAd, Inc.(Engineer)
 
Firebase Authを Nuxt + Railsの自前サービス に導入してみた
Firebase Authを Nuxt + Railsの自前サービス に導入してみたFirebase Authを Nuxt + Railsの自前サービス に導入してみた
Firebase Authを Nuxt + Railsの自前サービス に導入してみた
Tomoe Sawai
 
スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話
スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話
スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話
Rakuten Commerce Tech (Rakuten Group, Inc.)
 
Filesの内部的な仕組みを調べてみた
Filesの内部的な仕組みを調べてみたFilesの内部的な仕組みを調べてみた
Filesの内部的な仕組みを調べてみた
AkiraMasago
 
うぇぶはち会#9 ガラパゴス諸島発のエンジニア、クラウドに降り立つ
うぇぶはち会#9 ガラパゴス諸島発のエンジニア、クラウドに降り立つうぇぶはち会#9 ガラパゴス諸島発のエンジニア、クラウドに降り立つ
うぇぶはち会#9 ガラパゴス諸島発のエンジニア、クラウドに降り立つ
TakaakiNiikawa
 
【SFO2020】業務SEを7か月でWebエンジニアに変える方法 ~アジャイルマインドを得るために~
【SFO2020】業務SEを7か月でWebエンジニアに変える方法 ~アジャイルマインドを得るために~【SFO2020】業務SEを7か月でWebエンジニアに変える方法 ~アジャイルマインドを得るために~
【SFO2020】業務SEを7か月でWebエンジニアに変える方法 ~アジャイルマインドを得るために~
Yukio Okajima
 
メンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったこと
メンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったことメンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったこと
メンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったこと
Members_corp
 
学校情報化とリーダーシップのあり方.pptx
学校情報化とリーダーシップのあり方.pptx学校情報化とリーダーシップのあり方.pptx
学校情報化とリーダーシップのあり方.pptx
Asakura Megumi
 
Scalaプロジェクトへの未経験者の円滑なジョインへ
Scalaプロジェクトへの未経験者の円滑なジョインへScalaプロジェクトへの未経験者の円滑なジョインへ
Scalaプロジェクトへの未経験者の円滑なジョインへ
Kenji Doi
 
Salesforce Architect Meetup Osaka #02 20191018
Salesforce Architect Meetup Osaka #02 20191018Salesforce Architect Meetup Osaka #02 20191018
Salesforce Architect Meetup Osaka #02 20191018
Hiroki Iida
 
議論の可視化で変わるプロジェクト進行効率 先生:清水 淳子
議論の可視化で変わるプロジェクト進行効率 先生:清水 淳子議論の可視化で変わるプロジェクト進行効率 先生:清水 淳子
議論の可視化で変わるプロジェクト進行効率 先生:清水 淳子
schoowebcampus
 
フリーランスエンジニアを半年間やってみた
フリーランスエンジニアを半年間やってみたフリーランスエンジニアを半年間やってみた
フリーランスエンジニアを半年間やってみた
Ohira Yukito
 
サーバレスでやったこと2018
サーバレスでやったこと2018サーバレスでやったこと2018
サーバレスでやったこと2018
Masayuki Sakamoto
 
2020/9/30 【エンジニア起業】小規模スタートアップがウェブサービス(SocialDog)を軌道に乗せるまで
2020/9/30 【エンジニア起業】小規模スタートアップがウェブサービス(SocialDog)を軌道に乗せるまで2020/9/30 【エンジニア起業】小規模スタートアップがウェブサービス(SocialDog)を軌道に乗せるまで
2020/9/30 【エンジニア起業】小規模スタートアップがウェブサービス(SocialDog)を軌道に乗せるまで
Masafumi Konishi
 
これからはじめるWebプロジェクトマネジメント
これからはじめるWebプロジェクトマネジメントこれからはじめるWebプロジェクトマネジメント
これからはじめるWebプロジェクトマネジメント
webcampusschoo
 
これからはじめるWebプロジェクトマネジメント - 計画の立て方
これからはじめるWebプロジェクトマネジメント - 計画の立て方これからはじめるWebプロジェクトマネジメント - 計画の立て方
これからはじめるWebプロジェクトマネジメント - 計画の立て方
Reimi Kuramochi Chiba
 
API MeetUp Online#8 セッション3 ツクレル馬場さん
API MeetUp Online#8 セッション3 ツクレル馬場さんAPI MeetUp Online#8 セッション3 ツクレル馬場さん
API MeetUp Online#8 セッション3 ツクレル馬場さん
Nihei Tsukasa
 

Similar to SierでScalaを試した結果 Web系に転職した話 (20)

DXに立ち向かうための マインドセット(公開用)
DXに立ち向かうための マインドセット(公開用)DXに立ち向かうための マインドセット(公開用)
DXに立ち向かうための マインドセット(公開用)
 
エンタープライズ SaaS の初期成長戦略
エンタープライズ SaaS の初期成長戦略エンタープライズ SaaS の初期成長戦略
エンタープライズ SaaS の初期成長戦略
 
メンバーズグループ福岡Meetup/リモート常駐している派遣の話(和気登志子)
メンバーズグループ福岡Meetup/リモート常駐している派遣の話(和気登志子)メンバーズグループ福岡Meetup/リモート常駐している派遣の話(和気登志子)
メンバーズグループ福岡Meetup/リモート常駐している派遣の話(和気登志子)
 
アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜
 
Firebase Authを Nuxt + Railsの自前サービス に導入してみた
Firebase Authを Nuxt + Railsの自前サービス に導入してみたFirebase Authを Nuxt + Railsの自前サービス に導入してみた
Firebase Authを Nuxt + Railsの自前サービス に導入してみた
 
スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話
スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話
スケジュール遅延が当たり前な状況を少し良くしたいチームがその未来のためにScrumに”再”挑戦した話
 
Filesの内部的な仕組みを調べてみた
Filesの内部的な仕組みを調べてみたFilesの内部的な仕組みを調べてみた
Filesの内部的な仕組みを調べてみた
 
うぇぶはち会#9 ガラパゴス諸島発のエンジニア、クラウドに降り立つ
うぇぶはち会#9 ガラパゴス諸島発のエンジニア、クラウドに降り立つうぇぶはち会#9 ガラパゴス諸島発のエンジニア、クラウドに降り立つ
うぇぶはち会#9 ガラパゴス諸島発のエンジニア、クラウドに降り立つ
 
【SFO2020】業務SEを7か月でWebエンジニアに変える方法 ~アジャイルマインドを得るために~
【SFO2020】業務SEを7か月でWebエンジニアに変える方法 ~アジャイルマインドを得るために~【SFO2020】業務SEを7か月でWebエンジニアに変える方法 ~アジャイルマインドを得るために~
【SFO2020】業務SEを7か月でWebエンジニアに変える方法 ~アジャイルマインドを得るために~
 
メンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったこと
メンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったことメンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったこと
メンバーズグループ福岡Meetup/メンバーズエッジに入社して変わったこと
 
学校情報化とリーダーシップのあり方.pptx
学校情報化とリーダーシップのあり方.pptx学校情報化とリーダーシップのあり方.pptx
学校情報化とリーダーシップのあり方.pptx
 
Scalaプロジェクトへの未経験者の円滑なジョインへ
Scalaプロジェクトへの未経験者の円滑なジョインへScalaプロジェクトへの未経験者の円滑なジョインへ
Scalaプロジェクトへの未経験者の円滑なジョインへ
 
Salesforce Architect Meetup Osaka #02 20191018
Salesforce Architect Meetup Osaka #02 20191018Salesforce Architect Meetup Osaka #02 20191018
Salesforce Architect Meetup Osaka #02 20191018
 
議論の可視化で変わるプロジェクト進行効率 先生:清水 淳子
議論の可視化で変わるプロジェクト進行効率 先生:清水 淳子議論の可視化で変わるプロジェクト進行効率 先生:清水 淳子
議論の可視化で変わるプロジェクト進行効率 先生:清水 淳子
 
フリーランスエンジニアを半年間やってみた
フリーランスエンジニアを半年間やってみたフリーランスエンジニアを半年間やってみた
フリーランスエンジニアを半年間やってみた
 
サーバレスでやったこと2018
サーバレスでやったこと2018サーバレスでやったこと2018
サーバレスでやったこと2018
 
2020/9/30 【エンジニア起業】小規模スタートアップがウェブサービス(SocialDog)を軌道に乗せるまで
2020/9/30 【エンジニア起業】小規模スタートアップがウェブサービス(SocialDog)を軌道に乗せるまで2020/9/30 【エンジニア起業】小規模スタートアップがウェブサービス(SocialDog)を軌道に乗せるまで
2020/9/30 【エンジニア起業】小規模スタートアップがウェブサービス(SocialDog)を軌道に乗せるまで
 
これからはじめるWebプロジェクトマネジメント
これからはじめるWebプロジェクトマネジメントこれからはじめるWebプロジェクトマネジメント
これからはじめるWebプロジェクトマネジメント
 
これからはじめるWebプロジェクトマネジメント - 計画の立て方
これからはじめるWebプロジェクトマネジメント - 計画の立て方これからはじめるWebプロジェクトマネジメント - 計画の立て方
これからはじめるWebプロジェクトマネジメント - 計画の立て方
 
API MeetUp Online#8 セッション3 ツクレル馬場さん
API MeetUp Online#8 セッション3 ツクレル馬場さんAPI MeetUp Online#8 セッション3 ツクレル馬場さん
API MeetUp Online#8 セッション3 ツクレル馬場さん
 

SierでScalaを試した結果 Web系に転職した話