Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Heroku と EC Booster と私 & Heroku ちょこっと Deep Dive
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Takashi Masuda
November 09, 2018
Technology
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Heroku と EC Booster と私 & Heroku ちょこっと Deep Dive
2018-11-09 フィードフォース社内技術勉強会のプレゼン資料です。
https://developer.feedforce.jp/entry/2018/11/14/140000
Takashi Masuda
November 09, 2018
More Decks by Takashi Masuda
See All by Takashi Masuda
マスタカネットの紹介 〜悠久なる変更履歴〜
masutaka
0
18
最近の情報収集方法 2025
masutaka
0
96
自分のブログをCloudFront+HerokuからCloud Runに移行した
masutaka
0
190
BigQuery経由で使うGoogleスプレッドシートのスキーマ管理
masutaka
0
380
本を聴く毎日を送っています
masutaka
0
110
ボッチLookML開発者兼データ整備人を連れてきたよ!
masutaka
0
150
ここがつらいよ普段使いのLinux
masutaka
0
390
4月から取り組んできたLookerの導入から実装までのお話
masutaka
0
200
HerokuでSidekiqを監視する方法を確立した
masutaka
0
670
Other Decks in Technology
See All in Technology
C#未経験の僕がAIに読めるコードを書かせるまで
maguroalternative
0
110
CLIライブラリ開発を支える技術
htnabe
0
140
現場で役立つ技術負債の効果的な返済方法
masuda220
PRO
9
4.7k
Issue 駆動でスペシャリストの意図を届ける、AI 実装のアクセシビリティ向上
thkt
0
120
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
2
220
サーバーレスをどこまで使う? WebRTC対戦ゲームで選んだVPSとの共存設計
kaidouji85
0
200
データ_AIの事業の勝敗をわけるもの
nek0128
1
460
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
hinakko
0
170
LLMに渡さなかった仕事
nanaism
0
1.1k
AIは推し活である。
kurazuuuuuu
1
860
What the customer really needed
kawaguti
PRO
3
210
AIエージェントの一手は 誰も見ていない - Falco拡張OSS「Prempti」とeBPFで サーバーレス実行基盤を二層防御する
keitah
0
320
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Are puppies a ranking factor?
jonoalderson
2
3.9k
エンジニアに許された特別な時間の終わり
watany
109
250k
Balancing Empowerment & Direction
lara
6
1.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
810
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
4 Signs Your Business is Dying
shpigford
187
23k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
3
4.3k
Designing Powerful Visuals for Engaging Learning
tmiket
1
570
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Transcript
)FSPLVͱ&$#PPTUFSͱࢲ !NBTVUBLB
w 1BB4ʢ1MBUGPSNBTB4FSWJDFʣͷͻͱͭ w ։ൃऀΠϯϑϥͷཧΛؾʹ͢Δ͜ͱͳ͘ɺ ΞϓϦέʔγϣϯΛσϓϩΠ͢Δ͜ͱ͕ग़དྷΔ IUUQTIFSPLVDPN
w &$αΠτͷӡӦऀ͕࠷͔̑Β(PPHMFγϣο ϐϯάࠂΛ࢝ΊΒΕΔαʔϏε w ද͖XFCαʔϏεͰ͋Δ͕ɺཪଆͰׂͱ ΰϦΰϦͱόονॲཧ͕ಈ͍͍ͯΔ IUUQTFDCPPTUFSKQ
ࢲ w ૿ాو࢜ʢ!NBTVUBLBʣ w ੩Ԭݝদࢢग़ w ݄)FSPLVσϏϡʔ w ݄&$#PPTUFSʹδϣΠ
ϯɻຊ൪ڥ͕)FSPLVͩͬͨ w ݄&$#PPTUFSͷ)FSPLV पลΛΠΠײ͡ʹ࢝͠ΊΔ IUUQTNBTVUBLBOFUDIBMPXIUNM
&$#PPTUFS)FSPLVͰ ಈ͍͍ͯ·͢ɻ
%ZOPͷมભ XFC XPSLFS BE@XPSLFS 4UBOEBSE9
4UBOEBSE9 4UBOEBSE9 1FSGPSNBODF. 4UBOEBSE9 ͯ̍͢ 4UBOEBSE9
%ZOP w )FSPLVͰΞϓϦέʔγϣϯΛ࣮ߦ͢ΔͨΊͷܰ ྔίϯςφ w αʔόʔͱஔͯ͋͠ͳ͕ͪؒҧ͍Ͱ ͳ͍ IUUQTKQIFSPLVDPNEZOPT
&$#PPTUFSͷ1SPDpMF release: bin/rails db:migrate db:seed # Web app web: bin/rails
s -p $PORT -e $RAILS_ENV worker: PROCESS_TYPE=worker bundle exec sidekiq -C config/sidekiq.yml # Ad app ad_worker: PROCESS_TYPE=ad_worker bundle exec sidekiq -C config/sidekiq.yml
1SPDpMF w %ZOPʹΑ࣮ͬͯߦ͞ΕΔίϚϯυΛఆٛͨ͠ϑΝΠϧ w QSPDFTTUZQFDPNNBOEͱ͍͏TZOUBY w )FSPLVͰXFCͱSFMFBTFಛผͳQSPDFTTUZQF w ଞͷQSPDFTTUZQFҙʹ૿͢͜ͱ͕ग़དྷΔ w
͍ͭ͘·Ͱ૿ͤΒΕΔͷͩΖ͏ʁ IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTQSPDpMF
"EEPOͷมભ )FSPLV 1PTUHSFT )FSPLV 3FEJT -PHHJOH .POJUPSJOH
)PCCZ%FW 1SFNJVN 4UBOEBSE /FX3FMJD )BXLF 1BQFSUSBJM -PH%/" ϓϥϯঢ়گʹԠ্ͯ͛͡Լ͛ͨ͠
w ಛච͖͢ͳ͠ w ݄಄ʹ1BQFSUSBJM͕ఀࢭͨͨ͠ΊɺݟΓ Λ͚ͭͯ-PH%/" ʹҠߦͨ͘͠Β͍ IUUQTMPHEOBDPN
࠷ۙͬͨ͜ͱ w )FSPLVΛ5FSSBGPSNͰཧͯ͠ɺมߋΛίʔυ ͰදݱͰ͖ΔΑ͏ʹͨ͠ w δϣϒͷεέδϡʔϧ࣮ߦΛIFBMUIDIFDLTJP Ͱࢹ͠ɺ5FSSBGPSNͰཧͨ͠ w %PDLFSPO)FSPLVͬͯ3FEBTIΛཱͯͨ
IUUQTHJUIVCDPNXJMMOFUSFEBTIPOIFSPLV IUUQTIFBMUIDIFDLTJP
՝ͷҰ෦ w σϓϩΠ͕͍ʢڧʣ w CVJMEQBDLΛෳ͍ͬͯΔͨΊɻ%PDLFSPO)FSPLVʹ͢Δ͔ w 8FCΞϓϦέʔγϣϯͷύϑΥʔϚϯεΛݕ౼͖͠Ε͍ͯͳ͍ w ·ͩͦ͜·ͰͰͳ͍͕ɻϨΠςϯγʔʹߦ͖ண͘ؾ ͢Δ
w ϝτϦΫεࢹ͕ग़དྷ͍ͯͳ͍ w /FX3FMJD"EEPO"1.ͳͷͰํੑ͕ҧ͏
)FSPLVͷྑ͍ͱ͜Ζ w ΠϯϑϥΛ͋·ΓҙࣝͤͣʹαʔϏεΛ࢝ΊΒΕΔ w ࠓͷͱ͜Ζͱͯ҆ఆ͍ͯ͠Δ w ʢͨ·ͨ·ͩͱࢥ͏͕ʣϝϯςφϯεΟϯυ͕·ͩ dճ͔͠ͳ͍ w "84ͱൺ੍͕ͯଟ͍
w ݩΈࠐΈΤϯδχΞͷ݂͕૽͙
)FSPLVͷྑ͘ͳ͍ͱ͜Ζ w %ZOPͷछྨ͕গͳ͍ w ྫ4UBOEBSE9 NP ͷͻͱ্͕ͭ1FSGPSNBODF. NP
w গ͠ͷมߋͰྉ͕ۚάοͱ্͕Δ͜ͱ͕͋Δɻ͏গ͠બࢶ͕ ཉ͍͠ w "EEPOͷྉۚઃఆ͕ಠಛ w %ZOPͷॏΈ͕Ճຯ͞ΕΔ͜ͱ͕͋Δʢྫ1SPDFTT4DIFEVMFS "EEPOʣ
ײ w )FSPLVྑ͍αʔϏε w ࠓͷͱ͜Ζɺεέʔϧ໘Ͱෆ҆ͳ͍ɻϨΠς ϯγʔͱɺର֎తͳҙຯͰͷηΩϡϦςΟ ෆ҆ w "84($1ͷҠߦࢹʹೖΕͯɺ%PDLFSJ[F ͳͲ͍ͬͯ͘
None
)FSPLV%FFQ%JWF !NBTVUBLB
)FSPLV%FFQ%JWF !NBTVUBLB ͪΐͬ͜ͱ
σϓϩΠͷྲྀΕʢͬ͘͟Γʣ )FSPLV"QQΛ࡞Δʢ࠷ॳͷҰճʣ HJUQVTI͢Δ 4MVH͕࡞ΒΕΔ 4MVHΛಡΈࠐΈɺ৽ͨͳ%ZOP͕࡞ΒΕΔ IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTIPXIFSPLVXPSLT
4MVHͱʁ w TMVHDPNQJMFSʹΑͬͯɺύοέʔδϯά͞Εͨ ͷ w HJUQVTI͢ΔͱϦϙδτϦ͕ύοέʔδϯά͞ ΕΔɻCVJMEQBDLͳͲؚΊΒΕΔ w ΞϓϦέʔγϣϯىಈ࣌ʹɺ4MVH%ZOPʹμ ϯϩʔυˍల։͞ΕΔ
IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTTMVHDPNQJMFS
͜ͷఔ͔͠ใ͕ͳ͍ IUUQTEBTICPBSEIFSPLVDPNBQQT\BQQOBNF^TFUUJOHT $ heroku apps:info --json -a {app-name} | jq
.app.slug_size ͰαΠζ͕͔Δ
ͩͬͨΒɺ
4MVHΛμϯϩʔυͯ͠ΈΑ͏ʂ
͕࣌ؒ͋Ε࣮ԋ $ APP_NAME={app-name} $ LATEST_SLUG_ID=$(heroku releases --json -a $APP_NAME |
jq -r '.[0].slug.id') $ SLUG_URL=$(curl -n https://api.heroku.com/apps/${APP_NAME}/slugs/${LATEST_SLUG_ID} \ -H "Accept: application/vnd.heroku+json; version=3" | jq -r '.blob.url') $ curl -Lo ${LATEST_SLUG_ID}.tar.gz $SLUG_URL IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTQMBUGPSNBQJSFGFSFODFTMVHJOGP ˞࠷৽ͷϦϦʔεʹඥ͍ͨ4MVHΛμϯϩʔυ
4MVHUBSCBMMͷ த app ├── .bundle ├── ʢϦϙδτϦͷϑΝΠϧʣ └── vendor ├──
bundle │ └ʢলུʣ └── ruby-2.4.4 └── bin ├── erb ├── gem ├── irb ├── rake ├── rdoc ├── ri ├── ruby └── ruby.exe -> ruby IFSPLVSVCZCVJMEQBDL Λ͍ͬͯΔ߹ɺ SVCZͦͷͷWFOEPS CVOEMFͳͲؚ·Εͯ ͍Δɻ
ʢ͓·͚ʣ 4MVHΛखಈͰ࡞ͬͯϦϦʔεͯ͠ΈΑ͏ʂ
͕࣌ؒ͋Ε࣮ԋ $SFBUJOH4MVHTGSPN4DSBUDI IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTQMBUGPSNBQJSFGFSFODFTMVHJOGP SVCZͷCVJMEQBDLΛμϯϩʔυ͠ల։ɺSVCZTDSJQUΛ ՃɺUBSCBMMʹ͢Δ 4MVH$SFBUF"1*Λୟ͘ͱɺΞοϓϩʔυ༻63-͕ฦͬͯ͘ Δ
Ξοϓϩʔυ༻63-ʹUBSCBMMΛΞοϓϩʔυ͢Δ 1045BQQTBQQSFMFBTFT͢ΕɺϦϦʔεྃ
੍ݶ͍Ζ͍Ζ͋Δ w 4MVHαΠζ$PNQJMFͯ͠.J#·ͰʢѹॖαΠζʣ w ʹ.J#͔Β.J#ʹ্͕ͬͨ w ʹ.J#͔Β.J#ʹ্͕ͬͨ w 4MVH$PNQJMF࣌ؒ·Ͱ w
ϢʔβʹΑΔΞϓϦͷHJUૢ࡞࣌ؒʹճ·Ͱ w ϦϙδτϦαΠζඇѹॖͰ(#·Ͱ w ͦͷଞ IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTMJNJUT
ࢼ͠ʹɺ
4MVHαΠζΛݮΒͯ͠ΈΑ͏ʂ
4MVHʹؚΊΔϑΝΠϧΛݮΒ͢ IFSPLVSFQPQMVHJOΛ͏
4MVHʹؚΊΔϑΝΠϧΛݮΒ͢ w HJUϦϙδτϦ͔ΒෆཁͳϑΝΠϧΛআ͢Δ w 4MVHʹؚΊͨ͘ͳ͍ϑΝΠϧΛTMVHJHOPSFʹॻ ͘ IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTTMVHDPNQJMFSJHOPSJOHpMFTXJUITMVHJHOPSF
IFSPLVSFQPQMVHJOΛ͏ $ heroku plugins:install heroku-repo $ heroku repo:gc -a {app-name}
$ heroku repo:purge_cache -a {app-name} $ git commit --allow-empty -m 'Decrease slug size' $ git push heroku master IUUQTHJUIVCDPNIFSPLVIFSPLVSFQP
IFSPLVSFQPHD (&5IUUQTBQJIFSPLVDPNBQQT\BQQOBNF^CVJME NFUBEBUBͯ͠ɺϦϙδτϦ(&5༻63-Λऔಘ͢ΔɻUBSCBMM͕ ಘΒΕΔ IFSVLVSVOͯ͠ɺμϯϩʔυͨ͠ϦϙδτϦʹରͯ͠ɺ HJUHDBHHSFTTJWF͢Δ UBSCBMMʹݻΊͯɺͰಘΒΕͨ165༻63-ʹ165͢Δ
࣍ճͷσϓϩΠͰεϦϜʹͳͬͨHJUϦϙδτϦ͕ΘΕΔ IUUQTHJUIVCDPNIFSPLVIFSPLVSFQPCMPCWDPNNBOETHDKT
IFSPLVSFQPQVSHF@DBDIF (&5IUUQTBQJIFSPLVDPNBQQT\BQQOBNF^CVJME NFUBEBUBͯ͠ɺΩϟογϡ(&5༻63-Λऔಘ͢ΔɻUBS CBMM͕ಘΒΕΔ IFSVLVSVOͯ͠ɺμϯϩʔυͨ͠Ωϟογϡͷ͏ͪɺ WFOEPSIFSPLVҎ֎Λͯ͢আ͢Δ UBSCBMMʹݻΊͯɺͰಘΒΕͨ165༻63-ʹ165͢Δ
࣍ճͷσϓϩΠͰ৽نʹCVOEMFJOTUBMMߦΘΕΔ IUUQTHJUIVCDPNIFSPLVIFSPLVSFQPCMPCWDPNNBOETQVSHF@DBDIFKT
ࢀߟWFOEPSIFSPLVͷத vendor └── heroku ├── buildpack_ruby_version (ruby-2.4.4) ├── buildpack_version (v196)
├── bundler_version (1.15.2) ├── ruby_version (ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-linux]) ├── rubygems_version (2.6.14.1) ├── secret_key_base ([SECRET]) └── stack (heroku-16) ˞IFSPLVSVCZCVJMEQBDLΛ͍ͬͯΔ߹ɻ ׅހϑΝΠϧͷத
ࢀߟCVJMENFUBEBUB"1*ͷ ϨεϙϯεʢQSJWBUF"1* ʣ $ curl -n https://api.heroku.com/apps/github-organization-watcher/build-metadata \ -H "Accept:
application/vnd.heroku+json; version=3.build-metadata" { "app":{ "id":"<UUID>", "name":"github-organization-watcher" }, "cache_delete_url":"<CACHE_URL>", "cache_get_url":"<CACHE_URL>", "cache_put_url":"<CACHE_URL>", "repo_delete_url":"<REPO_URL>", "repo_get_url":"<REPO_URL>", "repo_put_url":"<REPO_URL>" } # <CACHE_URL> # https://s3-external-1.amazonaws.com/heroku_repos/heroku.com/cache/<NUMBERS>.tgz? AWSAccessKeyId=<SECRET>&Signature=<SECRET>&Expires=<NUMBERS> # <REPO_URL> # https://s3-external-1.amazonaws.com/heroku_repos/heroku.com/<NUMBERS>.tgz? AWSAccessKeyId=<SECRET>&Signature=<SECRET>&Expires=<NUMBERS>
͔ͬͨ͜ͱ w IFSPLVSFQPHDϦϙδτϦαΠζ͕ݮΔͩ ͚ɻσϓϩΠଟগ͘ͳΔͱࢥ͏͕ɺ4MVHα ΠζݮΒͳ͍ w IFSPLVSFQPQVSHF@DBDIF͕4MVHαΠζΛݮ Β͢
͞Βʹ͔ͬͨ͜ͱ w 4MVHͷUBSCBMM4ͷIFSPLVTMVHTVTόέοτʹ͋Δ Α͏ͩ w ϦϙδτϦͷUBSCBMM4ͷIFSPLV@SFQPTόέοτͷ IFSPLVDPNҎԼʹ͋ΔΑ͏ͩ w ΩϟογϡͷUBSCBMM4ͷIFSPLV@SFQPTόέοτͷ DBDIFҎԼʹ͋ΔΑ͏ͩ
˞)FSPLVͷ3FHJPO͕VTͷ߹ɻ4ͷ3FHJPOͯ͢7JSHJOJB T FYUFSOBM ͩͬͨ
σϓϩΠͷྲྀΕʢ࠶ܝʣ )FSPLV"QQΛ࡞Δʢ࠷ॳͷҰճʣ HJUQVTI͢Δ 4MVH͕࡞ΒΕΔ 4MVHΛಡΈࠐΈɺ৽ͨͳ%ZOP͕࡞ΒΕΔ IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTIPXIFSPLVXPSLT
σϓϩΠͷྲྀΕʢ࠶ܝʣ )FSPLV"QQΛ࡞Δʢ࠷ॳͷҰճʣ HJUQVTI͢Δ 4MVH͕࡞ΒΕΔ 4MVHΛಡΈࠐΈɺ৽ͨͳ%ZOP͕࡞ΒΕΔ IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTIPXIFSPLVXPSLT
4MVH UH[ ϦϙδτϦ UH[ Ωϟογϡ UH[ HJUQVTI 4MVHDPNQJMFS (JUϦϙδτϦ #VJMEQBDL
T ૾ਤ
ײ w )FSPLVྑ͍αʔϏεʢೋճʣ w 4MVHCVJMENFUBEBUB͔Β૾Λૡཱ͖ͯΒΕ Δ w ۀͰαʔϏεΛ࡞Δͱ͖ɺ·ͣ)FSPLVͰ࡞ ΕΔ͔ߟ͑Δͱྑ͍ͱࢥͬͨ
ࡶײ w ࠓճʮۀͰಘͨࣝ ЋʯΛͬͯൃද͢ Δ͜ͱ͕ग़དྷͨ w ձ͕ࣾ৽͍ٕ͠ज़ΛࣗવͱֶशͰ͖ΔͰ͋Δ ͱɺ݈શͩͱࢥͬͨ w ൃදͷͰʮݸਓͷֶशʯͱʮۀͰಘͨࣝʯ
ΛબͰ͖Δͱྑ͍
ใऩू w IUUQTEFWDFOUFSIFSPLVDPNDBUFHPSJFTIFSPLVBSDIJUFDUVSF w Ұ࣍ใɻॆ࣮͓ͯ͠ΓಡΈ͍͢ w IUUQTCMPHIFSPLVDPN IUUQTEFWDFOUFSIFSPLVDPNDIBOHFMPH w )FSPLVͷ࠷৽ใ
w IUUQCIBUFOBOFKQTFBSDIUBH R)FSPLVTBGFPOTPSUSFDFOUVTFST w ΧδϡΞϧͳใ w )FSPLV+14MBDL6TFS(SPVQ w ࠷ۙ4JHO6Qͨ͠
͓ΘΓ