これ is 何
題名の通り。GOPATH配下以外のGitコマンドはGopher君が許しません。
Gopher君可愛いよGopher君
今回はShellScriptでの設定の話が多めになります。
Google様は絶対
経緯
GOPATH以下でないlocalのディレクトリで作業していたらdep ensureでうまく依存関係入らなくて詰んだ経験から。
他言語も全てGOPATH/srcで管理して入り人もいるようなので、僕もGoogleさまの犬になるために、$GOPATH配下のディレクトリでしかgit cloneできない仕様に変えてしまうことにした。
Go Oriented.
Goに居ては(ry
動作環境
macOS Mojave バージョン10.42.2
go 1.11.4
zsh
プロセス
1.BashScriptを一から学ぶ
Linux初心者のシェルスクリプト入門 - Qiita
シェルスクリプト(bash):基本的な5つのTips - Qiita
などを参考に。
特にエムスリーさんのこの記事よかった
bashスクリプティング研修の資料を公開します - エムスリーテックブログ
2.gopherコマンドを作る
Goで乱数 - Qiita
本物の golang を... 本物の Gopher を、お見せしますよ。 - Qiita
GitHub - mattn/gol-cmd
を参考に作成。
↓をコンパイルしてgopherコマンドとしてぶち込んだ
main.go
package main
import (
"fmt"
"io"
"math/rand"
"os"
"time"
)
var out io.Writer = os.Stdout
func main() {
fmt.Fprintln(out, "\x1b[2J")
gopherMsg := makeGopherMsg()
for i := 0; i < 75; i++ {
fmt.Fprintf(out, "\x1b[10;%dH\x1bK", i)
fmt.Print(gopherMsg)
time.Sleep(50 * time.Millisecond)
}
}
func makeGopherMsg() string {
rand.Seed(time.Now().UnixNano())
var gopherMsg string
randInt := rand.Intn(4)
switch randInt{
case 1:
gopherMsg = ` ʕ◔ϖ◔ʔ { Google万歳!!!! `
case 2:
gopherMsg = ` ʕ◔ϖ◔ʔ { まだGOPATH以外で消耗してるの? `
case 3:
gopherMsg = ` ʕ◔ϖ◔ʔ { まだGo言語以外で消耗してるの? `
case 4:
gopherMsg = ` ʕ◔ϖ◔ʔ { お腹すいた `
default:
gopherMsg = ` ʕ◔ϖ◔ʔ { まだGo言語以外で消耗してるの? `
}
return gopherMsg
}
乱数でメッセージを生成しています。
作成ソースはこちら
GitHub - takafk9/gopher-cmd: gopher is 流れる
3.gitのaliasを$GOPATH以下以外でgopherコマンドに変更するスクリプトを書く
bashのif文でワイルドカード・正規表現を用いて条件判断をさせる | 俺的備忘録 〜なんかいろいろ〜
シェルスクリプトを書く際に便利なコマンド&基本の覚え書き - Qiita
gopher.sh
#!/bin/sh
if [[ $(pwd) != *$GOPATH* ]]
then
# GOPATH配下以外ならgopher様に怒られろ
# gifで怒る
alias "git=imgcat ~/pictures/gopher.gif"
# 顔文字で怒る
# alias "git=gopher"
else
# GOPATH配下なら正常に戻したい
alias "git=git"
fi
ポイントは$GOPATHを含む場合true返したいってことで
3行目にワイルドカードの記述を採用しているところ。bashでもこんな記述できるんやな、、、、
4.cdコマンドを魔改造して、cdするたびにgopher.shを反映するようにする
.zshrc
# cd魔改造
function gocd(){
\cd $1;
source ~/project/udemy/demo/gopher.sh;
}
alias cd=gocd
bashで複数コマンドのエイリアス - Qiita
上のサイトを参考にcdコマンドを、毎回gopher.shを反映するように魔改造しました。
\cdにしないと無限ループになって悲しくなるので注意
5 imgcatインストールして、表示するgif作る
作成したgopher.shのgitのaliasを、gopherコマンドじゃなくてimgcatコマンドにするよ
imgcat - ターミナル上で画像を表示するコマンド - Qiita
まず、上を参考にimgcatをインストールするよ
無料GIFアニメ作成「AlpacaDouga(アルパカドウガ)」
そして、上のアプリでgifを頑張って加工して反映させた
大変だったこと
- shellscriptで部分一致でtrue返すとかどうやんねん
- cdするたびにスクリプト読み込むってどうすればええんやってなった
- gifカスタマイズ辛い
得られたこと
- bashscriptの基礎知識
- 作業場を間違えそうになるとgopher君が叱ってくれる環境
今後の展望
- インフラのコード化の文脈からしても、shellscriptもっとオベンキョせねば
- imgcatでも何パターンかのgopherくんに怒ってもらいたかったのですが、今後そこの処理を書いていきたい。
結論
go moduleに移行してこんな設定にしない