エンジニア

なんくるないさ

「このブログはアフィリエイト広告を利用しています」

HerokuにReactのwebアプリをdeployすると実行されるコマンド

筆者はアルバイトの関係でHerokuにReactのwebアプリをよくdeployしています.
以下のようなpipelineで構成しています.

stg-masterにマージしたら自動でstgにデプロイされます.
またmasterにマージされたら自動でmasterにデプロイされるような構成です.

f:id:jump1268:20210122213308p:plain

stg環境をexperiment環境として,開発者が自由にコードを試せるようにしています.

ここにdeployするときは

git push heroku feature-#***:master

のように今使っているブランチをpushしてdeployしております.

このコマンドで何が起こっているかを追ってみました.

$ git push heroku feature-#216:master
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 4 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 463 bytes | 463.00 KiB/s, done.
Total 5 (delta 4), reused 0 (delta 0)

まずherokuにpushします.
するとおそらく,前回のcommitからの差分をみてそれがherokuに渡されます

remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Building on the Heroku-20 stack
remote: -----> Node.js app detected
remote:        
remote: -----> Creating runtime environment
remote:        
remote:        NPM_CONFIG_LOGLEVEL=error
remote:        USE_YARN_CACHE=true
remote:        NODE_VERBOSE=false
remote:        NODE_ENV=development
remote:        NODE_MODULES_CACHE=true
remote:        

commitしたソースファイルを圧縮し
ソースがビルドされます.
ビルドするときにnode.jsで書かれていることが感知されます(lockファイル等見られている?)
次に環境変数を指定します.

remote: -----> Installing binaries
remote:        engines.node (package.json):  unspecified
remote:        engines.npm (package.json):   unspecified (use default)
remote:        engines.yarn (package.json):  unspecified (use default)
remote:        
remote:        Resolving node version 12.x...
remote:        Downloading and installing node 12.20.1...
remote:        Using default npm version: 6.14.10
remote:        Resolving yarn version 1.22.x...
remote:        Downloading and installing yarn (1.22.10)
remote:        Installed yarn 1.22.10
remote:        
remote: -----> Restoring cache
remote:        - yarn cache

yarnを使っているのでここでyarnがインストールされます.
使っているライブラリをcacheから復元?

remote: -----> Installing dependencies
remote:        Installing node modules (yarn.lock)
remote:        yarn install v1.22.10
remote:        warning package.json: "dependencies" has dependency "@types/react" with range "^16.9.53" that collides with a dependency in "devDependencies" of the same name with version "^16.9.49"
remote:        warning package.json: "dependencies" has dependency "typescript" with range "^4.0.3" that collides with a dependency in "devDependencies" of the same name with version "^4.0.2"

ここでyarn installが実行されます
(yarn.lcokファイルをみる)

remote:        [1/4] Resolving packages...
remote:        [2/4] Fetching packages...
remote:        info fsevents@2.1.3: The platform "linux" is incompatible with this module.
remote:        info "fsevents@2.1.3" is an optional dependency and failed compatibility check. Excluding it from installation.
remote:        info fsevents@1.2.13: The platform "linux" is incompatible with this module.
remote:        info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation.
remote:        [3/4] Linking dependencies...

remote:        [4/4] Building fresh packages...
remote:        Done in 52.30s.

ここでResolving(依存解決)

remote: -----> Build
remote:        Running build (yarn)
remote:        yarn run v1.22.10
remote:        $ react-scripts build
remote:        Creating an optimized production build...
remote:        Compiled successfully.
remote:        
remote:        File sizes after gzip:
remote:        
remote:          211.99 KB  build/static/js/2.46f7473a.chunk.js
remote:          5.24 KB    build/static/js/main.50327bed.chunk.js
remote:          1.4 KB     build/static/js/3.970c0882.chunk.js
remote:          1.17 KB    build/static/js/runtime-main.a169ad81.js
remote:        
remote:        The project was built assuming it is hosted at /.
remote:        You can control this with the homepage field in your package.json.
remote:        
remote:        The build folder is ready to be deployed.
remote:        You may serve it with a static server:
remote:        
remote:          yarn global add serve
remote:          serve -s build
remote:        
remote:        Find out more about deployment here:
remote:        
remote:          https://cra.link/deployment
remote:        
remote:        Done in 68.94s.
remote:        

ここでreact-script build が実行されます(react-create-appで作成したアプリなので)
buildしてできたgzipファイルが列挙されています.

gzipとはなに?って人のために

zipとgzipの違い〜圧縮とアーカイバ~ - Qiita

圧縮アーカイバと圧縮機能の違い アーカイバとは、、複数のファイルを一つにまとめるもの gzipアーカイバではないので複数のファイルを一つにまとめるなどはない http://d.hatena.ne.jp/chaichanPaPa/20090115/1232026155

tarはアーカイバ

gzipは圧縮機能 http://qiita.com/taji-taji/items/ea020ecfea9f40513ea0

ということらしいです.

プロジェクトは/でホストされていると想定してビルドされました。
package.jsonのホームページフィールドでこれを制御できます。
らしいです.

静的サーバでも提供できるっぽい?

remote: -----> Pruning devDependencies
remote:        Skipping because NODE_ENV is not 'production'
remote:        
remote: -----> Caching build
remote:        - yarn cache
remote:        
remote: -----> Build succeeded!
remote:  !     Unmet dependencies don't fail yarn install but may cause runtime issues
remote:        https://github.com/npm/npm/issues/7494
remote: 
remote: -----> Discovering process types
remote:        Procfile declares types     -> (none)
remote:        Default types for buildpack -> web
remote: 
remote: -----> Compressing...
remote:        Done: 83.6M
remote: -----> Launching...
remote:        Released v81
remote:        https://〇〇/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/〇〇
   e364951..6b0bdf1  feature-#216 -> master

Pruning devDependenciesをして
最後はHerokuにデプロイされて終了

prunignとは

pruneの現在分詞。おろす、 切り取る、 切り払う らしいです.
つまり remote: -----> Pruning devDependencies remote: Skipping because NODE_ENV is not 'production' は本番環境じゃないからdevDependenciesは取り除かれなかったよ
ってことですかね

   
独学でプログラミング特に フロントエンドの力をつけたい人はこことか
フロントエンドコース

udemyとかを使った方が良いと思います.(成長スピードが違う) フロントエンドエンジニアになりたい人の Webプログラミング入門