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
940
0
Share
Scalaでいろんなことやってみよう!
FUKUOKA Engineers Day 2021 online
shoma
April 25, 2021
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
460
過去のレビュー知見をSkillsで資産化した話
pkshadeck
PRO
0
300
Agent Skills を社内で育てる仕組み作り
jackchuka
0
300
〜バイブコーディングを超えて〜 チームで実験し続けたAI駆動開発
tigertora7571
0
180
Kingdom of the Machine
yui_knk
2
1.4k
Liberating Ruby's Parser from Lexer Hacks
ydah
2
2.5k
Explore CoroutineScope
tomoeng11
0
150
ハーネスエンジニアリングとは?
kinopeee
13
6.7k
PHPer、Cloudflare に引っ越す
suguruooki
1
130
Cache-moi si tu peux : patterns et pièges du cache en production - Devoxx France 2026 - Conférence
slecache
0
330
セグメントとターゲットを意識するプロポーザルの書き方 〜採択の鍵は、誰に刺すかを見極めるマーケティング戦略にある〜
m3m0r7
PRO
0
730
t *testing.T は どこからやってくるの?
otakakot
1
890
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Are puppies a ranking factor?
jonoalderson
1
3.4k
What's in a price? How to price your products and services
michaelherold
247
13k
Music & Morning Musume
bryan
47
7.2k
Between Models and Reality
mayunak
3
280
Abbi's Birthday
coloredviolet
2
7.4k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
220
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
110
Darren the Foodie - Storyboard
khoart
PRO
3
3.3k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Skip the Path - Find Your Career Trail
mkilby
1
110
The SEO Collaboration Effect
kristinabergwall1
1
440
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