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
AppEngine × Spring Boot × Kotlin
Search
Hidetake Iwata
October 26, 2017
Technology
0
120
AppEngine × Spring Boot × Kotlin
2017.10.26
AppEngine ja night #2
Hidetake Iwata
October 26, 2017
Tweet
Share
More Decks by Hidetake Iwata
See All by Hidetake Iwata
Rewrite Go error handling using AST transformation
int128
1
1.3k
Cluster AutoscalerをTerraformとHelmfileでデプロイしてPrometheusでモニタリングする / Deploy the Cluster Autoscaler with Terraform and Helmfile, Monitor with Prometheus
int128
3
1.7k
認証の仕組みとclient-go credential plugin / authentication and client-go credential plugin
int128
7
7.5k
CLIでOAuth/OIDCを快適に利用する
int128
0
890
いつものJIRA設定
int128
1
190
Swaggerのテンプレートを魔改造した話 / Customize Swagger Templates
int128
1
4.8k
本番環境のリリースを自動化した話
int128
0
790
Swagger × Spring Cloud
int128
0
110
The Evolution of System Architecture
int128
0
180
Other Decks in Technology
See All in Technology
Expertise as a Service via MCP
yodakeisuke
1
160
Railsの限界を超えろ!「家族アルバム みてね」の画像・動画の大規模アップロードを支えるアーキテクチャの変遷
ojima_h
4
520
隙間時間で爆速開発! Claude Code × Vibe Coding で作るマニュアル自動生成サービス
akitomonam
2
210
AIに全任せしないコーディングとマネジメント思考
kikuchikakeru
0
280
クマ×共生 HACKATHON - 熊対策を『特別な行動」から「生活の一部」に -
pharaohkj
0
220
AWS表彰プログラムとキャリアについて
naoki_0531
1
140
claude codeでPrompt Engineering
iori0311
0
530
大規模組織にAIエージェントを迅速に導入するためのセキュリティの勘所 / AI agents for large-scale organizations
i35_267
6
340
「育てる」サーバーレス 〜チーム開発研修で学んだ、小さく始めて大きく拡張するAWS設計〜
yu_kod
1
190
Step Functions First - サーバーレスアーキテクチャの新しいパラダイム
taikis
1
280
地域コミュニティへの「感謝」と「恩返し」 / 20250726jawsug-tochigi
kasacchiful
0
110
【CEDEC2025】LLMを活用したゲーム開発支援と、生成AIの利活用を進める組織的な取り組み
cygames
PRO
1
1.8k
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
21
1.4k
The World Runs on Bad Software
bkeepers
PRO
70
11k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.5k
Rails Girls Zürich Keynote
gr2m
95
14k
How to train your dragon (web standard)
notwaldorf
96
6.1k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
4 Signs Your Business is Dying
shpigford
184
22k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
A Tale of Four Properties
chriscoyier
160
23k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Transcript
AppEngine × Spring Boot × Kotlin Hidetake Iwata (@int128) AppEngine
ja night #2
Hidetake Iwata Software Engineer at NTT DATA ※今日は個人的なお話です 2
agenda 1. AppEngine × Spring Boot × Kotlinでサービスを作った話 2. Gradleのプラグインを作った話
3. CircleCIによる継続的デプロイ 3
GradleUpdate ビルドツール(Gradle)の新しいバージョンが出たら、バージョンアップのPull Requestを 送ってくれるサービスを開発中 https://gradleupdate.appspot.com • AppEngine Standard • Spring
Boot • Thymeleaf • Kotlin • EGit
AppEngine/Java 最近のStandard Environmentは大幅に改善されている • Java 8に対応 • Servlet 3.1に対応 •
クラス制限の廃止、スレッド生成の対応 (心の声...) • もうJava 9が出たよ • 時代はGolang一択では 5
Spring Boot Pros • JVM言語のWebアプリケーションフレームワークではデファクトスタンダード (Java, Groovy, Kotlin) • エコシステムが発達している
Cons • 初期化が遅い • フットプリントが大きい 6
Kotlin Pros • 既存言語のよいところを取り入れたモダンな言語 • Javaとの相互運用性 • コンパイルが速い Cons •
欠点は無い? 7
AppEngine × Spring Boot × Kotlin Pros • モバイルアプリとバックエンドを同じ言語で実装できる(Android) •
大抵のSpring Bootアプリはちゃんと動く • うれしい無料枠 Cons • エコシステムが未発達なのでLow Level APIに頼らざるを得ない • Too long spin up time • AppEngineとSpring Bootの相性 8
⚠ Too long spin up time問題 トラフィックが増えてスケールアウトする と、 大きなレイテンシが発生する 約20~25秒のレイテンシ
• 7秒(コンテナの起動) • 5秒(JVMやJettyの起動) • 8秒(Springの初期化) 9
⚠ AppEngineとSpring Bootの相性問題 ⚠ Problem • Spring Security OAuth2でセッションにアクセストークンが保存されない https://stackoverflow.com/questions/45217234/issue-with-using-spring-oauth-o
n-java8-standard-environment Workaround • AppEngine標準のセッションハンドラを使わない • Spring SessionでMemcache/Datastoreにセッション情報を保存 https://github.com/int128/spring-session-appengine
appengine-spring-boot-plugin Gradle plugin for App Engine Standard and Spring Boot
https://github.com/int128/appengine-spring-boot-plugin Features • Watch and Sync resources(テンプレートを編集したらリロードで反映) • Spring Bootのデバッグモードを有効化(テンプレートのキャッシュオフ等) • 環境依存値の管理
CircleCIによる継続的デプロイ GitHubにpushした契機でAppEngineにデプロイしたい • CircleCI 2.0を使う • サービスアカウントの秘密鍵はBASE64で環境変数に入れておく • google/cloud-sdk:alpineイメージにopenjdk8とapp-engine-javaをインストール •
GradleのappengineDeployタスクでデプロイ 12
version: 2 jobs: build: docker: - image: google/cloud-sdk:alpine working_directory: ~/gradleupdate
steps: - run: name: Install command: | apk --update add openjdk8 gcloud components install app-engine-java 13
- deploy: name: Deploy command: | if [ "$CIRCLE_TAG" ];
then echo "$GCP_SERVICE_ACCOUNT_KEY" | base64 -d > "$HOME/gcp-service-account-key.json" gcloud auth activate-service-account \ --key-file "$HOME/gcp-service-account-key.json" ./gradlew appengineDeploy fi 14
まとめ AppEngine × Spring Boot × Kotlinを快適に使うためのTipsを紹介しました • Gradle plugin
for App Engine Standard and Spring Boot https://github.com/int128/appengine-spring-boot-plugin • CircleCIによる継続的デプロイ 15