Hatena::ブログ(Diary)

ITエンジニアとして生きる このページをアンテナに追加 RSSフィード Twitter

2016-04-26

ゆるふわ.rb in 大洲 〜Rails 5 の新機能を探せ!〜 を開催しました

4/23(土) にゆるふわ.rb を開催しました。
今回は Rails 5 の新機能についてみなさんとワイガヤしました。
ゆるふわ.rb in 大洲 〜Rails 5 の新機能を探せ!〜 - ゆるふわ.rb | Doorkeeper

だらっとスタート


いつも通りのウェルカムドリンク(あおさの味噌汁)を振る舞いながら、なんとなく揃ったかな〜というタイミングでスタート。遠くは香川から(小林さん、ありがとう!)10人弱のみなさんにお集まりいただきました。

f:id:ogin_s57:20160423130129j:image:w640


Rails 5 の新機能のご紹介


ひと通り自己紹介を済ませた後、わたしから Rails 5 の新機能を紹介させていただきました。新機能はたくさんあるんですが、開発者視点で便利になった点や気をつけないといけない点にフォーカスを当てて紹介させていただきました。

  1. development 環境でのキャッシュ ON/OFF が簡単になりました
  2. belongs_to のデフォルトが required: true になりました
  3. routes に検索オプションが導入されました
  4. redirect_to :back が非推奨になりました
  5. migration ファイルの記述が変更されました
  6. ネストされたパラメータフィルタリングが可能になりました
  7. left_outer_join が導入されました

スライドはこちら:What’s new in Rails 5

みんなで Rails 5 を丸裸に!?


続いてみんなで Rails 5 の新機能をググる合戦を行いました。ActionCable や API などの機能についてや、tubrbolinks が書き換えられることについて「どの世界でも同じようにがんばってんだな」という熟練の感想まで、様々な意見をもらいました。

調査結果をみんなに共有
f:id:ogin_s57:20160423140256j:image:w640

そしてみんなで投票し合って票を集めた方に景品を・・・と当初は考えていたんですが、せっかく調べてもらったものに順位をつけるというのもなんだかなぁと思って、急遽景品はじゃんけん大会で授与することにしました。投票するより盛り上がりましたよ(笑)


泉さんが「カワイシ醤油」と「おおさ」をゲット(めっちゃジャンケン強いw)「骨まで食べれるまるとっとあじ(しお味)」を柳さんが、「骨まで食べれるまるとっとあじ(みりん味)」を加藤さんがゲットしました。(ホントはその写真も貼りたかったんだけどピンとがボケすぎてて・・・とりあえず1番ピンとが合ってる「あおさ」をゲットした泉さんだけ貼っておきます(笑)

f:id:ogin_s57:20160423140906j:image:w640

盛りだくさんのお魚でおもてなし


ここまでで Rails 5 の話は終了(笑)ここからはビアバッシュ形式でお酒を酌み交わしながら色んな話をしました。もちろん美味しいお魚付きです。

カンパチねぎとろ
f:id:ogin_s57:20160423135341j:image:w640

f:id:ogin_s57:20160423135423j:image:w640

定番の鯛(相変わらず弾力がすごかった!)
f:id:ogin_s57:20160423135351j:image:w640

カツオのたたき(にんにくポン酢でいただきました)
f:id:ogin_s57:20160423135435j:image:w640

サービスでもらったシメサバ
f:id:ogin_s57:20160423135359j:image:w640

鯛の白子。初めて(?)食べたけどめっちゃ美味かった
f:id:ogin_s57:20160423143548j:image:w640

さいごに


今回もたくさんのみなさんに集まっていただいて楽しく勉強会を開催することができました。一部の方にはご連絡していたのですが、実は5月末に関東圏への引っ越しを考えていて、今回の開催がたぶん最後になります。

こうやってラフに語り合える場というのを実現したくて作ったコミュニティだったので、最後までそういう会として実現できたことを嬉しく思いますし、それはやっぱり参加者のみなさんの遊び心というか、楽しみたいという想いに支えられてこのコミュニティがあったなと実感しています。

これまでに参加いただいたみなさんに感謝しつつ、そしてまたどこかこうやってラフに語り合える場での再会を楽しみにしつつ、お別れとしたいと思います。

今回ご参加いただいたみなさん、そしてこれまでゆるふわ.rb に関わっていただいたみなさん、ありがとうございました。また飲みませう。

2016-02-01

ゆるふわ.rb in 大洲 〜作ってみよう Slack bot〜 を開催しました

1/30(土) にゆるふわ.rb を開催しました。
今回は Slack をテーマに、Ruby から Slack へ投稿する方法をレクチャーした後、実際に参加者のみなさんに bot を作成してもらいました。
ゆるふわ.rb in 大洲 〜作ってみよう Slack bot〜 - ゆるふわ.rb | Doorkeeper

ウェルカムドリンクで和む


まず初めに定番のウェルカムドリンク、あおさの味噌汁でみなさんの体と場の雰囲気を温めさせてもらいました。今回はいつもと違って麦味噌にしたんですが、それはそれで美味しかったようです。
f:id:ogin_s57:20160130124109j:image:w640

そしてナカジさんがつい最近お誕生日を迎えたということで、あおさをプレゼントさせていただきました。ぜひご自宅の味噌汁に加えてみてください!
f:id:ogin_s57:20160130124311j:image:w640

Slack へ投稿する方法をレクチャー


次にわたしから Slack へ投稿する方法をレクチャーさせていただきました。
投稿する方法はいくつかあるんですが、今回は Incoming WebHook という Slack の Custom Integration を利用して投稿する方法をとりました。
これは Slack 側でフック用の URL を発行し、その URL にリクエストを投入すると所定のチャネルへ投稿されるというものになります。(Incoming WebHook の設定ページ

また、 WebHook URL へリクエストを投入するのに slack-notifier という gem を利用しました。
これを利用すると ↓ のような感じでシンプルに実装できます。

require 'slack-notifier'

WEBHOOK_URL = 'https://hooks.slack.com/services/....'  # 発行した URL
CHANNEL  = '#yurufuwarb' # 投稿するチャネル
USERNAME = 'yurufuwan'   # 投稿するユーザー名

notifier = Slack::Notifier.new(WEBHOOK_URL, channel: CHANNEL, username: USERNAME)
notifier.ping 'Hello World'

さて、これでもう投稿できるようになったのでレクチャーはここで終えても良かったんですが、もう一歩踏み込んで bot っぽいことをしてみました。

次に利用したのは Slash Commands という Custom Integration です。
Slack には / で始まるコマンドが多数用意されているんですが、自分用に新しくコマンドを定義できるのがこちらの機構になります。(Slash Commoands の設定ページ

Slash Commands では新しく追加したコマンドを打った際に別のエンドポイントへリクエストを投入することができます。今回はそれを利用して、/yurufuwa というコマンドを作成、それをとある Web アプリへ送信、受け取ったアプリが Slack へ指定されたメッセージを投稿する、ということをやってみました。
f:id:ogin_s57:20160128122250g:image:w640

これは以前話題になった ChatOps に利用できると思います。
これまでだと hubot をチャットに参加させてメッセージを監視、所定のメッセージで所定の動作をさせるというのが一般的でしたが、hubot の作成には Node.js の知識が必要ですし、他には API キーを発行・指定してあげたりなど、ものすごく大変なわけでは無いですが少し面倒に感じてしまう部分は拭いきれませんでした。

それが Slash Commands を利用すると Web アプリのエンドポイントを用意するだけで良いので、自分の好きな言語で実装できるし、Slack 用の設定は不要なため、大分敷居が下がるのではないかと思います。
これから ChatOps を実現しようと思っている方は選択肢の1つとして Slash Commands を一考してみてはいかがでしょうか?


お刺身をつつきながら Slack bot を作ってみる


次はみなさんお待ちかねのビアバッシュです。みんなで飲み食いしながら bot を作成したり仕事感を交わしあったり楽しい時間を過ごしました。

今回は鯛と太刀魚のお刺身をご用意、しゃぶしゃぶにしても絶品でした。
f:id:ogin_s57:20160130135003j:image:w640

f:id:ogin_s57:20160130140433j:image:w640

ほどよくお腹が満たされたところで bot 作りに。
f:id:ogin_s57:20160130160358j:image:w640

途中で寒くなってストーブを着けるよとするもなかなか着けられないという一幕も(笑)
f:id:ogin_s57:20160130140404j:image:w640

チェックアウト


楽しい時間はあっと言う間に過ぎるもので気がつけばチェックアウトの時間に。最後にみんなで片付けをして「来た時よりも美しく」して会場を後にしました。

今回はテーマ選びも良かったようで、実際に Slack へ投稿できると「お、できた!!」のような小さな成功体験が積めて、参加者のみなさんにも楽しんでいただけたようです。
また、いつものゆるふわ.rb らしくテーマ一辺倒ではなく、仕事のこととか業界のこと、将来のことなど色々話せたのが良かったと思います。
こうやって色んな立場の人で集まって話すことで、自分とは違う視点の意見も聞けるし、それが新たな気づきを促したり刺激になったりして、自身の成長につながっていくものだと改めて感じました。

これからもそういう場を提供できるコミュニティの1つとしてゆるふわ.rb を運営していければと思います。
参加いただいたみなさん、ありがとうございました。

2015-07-08

ゆるふわ.rb in 大洲 〜ここがスゴイよ RubyMine!〜 を開催しました

7/4(土) にゆるふわ.rb を開催しました。
今回のテーマは RubyMine で、普段わたしがよく使う機能やショートカットを説明した後に参加者のみなさんと共に IDE(とその他雑多なことについて)語り合いました。
ゆるふわ.rb in 大洲 〜ここがスゴイよ RubyMine!〜 - ゆるふわ.rb | Doorkeeper

看板がリニューアル


今回から施設の担当者が変わったのを受けて、勉強会会場の看板も新しく生まれ変わりました。(ようやく正しい表記になりました!)
f:id:ogin_s57:20150704121757j:image:w640


以前はこんな感じ。一箇所間違ってるんですが分かりますかね...?
f:id:ogin_s57:20140802123932j:image:w640
※「ゆるふわ」じゃなく「ふるふわ」になっていたのです。。。

ウェルカムドリンクと自己紹介


ゆるふわ.rb のウェルカムドリンクと言えば・・・そう、あおさの味噌汁です。今回わたしも久しぶりに作って食したんですが美味しかったですね。参加者のみなさんにもウケがよかったです。
f:id:ogin_s57:20150704123346j:image:w640

ウェルカムドリンクを味わいながら、参加者のみなさんに簡単な自己紹介と普段使っている開発環境についてお話してもらいました。
RubyMine の利用者はわたしともう一人だけでしたが、その分多様性が広がって良かったかなと思います。

ここがスゴイよ RubyMine


次にわたしが普段使っている機能やショートカットをライブで実践しながら説明していきました。説明した機能やショートカットは ↓↓ です。

説明した機能

  • Debug(デバッガの使い方)
  • Show History(ローカル)
  • Show History(Git
  • Annotate(Git
  • Refactor
  • Column Selection Mode

説明したショートカット

  • cmd + shift + A(アクションやオプションを呼び出せる。神コマンド!)
  • cmd + shift + o(指定のファイルへ飛べる。インクリメンタルサーチ。)
  • cmd + fn + f12(ファイル内の変数メソッドに飛べる。インクリメンタルサーチ。)
  • cmd + L(指定行へ飛べる。)
  • cmd + 9(ローカルの変更一覧を見れる。)
  • cmd + d(リモートとの差分を見れる。ダイアログ上での編集も可能。)
  • cmd + option + ←(戻る)
  • cmd + option + →(進む)
  • cmd + control + ↑(controller、model、view、helper、spec 間を行き来できる。)

この中で一番おぉぉとなったのは Annotate でした。この機能は git blame の結果を GUI 上で見れるというもので、たとえば「この処理はいつ/どんな経緯で入ったんだっけ???」とかを調べたいときに重宝します。

f:id:ogin_s57:20150708093933p:image:w640


ビアバッシュ


次にメイン(?)のビアバッシュに入りました。今回は胸焼けしそうなくらい大量の鯛とカンパチを用意しました。半分はしゃぶしゃぶでも良かったかも。。。
f:id:ogin_s57:20150704140522j:image:w640

いろんな開発環境の話やプログラムの話や筋トレの話(?)などをしながら楽しく飲み食いしました。技術な話もその他の話もお酒と共に味わいながら終始楽しい雰囲気で進みました。お酒の途中にはさむ味噌汁も絶品でした。
f:id:ogin_s57:20150704152517j:image:w640

チェックアウト


最後にみんなで片付けをして、ゴミ1つ残さず会場を後にしました。

今回は前回開催から半年以上空いてしまっていたので、ゆるふわ.rb のことを忘れられてしまっていないか若干不安もあったのですが、変わらず多くの方々に来ていただいてとても嬉しく思いました。
これからはもう少し定期的に開催していって、今回のように楽しく話せる場を提供していければと思います。
参加いただいたみなさん、ありがとうございました。

2015-05-31

祖父を見送りました

先日祖父が亡くなりました。
弱々しくはありましたが亡くなる5時間前まで会話できていたので「急だったな」とは思いますが、その表情は普段寝ている時の表情そのものだったので、なんとなく苦しまずに逝ってくれたのかなと少し安心する気持ちもありました。
地元に戻ってきて約2年、享年96歳、正直どれだけ孝行できたのかは疑問ですが、長生きして孝行する時間をたくさん作ってくれてありがとうと言いたいですね。

祖父のサポートのためにリモートワーカーに


私は生後半年で母親を亡くし、物心つく頃から祖父が母親代わりとなって育ててくれました。
その祖父をサポートするためにリモートの道に進んだのでした。

7月から愛媛でリモート勤務になります。 - ITエンジニアとして生きる

当初はリモート特有のコミュニケーション方法に困惑したり、新しい環境での仕事の進め方に慣れなかったりと色々苦労しました。
ただ自分は祖父をサポートするために帰ってきたわけで、自分の仕事すらうまくやれないようだとそんなことできないし、弱音なんて吐いていられなかったんですね。
苦しい時期を乗り越えられたのは、もちろん仕事に対する責任感とか向上心とかもありますが、一番はそういった想いがあったからだと思います。
祖父の存在が色んなものを越えさせてくれたんだと思います。

リモートという働き方を選んで良かった


生前、平日にもかかわらず、祖父をかかりつけの病院へ連れて行ったり、銀行やスーパーに一緒に行ったりなど、日々の生活のサポートを少なからずやってきました。
これはリモートという働き方を選んだことによって実現できたものだと考えています。
もしどこかの会社に出社していたとすると、その度に中抜けするのも難しい(心苦しい)と思いますし、まずその会社が家の近所かどうかということも関係してきて、なかなかこのような形のサポートは実現しづらかったのではないかと思います。

リモートワークでは成果を出すことを大前提に、基本的に時間の制約は外されます。
極端なことを言えば1日2時間の作業でも成果が伴えば OK だということです。
短い時間で成果を出して余った時間で祖父をサポート、それが私の実践してきたことでした。

(ただ勘違いしてはいけないのは、成果が大前提ということは、例えば1日20時間働いても成果が伴わなければ NG だということです。実際リモートを始めた頃は色々不慣れな部分があって、毎日12時間くらいやってましたが、それでも全然成果を出すことはできませんでした。まずは自分の能力を高めて短い時間で成果を出せるようにすることが大事で、それができるようになると時間に囚われることなく行動できるようになるのがリモートワークの利点だと思います。)

人生とはつくづく分からないもの


祖父は体調を崩してから入院、その後ショートステイで施設に入所してそこで息を引き取りました。
次に本入所する施設も決まっていましたし、まだまだ先の予定も立てていて祖父とはもう少し一緒の時間を過ごせると思っていたんですがね・・・ホント人生は予定通りにいかないものです。

予定通りにいかないからこそ思うのは「人生はいつ終わるかわからない。だから自分のやりたいようにやるのが1番」ということです。
2年半前は愛媛に帰ってくることもリモートで仕事をすることも全く考えてなかった自分、色んなことがあって今こうしてブログを書いている自分、全く違い過ぎてホント不思議ですが、こういう道を選んで少しだけ祖父に寄り添うことができて、満足はしていませんが納得感ある日々を送ることができたと思っています。

自分のやりたいようにやるということは色んな面でエネルギーがいるかもしれませんが、その苦労を考えて行動しないよりも、行動を起こした方が「やり残した感」が無くていいんじゃないかなと思います。
断言はできないけど、その苦労の先にはきっと何か得るものがあるんじゃないかと思います、たとえそれがうまくいかなくても。
これからもそういう指針で行動していければと考えています。

さいごに


大切な2人へメッセージを贈って終わりにしたいと思います。



祖父へ


だいぶ食も細くなっていた中、最後にたくさん食べてくれたのは僕の下手くそな腕でさばいたカワハギの刺身でしたね。
すごく嬉しかったし、これからちょっとずつ食欲も回復していって、まだもう少し一緒の時間を過ごせると思っていました。
残念な気持ちもありますが、安らかに逝ってくれたであろう表情を見て天寿を全うしたのだと思いました。

もう下手くそな腕で魚をさばかなくていいのかと思うと寂しいです。
もう仕事の合間をみてお見舞いに行かなくていいのかと思うと寂しいです。
もう娘の動画を見せた後の笑顔が見れないかと思うと寂しいです。

色んな寂しい想いを抱くくらい愛情を注いでくれてありがとう。
もう少しあなたの余韻に浸りながらやっていこうと思います。
いつかまた会いましょう。



妻へ


僕の決断を尊重してくれて、祖父が体調を崩してからもそちらを優先させてくれて、理解あるあなたに感謝します。
まだ娘も小さく、色んな部分で負担をかけたと思いますが、それを感じさせなかったあなたに感謝します。
あなたがいなければきっとたくさんのことを後悔していたことでしょう。
あなたのおかげで祖父に少しだけ幸せな人生を歩ませる手助けができました。
ありがとう。これからもよろしくね。

2014-11-03

ゆるふわ.rb in 大洲 〜やってみようスクレイピング〜 を開催しました

11/2(日) にゆるふわ.rb を開催しました。
今回のテーマは「スクレイピング」で、説明を兼ねた私のライブコーディング後に参加者のみなさんにも実際に手を動かしてもらいました。
ゆるふわ.rb in 大洲 〜やってみようスクレイピング〜 - ゆるふわ.rb | Doorkeeper

まずは自己紹介から


はじめに参加者のみなさんに簡単に自己紹介してもらいました。
今回初めて来られた方もいて、まだまだゆるふわ.rb の多様性も広げていけるな〜という可能性を感じました。
また、意外だったのは「スクレイピング」というテーマに惹かれて来ましたという方が複数人いたことで、面白くて参加したくなるようなテーマをこれからも考えていきたいと思いました。

スクレイピングの説明&ライブコーディング


次に私から参加者のみなさんへ、簡単にスクレイピングの説明をしてライブコーディングに入りました。
ライブコーディングirb で、まずは open-uri を使ってサイトの情報を取得してみました。
open-uriKernel.open を再定義してくれるもので、open("http://xxx") という形式でサイト情報を取得できるようにしてくれます。(スクレイピング対象はHeartRails のサイトにしました。)

irb> require 'open-uri'
irb> url = "http://www.heartrails.com"
irb> hr = open(url)
irb> hr.each_line do |l|
irb>   p l
irb> end

このコードを実行すると、対象サイトの HTML が出力されます。(スクレイピングの入り口ですね)
次に「ではタイトルを取ってみましょう」ということでコーディングしてみました。

irb> require 'open-uri'
irb> url = "http://www.heartrails.com"
irb> hr = open(url)
irb> hr.each_line do |l|
irb>   if l.include?("<title>")
irb>     start_index = l.index("<title>") + "<title>".length
irb>     end_index = l.index("</title>")
irb>     p l[start_index...end_index]
irb>   end
irb> end
# => "HeartRails | ハートレイルズ | ザ・ウェブサービス・カンパニー"

<title> ディレクティブで検索して、見つかったらその中身のデータを出力するようなプログラムになっています。
まぁこれでも OK なんですが、ちょっと <title> の中身を取るところの処理が長いですね。。。

そこで次は nokogiri を使ってもっと簡単にしてみました。
nokogiri は HTML/XML パーサーで、Nokogiri::HTML(open("http://xxx/")) という形式でサイト情報をパースしてくれます。

irb> require 'nokogiri'
irb> hr = open(url)
irb> noko_hr = Nokogiri::HTML(hr)
irb> noko_hr.methods.grep /title/
# => [:title, :title=]

irb> noko_hr.title
# =>"HeartRails | ハートレイルズ | ザ・ウェブサービス・カンパニー"

nokogiri を利用するとすでにタイトル部分はパースされているため、noko_hr.title とするだけでタイトルが取得できます。
利用しない場合に比べるとずいぶんシンプルなプログラムになりました。

スクレイピングしながらビアバッシュ


続いて参加者のみなさんにスクレイピングにチャレンジしてもらいました。
やってもらったのは HeartRails のサイト内の Services のリンク(<a href=...> の部分)とサービス名を表示するというもの。

f:id:ogin_s57:20141103200744p:image:w640

みなさんあまりおしゃべりもせず結構真剣に挑戦されていました。
その光景を見て「ゆるふわ.rb っぽく無いな〜」と思って笑ってしまいました(笑)

今回は参加いただいた越智さんのつながりで、ボノ株式会社さんと Skype でつないで交流を深めるという新しい試みも実践しました。
残念ながら Skype では刺身は送れないので、しっかり見せびらかしながら食しましたよ(笑)
ボノ株式会社|Bono Inc.

今回の交流ですっかり仲良しになりました
f:id:ogin_s57:20141102143346j:image:w640

ちょっと写真では分かりづらいんですが、後ろに写っているオフィスは倉庫を DIY したそうです!
次はキッチンを導入予定らしく、もしキッチンが出来たら出張ゆるふわ.rb で魚のさばき方勉強会リターンズなんてのをさせてもらったら面白いかも?なんて勝手に思ってたりします(笑)

見せびらかしたアジ刺し、タイ刺し、ふぐしゃぶ
f:id:ogin_s57:20141102134418j:image:w640

f:id:ogin_s57:20141102134438j:image:w640

f:id:ogin_s57:20141102140644j:image:w640

まとめ


今回久しぶりにゆるふわ.rb を開催しましたが、何人もの方にこうやって田舎まで足を運んでもらえることは本当にありがたいなと改めて思いました。
これからもこういう人とのつながりを大事にしつつ、面白いテーマでみんなでワイワイ ruby を楽しめる場を提供していけたらと思います。
参加いただいたみなさん、ありがとうございました。