Rubyと筋肉とギターとわたし

筋トレが仕事です

【Vim】TypeScriptプラグイン周りでquickfixが重くなる

f:id:rdwbocungelt5:20200320131618p:plain

どうもてぃです。

皆さん日頃からvimvimしてますでしょうか?

今回直近で自社開発の別プロジェクトに参画することになったため、いい加減になってたvimのjsプラグインを整理することにしました。

まだまだ問題は山積みなんですが、その中でもLintが自動で効いて重くなる問題を先に解決することとしました。

現状

  • インサートモードから出ると自動でチェックが入る
  • チェック時に固まる
  • 切り取り時(x)にもチェックが入るので作業効率が悪い
  • quickfixが常動くのでファイルが見にくくなる

原因究明

まずはどのプラグインが原因なのか確認。

jsやjsxでは特にこの問題は発生してなかったので、typescript関連かなと。僕の場合、typescript-vimtsuquyomiしか入れてなかったためすぐに見つかりました。

原因はtsuquyomiの方でした。

quickfixを出ないようにする

最初にやった対処がこれです。

let g:tsuquyomi_disable_quickfix = 1

これを設定すれば、quickfixがそもそもでなくなります。

が、毎回:TsuGeterrするのは面倒くさい。マップしようかなともおもいましたが、保存時に自動で動くようにしたかった。

pull requestあった

有志の方が修正してました。マジ神。

github.com

vim8ならlet g:tsuquyomi_use_vimproc = 0、そうでなければ autocmd InsertLeave,TextChanged,BufWritePost *.ts,*.tsx call tsuquyomi#asyncGeterr()を設定すれば、非同期でチェックを行うので、画面が固まらなくなると。

ありがとうございます。感謝。

おわり

まだtsuquyomiでの補完も効かない問題が残ってます。

今回ので前よりは速くなったし固まらなくなったけど、ファイル修正途中で毎回動くと少しラグがな…と思ってますが、quickfixをdisableにするしかなくなるので一旦これで我慢です。

TypeScriptもっとがんばろうー。

【Docker】Mysql2::Error: Host '~~~~~~~' is not allowed to connect to this MySQL server

f:id:rdwbocungelt5:20180816164743p:plain

どうもてぃです。

dockerでDB周りのエラーにかなり悩まされます。

今までPostgreSQLを使っていたので対処は出来ていたのですが、今回はMySQLです。

結構大変でしたが無事解決。

構成

docker-compose.ymlで作成しています。

version: '3.7'

services:
  db:
    image: mysql:5.7
    ports:
      - '3306:3306'
    volumes:
      - mysql-data:/var/lib/mysql
    env_file:
      - .env

  redis:
    image: redis:5.0.7
    ports:
      - '6379:6379'
    volumes:
      - redis-cache:/var/lib/redis/data

  web:
    build:
      context: .
      dockerfile: ./docker/rails/Dockerfile.rails
    command: bash -c "rm -rf tmp/pids/*; bundle exec unicorn -E ${RAILS_ENV} -c config/unicorn.rb"
    depends_on:
      - db
      - redis
    ports:
      - '3000:3000'
    environment:
      - RAILS_ENV
    volumes:
      - .:/myapp
      - /myapp/log
      - /myapp/.git
      - bundle:/usr/local/bundle
    tty: true
    stdin_open: true
    env_file:
      - .env

  worker:
    build:
      context: .
      dockerfile: ./docker/rails/Dockerfile.rails
    command: bundle exec sidekiq -C config/sidekiq.yml -e ${RAILS_ENV}
    depends_on:
      - db
      - redis
    environment:
      - RAILS_ENV
    volumes:
      - .:/myapp
    env_file:
      - .env

  nginx:
    build:
      context: ./docker/nginx
      dockerfile: ./Dockerfile.nginx
    depends_on:
      - web
    ports:
      - '8020:8020'

volumes:
  mysql-data:
    driver: local
  redis-cache:
    driver: local
  bundle:
    driver: local

rails(unicorn) × nginx × mysql × sidekiq(redis)で構成しています。

これ作るのわりかししんどかった。

unicorn × nginxを作ったのが初めてだったので。

やったこと

環境変数がちゃんと設定されているかまず確認。

いや、dbコンテナの構成にenv_fileとして設定しているのでここは特に問題無いと思う。

docker-compose run db /bin/bashでコンテナに入って環境変数を確認したけどちゃんと入ってた。

一応以下の手順で確認できる。

$ docker-compose run db /bin/bash

$ echo ${MYSQL_ROOT_PASSWORD}
# => でた

打つ手なし

です。

諦めてながら最後の手段で永続化していたmysqlのvolumeを削除してしまいます。

$ docker volume ls
# => ~~~~_mysql-data

$ docker volume rm ~~~~_mysql-data
# volume削除完了

データベース作成してみる

$ docker-compose run web bundle exec rails db:create

Can't connect to MySQL server on 'db' (111 "Connection refused")
Couldn't create database for {"adapter"=>"mysql2", "encoding"=>"utf8", "pool"=>5, "username"=>"root", "password"=>"password", "host"=>"db", "database"=>"docker_rails_development"}
rails aborted!
Mysql2::Error: Can't connect to MySQL server on 'db' (111 "Connection refused")
/usr/local/bundle/ruby/2.5.0/gems/mysql2-0.4.9/lib/mysql2/client.rb:89:in `connect'
/usr/local/bundle/ruby/2.5.0/gems/mysql2-0.4.9/lib/mysql2/client.rb:89:in `initialize'
/usr/local/bundle/ruby/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/mysql2_adapter.rb:22:in `new'
/usr/local/bundle/ruby/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/mysql2_adapter.rb:22:in `mysql2_connection'
/usr/local/bundle/ruby/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:809:in `new_connection'
/usr/local/bundle/ruby/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:853:in `checkout_new_connection'
以下略

$ docker-compose run web bundle exec rails db:create
Starting docker-rails_db_1    ... done
Starting docker-rails_redis_1 ... done
   (0.4ms)  SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
  ↳ bin/rails:9
   (0.2ms)  CREATE DATABASE `docker_rails_development` DEFAULT CHARACTER SET `utf8`
  ↳ bin/rails:9
Created database 'docker_rails_development'
   (0.2ms)  SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
  ↳ bin/rails:9
   (0.2ms)  CREATE DATABASE `docker_rails_test` DEFAULT CHARACTER SET `utf8`
  ↳ bin/rails:9
Created database 'docker_rails_test'

なぜか作成できたんやが。

いろいろと調べてみる

トップに出たきたのがstackoverflowのやつ。

やっぱり環境変数について言及してる感じだった。

github.com

qiitaもそういう記事が多数。

でも自分は環境変数設定しているので同じ現象ではない。謎すぎる。

終わり

と思ってたら、同じ現象の人いた。

matsu.teraren.com

この人も自分と同じで、volume削除してdb作成したらうまく行った…と。

コンテナだし、まだ構成の途中だし、困ったらvolumeもimageも全部ぶち壊して作り直しましょう。

それがdockerの醍醐味ですよ。学びましたわ。

以上。

【Docker】railsコンテナでbundle installしているのにCould not find gemと出る

f:id:rdwbocungelt5:20180816164743p:plain

どうもてぃです。

既存プロジェクトをdocker-composeで構成作るということで結構苦労してます。

いくつかトラブルがあったんですが、その中でも題にあるエラーで苦しみました。

環境

  • Docker version 18.09.7, build 2d0083d
  • docker-compose version 1.25.4, build unknown
  • rails 5.2.0

試したこと

以前も同じようなエラーが出たのでvolume関係で怒られているんだろうなと、検討をつけて対処しようとしました。

参考にしていたのがこちらの記事。

qiita.com

最後の対応にあったvolumeを削除するパターンを試しました。

volumeを一回削除し再度作成することによって、volumeの中身を/usr/local/bundleと同じにする

こちらですね。

僕が作成したプロジェクトではskip bundleは行っていなかったですし、bundle installも試していましたので、最後の頼みの綱、すがる思いで試してみました。

が、駄目でした。

同じBundler::GemNotFound: Could not find gemです。謎…

1から手順を見直す

手順を見直したとき、docker-composeを使ってrails newを行っていなかったことを思い出しました。

つまり、Dockerfileから先にimageを作成して、そのイメージを元にrails newしたということです。

で、 docker-compose buildした際に、先に作成したimageを指定してbuildしていなかったので、Gemfileで差が出た…と。

馬鹿じゃん自分。

解決策

めっちゃ簡単。

Gemfile.lockを削除してビルドし直すだけ。

$ rm Gemfile.lock; touch Gemfile.lock

$ docker-compose run <コンテナ名> bundle install

しょうもないことに1時間ほど費やしてしまいました。

もう二度と同じ轍を踏まないです。

ここに誓います。

【Vim】Vim歴三年目に突入するので、やっと操作系を覚える

どうもてぃ。

dein.vim.vimrc 読み込まれない問題は解決(?)したのですが、それはまたの機会に書くとして、流石にvim操作をきちんと抑えておこうと思い、この記事を書くにあたりました。

知らないもの、便利なものめっちゃあってビビりました。

今更感半端ないですが、メモ・備忘録として残して毎日見るようにしたいと思います。

中身削除系

括弧のどの位置でも適応可能。

<>, {}, [], '', ""も同様に削除できる。

以下同じ仕様

コマンド 動作
di( または di) 括弧内削除
da( または da) 括弧ごと削除
yi( または yi) 括弧内をヤンク
ya( または ya) 括弧ごとヤンク
vi( または vi) 括弧内選択
va( または va) 括弧ごと選択
ci( または ci) 括弧内を削除してインサートモード
ca( または ca) 括弧ごと削除してインサートモード

htmlタグ

コマンド 動作
cit タブの中身を消去してインサートモード
vit タブの中身を選択
dit タブの中身を削除
yit タブの中身をヤンク

カーソル単語系

コマンド 動作
viw カーソル上の単語を選択
diw カーソル上の単語を消去
yiw カーソル上の単語をヤンク
ciw カーソル上の単語を削除してインサートモード

カーソルから特定位置

コマンド 動作
dt) カーソル位置から閉じ括弧まで削除
ct) カーソル位置から閉じ括弧まで削除してインサートモード
vt) カーソル位置から閉じ括弧まで選択
yt) カーソル位置から閉じ括弧までヤンク
dT( カーソル位置から括弧まで削除
cT( カーソル位置から括弧まで削除してインサートモード
vT( カーソル位置から括弧まで選択
yT( カーソル位置から括弧までヤンク

終わり

随時更新

毎日見るぞい

【Vim】vimproc plugin is not installed.

どうもてぃです。

絶賛.vimrcが読み込まれず困っています。

先日vim-jpのslackの皆さんにも質問し解決に至らず、結局プラグインクリーンインストール、およびvimの再ビルドを行った際にタイトルのエラーで躓いたので解決策をば。

環境

プラグインクリーンインストール

$ sudo rm -rf ~/.cache/dein/*

$ cd ~/.cache/dein

$ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh

$ sh ./installer.sh ~/.cache/dein

dein.vimも再インストールします。

上記手順を踏んだ後vimを起動したらプラグインが入る。

Unite.vimgrep

自分の場合 <leader>g にunite grepを割り当ててます。

更にunite grepの際、The Silver Searcher(ag)が動くようにも設定してます、爆速です。

unite grepを動かすと、 vimproc plugin is not installed が出て、grep結果が出てこない。

本家を確認

github.com

~/.vim/bundle/vimproc.vim配下にcloneしてmakeしろとのこと。

ただ、自分は ~/.cache/ にdein.vimプラグインを管理しているので、 ~/.cache/dein/repos/github.com/Shougo/vimproc.vim でmakeしてあげます。

make

~
% cd ~/.cache/dein/repos/github.com/Shougo/vimproc.vim


~/.cache/dein/repos/github.com/Shougo/vimproc.vim master* # <- 自分のpromptです 
% make
make -f make_unix.mak
make[1]: ディレクトリ '/home/motty/.cache/dein/repos/github.com/Shougo/vimproc.vim' に入ります
cc -W -O2 -Wall -Wno-unused -Wno-unused-parameter -std=gnu99 -pedantic -shared -fPIC  -o lib/vimproc_linux64.so src/proc.c -lutil
make[1]: ディレクトリ '/home/motty/.cache/dein/repos/github.com/Shougo/vimproc.vim' から出ます

おわり

無事タイトルのエラーを解決できました。

調べても全然出てこなかったので結構困りました。

ただ、まだ.vimrcの読み込みがうまく行かない。。。

解決するまで :source ~/.vimrc で一旦対応。

【Docker】Rails圧倒的環境構築

どうもてぃ。

新年初の記事ですが、昨年Docker Advent Calendarに参戦した記事の簡易版を書きたいと思います。

理由としては、Advent Calendarの内容はボリューミーすぎて、伝えたいことがまばらになってしまったためです。

今回はさくっといきます。

やりたいこと

スクリプト流したら環境構築完了

詳しい内容は以下のQiita記事へGo

qiita.com

Repository

github.com

やることは README.md に全て書いてある。

Let's try

$ git clone https://github.com/motty93/docker-rails-postgresql.git

$ cd docker-rails-postgresql/

$ sudo chmod 755 init.sh

$ ./init.sh

これでRailsサーバーが立ち上がります。

自動で0.0.0.0:3000 のブラウザが開くはず。

おわり

めっちゃ簡単。

init.sh の中身をみればだいたい何をやっているかわかるかとおもいます(ほとんどコマンドを羅列してるだけ)。

興味あれば是非リポジトリクローンして使ってください。

今後、rails6系のバージョンにも対応する予定ですので、是非Star押していただけると励みになります!

では今年もよろしくお願い致します。

【Vim】バージョン8へアプデするとエラーが出る

どうもてぃです。

最近フロント力を強化するためにReactを毎日少しずつ継続してやってます。

vimでやる場合にインデントが揃わなかったり、中括弧で警告っぽい表示になったりと、結構不便に感じることが多かったので、今回vim-prettierを導入することにしました。

その前準備として、vim8にバージョン上げたところ、突然エラーに陥ってしまったので解決策を備忘録として書いておきます。

環境

  • elementary OS 0.4.1 Loki (ubuntu 16.04.4)
  • vim 7.4.1

vim8へアプデ

ubuntuでアプデする方法は結構簡単でした。

$ sudo add-apt-repository ppa:jonathonf/vim

$ sudo apt update

$ sudo apt install vim

上記で問題なくいけるはず。

どんなファイルを開いてもエラー

vim8 function <SNR>63_append[6] ~~~~~~~neomru~~~~ やら E892 文字列を浮動少数点数として扱っています と毎回出てくる。

流石に鬱陶しい。

いろいろ調べて見てたら、issueが上がってましたね。

github.com

neomru.vimのバージョンチェックを修正しないといけないっぽい。

issue通りに修正

対象のプラグインを修正します。

僕は .vim をホームディレクトリに作っているので以下の手順で修正します。

$ cd .vim/dein/repos/github.com/Shougo/neomru.vim/autoload/

$ vim neomru.vim

vimで開いてノーマルモード/str2float と入力すると対象の修正箇所まで飛べると思います。

あとはissueの通りに修正を入れたらエラーが出ないようになります。

終わり

Docker Advent Calendar 2019 - Qiita

Docker Advent Calendar 18日目に参戦予定です。

どうぞよろしく。