2019/08/20

hub コマンドの user 設定を変更する

hub というコマンドがあります。
GitHub に関連したコマンドが追加された git の wrapper です。
例えば
  • $ hub clone neovim/neovim
とすると
  • $ git clone git@github.com:neovim/neovim.git
相当の事をしてくれます。
git の wrapper になってるので、 hub だけで全てを済ませる派の人がいるかもしれません。


環境

  • OS: macOS Mojave 10.14.6
  • Homebrew: 2.1.10
  • Homebrew/homebrew-core:  (git revision ea34; last commit 2019-08-20)
  • hub: version 2.12.3
  • git: version 2.23.0


設定を変更するきっかけ

  • $ hub browse tmux/tmux
    • とすると tmux/tmux をブラウザで開いてくれます。
  • $ hub browse hoge
  • $ git config --list
    • で git の設定を確認しても 'atton-' は存在しない。
    • むしろ github.user=atton になってるくらい。
    • hub が git の wrapper になってる事のデメリットがちょっとあって
  • $ hub config --list
    • としても git config --list の時と同じ内容が出てくる。
    • つまり hub 経由で config を update しても git の config が変更されそう。
ということで 'atton-' を設定している部分を探してみる。


設定箇所探し + 設定

  • $ hub --help
    • hub と git の help が出る
    • hub 部分に config とか setting とかの項目は無い
  • $ man hub
    • config で search するとありました。 
    • どうやら $HOME/.config/hub に書かれているようです。
    • 編集すると 'user: atton-' になっていたので 'user: atton' に修正。
  • $ hub browse dot_files


おまけ

ちなみに私が良く使うコマンドは
  • $ hub browse
です。
current directory の repository の github ページがブラウザで開きます。
あとは hub clone くらい……?

実際 hub をあまり使わないのは
  • hub が無い環境で作業することもある
  • wrapper が隠してくれているオプションとかに「気付かずに助けられている」のは勘弁
とかの理由があります。

なので、個人的にはなるべく git を使うようにしています。
もちろん hub の方が便利な時は hub を使います。

2019/08/13

nodenv を使って複数のバージョンの Node.js を管理する

プロジェクト毎に指定の Node.js のバージョンがあったり、常に最新の Node.js を使いたかったりすると、Homebrew だけで管理するのは面倒になってきます。

今回は nodenv を使って Node.js の環境を作ろうと思います。
ちなみに私は Ruby では rvm より rbenv 派。
なので nvm よりは nodenv かな、と。

環境

  • OS: macOS Mojave 10.14.6
  • zsh: 5.7.1
  • Homebrew: 2.1.9
  • Homebrew/homebrew-core (git revision 2548c; last commit 2019-08-11)
  • nodenv: 1.3.0
  • node-build: 4.6.3


インストール

  • $ brew install nodenv
  • $ nodenv init
    • eval "$(nodenv init -)"
    • を .zshrc に追加せよ、と言ってきますので追記
  • $ nodenv install 12.8.0
    • とかで好きなバージョンを指定
  • $ nodenv global 12.8.0
    • とかで通常使用するバージョンを指定できます。
  • $ nodenv local 12.7.0
    • とかで特定ディレクトリの下で使用するバージョンを指定します。
    • 具体的には .node-version というファイルが作られて、そこにバージョンが書かれる。


nodenv init をちょっと追ってみる

ちなみに zsh 上で
  • $ nodenv init -
とすると


のような設定がされることが分かります。つまり、
  • executables がある PATH を追加する
  • NODENV_SHELL の設定
  • 補完スクリプトを source
  • nodenv rehash (executables の再配置)
  • nodenv の wrapper
    • rehash と shell の両コマンドは特別扱い(eval する感じ)みたいですね
    • 興味がある人はさらに読んでみても良いかと思います。

nodenv init と shell 指定

rbenv を設定していた時に見つけたのですが、特定の shell であることを指定することもできます。
具体的には $SHELL が zsh の状態でも
  • $ nodenv init - bash
とすると

のような、bash 向けの設定が生成されます。
nodenv init - zsh と具体的に違うのは NODENV_SHELL と補完スクリプトの場所くらい。
zsh で bash の設定を読み込むなんてことはほぼ無いと思うので、 nodenv init - で問題無いと思います。


nodenv rehash

ちなみに zshrc に nodenv init - が記述される訳ですから、シェルを立ち上げる度に nodenv init - が実行されます。
気持ち程度の問題だとは思いますが、 rehash を省略するオプションがあって
  • $ nodenv init - --no-rehash zsh
とすると nodenv rehash が実行されません。

とはいえ普通はこのオプションのある無しで実行時間はほとんど変わらないです。
大量に package を入れたバージョンから新バージョンに上がった直後とかなら rehash にコストがかかるかも? 程度

とりあえず、私は .zprofile には rehash 無しの init script を書いてます。
それで、npm install -g とかしたら手で nodenv rehash を打つ、という運用をしています。

2019/06/03

utf8proc が 2.3 から East Asian Ambiguous の文字幅を 2 と判定するようになった

Homebrew でインストールできる tmux は文字幅判定の方法をいくつか持っています。
その中に utf8proc というソフトウェアに任せる、という方法があります。
しかし、その utf8proc は East Asian Ambiguous の幅を固定で 1 にするよう実装していました。
なので、自分用に patch を当てた formula を作ったりして対応していました。

ですが、utf8proc 2.3 から East Asian Ambiguous を 2 と判定する用になりました。
とりあえず自分が使っている patched 2.8 な tmux では問題無さそうなので公式の utf8proc を使うようにします。

蛇足
本当は LC_CTYPE を見て動的に判定する、という実装が理想っぽいですが流石にそこまではしてもらえないようです。

2019/02/20

zsh で c flag を指定すると .zshrc が読み込まれない

.zshrc に定義している function f を zsh -c 'f' 等で実行したいが、 f が無いとエラーが発生する。
なお、Terminal.app から起動した zsh では f は実行可能。


結論

function を .zshrc ではなく .zprofile に書いて zsh -l -c 'f' とする。(もしくは zsh -lc 'f')


zsh の -l option について

-l option は LOGIN option (man zshoptions)で、login shell として zsh を起動する。
何も指定しない場合と異なり、設定ファイルをいくつか読み込む。その中に .zprofile が含まれている。


.zprofile と .zshrc の読み込まれるタイミング

  • .zprofile: login 時に読み込まれる
  • .zshrc: terminal session が発生した時に読み込まれる
との事。つまり、 zsh -c では .zprofile も .zshrc も読み込まれない。
そこに -l を追加して .zprofile が読み込まれるようにする。そこに function を書けば良い。


環境

  • OS: macOS Sierra 10.12.6
  • zsh: 5.7.1 (x86_64-apple-darwin16.7.0)

2019/01/23

EastAsianAmbiguous の幅を2に固定した utf8proc のバージョンを 2.2.0 に上げた

さて、今私が使っている tmux は

ようにしています。
が、 utf8proc 側の更新は何気に初ですね。


How to version up

brew で tap 済みなら
  • $ brew upgrade
で終わりです。丁寧に再インストールするのなら
  • $ brew uninstall utf8proc
  • $ brew install atton/customs/utf8proc
でしょうか。便利。


脱線: 楽をするための苦労の話

brew で install できるようにするまでで一番面倒だったのが環境構築。
なのですが、関連ファイルの生成は結構面倒。
www.unicode.org から Unicode の定義ファイルを落としてきてスクリプトで処理とかしているので。
スクリプトには ruby とか julia とか使われてるので微妙に mac の上に作るのはダルい。
今回は docker で fedora 28 の上に使い捨ての環境を作って解決。

fedora 29 だと julia が新しすぎてダメとか、CentOS7 にはデフォルトで julia が無かったりとか、寄り道はいろいろ。
最終的には fedora 28 の上に call-by-need で環境を作って patch を cherry-pick して make update をかけて終了。
brew の formula 回りは tmux で何度も触ってるので特筆すべきことは発生せず。
途中であった謎現象としては www.unicode.org 自体が落っこちていて make update が上手くくいかない事がありました。
何度も make してスパム判定されたとかなのかもしれない。