VSCode用のgoaのコードスニペットを作ってみた

昨日行われたgoa勉強会 in 六本木一丁目 - connpassに参加するついでに、 以前作っていたVSCode用のgoaのコードスニペットの紹介を飛び込みLTで行ってきた。

資料

LTの資料はこちら。

goaのdesignをラクに書く

コードスニペットこちら。

vscode goa snippets

実際に動いているところをキャプチャしたやつ。

https://gist.githubusercontent.com/kawaken/f33592f483e21f3e38d66b63b6fb76ec/raw/6c9d9ed7f276c54c70972ca51494c212bfa0981e/goa-snippets.gif

飛び込みLTは初めてだったせいかめっちゃ手が震えてしまって、うまくタイピングできない感じだったけど、Twitterの方では反応もらえてたので良かった。

スニペットについて

スニペット自体は簡単に書けるので別に難しい作業ではないんだけど、同じDSLでも引数が異なるものもあるので、組み合わせるとけっこう膨大になると思う。 なので、必要最小限って感じで上手くまとめようと思って書き始めたものの、手が止まっていた。

例えば、Routingは揃ってない。昨日LTでいるなぁと思ったのでGETだけ追加した。

誰かやってくれたらそれでも良いんだけど、昨日LTした反応が素直に嬉しかったし、VSCode自体はすごく気に入っているので、 マーケットプレイスに上げるところも視野にがんばってみようかなとか思った。

go get で permission denied が発生する

goのバージョンアップが上手くできてなかったので発生した。

事象

go get でパッケージをインストールしようとすると、以下のようなエラーが起きる。

$ go get -u github.com/kawaken/chatwork-cli
go install runtime/internal/atomic: open /usr/local/go/pkg/linux_amd64/runtime/internal/atomic.a: permission denied

どうやら古いバージョンを移動や削除せずに、tarで展開してしまったのが良くなかったらしい。

ちゃんとバージョンアップする

現行のバージョンを確認。

$ go version
go version go1.7.1 linux/amd64

既存のgoをバージョン付きのパスに変更する。残す必要がなければ削除して良い。

$ sudo mv /usr/local/go /usr/local/$(go version | awk '{print $3}')
$ ls -d1 /usr/local/go*
/usr/local/go1.7.1/

新しいバージョンのgoをインストールする。

# cd /usr/local/src/
# wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
# tar -C /usr/local -xf go1.8.3.linux-amd64.tar.gz
# go version
go version go1.8.3 linux/amd64

slackのstatusを更新するやつを利用してみた

こちらの記事を読んで早速試してみた。

GoogleカレンダーとSlackステータスをワンクリックで連携できるアプリをGoogle Apps Scriptで書いた - 詩と創作・思索のひろば

基本的にはそのまま使えるけど、少し修正した。 GASを使ってSlackと連携するためのやり方が勉強になった。

プライベート予定をスルーする

そもそも会社のカレンダーで同僚に公開できないような予定を管理するのはどうなん?というのはあるものの、まぁだからといって表示していいものでもないのも確かにそうなので。

EventのVisibilityがPRIVATEの時にはスルーするようにした。

他人の出退勤の予定をスルーする

社内の運用で、特に出退勤に関する予定をチームメンバーにも登録するというのが定着している。例えば、

  • 16時早退(山田)
  • 午前休: 佐藤
  • 田中(2h休)

といったタイトルで登録されている。

終日予定で登録されていれば良いのだけど、休んでいる時間帯で登録する人もいる。その時間になると、slackのstatusがみんな同じ他人の休みを表示してしまって使い物にならない。

他人から登録された予定を弾いたら良いかと思ったが、ミーティングの予定は主催者が参加者をゲストとして登録することがある。仕方ないので、タイトルのキーワードマッチで弾くようにした。

let IGNORED_COLLEAGUE_EVENT_REGEX = /^[出帰退]社|早退|休み|時間休|[hH]休|半休|午[前後]休|健康診断|外出|移動$/;

その他

登録の都合上予定がかぶることがあって、そういうときにどちらかしか表示されないようになっているので、そこをどうにかしたい。あとは、勤怠情報をつぶやく専用チャンネルがあるので、そこに「今日は Aさん がおやすみです」とか投稿できるようにしたい。

修正したやつはこちら。

https://github.com/motemen/gas-google-calendar-to-slack-status-farm/compare/master…kawaken:add-conditions-to-ignore

読んだ: Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

最近Java をやることになったが、久しぶりなので改めて学習しようと思い、読んでみた。

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

Javaの本は沢山あるんだけど、最新のバージョンを踏まえた入門系の書籍は書店では見つけられなくて、Twitterで見かけたこの本はJava8にも対応しているようだったので、購入した。

入門なので、言語の基本的な型などの話から、ビルドやテストの話まで幅広く記述されている。全く知らないわけでもないので、前半はサラッと読んで後半をじっくりと読んだ。

所々で「今までこうだったけど、今はこうだよ」という説明が丁寧にされていて、自分の知識をアップデートできたし、とても良かった。

読んだ: みんなのGo

かいつまんで読んでたやつを改めてちゃんと読んだ。

みんなのGo言語【現場で使える実践テクニック】

みんなのGo言語【現場で使える実践テクニック】

Goでプログラム書くときに、こう言う時はどういう実装が良いのかな?と悩むことがあるけど、そういう時に参考にできる実践的な書籍だと思う。

個人的にはCLIのツールを作ったりすることが多いので、その辺が参考になった。

あと、テストのところとか。

必要なところをかいつまんで読めるので、Tour of Goやった後とかで、実際にやりたいことがあれば参考にしたら良さそう。

読んだ: スタンフォード式最高の睡眠

最近、眠りが浅いらしく夜中に起きてそのまま眠れないということが度々ある。そんな時に店頭で見かけたので買ってみた。

スタンフォード式 最高の睡眠

スタンフォード式 最高の睡眠

色々と最新の研究事例などをもとに説明がされているのだけど、結局対策としては俗説で聞いたことがあることだったりして、結局そうなのかよ…という残念な感じが拭えない。

例えば、よく聞く睡眠時間を90分の倍数にしようという俗説に意味はないと言いつつも、最初の90分を大事にしようというところとか。

なぜそうなのか、ということがわかったのは良いが、俗説にあるようなことでもできて入れば、こんな苦労はしてないわけで…。

期待外れ。

Goでプログラミング未経験の新入社員の研修をやった

今年の6月に配属されてそれから10ヶ月、3月末まで新入社員の研修を行った。

新入社員(以下Aさん)はプログラミング未経験ということで、どんな言語で研修を進めるか悩んが、これからチームとしてはGoでやって行こうという状況だったので、Goで研修を行うことにした。

以下散文。

プログラミング未経験向けのGoの情報は多くない

まずは参考になる書籍を探してみた。もともとGoの書籍は少ない上に、既存の言語を経験したことがある人を対象とした書籍ばかりなので、その辺りがなかなか悩ましかった。

とりあえず店頭で中身を眺めながら、スターティングGoにした。とりあえずこの書籍を中心に基本的なことを学んでもらうことにして、写経をしつつわからないところをフォローするというスタイルで始めた。

あとは、過去に自分が作っていたGoの基本的なハマりどころを確認するための問題集をやってもらうことにした。

最初はそんな感じで進めた。

カレンダーを扱うライブラリを作る

あるプロジェクトで必要だったので、カレンダーを扱うライブラリを作ってもらうことにした。

もともとRubyの実装があったので、それを元に作ってもらうようにお願いしていたが、自分も忙しかったりしてほとんどフォローできてなかったので、正直モチベーションは高くなかったと思う。

ちょっとしたウェブプリケーションを作る

一通り書籍の学習ができたタイミングで、グループ内で使用するための社内ツール的な位置づけで、ウェブプリケーションを作ってもらうことにした。

ここではDB周りの学習もするため、ER図書いたり、SQLを頑張って書くということもやってもらった。

LINEのボットを作る

年明けあたりからLINEのボットを作ることにして、天気予報ボットみたいなものを作ってもらった。

ボットは実装したら実際に動かして確認のレスポンスが得やすい、というところが研修には向いているのかもしれない。

多分この辺りから本人も楽しんでプログラミングができるようになってきたんじゃないかなと思う。

もともとLINEのボットはやるつもりだったけど、もっと早く着手してたら楽しめたかなぁと思う。ここは研修の見通しが良くなかった反省点。

大阪で行われていたLINEのハッカソンにも参加したりとなかなかアクティブに動いてもらっていた感じ。

社内の情報共有

社内の情報共有用のサイトに、Goのスライスについてきちんと調べてもらって記事を書いてもらった。

他にもポインタの話とか、よく調べてくれてまとめてくれた感じ。

自分が教えたこと

まぁそんな感じで10カ月を過ごしてもらった。自分ができることはあまり多くなくて「プログラマかくあるべき」みたいな話が多かったと思う。

Goって初心者向きなのか?

自分としては向いていたと思う。

Goは愚直に書くことが許されるというか、洗礼された書き方を追求しなくて良いというか、やってることは一緒だけどコードの書き方がイケテナイのでダメみたいなこともあまりない。

そういう観点で素人も玄人も近しいコードになると思っている。

なので、最終的にAさんが書いていたコードは設計上の問題を除くと、特にどうこういうつもりもないし、それで良いんだというのがGoの良いところだと思っている。

とはいえ、Goで飯が食っていけるのか?

これについてはちょっと確信が持てない。東京にいるならまだしも、大阪だとGoやってれば食いっぱぐれないみたいな状況も想像できない。

わかんないけど、転職したいんですけど〜みたいな状況になるとGoだけでは厳しいかもしれない。

本人もそういうあたりは理解していると思うので、うまく自分のスキルを磨いてもらえればと思う。

終わりに

特にまとめはないんだけど、そういう環境でGo勉強してたプログラミング未経験者もいたよって話です。