継続的ブログ

主にweb系の技術について書いています

docker環境でvimからrspec実行

qiita.com

少し前にjokerさんの ↑ の記事を参考にして、docker環境でvimからrspec実行できるようにして、最高に快適になりました。
ありがとうございます。

記事ではdirenv使って環境変数でコンテナ名を指定してフィルターしているみたいですが、自分はリポジトリ増えたり、docker環境とそうでない環境が混在してきたらでいいかなと思ったのでとりあえず雑に設定...

nnoremap <Leader>tn :TestNearest<CR>
nnoremap <Leader>tf :TestFile<CR>

let test#strategy = 'neoterm'
let test#ruby#rspec#executable = 'rspec'
function! DockerTransformer(cmd) abort
  let container_id = system("docker ps | grep app | grep rails | awk '{print $1}'")
  return 'docker exec -t ' . container_id . ' bundle exec ' . a:cmd
endfunction
let g:test#custom_transformations = {'docker': function('DockerTransformer')}
let g:test#transformation = 'docker'
let container_id = system("docker ps | grep app | grep rails | awk '{print $1}'")

これでrails起動しているコンテナIDを取得するようにしました。(grepの条件はターゲットにしているコンテナを一意に特定できる条件)

ご参考まで。

github.com

github.com

mark_for_destruction を before_validation で

gitlabのコード読んでいていいなと思ったやつ。

before_validation で値が空のものに mark_for_destruction でフラグ立ててやる。

これなら空のやつでもとりあえず save しとけばいいので、before_validation でやるのもいいなと思った。

  • project.rb
before_validation :mark_remote_mirrors_for_removal, if: -> { RemoteMirror.table_exists? }

...

def mark_remote_mirrors_for_removal
  remote_mirrors.each(&:mark_for_delete_if_blank_url)
end

https://github.com/gitlabhq/gitlabhq/blob/d5994552b2088c0c27e419b3ae2c4432ea329a82/app/models/project.rb

  • remote_mirror.rb
def mark_for_delete_if_blank_url
  mark_for_destruction if url.blank?
end

https://github.com/gitlabhq/gitlabhq/blob/299011313cef8fbeb8d5eeafcc60374211c88ec8/app/models/remote_mirror.rb

gitlabのコード読むのはいい勉強になる。

github.com

Vueのテンプレートでassetsのimageを使う(rails + webpacker)

assets/images 下の画像をVueのtemplate内で使いたい。

erb内でなら image_tag で行けるが、digestついてるので単に <img src="assets/images/image.png" />とはできない。

解決法

調べたらいくつか方法はありそうだったが、webpackerのドキュメントを読むと、

config/webpacker.ymlresolved_paths を利用すればいいっぽい。

github.com

Note: Please be careful when adding paths here otherwise it will make the compilation slow, consider adding specific paths instead of whole parent directory if you just need to reference one or two modules

↑ ただコンパイル速度を低下させるため、パスの追加は慎重に行ったほうがいいとのこと。

images だけでよいなら、↓ のようにすればよい。

resolved_paths: ['app/asstes/images']
<template>
  <div>
    <img src='~image.png' />
  </div>
</template>

<script>
  import 'image.png'
  ...
</script>

ここ最近のいくつかの現場では、webpackとRails別々で管理しているプロジェクトだったので何気にwebpackerは初だが、今のところまだ辛いとかはない感じです(笑)

参考

deoplete.nvimのエラー解消

deoplete.nvim 使っているのですが、ファイル開くとこんなエラーが表示されるようになりました。

[deoplete] deoplete failed to load. Try the :UpdateRemotePlugins command and restart Neovim. See also :checkhealth.

言われたとおり UpdateRemotePlugins するとエラーが。

function remote#host#UpdateRemotePlugins[6]..<SNR>77_RegistrationCommands[15]..remote#host#Require[10]..provider#pythonx#Require[13]..provider#Poll, line 4
Vim(if):ch 3 was closed by the client
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'neovim'
function remote#host#UpdateRemotePlugins[6]..<SNR>77_RegistrationCommands[15]..remote#host#Require[10]..provider#pythonx#Require[13]..provider#Poll, line 14
Failed to load python3 host. You can try to see what happened by starting nvim with $NVIM_PYTHON_LOG_FILE set and opening the generated log file. Also, the host stderr is available in messages.
remote/host: generated rplugin manifest: /Users/fakiyer/.local/share/nvim/rplugin.vim

checkhealth しても python の項目でエラーが出ていました。

...
## Python 3 provider (optional)
  - INFO: Using: g:python3_host_prog = "/usr/local/bin/python3"
  - INFO: Executable: /usr/local/bin/python3
  - ERROR: Command error (job=11): `'/usr/local/bin/python3' -c 'import sys; sys.path.remove(""); import neovim; print(neovim.__file__)'` (in '/Users/fakiyer')
    Output: Traceback (most recent call last):  File "<string>", line 1, in <module>ModuleNotFoundError: No module named 'neovim'
  - INFO: Python3 version: 3.7.1
  - INFO: python3-neovim version: unable to load neovim Python module
  - ERROR: Neovim Python client is not installed.
    Error: unable to load neovim Python module
    - ADVICE:
      - Run in shell: pip3 install neovim
...

最新版の neovim がちゃんと入っているはずなのですが、一応言われたとおりpip3 install neovim して checkhealth するも同じエラーに...

試しにターミナルで python 実行して、 import neovim してみたのですが、ImportError: No module named neovim ...

python入れ直したりいろいろしてみましたがどれもうまくいかず、途方にくれていたところ、この記事を見つけて、

qiita.com

$ pip3 --no-cache-dir install -I neovim

してみたところ、checkhealthpythonの項目のエラーはなくなったので、UpdateRemotePluginsしてエラーは完全になくなりました!

同じエラーで困っている方の参考になれば...

github.com

【Android】インストール済みアプリが表示されない、アップデートがあるのにアップデート一覧に表示さない場合

「最近アプリのアップデートないな」と思って、Playストアを開いてみたら、マイアプリの「アップデート」と「インストール済み」に何も表示されなくなっていました。


適当にインストール済みのアプリを検索して、アプリ詳細画面に行くと「更新」ボタン(アップデートがあること)になっているのに。


いろいろググってみて再起動等試してみたのですが、どれもダメでした。。。


結果、何で直ったかというと、

設定 > アプリ > Google Play ストア > ストレージ > データを消去

で直りました。


もしも自分と同じような現象で困っている方がいたら試してみてください。

Spotifyをターミナルから操作(Mac)

いくつかありそうですが、自分は shpotify というものを最近使い始めました。

github.com

brewが入っていれば

$ brew install shpotify

でインストール完了です。

設定

1. Spotify APIに繋ぐため ↓ からアプリケーションの登録する

developer.spotify.com

2. Client IDClient Secretを取得する

3. ${HOME}/.shpotify.cfg というファイルを用意して、2 で取得した値を ↓ のようにセットする

CLIENT_ID="your client_id"
CLIENT_SECRET="your client_secret"

以上で設定は完了です。

操作

アーティスト指定

$ spotify play artist ellegarden

曲指定

$ spotify play "風の日"

アルバム指定

$ spotify play album "RIOT ON THE GRILL"

その他についてはこちらから ↓

https://github.com/hnarayanan/shpotify#usage


長い曲名・アーティスト名は入力するの面倒なので直接操作してしまった方が楽だと思いますが、曲のスキップや停止・再開等は楽でいい感じです。

最強のチートシート cheat.sh がすごい!

github.com

自分も Hacker News で知ったばかりなのですが、これとても便利です!

簡単に言ってしまうと、チートシートのまとめサイト的なもので、自分がほしいチートシートを簡単に取得できます

そして、

  • 速い!(100ms以内に回答を返す)

  • 圧倒的情報量!(55のプログラミング言語、いくつかのDBMS、1000以上のLinuxコマンドをカバー)

  • 信頼できる情報源!(チートシートのソースは各コミュニティのリポジトリとStackOverflow)

という特徴があります。

使い方

https://cheat.sh/

ここからブラウザでもcurlでも簡単にチートシートが取得できます。

例えば、 ls コマンドの使い方が知りたいとした場合。

  • ブラウザ f:id:akiza:20180712092120g:plain

  • curl f:id:akiza:20180712092940g:plain

簡単に取得できます。

CLIクライアントも用意されてるので、こちらを使うと更に便利です。(以降はCLIクライアントを使っていきます)
設定すればタブ補完効くのもいいです。

https://github.com/chubin/cheat.sh#command-line-client-chtsh


※タブ補完ですが、 zsh はまだ対応してないようです。残念。。


プログラミング言語もカバーしているので、例えば goif の書き方知りたいなと思った場合、 go の後にクエリで if と入力すれば取得することができます。

f:id:akiza:20180712222502g:plain

また、 :learn というクエリを使えばプログラミング言語の Getting Started 的なものも取得できるも良いです。

f:id:akiza:20180712221019g:plain


簡単に紹介してしまったので、まだまだ紹介できていないこともありますが、いかがでしょうか?
日常でLinuxコマンドのオプションとか忘れてググることあるので、個人的には結構使えるなと思いました。

それにしてもスター数の推移がすごいw

f:id:akiza:20180712222213p:plain