Windows に YukiTask を導入する(メモ)

このツイート


を見て便利そうだと思ったので,Windows+MinGWに YukiTask を導入してみた.幾つかハマりそうになったので記念にメモを残す.MinGWを前提とする.Cygwinでもうまくいくと思うが試していない.

■rubyの準備(1)
YukiTaskを動かすために必要なのでインストールした.
Rubyのインストール で調べた上で ruby2.1.6 をインストールした.

■rubyの準備(2)
(1/1): ~/.bashrcに次を追加:

export PATH=$PATH:/c/Ruby21/bin

これにより,MinGWシェルからrubyが見えるようになる.

(2/2): C:\MinGW\msys\1.0\etc\fstab に次を追加:

c:/Ruby21/bin/ruby  /usr/bin/ruby

これにより,シェルスクリプト中に置かれた /usr/bin/ruby が c:/Ruby21/bin/ruby を参照するようになる.

■YukiTask の導入(1)
YukiTask Setup に書いてあることを大体そのままやればよい:

$ mingw-get install msys-wget   #wget を慌ててインストールしている様子
$ mkdir YukiTaskBuild; cd YukiTaskBuild
$ wget --no-check-certificate https://github.com/hyuki0000/yukitask/archive/master.zip
$ mv master master.zip
$ unzip master.zip
$ cd yukitask-master
$ mv yukitask ~

最後のコマンドを実行すると yukitask というディレクトリがホーム直下に移動するが,各自の好みの場所に置けば良い(はず).

■YukiTaskの導入(2)
~/.bashrc の下の方に次を追加する:

export EDITOR=/c/Users/FooBarBaz/AppData/Local/atom/app-0.199.0/atom.exe
PATH=~/yukitask:$PATH
source ~/yukitask/command_aliases
source ~/yukitask/here_aliases

最後の三行ではyukitask というディレクトリがホーム直下にあることを前提としているので,それ以外の場所に置いた人は適宜修正する必要がある.
自分はvimが苦手なので上のサンプルではエディタにatomを指定した.キーボードから手を離したくないならばvimとかそんな感じのエディタを指定すれば良い.

■pbcopy 対策(1)
これで一応動くはずと思って YukiTask TODO のサンプルを実行しようとしたら,YukiTaskの here コマンドで pbcopy にまつわるエラーに遭遇した:「’pbcopy’ は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」だそうだ.
調べてみると,pbcopy はMacにしかないコマンドらしい.色々な work-around を調べてみたが,一番カンタンそうなのは go 製のツールで代用するというものだった:Bye Bye Moore/クロスプラットフォームな環境でpbcopy | pbpasteをしたいときはgocopy | gopasteを使う
いままで go を使ったことがなかったが,この機会にインストールした.go を使うためにはパスを通すだけでなく,環境変数GOPATHを設定しないといけないらしい.とにかく動けばいいのでホーム直下に go ディレクトリを作っておくことにした.go へのパスとGOPATHの設定は ~/.bashrc に次のように書いた:

export PATH=$PATH:/c/Go/bin
export GOPATH=~/go

■pbcopy 対策(2)
goのことは全く理解していないが,上で紹介したページに書いてあるとおり

$ go get github.com/atotto/clipboard
$ go get github.com/atotto/clipboard/cmd/gopaste
$ go get github.com/atotto/clipboard/cmd/gocopy
$ exec -l $SHELL

とやれば gocopy.exe が手に入る.$GOPATH/bin にできた gocopy.exe を pbcopy.exe にリネームしておく.$GOPATH/bin にもパスを通しておく:

export PATH=$PATH:$GOPATH/bin

以上の対策で,YukiTaskの here コマンドがpbcopyでコケなくなった.

■YukiTaskを用いた開発の流れ
Haskellの教科書やチュートリアルのサンプルをどんどん書きながら実行するという事を考えてみる.(結城さんの元のツイートがHaskell関連だったのと,私自身の関心からこう書いているが,もちろんどんな言語で使ってもよい.)

1.適当なところにプロジェクトディレクトリを掘る.
たとえば

$ cd
$ mkdir haskell-proj; cd haskell-proj

のようにすればよい.

2.YukiTask の here コマンドでカレントディレクトリにプロジェクト名を割り当てる.

$ here haskell

これによって haskell というコマンドが作られる.YukiTaskを使うつもりでないときも以降は haskell と打っただけでこのコマンドが起動してしまうということでもある.うっかりヤバい名前のコマンドを作ってしまった場合は ~/yukitask/here_aliases をエディタで編集してヤバい名前のコマンド登録を削除すればよい.

3.haskellプロジェクトでの作業を始める

$ cd
$ haskell
/usr/home/FooBarBaz/haskell-proj ~
cat: $HOME/yukitask/TODO: No such file or directory #気にしないことにする
$ pwd
/usr/home/FooBarBaz/haskell-proj

haskell というプロジェクトに対応するディレクトリに移動していることがわかる.

4.適当な名前の.hsファイルを作り,makefileに登録する

$ touch  aaa.hs
$ m

~/.bashrc で定義した環境変数EDITORに対応するエディタが起動して makefile を編集するようになる.たったいま作ったファイルに合わせて e ターゲットに aaa.hs が対応するようにする:

e:
		$(EDITOR) aaa.hs

こうすると,e コマンドで aaa.hs が編集されるようになる.

5.e コマンドと m コマンドを繰り返しながら言語チュートリアルをこなしてゆく
e コマンドで aaa.hs が編集できる.編集が終わったら runghc aaa.hs などして遊ぶ.aaa.hs での遊びが終わったら touch bbb.hs だとか cp aaa.hs ccc.hs のようにして新しいファイルを作り,m コマンドで makefile の編集に入り,eターゲットを書き換えてしまう.

...というような事を繰り返していく.ここでは触れなかったが (YukiTaskの)mk コマンドもうまく使うと良いのかもしれない.

[追記]
本記事のことを結城さんにご紹介したところ,お返事をいただけた:


Makefile変数の定義が複数あると最後の定義で上書きされることを利用するのは思いつかなかった.