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
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
25
最近の情報収集方法 2025
masutaka
0
100
自分のブログをCloudFront+HerokuからCloud Runに移行した
masutaka
0
200
BigQuery経由で使うGoogleスプレッドシートのスキーマ管理
masutaka
0
390
本を聴く毎日を送っています
masutaka
0
120
ボッチLookML開発者兼データ整備人を連れてきたよ!
masutaka
0
160
ここがつらいよ普段使いのLinux
masutaka
0
390
4月から取り組んできたLookerの導入から実装までのお話
masutaka
0
200
HerokuでSidekiqを監視する方法を確立した
masutaka
0
670
Other Decks in Technology
See All in Technology
バイブコーディングの特徴と「コケて直す」ループ
happysamurai294
0
120
シンプルな設定ファイルで実現する AWS IAM Identity Center の ユーザー管理Terraformフレームワークを公開しました / Simplifying AWS IAM Identity Center User Management: An Open-Source Terraform Framework
yamaguchitk333
1
330
Agent 活用環境の構築・運用のための AWS サービスのご紹介/agentcore-for-building-and-operating-agents
ren8k
1
250
Deep Data Security 機能解説
oracle4engineer
PRO
3
960
AWS DevOps Agentはどこまで任せられるか 〜機能の現在地と、機能拡張の実践〜
nyankotaro
0
290
AIをリアル世界に解き放つ 〜M5Stack×AIであなたのアイディアを手の平に〜
hamadakoji
1
600
推論基盤と Scale-Up Interconnect の現状と制約から俯瞰する技術動向
markunet
2
590
ビジネス部門からPOを迎えての半年間の進歩と課題
zozotech
PRO
0
160
AI駆動開発におけるハーネスエンジニアリングの勘所
tsukuboshi
1
840
Flutter Widget Previewerで始めるUIプレビューとVRTの自動化
sakusaku3939
0
160
外国人エンジニアがVueプロトタイプで仕様を合わせている話 / Vue Fes Japan 2026 LT
eluwing
0
290
ポケモン対戦を自動で記録して振り返ろう
fufufukakaka
0
420
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
8.4k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
720
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Typedesign – Prime Four
hannesfritz
42
3.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
The browser strikes back
jonoalderson
0
1.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Code Reviewing Like a Champion
maltzj
529
40k
エンジニアに許された特別な時間の終わり
watany
109
250k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
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ͨ͠
͓ΘΓ