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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Keisuke Kobayashi
June 16, 2015
Programming
2.2k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CircleCIと半年間格闘してみた
potatotips 18
Keisuke Kobayashi
June 16, 2015
More Decks by Keisuke Kobayashi
See All by Keisuke Kobayashi
AI 1st でエンタープライズ SaaS を立ち上げる / AI 1st Enterprise SaaS
kobakei
1
260
プロダクト開発をAI 1stに変革する〜SaaS is dead時代で生き残るために〜 / AI 1st Product Development
kobakei
0
2.8k
今日から始める依存性の注入 / First Time Dependency Injection
kobakei
26
7.8k
iOSアプリの技術的負債をどう返済したか / How to repay the technical debt of iOS app
kobakei
2
1k
iOSアプリ内で不正なSSL証明書を検知する / SSL Pinning for iOS apps
kobakei
34
12k
Kyashアプリ開発の現場
kobakei
4
3k
Review of Google I/O 2017 & Prepare for Google I/O 2018
kobakei
0
350
APIクライアントをCodableで置き換えた話
kobakei
0
1.6k
開発者が知っておきたい通知の歴史
kobakei
9
7.9k
Other Decks in Programming
See All in Programming
Creating Composable Callables in Contemporary C++
rollbear
0
200
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
350
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
420
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
160
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.1k
関数型プログラミングのメリットって何だろう?
wanko_it
0
170
どこまでゆるくて許されるのか
tk3fftk
0
480
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
240
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
210
AIエージェントで 変わるAndroid開発環境
takahirom
2
590
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
130
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
220
Featured
See All Featured
A Tale of Four Properties
chriscoyier
163
24k
Are puppies a ranking factor?
jonoalderson
1
3.7k
Technical Leadership for Architectural Decision Making
baasie
3
440
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
410
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Optimizing for Happiness
mojombo
378
71k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
220
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
190
Accessibility Awareness
sabderemane
1
150
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
240
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Done Done
chrislema
186
16k
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.