前回の記事 で Rails の Application Template を使ってみました。
それでも Rails プロジェクトを立ち上げるには手数が多く面倒だったので peco を使ってテンプレートを選択し初期化しようと思います。
仕組み GitHub に Application Template を管理するリポジトリを用意 GitHub API を使って該当のリポジトリからテンプレート一覧を取得 peco を使ってテンプレートを選択 ローカルで rails new を実行 その他のファイルも管理できるようにテンプレートリ管理リポジトリを用意し専用ディレクトリを作りました。public なリポジトリであれば GitHub API でディレクトリ内のファイル一覧を取得できます。
https://github.com/fillin-inc/templates
コード 以下のコードを .zshrc でロードし zsh 上で呼び出します。
# peco-rails-template.zsh function peco-rails-template() { # GitHub API からテンンプレート情報取得 local JSON=$(curl --silent https://api.github.com/repos/fillin-inc/templates/contents/rails | jq '.[]') # template 名から選択 local TEMPLATE=$(echo ${JSON} | jq '.name' | grep '.rb' | sed -e 's/"//g' | sed -e 's/\....
Rails のアプリケーション環境をサクッと立ち上げるために Application Template を用意してみました。特徴としては, slim, rspec 初期化, rubocop の設定等々です。
https://gist.github.com/yuya-matsushima/827903535cd97894df74c385fcdc30b4
環境構築 docker-compose 環境の用意 Web サーバーなし, MySQL と Redis の image をベースに。
version: '3' services: app: image: fillininc/rails:2.6.3-18.04 volumes: - .:/opt/app - bundle:/usr/local/bundle ports: - 3000:3000 stdin_open: true depends_on: - db - redis db: image: mysql:8.0 command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci volumes: - database:/var/lib/mysql ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: app_development TZ: Asia/Tokyo redis: image: redis:5.0 ports: - 6379:6379 volumes: database: bundle: Gemfile を用意 source 'https://rubygems....
動作させているプログラムを動作させている環境が Docker コンテナ内か判定する必要に遭遇しました。ちょっとしたバッチ処理でしたが Docker 環境に限り設定を追加する必要がありました。
どう対応していたか Dockerfile や docker-compose で ENV DOCKER_ENV=1 のように環境変数を設定していました。動作するプログラム内で環境変数を判定し設定を調整すれば対応できます。
この方法だと環境変数の指定忘れが起これば対象のプログラムは動作しなくなってしまいます。その他の方法がないか調べてみました。
.dockerenv を使った判定 Docker コンテナを立ち上げた場合, root に /.dockerenv が生成されるようです。そこでこのファイルの存在判定で対応します。Ruby の場合であれば次のコードで判定することができます。
if File.exist?(File.join('/', '.dockerenv')) # Docker コンテナ上でのみ実行する処理 end 参考: 今の環境がDocker Containerとして動作しているかどうかをコマンドで調べる
これによって面倒な環境変数の管理が不要になりました。
Ruby で書捨てのコードを書く場合に, とりあえずいつもの感じで RuboCop を実行したい場合の設定を .vimrc に追加しました。
.vimrc への追加 function! RuboCop() echo system( 'RuboCop --config ~/.rubocop.yml ' . bufname("%")) endfunction 当然のことですが global 環境に RuboCop のインストールと ~/.rubocop.yml の用意が必要です。
vim 上で実行 vim 上で次のコマンドを実行すると RuboCop が走ります。
:call RuboCop() 適当にローカルにあったコードで実行してみます。
とりあえず動きました。