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
920
Scalaでいろんなことやってみよう!
FUKUOKA Engineers Day 2021 online
shoma
April 25, 2021
Tweet
Share
Other Decks in Programming
See All in Programming
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.3k
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
4
750
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
180
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
160
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.4k
Patterns of Patterns
denyspoltorak
0
450
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
0
490
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
300
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
170
PC-6001でPSG曲を鳴らすまでを全部NetBSD上の Makefile に押し込んでみた / osc2025hiroshima
tsutsui
0
210
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
5.3k
Go コードベースの構成と AI コンテキスト定義
andpad
0
160
Featured
See All Featured
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
75
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
4 Signs Your Business is Dying
shpigford
187
22k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
47
Building an army of robots
kneath
306
46k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
Producing Creativity
orderedlist
PRO
348
40k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
160
A designer walks into a library…
pauljervisheath
210
24k
The Curious Case for Waylosing
cassininazir
0
200
Balancing Empowerment & Direction
lara
5
840
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