アルパカ三銃士

〜アルパカに酔いしれる獣たちへ捧げる〜

homebrew を使って gomod 経由で Go のバイナリをインストールする

Go 1.14 では modules がついに production ready な状態になった。

これまで ghq といったツールを使い、GOPATH 直下に自分のワークスペースを作って開発するといった手法とはお別れになるだろう。開発に関してはとても便利になったが、これまで go getgo install で Go のバイナリをリモートからインストールしていたが、 modules を使っているワークスペース上で行うと、プロジェクトに使われる module としてインストールされてしまうため、良い方法はまだ存在しない。

しかし、global install ができるようしたい!といった issue は既に存在するため将来的には可能になるかもしれない。

そんな中、Go Hacker の一人である @FiloSottile 氏が homebrew と gomod を組み合わせて、上記で記述したやりたいことが実現できるツールを開発していた。

続きを読む

Go で AND, OR 条件付きのテキストマッチを行う

AND, OR 条件付きでテキストがマッチしてるか確認する関数を作る。

PerlPHP 等の PCRE をサポートしてる正規表現を使う場合は、こんな感じでいい。

/(?=.*(hello|world))(?=.*(foo|bar))/

regex101.com

こうすると

hello, foo
hello, bar
world, foo
world, bar

といったそれぞれの文字列にマッチする。「hello または worldかつfoo または bar」にマッチするかどうかという関数を作りたい。

それで、この正規表現を組み立てるようなコードを書いてみたけど、Go ではこの (?=re) といった肯定先読みの表現がサポートされておらず、困ってしまった。

そこで、自力でロジックを書くことにしたが...

続きを読む

2019年の仕事周り簡易まとめ

この年は他の会社に入社していたら絶対に経験できないだろうなということを経験できたので本当に良い年だったと思う。優秀な人が多い会社なのでそういった方々と一緒に仕事をすることができたおかげで「どんな考えを持って仕事をすべきか」というのが少しだけ見えた気がした。

もっとあるだろうけど、一旦思い出したことを簡単にリスト化した

続きを読む

知らないであろう @, % シジルのお話

こちらは Perl Advent Calendar 11 日目の記事です。

小ネタです。

社会人になって Perl と触れ合う機会が少なくなりました。Go と PHP を主に書く会社に入社するとこんな感じになります。

しかし、Perl が大好きなので、コードリーディング力を失わないように何か実装するときに必ず一回は CPAN に上がっている Perl のモジュールのロジックを参考にします。また Twitter では Perl 的なコードを読む力を温存するために ThisIsPerl bot をフォローしています。

twitter.com

ある日このコードを読んでいて気づいた事があったのでそれについて記述します。

続きを読む

「ループ・再帰・gotoを使わずワンライナーで FizzBuzz する」

@xtetsuji さんの Qiita の記事を読んで、これ FizzBuzz できそうだなーと思ったのでやってみた。久しぶりなので間違ってそうな気がする。

qiita.com

perl -MMath::BigFloat -e 'Math::BigFloat->accuracy(300-2);print+(1000/Math::BigFloat->new(999**2))->bstr()=~s!(?:^0\.)?(\d{3})!$/=$1+0;(("Fizz")[$/%3].("Buzz")[$/%5]||$/)."\n"!ger;'

結果

続きを読む

GCP にて他プロジェクトの GKE クラスタを使えるようにする

GCP の話。GCP にはプロジェクトという概念があって、普段自分が使ってるプロジェクトではない他のプロジェクト内の GKE を操作できるようにするためのメモ。

  • gcloud auth を service account で行う
  • gcloud config set でプロジェクトをセットする
$ gcloud auth activate-service-account [a-z]+@<PROJECT>.iam.gserviceaccount.com --key-file=<FILE_NAME>.json
$ gcloud config set project <PROJECT>

これで gcloud を使って他プロジェクトを扱うことが可能。

今度は gcloud container コマンドを使って操作したいクラスタへ接続する。まずは list を使って一覧を取得。

$ gcloud container clusters list
NAME               LOCATION         MASTER_VERSION  MASTER_IP       MACHINE_TYPE   NODE_VERSION   NUM_NODES  STATUS

といった感じで表示される。該当のクラスタから credential を取得する。

$ gcloud container clusters get-credentials <CLUSTER_NAME> --zone <LOCATION>

あとは kubectl config get-contexts を実行するなどして切り替えたいコンテキストを選べばいい。

細かいことは下記のリンクにも書かれてる。

cloud.google.com

ZEIT Now v2 を使った Serverless アプリケーションを Go で実装した

TL;DR

実装

最近自分のための Slack workspace を作ったんだけど、一人だとやっぱり寂しいので誰かを招待したいなと思って Slack の招待フォームを作ることにした。

そこで前から気になってた Serverless を開発するためのプラットフォームである ZEIT Now を使ってみることにした。

zeit.co

続きを読む