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
910
Scalaでいろんなことやってみよう!
FUKUOKA Engineers Day 2021 online
shoma
April 25, 2021
Tweet
Share
Other Decks in Programming
See All in Programming
タスクの特性や不確実性に応じた最適な作業スタイルの選択(ペアプロ・モブプロ・ソロプロ)と実践 / Optimal Work Style Selection: Pair, Mob, or Solo Programming.
honyanya
3
180
テーブル定義書の構造化抽出して、生成AIでDWH分析を試してみた / devio2025tokyo
kasacchiful
0
230
スマホから Youtube Shortsを見られないようにする
lemolatoon
27
33k
なぜGoのジェネリクスはこの形なのか? - Featherweight Goが明かす設計の核心
qualiarts
0
210
All About Angular's New Signal Forms
manfredsteyer
PRO
0
200
CSC509 Lecture 06
javiergs
PRO
0
260
品質ワークショップをやってみた
nealle
0
590
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
350
CSC305 Lecture 08
javiergs
PRO
0
260
20251016_Rails News ~Rails 8.1の足音を聴く~
morimorihoge
2
640
コードとあなたと私の距離 / The Distance Between Code, You, and I
hiro_y
0
190
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
6
3.3k
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
It's Worth the Effort
3n
187
28k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Thoughts on Productivity
jonyablonski
70
4.9k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
10
880
A Tale of Four Properties
chriscoyier
161
23k
Leading Effective Engineering Teams in the AI Era
addyosmani
7
540
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
Why Our Code Smells
bkeepers
PRO
340
57k
Become a Pro
speakerdeck
PRO
29
5.6k
Making Projects Easy
brettharned
120
6.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
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