LoginSignup
0
0

More than 1 year has passed since last update.

Rails初級者が一ヶ月研修を受けて得た学びをまとめた~Docker・ほか~

Last updated at Posted at 2022-09-03

この記事は「Rails初級者が一ヶ月研修を受けて得た学びをまとめた - Qiita」の環境構築とDockerとその他の項目を切り出した分割記事です。
概要などについては親記事を参照してください。

環境構築・その他

CPUアーキテクチャにあったplatformの設定をする(M1対応)

Gemfile.lock
PLATFORMS
	aarch64-linux ##Docker環境
	arm64-darwin-21 ##M1 Mac
	x86_64-linux ##intel mac

Docker

DockerfileのCOPYは中間ファイルが増えるので出来るだけまとめる

# bad
COPY Gemfile 
COPY Gemfile.lock
COPY $APP_ROOT/

# good
COPY Gemfile Gemfile.lock $APP_ROOT/

Dockerfile

FROM ruby:3.1.1

RUN apt-get update -qq && \
apt-get install -y build-essential

ENV APP_ROOT /task-manager
WORKDIR $APP_ROOT

COPY Gemfile Gemfile.lock $APP_ROOT/

RUN bundle install
COPY . $APP_ROOT

不要なディレクトリはマウントしない

rm -f tmp/pids/server.pidはやっとくといい

  • railsサーバーコンテナをたちあげた際、server.pidが残っておりエラーになることが多い
  • 起動時のコマンドで消しておく

dbのvolumeマウントを忘れずに

  • 忘れるとコンテナ終了時にDBデータが消えてしまうため、マウントして永続化しておく
services:
db:
volumes:
- db-data:/var/lib/mysql

volumes:
db-data:  

最終的なdocker-compose.yml

version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_DATABASE: root
MYSQL_ROOT_PASSWORD: password
volumes:
- db-data:/var/lib/mysql
platform: linux/amd64
ports:
- "${DB_PORT:-3312}:3306"

task-manager:
build: .
command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/task-manager
- vendor:/task-manager/vendor
- tmp:/task-manager/tmp
ports:
- "${APP_PORT:-3003}:3000"
links:
- db

volumes:
vendor:
tmp:
db-data:

Github・その他

.gitignoreの読み込み直し

  • PJ作成後に新規に.gitignoreに加筆した場合、リモートで当該ファイルを削除して、pullして…とやって適応させていたがコマンドで簡単にできることがわかった
  • git rm -r --cached . でキャッシュを消せ、gitignore対象ファイルをbranchから削除できる
  • 実施後にcommitすれば良い

思想

プルリク

  • スコープはとにかく切り分ける。まあこれくらいいいかと思ってやらない
    • 切り分けの意識は開発者が一人だと薄れがちなので研修開始当初は結構雑だった
  • やらなくていいことはやらない。根拠ない変更はしない

その他

READMEなどの見出しのCapitalizeは整形ツールを使うと便利

READMEのRequirementsの親切な書き方とポイント

  • アプリケーションを動かすのに飛鳥な製品&環境という点で書くならば
    • Railsはアプリケーション自体なので書かなくていい(仕様と混同していた)
    • Docker単体では動かないのでDocker Desktopのように製品名を書いてあると良い
      ## Requirements
      
      - MySQL 5.7 (required if you develop building on local)
      - [Docker Desktop](https://docs.docker.com/desktop/) (required if you develop on Docker)
      

テキストファイルの最後に空行挿入する理由

そもそもPOSIX規格とは?調べてみました!

  • POSIXとは

    オペレーティングシステム (OS) の標準的なインタフェースおよび環境を定義するIEEE規格である
    POSIX - Wikipedia

  • よくわかりませんでした!もう少し詳しく知りたい。
  • POSIX準拠 とは本当はどういうことなのか?「POSIXで規定されたものだけを使う」ではありません - Qiita

    OS 実装者向けの要件とアプリケーションの開発者向けの要件があり、高い移植性の実現には双方が POSIX に準拠する必要があります。
    「各 OS の動作の違いに対応すること」が POSIX が定めている POSIX 準拠の要件です。

  • OSインターフェースの標準規格で、準拠すれば移植性の高いアプリケーションが開発できる。
  • ただし、「POSIX準拠=すべてのPOSIX準拠環境で動く」ではないらしい
  • 今の自分の理解ではうまく言葉にまとめられない。少し間を置いて読み返したい
  • ref: The Open Group Base Specifications Issue 7, 2018 edition
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0