質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

0回答

3629閲覧

dockerで構築したrails開発環境において、vscodeの拡張機能ruby-rubocopを用いたリアルタイムチェックをしたい

u-yah

総合スコア4

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

3クリップ

投稿2020/01/11 06:09

前提・実現したいこと

vscodeの拡張機能ruby-rubocopを用いてリアルタイムチェックをしたいのですが、うまくいきません。
解決法に心当たりのある方がいらっしゃいましたらアドバイスいただけると幸いです。

環境

WSL2(Ubuntu-18.04)
docker Desktop
dockerで構築したrails開発環境(rails 5.2.4)
vscode(Remote - WSL)

やりたいこと

◆参考記事

  1. [Mac]VScode で ruby-rubocop が動かなくなったら executePath を設定してみよう
  2. Docker環境でAtomからRubocopを使う方法

記事を参考にセッティングしましたが、Rubocop: Config File Pathの指定が思うように動作せず、.rubocop.ymlを読み取ることができません。

  • Rubocop: Config File Path/home/User/【プロジェクト】/.rubocop.yml
  • Rubocop: Execute Path/home/User/【プロジェクト】/bin/

vscodeからは以下のエラーポップアップが上がります。

Configuration file not found: /【プロジェクト】/【プロジェクト】/.rubocop.yml

試したこと

  • bundle install
  • rubocopがインストールされているコンテナ名を、【プロジェクト】/bin/rubocopにコピペ
  • railsのコンテナを落とした状態での動作確認

railsのコンテナを落とした状態だと以下のエラーポップアップが上がります。

Error: No such container: 【プロジェクトのコンテナ名】
  • railsのコンテナ名をわざと間違えた状態で動作確認
Error: No such container: 【あえて間違えたコンテナ名】

このことからRubocop: Execute Pathの指定は合っていてコンテナの指定も合っている。
しかしRubocop: Config File Pathの指定がうまくできないと考えられるのですが、ここから先の調査方法に目処が立っていません。

補足情報(FW/ツールのバージョンなど)

/home/User/【プロジェクト】/Gemfile

source 'https://rubygems.org' git_source(:github) {|repo| "https://github.com/#{repo}.git" } ruby '2.6.4' ~~~ group :development, :test do gem 'rubocop-rspec' end group :development do gem 'rubocop' gem 'rubocop-rails' end

/home/User/【プロジェクト】/.rubocop.yml

require: - rubocop-rails - rubocop-rspec ~~~

/home/User/bin/rubocop

#!/bin/bash CMD_ARGS="" for arg in $@ do if [ -f "$arg" ] then CMD_ARGS="$CMD_ARGS ${arg#$PWD/}" else CMD_ARGS="$CMD_ARGS $arg" fi done docker exec -i 【rubocopがインストールされたコンテナ名】 rubocop $CMD_ARGS ~~~

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dameo

2020/01/12 19:51

rubyもrailsはよく分かりませんし、dockerもvscodeも詳しくないですが、以下の環境で少し追っかけてみました。 環境はWindows VSCode->VirtualBox上のUbuntu19.04->Dockerコンテナ上のruby/rails/rubocopです。 ■Dockerfile FROM ruby:2.6 RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN apt-get update -qq && apt-get install -y nodejs postgresql-client yarn RUN mkdir /rails WORKDIR /rails COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 3000 ENV RUBYOPT -EUTF-8 CMD ["rails", "server", "-b", "0.0.0.0"] ■docker-compose.yml(インデントは想像してください)(アプリは/rails/sample_app) version: '3' services: db: image: postgres volumes: - ./db:/var/lib/postgresql/data web: build: . command: bash -c "rm -f tmp/pids/server.pid && cd sample_app && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - ./web/rails:/rails - ./web/bundle:/usr/local/bundle ports: - "3000:3000" depends_on: - db ■entrypoint.sh #!/bin/bash set -e rm -f /rails/tmp/pids/server.pid exec "$@" 上記を元にdockerでrails環境をUbuntu上に作成し、Windows上のVSCodeからremote-sshで繋いでUbuntu上のsample_appを開いています。 sample_appには一応.rubocop.ymlを置いていますが、rubyのバージョンくらいしか書いていません。 dockerコンテナにexecするrubocopのラップスクリプトは、Dockerfileとかと同じ場所に置いています。 ruby-rubocopのConfig File PathはUbuntu上のファイルフルパスで指定 ruby-rubocopのExecute PathはUbuntu上のディレクトリフルパス/で指定 この状態で、rubocop呼び出しスクリプト内で引数を調べたところ、 --stdin Ubuntu上の対象ファイルフルパス --format json --force-exclusion --config Ubuntu上の.rubocop.yml が渡されていました。常にそうなのかは分かりませんが、大体こんな感じのようです。 そして標準入力からUbuntu上の対象ファイルフルパスの内容がそのまま流れてくるようです。 正しい動作の想定は結果が標準出力にJSON形式で出てくることのようです。 しかし、なぜかは分かりませんがrubocopに渡している--stdinオプションが意図通りに機能してないようで、--configオプションなども効いていないように思います。そこで、上記の引数を Dockerコンテナ上の対象ファイルフルパス --format json --force-exclusion --config Dockerコンテナ上の.rubocop.yml にしてdocker execしたところ(標準入力は/dev/nullに捨てた)、うまいこと動作してるように見えました。未確認でなんとなく動かしてるだけなので、ヒント程度の情報ですが、情報まで。 ■rubocop #!/bin/bash CONTAINER="rails_web_1" PROJDIR="sample_app" CMD_ARGS="" argary=($@) for i in 1 6; do arg="${argary[$i]}" argary[$i]="$PROJDIR/${arg#$PWD/}" done argary[0]= cat >/dev/null docker exec -i "$CONTAINER" rubocop ${argary[*]}
u-yah

2020/01/13 17:14

回答ありがとうございます。 頂いたコードを試しましたが、以下のエラーが出力されてしまいました。 ``` Configuration file not found: /【プロジェクト】/【プロジェクト】/【プロジェクト】/.rubocop.yml ``` `bin/rubocop`がうまく記述できていないようですが、原因を特定できていません。
dameo

2020/01/13 17:29

内容を理解して、自分の環境に合わせて読み替えられないと、難しいと思いますよ。 あなたが書いていないからわざわざ私が環境などを細かく書いたので… 私のDockerコンテナはよく読むと分かりますが、railsアプリを複数入れられるようにしています。 またteratailのコメント欄では残念ながらコードブロックは使えません。
u-yah

2020/01/14 00:31

コメントありがとうございます。 docker環境のソースコードが必要という点まで理解が至らずに恐縮です。 まずはbashコードを理解するところから読み進めていこうと思います。
dameo

2020/01/14 00:57

パスの書き換えの際に、確実にそこが影響するはずです。 dockerを使っている点が一番普通と違うところなのに、そこの説明が一切ないので、どういう環境になっているのか私には完全にブラックボックスなのです。進展/問題があったら教えて下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問