ファイルの中身をコピーする時に、pbcopyが打つのが面倒

ファイルの中身をコピーする時に、毎回cat file | pbcopyって打つのが面倒だったので、zshrcに関数を定義しました。

function clip() {
    cat $1 | pbcopy
}

柔軟性はないけど、とりあえずはこれで十分かな。

tmux上のCtrl-a・Ctrl-eが動かない

Tmux2.5上でCtrl-a・Ctrl-eが効かなくなりました。
shellは、zshを使っています。

解決策はよく分からないのですが、superuserで転がっていた質問の対応で、期待通りの動きをするようにしました。
https://superuser.com/questions/523564/emacs-keybindings-in-zsh-not-working-ctrl-a-ctrl-e

bindkey -eをzshrcに追加しただけです。

Emacsモードのキーバインドだけっか…

Ansibleでgem installする時の注意

Ansibleでgem installしても、参照出来なくて困った時の話。

Playbook

とりあえず、Playbookを貼ります。。

---
- hosts: all
  become: false
  tasks:
    - name: Download rbenv
      git:
        repo: https://github.com/rbenv/rbenv.git
        dest: /home/vagrant/.rbenv
        update: no
    - name: Download rbenv-build
      git:
        repo: https://github.com/sstephenson/ruby-build.git
        dest: /home/vagrant/.rbenv/plugins/ruby-build
        update: no
    - name: Set rbenv environment
      register: result
      changed_when: '"Set rbenv environment" in result.stdout'
      shell: |
        if [ "$(grep rbenv ${HOME}/.bashrc)" == "" ]; then
          echo 'Set rbenv environment'
          echo 'export PATH="${HOME}/.rbenv/shims:${HOME}/.rbenv/bin:${PATH}"' >> ${HOME}/.bashrc
        fi
    - name: Install ruby
      register: ruby_installer_result
      changed_when: '"Installing ruby" in ruby_installer_result.stdout'
      shell: |
        if [ "$(rbenv versions 2>&1 | grep 2.4.1)" == "" ]; then
          echo 'Installing ruby 2.4.1'
          ${HOME}/.rbenv/bin/rbenv install 2.4.1
          ${HOME}/.rbenv/bin/rbenv global 2.4.1
          ${HOME}/.rbenv/bin/rbenv rehash
        fi
    - name: Install bundler
      gem:
        name: bundler
        state: present
        executable: ${HOME}/.rbenv/shims/gem
        version: 1.15.3
    - name: Install rails
      gem:
        name: rails
        state: present
        executable: ${HOME}/.rbenv/shims/gem
        version: 5.1.3

余りキレイな書き方ではないのですが、

  1. ホームディレクトリ配下にrbenvをインストール
  2. ruby-buildを追加
  3. rbenv周りの環境変数を.bashrcに追記
  4. Rubyのインストール
  5. bundlerのインストール
  6. railsのインストール

をしているだけです。
このPlaybookを実行しても、bundleやrailsが見つかりません。
が、gem listにはあったのです。

まさか…

–user-install

gem listにあるということは、どこかにインストールはされているわけです。
今の設定で、参照出来なくてインストールされているとなると、可能性が高いのは、–user-installオプションをつけてインストールしているときです。

AnsibleのgemモジュールのOptionsを見てみます。

–user-installに該当するオプションがありますね。
user_installです。
どうやら、デフォルト値がtrueになっているようです。

ということは、これをfalseで指定してあげればいいですね。

---
- hosts: all
  become: false
  tasks:
    - name: Download rbenv
      git:
        repo: https://github.com/rbenv/rbenv.git
        dest: /home/vagrant/.rbenv
        update: no
    - name: Download rbenv-build
      git:
        repo: https://github.com/sstephenson/ruby-build.git
        dest: /home/vagrant/.rbenv/plugins/ruby-build
        update: no
    - name: Set rbenv environment
      register: result
      changed_when: '"Set rbenv environment" in result.stdout'
      shell: |
        if [ "$(grep rbenv ${HOME}/.bashrc)" == "" ]; then
          echo 'Set rbenv environment'
          echo 'export PATH="${HOME}/.rbenv/shims:${HOME}/.rbenv/bin:${PATH}"' >> ${HOME}/.bashrc
        fi
    - name: Install ruby
      register: ruby_installer_result
      changed_when: '"Installing ruby" in ruby_installer_result.stdout'
      shell: |
        if [ "$(rbenv versions 2>&1 | grep 2.4.1)" == "" ]; then
          echo 'Installing ruby 2.4.1'
          ${HOME}/.rbenv/bin/rbenv install 2.4.1
          ${HOME}/.rbenv/bin/rbenv global 2.4.1
          ${HOME}/.rbenv/bin/rbenv rehash
        fi
    - name: Install bundler
      gem:
        name: bundler
        state: present
        executable: ${HOME}/.rbenv/shims/gem
        user_install: false # 追記
        version: 1.15.3
    - name: Install rails
      gem:
        name: rails
        state: present
        executable: ${HOME}/.rbenv/shims/gem
        user_install: false # 追記
        version: 5.1.3

これで期待するところにインストールされるようになりました。
一安心一安心

VirtualBox Guest AdditionsをインストールするPlaybook

VirtualBox Guest AdditionsをCentOS公式のBoxにインストールするで書いた手順をPlaybook化。
もう少しマシな方法があるんだろうけど、とりあえずはこれで。

---
- hosts: all
  become: true
  become_user: root
  tasks:
    - name: Get VBoxClient path
      changed_when: false
      shell: command -v VBoxClient
      register: vboxclient_result
    - name: Download VBoxGuestAddition
      get_url:
        url: http://download.virtualbox.org/virtualbox/5.1.26/VBoxGuestAdditions_5.1.26.iso
        force: no
        dest: /root/VBoxGuestAddition.iso
      when: vboxclient_result.stdout == ""
    - name: Mount VBoxGuestAddition directory
      mount:
        path: /mnt
        src: /root/VBoxGuestAddition.iso
        opts: loop
      when: vboxclient_result.stdout == ""
    - name: Install VBoxGuestAddition
      script: /mnt/VBoxLinuxAdditions.run
      when: vboxclient_result.stdout == ""
    - name: Unmount VBoxGuestAddition directory
      mount:
        path: /mnt
        state: absent
      when: vboxclient_result.stdout == ""
    - name: Delete VBoxGuestAddition.iso
      file:
        path: /root/VBoxGuestAddition.iso
        state: absent
      when: vboxclient_result.stdout == ""

Macにdirenvを導入する

仕事では1案件だけ集中して作業することもなく、複数の案件を同時に作業することもあると思います。(私はそう)
そういう時にディレクトリごとに、環境変数を切り替えたいっていう時が多くあると思うのですが、direnv使いましょう。

direnvのインストール

Homebrewユーザーなので、brew installするだけです。

$ brew install direnv

これだけです。
他のインストール方法は、READMEのInstallセクションを読んで下さい。

環境設定

READMEのSetupセクションを見て、必要な設定をしてください。
私の場合は、zshを使っており、direnvがインストールされていない環境でも使用する時が時々あるため、以下のコードを.zshrcに追記します。

if [ "$(command -v direnv)" != "" ]; then
    eval "$(direnv hook zsh)"
fi

direnv edit .というコマンドを使って環境変数を設定するために、.zhsrcにEDITORを変数する。

export EDITOR=$(where vim)

Gitリポジトリの設定

direnvを使って環境変数を設定すると、.envrcというファイルが作成されます。
が、このファイルをリポジトリにコミットするわけにはいかないので、除外しときます。

# direnv
.envrc

zshでfunction definition file not foundの続き

前回の記事なんですが、恐らく解決した。

zshrc内で、compinitを呼び出しているところを書き換えた。

autoload -U compinit; compinit

autoload -U compinit; compinit -d

-dをつけただけですね。
具体的にコードの説明したいけど、そこまで理解が追いついていない。
見たい人は、このあたりを読むといいと思います。

ひとまずこれで。

PowerlineFontのインストール

私も例に漏れず、Powerlineを使っています。
新しいPCにPowerlineFontをインストールするのが面倒だったのですが、シェルを実行するだけでインストール出来るようです。

powerline/fontsというリポジトリがありまして、そこのREADMEに書いてました。

便利な世の中になったもんだ。

zshでfunction definition file not found

新しいPCを渡されたので、それのセットアップ時に出たエラー。

_arguments:451: _vim_files: function definition file not found

antigenインストール後に起きたっぽい。
ここを参考にすると、zcomp系のファイルを削除してzshを起動すればいいらしい。

$ rm -rf ~/.zcomp* ~/.antigen/.zcomp*

後はexec zshを実行するか、iTerm2を再起動するとか。
それぐらい。

と思っていたが、さらにその後zshを起動し直すと同じエラーが発生する。
ふむ。
困ったもんだ

VirtualBox Guest AdditionsをCentOS公式のBoxにインストールする

CentOS公式のBox(Vagrant)だと、Guest Additionsがインストールされていません。
これがインストールされてないと、VirtualBoxの共有フォルダーでマウントすることができません。
今日は、そんな時にどうやってインストールすればいいのかっていう話を。

Guest Additionsをインストールする

Guest Additionsのインストールは、以下の手順に従って行えば良いです。

1. GuestAdditionのisoデータをダウンロード

このページから、適切なバージョンのGuest AdditionsのisoのURLをコピーしてください。
後は、それをwgetやらなんやらでダウンロードします。

$ wget -O VBoxGuestAdditions.iso {isoのURL}

2. isoをマウント

isoの中身をみるため、マウントしましょう。

$ sudo mount -o loop VBoxGuestAdditions.iso /mnt

3. Guest Additionsをインストールする

後はインストール。

$ sudo /mnt/VBoxLinuxAdditions.run

終わったらアンマウントを忘れないこと。
不要になったisoファイルも削除。