Blogaomu

WEBアプリケーション開発とその周辺のメモをゆるふわに書いていきます。

GitHub勉強会 in Kanazawa に参加しました #kzrb #jawsug

connpass.com

GitHubのSolution Engineer @ikeike443 氏を迎えて GitHub とは何ぞやというところからCI/CD含めての利用方法、導入時の話までそれぞれお話頂くという勉強会でした。個人としては既にGitHubを使ってソースコードレビューやCircleCI連携など開発フローに組み込まれているという状態なので、他社はどういう感じで利用しているのかなとか実はこんな機能があるよみたいな話を期待して臨みました。

DMM.com Laboさんの南町オフィス。イベントスペースが広くて良い。

GitHubグッズをたくさん持ってきて頂きました。これらはジャンケン大会で生き残った人にプレゼント。ステッカーやGitHub Flavored Markdownチートシートは全員向けに配布されました。ありがとうございます。

私的気になりポイント

ikeike443さんのデモでPR時にCIサーバーと連携してテストが走るよっていう場面があって、masterブランチにマージした結果のテストを走らせているというので、なるほどそういうやり方もあるんだなと驚きました。他にも自分のところではまだやってないなというtweetが上がってました。

Deployments | GitHub Developer Guide

プルリクエストもしくはRefにデプロイイベントをひも付けできるとこの版がいついつデプロイされましたよって言う情報を後からでも参照できるので良さげだなと思いました。

Revertプルリクエスト使っている人意外に少なくてびっくり。あ、やらかしたってときに使ってます。いつも通りのレビュー/マージのフローに乗せられるのが良いですね。使うときはたいてい緊急時なので、いつも通りの手順っていうのがミス少なくできるのです。

やはり他の現場でも起きるものだなあと共感。DMM.com Laboでは毎朝30分のレビュータイムを導入したとのことです。

加藤さんの説明聞いた感じEBのデプロイ機能と同様なことができそうな雰囲気あるなあと思いました。ちゃんと触ってないので分からんけども。 aws.amazon.com

今度からデザイナーや初心者向けの導入ツールとしてGitHub Desktopという選択肢(今まではSourceTreeを推奨してた)も考えてみようかなと思いました。後で使ってみよう。

懇親会

wtnabe氏による乾杯の挨拶。GitHub Tシャツを着てきていました!

こちらはikeike443氏。遠いところありがとうございました!

安定のえん家さん。相変わらず海鮮が美味しいですね。

こちらは2次会。焼き餃子美味しい。

よだれ鶏も美味しい。辛いけど。

kanazawa.rb meetup #60 に参加しました #kzrb

kzrb.doorkeeper.jp

kanazawa.rb が5周年を迎えました!とのことで開幕でノベルティを配っていました。

#kzrb 5周年記念栓抜き

内容はいつも通りのもくもく会に加えて福井で開催の #ふくもく会 とLT発表をテレカンで共有するの二本立てでした。2拠点LTは割と突発的?だったようにも感じられましたがおおむねうまくいってました。(スライドが見えにくかったのは次に活かしたいですね)

もくもくの成果物

www.blogaomu.com

ふとtmux pluginのインストール済みバージョンを知りたいなあと思い、チュートリアルを参考にしながらもくもくと実装&ブログを書いてました。

もう一つ進めていたことは、関わっているプロジェクトでコミットメッセージの先頭に絵文字をつけようという試みが始まったのに伴い、git log コマンドの出力や tig 内での表示で絵文字部分がうまく表示されないことがありこれを解決したいなあといろいろ調べていました。これについては別の記事で解決編を書こうと思います。

LTが割と多かったのでこんな感じでタイムアップ。

懇親会

なぜこの角度で撮影したのかが不明な写真です。今回も割と早めに酔いが回って(あれはビールだったのだろうか?)次の日にも残ってましたw 他のビアガーデンも開拓したいですね〜〜。

次回

GitHubの方を招いての勉強会です!枠も埋まりつつあるので参加表明はお早めに〜 🙋 connpass.com

インストール済みtmux pluginのバージョンをリスト表示したい

手元のPCではtpmを使ってtmux pluginの管理を行っています。

github.com

そういえば各プラグインのバージョンを見たいなあと思ったので、チュートリアルにほんのちょろっと手を加えて各プラグインのHEAD Commitを表示する tmux plugin を作ってみました。

ディレクトリは以下の構成になります。

.
├── my_plugin.tmux
└── scripts
    └── tmux_list_plugins.sh

1 directory, 2 files

tmuxを起動した状態で ./my_plugin.tmux を実行した後に <Bindkey> T を打つと以下のようなリストが表示されます。

tmux-better-mouse-mode        4c686e5 Fixed quotes in bind-key WheelDownPane causing #23.
tmux-continuum                499b6a7 Merge pull request #17 from jarosser06/rm_hardcoded_home
tmux-resurrect                3a31bfb Use 'xargs rm' instead of 'find -delete'
tmux-sessionist               7218406 Accept strings with spaces in a prompt
tmux-yank                     feb9611 Add @override_copy_command to force copy command.
tpm                           c8ac32a Update README.md (#66)

いい感じですね 😄 tpmで管理するならばこれをGitレポジトリにpushして、.tmux.confに定義してあげれば良いです。tmux pluginがどこにインストールされているかというのを今まで知らなかったのですが、 デフォルトでは $HOME/.tmux/plugins/ もしくは .tmux.conf で TMUX_PLUGIN_MANAGER_PATH という変数にセットしたパスになります。 で、tpmプラグインをインストールすると先ほどのパスに各プラグインがgit cloneされます。作ったプラグインでは愚直に(?)プラグインごとに git log を叩いて先頭のコミットを抽出するという作業を行っています。

シェルスクリプトでお手軽に書けるのがいいですね。

kanazawa.rb meetup #59 に参加しました #kzrb

kzrb.doorkeeper.jp

いつもの感じでもくもくしていました。いつもと違うのはメインのメンバーが揃って不在なことで、 @cotton_desu さんが準備や司会業や会計業などもろもろ頑張っていました。ありがとうございます!

今回は特定用途のCSVファイルを取り込んでそれをいい感じにフィルタリングするというようなスクリプトを書いていました。Rubyで。

気付き

CSV converterという仕組みがあり、ファイルを読み込んでCSVフォーマットの文字列をパースするときに特定のルールにマッチしていれば得られた値をNumericやDateの型にしてくれるという便利なものです。ドキュメント見ていて今回初めて気付きました。くわしい記事を見つけたので参照してみてください。

tech-kazuhisa.hatenablog.com

ドキュメントはこちらです。

class CSV (Ruby 2.4.0)

自分のケースではカンマを含む金額のフィールドがありそれを数値として扱いたかったため自作converterを作って処理しました。

require 'csv'

filename = 'foo.csv'
converter = -> (f) { 
  begin
    e = f.encode(CSV::ConverterEncoding)
    e =~ /[\d,]+/ ? Integer(e.gsub(/,/, '')) : f
  rescue
    f
  end
}

CSV.foreach(filename, converters: [converter]) do |row|
  # ...
end

銀行口座の明細CSVファイルを取り込んで項目などでフィルター掛けて畳み込むみたいなことが一応できました。(CSVファイル読み込みさえすればあとはRuby組み込みのメソッドを使ってるだけですが…w) 進捗出せたので良かったです。

# 電気料金の引き落とし額の合計値を求める例
bank_account.parsed_data.select {|d| d.summary =~ /電気/ }.reduce(0) {|sum, d| sum + d.payment }
=> 7291

懇親会

いわゆる昔ながらのビアガーデンという雰囲気。この日は相当暑い日でしたのでビールが進みました😆 食べ放題だったのですが、最初のバッチ(3枚目の写真)で割と満腹になったのは少々誤算ではありましたねw

次回はkzrb 5周年。

kanazawa.rb meetup #58 に参加しました #kzrb #ふくもく会

kzrb.doorkeeper.jp

今回は「開発環境自慢」というテーマでLTする回でした。でもって福井で開催されている「ふくもく会」とのコラボレーション。

fukumoku.connpass.com

テレカンでお互い接続してLTし合うスタイルでした。綿密な設計と準備があって大きなトラブル無くできたのは素晴らしかったです。皆様ありがとうございました。

左側でお互いのLT資料を映し、右側でふくもく会の様子を映す。

Tmuxの話をしました

docs.google.com

開発環境って範囲の大きなものでなかなかテーマを絞り込むのに苦労しましたが、普段から使ってるものであったり自分の事例なんかを話せればいいなと思ったときにTmuxが一番適しているなと思いました。人によって使い方も様々だろうなあ〜ということで、ありきたりかもしれませんがこんな風に使って日々やってるよと言うのが少しでも伝われば嬉しいです。

5分だったのでふわっとした感じですが、プラグインやステータスバーの話は深堀りできそう(やるとは言ってない)。

興味深かったことで、デモをgifにしていたのが良かったという感想をもらいました。画面の切り替え等、動きのあるものを表現したいときってキャプチャを撮ってgifにエクスポートして貼っておくのがお手軽で良いです。GitHubのPull Requestやブログの記事でたまにデモのgif使うのですが、スライドに貼り付けるのは私も初めての試みでした。

感想

エディタ、PC内環境から物理的な作業空間(机、職場環境、カフェなど)、そして道具、筋肉にいたるまで、様々なテーマのLTを聞けてとても有意義でした。質問も飛んだり、わちゃわちゃしたりでふくもく会の皆さんとも楽しく時間を過ごせたのではと思います。あと、meetupページに初コミットしました😆。

懇親会

kanazawa.rb meetup #57 に参加しました #kzrb

kzrb.doorkeeper.jp

なんだか久しぶりだなあと思っていたら5週間振りだったんですね(カレンダー的に1週多かった)。ITビジネスプラザ武蔵のサロンスペースでもくもくする回でした。室内は空調が効いてた(はず)んですが、座りながら太ももの上にPC乗せて作業していたら若干汗ばんでいました😅そんな季節です。

今回は15人と参加者が多く、かつ17歳の若者2人が初参加していて懇親会含めなかなか面白かったです。

プログラミングElixir

引き続き第8章「マップ、キーワードリスト、セット、構造体」〜第10章「コレクションの処理ーーEnumとStream」の序盤まで読んでいました。基本的なデータ型について知りつつ少しづつ抽象化した処理の話も入ってきました。

プログラミングElixir

プログラミングElixir

懇親会

1件目は肉る’s(みーとるずと読む)で豚肉三昧。2件目は四川中華をまったり味わいました。よだれ鶏美味しかった。結構飲んでて何話してたかあんまり覚えてない…w

次回

kzrb.doorkeeper.jp

福井でやってる「ふくもく会」の皆さんと一緒に開発環境自慢 LTというのをやります。いろんな話が聞けそうで面白そう。

kanazawa.rb meetup #56 に参加しました #kzrb

kzrb.doorkeeper.jp

今回は新生活の季節ということでペアプログラミングを通して勉強しようという回でした!

45分 * 3セッションで1セッションごとにペアを変えて、ソースコードも0から作り上げるという形でした。題材はライフゲームです。googleで検索したらライフゲーム動き始めるの面白いw

ここからはペアプロ3セッションを終えて私が感じたことを書いていきます。

よかったこと

  • 自分では気付けないことをペアに指摘してもらえる
  • 単純に他の人はこう考えるのか〜と勉強になった
  • Rubyの便利メソッドを思い出させてくれた
  • AtomとかVSCodeでやるのがペアプロではよさそう
    • とりあえず書き始められて保存ができる
    • 操作に手間取ってる間にも時間が進んでもったいなかった(VimEmacsだと使い慣れてないと厳しい)
  • 他の人の癖が見えて面白い
    • スペースとかインデントを気にする/気にしない
    • 名前のつけ方

悪かったこと

  • 45分でどこをゴールにするかというところで本当はこうしたらいいんじゃないかって思うところをスルーしてしまった
    • 動くことを優先して、自分の中で妥協した部分があった
    • 時間あったら後でリファクタしたい、というようにペアに伝えておくのがよかったのかなあ?
  • 先に方針を決めるのがいいのか、とりあえず書いてみるのがいいのかっていうのがふわっとしたまま進んでしまった
    • ある程度モデルやインターフェース決めて取り掛かるのが良さそうだった
    • どうしましょうかねえと悩み続けてもしょうがないので、何かしらたたき台を書いてみるというのもありかもしれない
  • Ruby結構忘れてる

その他感想

45分続けてペアプロやるとだいぶ疲れることが分かりました(;^ω^) 考えながら喋りながら手を動かし続けるのってなかなか消耗するし、人が見ていると言う緊張感もあったりして精神的にも疲れやすいと思いました。(なので適度に休憩を挟む構成になっているのだろう)

設計で悩ましかったのは、セルの次の状態を確定するのに周りのセルの状態を参照して行うのですが、それをセル自身にやらせるのか、グリッドにやらせるのかというところでした。あと、表示については別のサービスに任せておく(Viewの責務とする)的な考えもあるかもなーと終わってから考えていました。ライフゲームというシンプルな題材ですが、いろいろ方法があって奥深いですねえ。

パターンマッチあれば判定部分がもう少し楽に書けそうっていうのはありました。

懇親会

飲むのと話聞くのに夢中で1件目の写真撮るの忘れてましたw

Instagram

のどぐろ茶漬