gin製のアプリケーションをランダムに止める
私はGo言語でapiを実装するときしばしばgin-gonic/gin を利用します. マイクロサービスとかでapiが死んだときの検証は結構たいへんです. なのでapiが死んだ状態を再現すべく, gin製のアプリケーションがランダムに 404 とか 503 をランダムに返せるようにするMiddlewareを作成した. alcoholics カオスモンキーとかみたいな利用用途を考えている.
私はGo言語でapiを実装するときしばしばgin-gonic/gin を利用します. マイクロサービスとかでapiが死んだときの検証は結構たいへんです. なのでapiが死んだ状態を再現すべく, gin製のアプリケーションがランダムに 404 とか 503 をランダムに返せるようにするMiddlewareを作成した. alcoholics カオスモンキーとかみたいな利用用途を考えている.
たとえばこんな感じ. $ go env | grep GOPATH GOPATH="/Users/johndoe/go/1.12.0" この仕様になったのに気がついたのはgoの1.12が出た頃だ. 別にgoのversionごとにGOPATHを分けたいわけではないので $HOME/go にGOPATHを戻そうと思う. goenv/libexec/goenv-execでGOPATHを制御しているようで, GOENV_DISABLE_GOPATH=1 を指定すると以前のようにGOPATHを $HOME/go にすることができる.
1泊2日で鹿児島を旅した. 開聞岳行こうと思ったが思ったより遠かった. 空港から80kmくらいあった. 鹿児島大きくない? というわけで予定を変更して桜島に行った. 桜島って陸続きだけどなんで島なんだって思っていた. もともとはちゃんと島だったらしい. 大正3年の噴火により大隅半島とつながったらしい. 自然の力ってすごいな. そもそも噴火だけで山が育つの想像できない. 桜島から鹿児島市内へはフェリーを利用した. いつか生きているうちに入山規制が解除されて登れるようになったらいいなと思いながら桜島をあとにした. 一日目の宿泊先は霧島高原国民休養地を利用した. 季節が季節ということもありそこまで混み合ってなくキャンプすることができた. テントは例の如くムーンライトテント2型を利用している. 山岳テントとして利用するには重いが今回みたいにレンタカーを利用するときには特に問題はない. ちなみにレンタカーは想像の3倍くらい社用車だった. 加速よくて運転しやすかったが. 旅行感あまりない. クリックで拡大 鹿児島は南国だから温かいだろうと思っていた. 予想は裏切られ普通に寒かった. mont-bellの化繊の#5の寝袋持っていったら辛かった. 良い子は憶測で行動してはいけない. ガスバーナーでお湯沸かしながら暖を取った. テントの中で使ってるけどちゃんと換気はしてるからね. メーカー的にやっちゃダメだけどやるときはちゃんと換気して自己責任だよ. 最初は前室でやってたけど寒すぎて結局室内でやってしまった. クリックで拡大 お湯を沸かしてプラスチックのボトルに入れて湯たんぽにした. やけどしないように着替えの衣類でくるんで寝袋に入れると寝袋のlimit温度を少し下回っても寝れる. そんな感じで夜を明かすことに成功した. 何度もいうが良い子はちゃんと気温を確認しよう! 二日目は韓国岳へ行った. クリックで拡大 8時半から上りはじめて100分ほどで山頂についた. 大浪池手前までは石の階段で大浪池のあとは木道及び木製の階段が多い山だった. 階段は結構臀部の筋肉を使うのでつらい. とは言えども辛いことばかりではない. 韓国岳は景色が素晴らしい. 半分くらい登ると青い大浪池がある. 山頂からは大浪池と桜島がよく見える. 東側には新燃岳と高千穂峰を望むことができる. 時間があったら高千穂峰も登りたかったが今回は時間が不安だったので見送った. 高千穂峰の形いいものだ. 手前の新燃岳も噴気をあげてて地球の力を感じて良い. 成り立ちが火山の山は森林限界が低く景色が開けてるので気持ちいな....
~/.gitconfig に次の内容を記述する $ cat ~/.gitconfig [url "git@github.com:"] insteadOf = https://github.com/ GIT_TERMINAL_PROMPT=1 をつけて go get する $ go get プライベートリポジトリのパッケージ
GoのプロジェクトをDockerで動かすことがあると思う. 知らんけど. まぁきっとあるんだろう. ちなみに私は何度かある. 私がよく使うDockerfileの設定を書いておく. Dockerのimageをbuildするときに気を使うことが一つだけある. それはimageのサイズを小さくすることである. 何も考えずにGoのプロジェクトをbuildすると多分こんな具合だろう. FROM golang:latest WORKDIR /go/src/hogehoge.com/who/bar COPY . . RUN set -e \ && go build -o /bin/bar main.go WORKDIR / RUN set -e \ && rm -rf /go/src CMD ["bar"] 流石にここまで雑に書くことはなかなか無いだろうが, 一応ビルドして掃除までしている. だが小さくするには不十分である. まずGoのDocker imageがそれなりに大きい. 2018-12-12のlatestの段階で774MBある. $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE golang latest df6ac9d1bf64 3 weeks ago 774MB Goはシングルバイナリのビルド物を生成する. なので実行時にコンパイラは必要ない. GoのbaseになってるDocker imageはDebianである. なのでGoのdocker imageでバイナリを生成してDebianのimageにうつしてやればいいじゃんてなるだろう. Debianのlatestのimageは101MBである. 小さいように見えるがまだダイエットが可能である. alpine Linuxというもっと小さいDocker imageが用意されている....
12/7 (金) に長野県がやっているときどきナガノの制度を利用して長野県へ行ってきた. 長野県にはよく行く(今年20回くらい?)のだがときどきナガノを利用するのを忘れて普通に行ってしまうミスをしてしまう. 今回は忘れずに利用することができた. 行った場所は八ヶ岳とかの拠点で有名な茅野(今年5回目くらい)で茅野駅直結のワークラボ八ヶ岳を利用した. ここのコワーキングスペースのいいところは駅から近いのと御飯食べれるところが近い, 広いしwi-fi安定してるし人が少なくて静かだということである. とりあえず良い. 多分また利用する機会があるので良さはその時に書くとして, そこで何を作っていたかと言うとmessage queueを実装していた. queue worker式のシステムを構築するとき全体の処理速度を制限したい時がある. そのときworker側で制限するのは大変である. worker側でやるとするとworker同士が通信して誰かが全体の速度計算してみんなにこれ以上通信しないでねって教える必要がある. それは大変そうだし作りたくない. なのでqueueのほうで制限することにした. 作ったものはvalveMQというもので, 裏側がmysqlになっていてアプリケーション側はスケールすることができる. まだ試験的な実装なので設定項目とかは作り込んではいない. そういえばこれだけは言っておきたい. 八ヶ岳Octetのソフトクリームは絶対食べるべき.
だいぶ書くのが遅くなってしまったが先週の土曜日, つまるところ11/17にヤマノススメでおなじみの三つ峠に登ってきた. 今年の三ツ峠は二回目である. 前回は天気が悪く山頂から何も見えなかったが今回はいい感じに晴れてくれた. コースは登りは三つ峠駅から登り, 下山は河口湖方面へ下った. ヤマノススメの聖地ということもあり三つ峠駅でヤマノススメでお馴染みのキャラクターたちが出迎えてくれた. ヤマノススメではひなたがあおいに富士山をサプライズで見せる計画で登ってたけど三つ峠の駅のホームから富士山見えるし登山道からもいたるところから見えるし『これは隠し通すの無理だわwww』ってなった. これは股のぞきからの富士山である. 結構気温も寒く紅葉はすでに終わったものと思っていたがいい感じに紅葉していた. ヤマノススメであおいちゃんが登ってるとき闇落ちしていたが, 三つ峠の駅の方から三つ峠に登ると結構急登が続く. あおいちゃんは運動苦手な子設定だが実際運動苦手な子が登るとたしかに辛いと思う. 八十八大師のあたりまで行くと急登がほぼ終わるので行く人は頑張ってください. ちなみに日向ぼっこしてるみたいで可愛い. 山頂からは富士山が見えるのはもちろんのこと, 南アルプス, 八ヶ岳などが一望できた. せっかくめっちゃよく見えたのに南アルプス, 八ヶ岳方面の写真を取り忘れた… ちなみに富士山は近いだけあってめちゃくちゃでかい. 写真は山頂からじゃないけど. ヤマノススメでも言及されていたが三つ峠の屏風岩はクライミングの方で有名である. 自分はまだ技術がないので登れないがいずれは屏風岩も挑戦したい.
これは結構前に作ったネタなんだけども, 何らかのアプリケーションをつくったとき設定をjsonだったりyamlで管理することがある. そのとき秘密情報は隠したいみたいな案件があったとする. 設定ファイルをまるごと暗号化してもいいが, jsonとかだとkeyは暗号化せずvalueだけ暗号化しておいたほうが管理上都合がいい時がある. というわけでcryptexというものを作った. cryptexはmap型のvalue部分のみを暗号化するパッケージである. cryptex自体がサポートする暗号化の手法はrsa暗号とAWSのKMSを利用した暗号である. type Encryptor interface を満たす実装をするとほかの暗号方式にも対応が可能であるように実装してある. 暗号化したり暗号化された情報を復号する機能の他にコマンドラインツールを実装したときに使えるように less で内容を確認する機能や任意のエディタを立ち上げ(デフォルトはnano)て編集する機能を提供している. 編集したりlessで確認するときはユーザーに暗号化と復号を意識しなくてもできるようにしている. 質問やバグ報告はissueから受け付けます. 英語でも日本語でも良い.
この間の土日(11/10-11)にかけて剣山から三嶺にかけてを縦走してきた. 立冬を迎えたこともありそれなりに寒かった. とはいえ天気は最高の秋晴れでお盆のとき剣山登ったときと違い最高の景色を見ることができた. クリックで拡大 剣山-白髪避難小屋の道は距離は長いがあまり高低差が少なくあるきやすかった. とはいえ丸石避難小屋と白髪避難小屋の間に一部道が分かりづらい場所は存在したり補助ロープのある場所があるので注意がひつようである. またほとんどが低いクマ笹なので開放的で景色も良い. ただし風邪が強いともろに影響を受けることに為るので注意が必要である. 白髪避難小屋に関しては見た目本当に何もない小屋である. 実際トイレもなにもない. クリックで拡大 自分が到着したときすでに2張りのテントが立っていた. 小屋に到着したとき16時ごろであったがすでに結構寒かった. ちゃんと冬用の装備をしていてよかったと思う. 特に日没後は一気に寒くなった. 日の入りを楽しむかと思って外に出たら凍えるかと思った. 日の入り頃の白髪避難小屋付近の様子 ちなみに宿泊場所なので携帯の電波状況を書いておくとKDDI, docomo, Softbankは小屋の中では使えない. KDDI, docomoは小屋の外なら使えた. 20時頃星をみに外に出た. めっちゃ寒かったがすごくきれいだった.(語彙力がない) 三脚持ってこなかったので上にしか向けれなかったのが悲しい. 次は持ってこよう. クリックで拡大 1日目は21時に就寝した. そとは霜柱ができるくらい寒かったが小屋の中は終始10度くらいで快適であった. 二日目は3:30頃に起床した. 三嶺の山頂で日の出を見るためである. 寝袋だったりマットなどの片付けを終え4:00に出発した. とりあえず寒かった. 月も出てなく暗かったが踏み跡はわかりやすかった. この日の日の出は6:30頃だった. 三嶺の山頂付近は最後の方が鎖場である. 300mくらいで150mくらい標高を上げた. 結構辛かった. 6:00くらいだった間に合わないかと思った. 間に合ってよかった. クリックで拡大...
電話番号の判定をやりたくてつくり始めた. 一応ルールがあるらしい. 細かい解説はqiitaに存在していたので割愛する. とりあえず作り始めたやつはこれ(tel-num-parser). 使い方 参考実装です. 電話番号であるかどうかと種別が取得できます. package main import ( "fmt" tnp "github.com/ieee0824/go-tel-num-parser-jp" ) var telList = map[string]string{ "東京都庁": "03-5321-1111", "東京都庁2": "03(5321)1111", "東京都庁3": "0353211111", "国土交通省": "03-5253-4150", } func main() { for k, v := range telList { fmt.Print(k + ": ") fmt.Println(tnp.IsTelNumber(v)) } }