シェルで特定の開発ディレクトリ以下に移動すると自動的に設定ファイルで指定された環境変数を設定し、そのディレクトリから別のディレクトリに移動すると戻してくれる direnv が便利。
https://github.com/zimbatm/direnv
Go で開発するのに GOPATH と bin への PATH 追加が面倒だったので導入してみた。
git clone https://github.com/zimbatm/direnv cd direnv make build cp -a direnv $HOME/local/bin
なお direnv は Go で書かれているのでソースからビルドするには Go の開発環境が必要。
.bashrc に以下を追加。
if command -v direnv > /dev/null; then eval "$(direnv hook bash)" fi
その他のシェルでの設定は https://github.com/zimbatm/direnv 参照。
$ cd project_dir $ export EDITOR=emacsclient # 次のコマンドで開くエディタ $ direnv edit . .envrc の編集用にエディタが開くので layout go と入力して保存。
後は Bash でこのディレクトリ以下(サブディレクトリも含む)に移動するとこの .envrc のあるディレクトリが GOPATH に追加され、また bin ディレクトリが PATH に追加される。便利。
なお direnv edit . しないで直接 .envrc を作った場合は、別途 direnv allow . を実行してこの .envrc を使うことを明示的に許可する必要がある。許可したかどうかは ~/.config/direnv/allow/* に保存される(freedesktop.org の XDG Base Directory Specification っぽくなっているので XDG_CONFIG_HOME 環境変数があれば ~/.config ではなくてその下に保存される)。
その他標準で
などが用意されている。また
PATH_add bin
のようにして PATH への追加も簡単。
その他コマンドの実行も可能なので開発以外にもいろいろ便利に使える。
今日も朝から YAPC::Asia Tokyo 2015 の2日目です。まずは一杯の無限オレンジジュースからスタート。最初はトラックCから。 C の部屋に入れたのはこれが初めてです。なるほど狭め。
言語の特性にあわせて様々なプログラミング言語を活用しているというトーク。サーバサイドで使われているということでちょっと Scala が気になりますが、やはりここでもコンパイルが遅いという話が出ていました。
Go は小さなシングルバイナリを作れるというところがやはり大きな利点。あとはやっぱり Perl はビルドなどのためのツールを作るのに便利だよねという話でした。
Ricardo Signes 氏のトークを聞くのは YAPC::Asia Tokyo 2013 1日目の時(記事)以来です。
前回同様 Perl の機能追加・削除についての話が中心。直観に反するような挙動が修正されるというところは言語としての完成度があがって良いなと。一方、さらに experimental として追加される文法は、ますます変態的になっていくなという印象もありました。
今日は一人でぶらりとTFTビルへ。
リファクタリングを行う理由の中で「Developer Education」という話があって、理解のためにリファクタリングをしてもらうのも良いと言っていて、ああそうだよなと思いました。リファクタリングの素養はあるけれども、チームのコードは知らないという状態の時にはいいなと思います。
あとは、基本的には Martin Fowler の「リファクタリング」を読んでいれば OK な感じです。
ちょっとうつらうつらしてました。あと「カレのヒゲ」はマイクにこすれるので通訳的に要注意のようでした。
Perl 6 における 並列・並行・非同期処理の話。 Perl 6 では言語レベルでこのあたりのサポートがしっかり入ってくるという印象でした。昨日聞いたトークといい、やはり Perl 6 が気になってきました。
Go の各種ツールを使って時間やメモリを消費している部分を見つけてどんどん削っていく様子をライブで実演してくれました。なるほど、ちょっとしたコードでも工夫すると劇的に最適化できるみたいです。
実演中アセンブラコードをチェックしているところや、データが 1 word から 3 words で管理されているという説明などをみて、ああやっぱり Go は C/C++ 的なマシンへの近さやコンパクトさがあるよなとあらためて感じました。
YAPC::Asia Tokyo 最後のトーク(になるかもしれない)となった LT は Kuniwak (@orga_chem) 氏の「Vim script性的解析の光と闇」でした。
CONBU さんが LT の時間内で設営・撤収デモまで実演していて、その素早さに驚嘆でした。まさに神業のレベルです。会期中お世話になりました。
今年はキーノートが無いので LT が終わるとクロージングです。
今年の参加者はなんと約2,130人。今の形での開催は最後と言われている YAPC::Asia は今後どうなっていくのでしょうか。 YAPC::Asia Tokyo 2015 は「The End.」のスライドで幕を閉じました。皆さんお疲れさまでした。
去年の YAPC::Asia Tokyo 2014 では Go 言語の勢いを感じ、その後ちょっとした規模ですが業務ツール開発に使ってみたりしました。
YAPC::Asia Tokyo 2015 では近年になく Perl のトークを見た気がします。しかも今回は Perl 6 のコードををよく見た気がするのは気のせいでしょうか。今回はこれを機に Perl 6 にチャレンジしていきたいと思います。
スクラムマスターから「ワーキングアグリーメント(working agreements)を作ってみませんか?」と言われたのでチームでトライしてみました。これ、作るプロセス自体が楽しいですね。チームの一体感が高まるし、チームの自己組織化につながるなと感じました。
組織におけるルールは「誰かが作ってみんなが守るもの」というものが多いのですが、チームで合意して作るというのが自己組織化チームでは重要なんですね。
チームで作ったルールを書き出して明文化することでチームメンバ間の思い違いを無くすことができます。また暗黙的なルールは改善しにくいけれど、見える化すると改善の対象とすることができるというメリットもあるとのことです。なるほど。
ちなみにアジャイルサムライにワーキングアグリーメントなんてあったっけかなと思って調べてみたら、同書では「チームの約束 (working agreements)」として「チームが大事にすること (shared values)」とともに書かれていました。
[ スクラム ]
ぼっち Slack ワークスペースに思い浮かんだことをつぶやいておくことにしたのでターミナルや Alfred for Mac からもさくっと投稿できるように、slackcat を入れてみました。
slack は Go で書かれているのでさくっとビルドできますが Homebrew でもインストールできます。
brew install slackcat
あとは最初に
slackcat --configure
と --configure オプション付きで slaccat を1回実行し認証を済ませます。認証が済めば以下のように標準入力から slackcat にテキストを渡すことで Slack に投稿できます。
echo 'hello' | slackcat --channel timeline --stream
便利。
今日プリンタで印刷をしようとしたらプリンタとうまく通信できていなくて、そういえば SSH も数日前から接続できないことがあって、あれっと思ったら App Store にもうまくつながらなかったり。考えられるのはノートン セキュリティを再インストールしたことぐらい。ファイアウォールの設定も見てみたけれど問題なさそうなので、このタイミングで macOS High Sierra に上げておくことにしました。
macOS Sierra 10.12.6 から macOS High Sierra 10.13.6 へのアップグレードになります。アップグレードした結果、印刷できるようになったし SSH 問題も解決したので良しとします。
ScanSnap Manager は要アップデート。
それから iTerm2 で新しいウィンドウを開くと
failed MSpanList_Insert 0x2d4000 0x3abc7c6fbf83 0x0 fatal error: MSpanList_Insert runtime stack: runtime.throw(0x277a4b) /usr/local/go/src/runtime/panic.go:491 +0xad fp=0x7ffeefbff550 sp=0x7ffeefbff520 runtime.MSpanList_Insert(0x296e48, 0x2d4000) /usr/local/go/src/runtime/mheap.c:692 +0x8f fp=0x7ffeefbff578 sp=0x7ffeefbff550 以下続く
とエラーを吐くようになりました。.bashrc の中で読んでいる direnv が出していたので自前でビルドしていたのを捨てて Homebrew で再インストール。
brew install direnv
途中
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun Error: Failure while executing; `git config --local --replace-all homebrew.private true` exited with 1.
と出て git が動かなくなってしまっていることに気がついたので、こちらは
xcode-select --install
で対応。
MacBook Pro (Retina, 15-inch, Mid 2014) から MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports) にリプレース。
今はデータをほぼ Google ドライブや Dropbox に置いているので、やるのは macOS の設定と Mac アプリケーションのインストール & 設定がほとんど。今は自分でビルドしていれているものもほとんど無いので楽だ。
Mac アプリケーションは先に入れた方が捗るもの (Google Chrome・Google 日本語入力・Dropbox・Google ドライブや Karabiner-Eements・Alfred など)があるので、入れたい順序のグラフを Graphviz で書きながら進めていった。
プリンタと Chrome 拡張機能の個別設定以外は概ね移行完了。数日に分けてやる感じかなと思っていたけれど、夕方に仕事の気分切り替え的に始めたら一気にやってしまった。
あ Emacs まだ入れてないなー。
$ cd ~/local $ git clone https://github.com/tpope/rumember.git $ GEM_HOME=$HOME/local/rumember gem install launchy
~/.rtm.yml は前のものをコピー。
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
nDiki は1999年1月に始めたコンピュータ日誌を前身とする Naney の Web 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。
※内容は個人的見解であり所属組織とは関係ありません。