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
CircleCIと半年間格闘してみた
Search
Keisuke Kobayashi
June 16, 2015
Programming
6
2.1k
CircleCIと半年間格闘してみた
potatotips 18
Keisuke Kobayashi
June 16, 2015
Tweet
Share
More Decks by Keisuke Kobayashi
See All by Keisuke Kobayashi
今日から始める依存性の注入 / First Time Dependency Injection
kobakei
26
7.5k
iOSアプリの技術的負債をどう返済したか / How to repay the technical debt of iOS app
kobakei
2
980
iOSアプリ内で不正なSSL証明書を検知する / SSL Pinning for iOS apps
kobakei
34
12k
Kyashアプリ開発の現場
kobakei
4
2.8k
Review of Google I/O 2017 & Prepare for Google I/O 2018
kobakei
0
320
APIクライアントをCodableで置き換えた話
kobakei
0
1.6k
開発者が知っておきたい通知の歴史
kobakei
9
7.6k
mockito-kotlin
kobakei
1
530
2017年に新規アプリを立ち上げた話
kobakei
2
1.1k
Other Decks in Programming
See All in Programming
Vue・React マルチプロダクト開発を支える Vite
andpad
0
110
意外と簡単!?フロントエンドでパスキー認証を実現する WebAuthn
teamlab
PRO
2
760
Flutter with Dart MCP: All You Need - 박제창 2025 I/O Extended Busan
itsmedreamwalker
0
150
Introducing ReActionView: A new ActionView-compatible ERB Engine @ Rails World 2025, Amsterdam
marcoroth
0
690
AI時代のUIはどこへ行く?
yusukebe
18
8.9k
Reading Rails 1.0 Source Code
okuramasafumi
0
230
ProxyによるWindow間RPC機構の構築
syumai
3
1.2k
時間軸から考えるTerraformを使う理由と留意点
fufuhu
16
4.8k
MCPでVibe Working。そして、結局はContext Eng(略)/ Working with Vibe on MCP And Context Eng
rkaga
5
2.3k
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
600
Namespace and Its Future
tagomoris
6
700
1から理解するWeb Push
dora1998
7
1.9k
Featured
See All Featured
Designing Experiences People Love
moore
142
24k
The Invisible Side of Design
smashingmag
301
51k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
Faster Mobile Websites
deanohume
309
31k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Designing for humans not robots
tammielis
253
25k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Transcript
CircleCIと 半年間格闘してみた kobakei potatotips #18
Keisuke Kobayashi (kobakei) • Coubic, Inc • Android & Rails
engineer • Twitter @ksk_kbys • GitHub, Qiita @kobakei
無料で使える予約システム Coubic (クービック) https://coubic.com
サロン・マッサージの 当日予約・直前予約アプリ
CircleCI 導入の前に
Why CI? / Why CircleCI? • ビルド&ベータ版配布の自動化 ◦ 手動でビルド&配布する時間が無駄 ◦
チームの誰もが最新のベータに触れる → バグの早期発見、フィードバックしやすい環境 • 導入コストが低い ◦ コンテナ1個なら無料 ◦ Androidサポート(苦労しないとは言ってない)
CircleCIを 導入する
circle.ymlをプロジェクトに追加 • プロジェクトのルートにcircle.ymlを追加 • 環境変数の設定や、実行したいテストや デプロイのコマンドを書く • https://circleci.com/docs/android ここに大体書いてある
CircleCIにログインして設定 • GitHubアカウントで登録/ログイン • CIしたいプロジェクトを選ぶだけ
ここからが本題
今日話したいこと • CircleCI稼働中に発生した問題 • その対策 ◦ ぐぐっても対策が見つからなくて、CircleCIの中の人に 問い合わせた内容含む
問題1 OutOfMemory
OutOfMemory問題 • CircleCIはメモリ4GBまで • この制限を超えるとジョブが失敗
対策 circle.ymlで JAVA_OPTS: “-Xms256m -Xmx512m”で JVMのメモリ使用量を指定
問題2 ライブラリを追加しまくるとやはり OutOfMemory
OutOfMemory再発 • (多分)巨大なライブラリの追加で発生 ◦ Dagger 2, EventBus, Stetho, etc •
assemble過程のdexタスクが並列で複数走るこ とによって発生 ◦ dexはJAVA_OPTSでメモリを制御できない
対策 app/build.gradleに、dexOptionsを追加 ビルドが安定して通るまで値を下げていく
問題3 65K問題
65K問題 • メソッド数が65Kを超えるとビルドできない ◦ 機能追加、ライブラリ追加によって、65K問題に 遭遇 • multidexを追加して対応(※) • このときに、再びビルドに失敗するようになる
※ https://developer.android.com/intl/ja/tools/building/multidex.html
解決策 • dexOptionsのjavaMaxHeapSizeを 1GBに増やした ◦ multidexだとjavaMaxHeapSizeが小さすぎると ビルドできない ◦ ビルドが通るまで、256MB →
512MB → 1GBと 増やして検証
まとめ • CircleCI for Android は OOM との戦い • 肝はJAVA_OPTS
と javaMaxHeapSize • 今では安定稼働しています
Thank you! Coubic Inc.