Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Scalaでいろんなことやってみよう!
Search
shoma
April 25, 2021
Programming
0
930
Scalaでいろんなことやってみよう!
FUKUOKA Engineers Day 2021 online
shoma
April 25, 2021
Tweet
Share
Other Decks in Programming
See All in Programming
AI Assistants for Your Angular Solutions
manfredsteyer
PRO
0
130
手戻りゼロ? Spec Driven Developmentとは@KAG AI week
tmhirai
1
190
メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
nikkei_engineer_recruiting
0
170
Go Conference mini in Sendai 2026 : Goに新機能を提案し実装されるまでのフロー徹底解説
yamatoya
0
560
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
280
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
250
15年目のiOSアプリを1から作り直す技術
teakun
1
620
AIに任せる範囲を安全に広げるためにやっていること
fukucheee
0
130
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
5
890
Railsの気持ちを考えながらコントローラとビューを整頓する/tidying-rails-controllers-and-views-as-rails-think
moro
5
390
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.5k
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
130
Featured
See All Featured
Building the Perfect Custom Keyboard
takai
2
710
Become a Pro
speakerdeck
PRO
31
5.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Technical Leadership for Architectural Decision Making
baasie
3
290
Marketing to machines
jonoalderson
1
5k
A better future with KSS
kneath
240
18k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
630
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
210
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
130
Making Projects Easy
brettharned
120
6.6k
Transcript
Scalaでいろんなことやって みよう! Scala Fukuoka 西立野 翔磨 Fukuoka Engineers Day 2021 online
最近考えていること - Scalaで他言語だとやりやすいことをやってみたい - 各言語の得意分野を活かしてプロダクト作るのも楽しいけど - Scalaでできることを増やしたい - Scalaに興味を持ってもらえるといいなぁ
- ScalaでGraalVM Native Imageを作ってAWS Lambdaで動かそう - https://zenn.dev/ignission/articles/scala-graalvm-native-image-lambda - Scalaでゲームを作ってみよう -
https://zenn.dev/ignission/articles/scala-js-tetris-amplify - ScalaでGoogle Apps Scriptを書いてみよう - https://zenn.dev/ignission/articles/scala-js-google-apps-script 今日の内容
西立野 翔磨 株式会社ヌーラボ サービス開発部 Typetalk課 - ドラム - ドローン -
キャンプ - 電動キックボード ← New!! @shomatan @shoma416
Scala Fukuoka - オンラインもくもく会 - 毎週火曜日19:00〜21:00 - Scala Fukuoka 2019
@LINE Fukuoka - Scala Fukuoka 2017 @Nulab - Scala Fukuoka 2016 @Nulab - サルでもわかるScala 72回 https://scala-fukuoka.org/ https://scala.connpass.com/
Scalaはいいぞ https://www.scala-lang.org/ - オブジェクト指向言語と関数型言語の特徴を融合したマルチパラダイム言語 - Java仮想マシン上で動作 - Javaの豊富なライブラリを利用できる - 簡潔に表記できる
- 小さなスクリプトから大規模アプリケーションまで作れる
ScalaでGraalVM Native Imageを作ってAWS Lambdaで動かそう
- Golangみたいにシングルバイナリで配りたい - Fat JARではなく - Java Runtimeなしに - 慣れた言語でCLIツールを作りたい
- Java Runtimeなしに - Lambdaでもサクッと動かしてみたい - 使いどころを増やしたい モチベーション
- JVM Runtime Mode - GraalVMをJITコンパイラとして使う - Java on Truffle
- 実験的な技術らしい - Native Image ← 今日はこれ! - Javaコードをスタンドアロンのバイナリファイルにする GraalVMについて https://www.graalvm.org/docs/introduction/
完成品 https://github.com/ignission/aws-lambda-graal-native-scala-example
- とにかくリフレクション設定が命 - コンパイル時に全てのクラスが特定できないといけない - ライブラリ依存を最小に - リフレクション使っているライブラリだと設定が大変 ポイント
- 通常はGraalVMとnative-imageコマンドをインストールする - sbt-native-imageというsbtプラグインを使うとセットアップを自動で行ってくれ てすごく便利 セットアップ https://github.com/scalameta/sbt-native-image
- こんなのをひたすら書く.... - ロギングは必須だったのでがんばる リフレクション設定
ビルド設定 # ビルド実行コマンド エラーになったら雑にどんどん追加していく ...
ビルドしてみる スピーカーをオンにしておくと勝手にしゃべるので注意! メモリーをあるだけ使ってそうだけど、 GitHub Actionsでもビルドできた GraalVMとnative-imageコマンドを自動でインストールしている 83sくらいビルドにかかった。バイナリのサイズは 45M MacBookPro CPU:
2.4 GHz 8-Core Intel Core i9 Memory: 32 GB 2667 MHz DDR4
AWS Lambdaのカスタムランタイム
AWS Lambdaのカスタムランタイム
- 起動が早くて実行時間が短いプログラムにはメリットが多いと思う - ビルドはFat JARを作るより時間がかかる - 実行にはJava Runtimeが不要なので使ってもらいやすくなったかも? - AWS
SDK for Javaも使えるようにしたい(ビルドエラー多くて断念した) まとめと今後の課題
Scalaでゲームを作ってみよう
- 慣れた言語でゲームを作ってみたい - 関数型言語でのゲーム作りに興味があった - ブラウザ上で動くゲームを作ろう - テトリスにしよう モチベーション
- AltJSのひとつ(TypeScriptみたいな) - サーバーとクライアントでコードを共有できる - とにかく型安全がすごい! - 対応しているJavaScriptライブラリがまだまだ少ない - 型定義ファイル(.d.tsみたいなやつ)
- 自作もできる - おすすめWebサイト Scala.js | 天下一AltJS武闘会 Scala.jsとは
完成品 https://github.com/ignission/scalajs-amplify-tetris
- sbt-scalajsプラグインをインストール - Canvas APIを呼びたいのでscalajs-domを依存関係に追加 Scala.jsのセットアップ https://github.com/scala-js/scala-js
- npm packageをバンドルできるsbtプラグイン - 裏でnpmとwebpackを動かしている(webpack4系までサポート) - webpackと同じことができる scalajs-bundlerのセットアップ https://github.com/scalacenter/scalajs-bundler
- webpack全然わからないので雰囲気で設定している - scalajs-bundlerの設定自体はbuild.sbt - webpackの設定は設定ファイルのパスを指定する webpackの設定
- @JSExportTopLevelアノテーションで関数のexport Entrypointの設定
- 通常のJavaScriptプロジェクトと同じようにwebpackの設定をすればOK - Amplify の CI/CD 機能を使うときはビルドイメージに sbt が入ってないと失敗 する
- Build settings > Build image settings AWS Amplifyでホスティング 実際にホスティングしているライブデモ: https://tetris.ignission.tech/
- Scalaでもゲーム作れた! - バンドルサイズは51.7KBだった - いろいろやろうとするとフロントまわりの知識がいる - webpack勉強しよ... - ビルドに数秒かかる
- 型に厳しいので長期的なメンテコスト削減に期待 感想と今後の課題
ScalaでGoogle Apps Scriptを 書いてみよう
- ちょっとしたAPIサーバーをGoogle Apps Scriptで作りたい - データストアにGoogle Sheetsを活用してみる - くだらないBot量産したい モチベーション
- G SuiteサービスをJavaScript(ベース)で拡張できる - Google DocsやSpreadsheetsなど - ウェブアプリを公開できる - アドオンとして公開もできる
Google Apps Scriptとは
完成品 https://github.com/ignission/scalajs-google-apps-script-facade/tree/master/example
- Scala.jsからGoogle Apps Scriptの関数どうやって呼べばいいんや... - Scala.jsとしてのライブラリもないし... - それっぽいのあったけどメンテされてなさそう - なければ作るか...
ぶつかった壁
- scala-js-ts-importerというScala製のツールがある - .d.tsをScalaのコードに自動変換してくれる - sbt 'run somelib.d.ts SomeLib.scala' TypeScriptの型定義を変換する
https://github.com/sjrd/scala-js-ts-importer
型変換後のイメージ TypeScript Scala
- 手作業で生成されたコードをスクリプトエディタにコピペするの大変 - 自動化したい - Googleが提供しているclaspというコマンドラインツールでできそう - clasp create --type
sheets --rootDir ./dist - こんな感じでスプレッドシートまで自動で作ってくれる claspについて https://github.com/google/clasp
- Postデータ(json)をそのまま返す例 簡単なコードを書いてみる
- 書き味はJavaScriptのときと似ていて違和感ない(?) - このコード↓はシートを探してなかったら作る処理 Google スプレッドシートとの連携
- Botにメンションすると、内容をスプレッドシート記録 - 今まで記録された内容を返す - 誰得bot 動作例
- 慣れた言語でbotが作れた - デプロイをsbtのタスクにすることで楽チン - 記述量が多くなるので簡単なスクリプトなら素直にJavaScriptでやったほうが いいかも - クソbot量産したい 感想と今後の課題
おわりに
- Scalaでいろんなことできた - フロントエンドまで全部Scalaでできるぞ - Reactも書ける - オンラインもくもく会も是非遊びに来てください まとめ
- Scala3がもうすぐリリースされます!🎉 - 登壇時点ではScala 3.0.0-RC3 - Scala.jsがもっと書きやすくなりそう - あんまり試せてない -
今度のネタにします 今日お話できなかったこと...
Enjoy Scala! Fukuoka Engineers Day 2021 online