TokyuRuby会議13でLTをした。あるいはRubyKaigi2019に参加して。 #tqrk13

TokyuRuby会議13でLTをした。

regional.rubykaigi.org

発表資料↓

TokyuRuby会議でLTをするのは3年ぶりだった。 (過去の発表 => a-code-to-rhyme - Speaker Deck ) "技術を酒の肴にする"感があって、本当に楽しい雰囲気で、大好きな勉強会だなぁ。改めて、運営の方、ありがとうございました。

なぜ、今回LTをしようと思ったかというと、4/18〜20で福岡で行われたRubyKaigi2019に話は遡る。

昨年の仙台に続いて参加したRubyKaigiだが、今年も本当に楽しかった。 何が刺激だったって、初めて参加したRubyKaigi2015で語られていた「Ruby3」に向けた具体的な進捗を"すごい人達"がたくさん出していて、「はーすごい人達が出す進捗すごい」ってめちゃ思ったのだった。 もちろん、Ruby 3に直接の関係がなくとも、Apple IIRubyを動かす話や、SwitchでRubyを動かす話などもとてもワクワクしながら聞いた。やはり僕は、ああやって技術をオモチャにする人たちのことを尊敬し、おもしろく思うのだ。

ただ、今年のRubyKaigiでは、ひとつ心残りがあった。屋台の焼きラーメンも、ひらおの天ぷらも、海鳴のとんこつラーメンも、ゴマサバも、新鮮なイカ刺しも、梅が枝餅も食べたのに心残りがあったというのは、繰り返しアナウンスされる「rubygems.orgの2FA設定をする」ということができなかったことだ。

※ これは最後の"川"で飲んでたときに撮った夜景。

詳細はこの記事などが詳しいのだが、今年rubygemsのアカウントに対して攻撃があり、対策として、開発者のアカウントにおいて2FAを設定する旨が求められていた。

techracho.bpsinc.jp

一方僕は、そのアナウンスがある度に、顔を伏せるようなバツが悪いような...そんな思いを抱いていて、gemもまともに作ったようなことがないのは、RubyKaigiにとって真に来てほしいRubyistじゃないのかな...みたいな、そんな思いを抱いたのだった。もちろん、作ったことない方もたくさんいたと思うし、自分以外のgemを作ったことがないRubyKaigi参加者に嫌な思いをさせたい気持ちは全然ないのだが、自分自身の開発者としてのキャリアみたいなものを省みるきっかけになったと思う。 というわけで、gem作るぞーみたいな気持ちになった。

折しも、TokyuRuby会議のCFPがあって、発表駆動でなんか作るのは性に合っているので、申し込んでみたら当選したので、冒頭の資料に至る。

作ったgemはこちら。

github.com

あたりまえなんですけど、本当にrubygems.orgに載ってるんですね。

rubygems.org

ネタ自体は正直何年も前から持っていて、テーマ縛りでLTをやる社内勉強会「0x64物語」で利用していた次のテーマを選ぶための投票の仕組みを実装したに過ぎないし、コードベースも大したものではないのだが、それでもやっぱり作らなきゃわからないことがたくさんあるなぁと思ったのだった。 たとえば、今すでに、このAPIイケてないなって思い始めていて「直すと後方互換なくなるんだけど、もし仮にまともに使ってくれる奇特な人がいてたら、どうパスを用意すべきだったんだろう」みたいなのは、OSSの利用者としてよく聞く話ではあるけれど、自分が作る側になってみて"心で理解した"みたいな感もある。 あとは「Tokyuの発表終わったら、今度は全然別なもの作るぞー」って思ってたんだけど、あ、これはこれでメンテもしないといけないよな、みたいな話とか。

とはいえ、今回こういうものを作った経験を今後も生かしていきたいし、これがまた何かのきっかけになればいいと思う。

追記: もちろんrubygems.orgの2FAは設定しました💪

privateメソッドのテストについての考え方 #yochiyochirb

よちよち.rbに久しぶりに参加した。

yochiyochirb.doorkeeper.jp

今日の回はjnchitoさんがゲストとして招かれていて、あれこれ質問できるという会だった。 「昔からよちよち.rbに参加してくれてる人も是非」と言ってもらったので参加させてもらった。

jnchitoさんといえば、今でもRSpecのまとめ記事やRubyの新しいバージョンのまとめ記事はよく拝見するし、 自分がある程度RSpec書けるようになったのは、jnchitoさんらが翻訳された「Everyday Rails - RSpecによるRailsテスト入門」に支えられたところもあり、 お話してみたいと思っていた。

それもあって、最近職場で話して他の人の意見も聞いてみたいと思っていたことを、事前にアンケートフォームから質問として投げた。

もちろん「書くべきではない」という意見が支配的であることは知っている。 ただし、原則として書くべきでないという前提の上で、それでも書きたくなるケースなどにどうやって対応するのかというのを聞いてみたかった。

事前に、運営をやってくれていたyuki3738さんが、僕の質問を見て「コード例などあるとうれしい」という言葉をくれた。 確かにそのとおりだなぁと思いつつ、そもそも、よちよち.rbに今メインで来ているプログラミングを始めたばかりの方にとっては、「原則として書くべきでない」といったことを前提にするのも不親切かと思い、それならと説明用のスライドを作った。

今日は、それを使いながら質問をさせてもらった。 (他の質問は、運営の方たちがつくった「質問まとめスライド」で済んでいたので、結果的に「自己顕示欲がすごい質問者」みたいになってしまった)

作ってみて思ったが、特定ドメインにしか通用しないようなコードを避けつつ、自分の意図を反映させる、サンプルコードを書くというのは難しいなと気がついた。 技術書とか書いてる人たちすごいなぁ。

いただいたお答えとしては以下のような感じだった。

加えて「原則書かない方がいいんだから、それを緩和する方針はいずれにせよチームでコンセンサス形成することが大事」ともおっしゃっていたように思う。

一方で、改めて考えると、自分はこういうスタンスだなぁと言語化できた。

このツイートと同様のスタンスの方からリプライいただいたりもした。

もちろん、質問しておいてjnchitoさんからもらった答えを否定したいわけではないし、今日の会でも「自分もpublicにしちゃった」という方はいたので、大事なのはおっしゃるように結局チームでのコンセンサス形成かなって感じもする。

また、懇親会でお聞きした別の興味深かった意見としては「たとえ小さな処理でも、必ずclassに切り出す」というものだ。 その方は、そもそも小さな処理をチェーンしやすくする interactor というgemを勧めていて、小さな処理でも都度classに切り出すことを躊躇していないと言っていた。

github.com

Railsなどに依存しない小さなgemでこういう仕組みを使うのはおもしろいと思った。

改めて、今日の運営のyucao24hoursさん/yuki3738さん、会場提供のSansanさん、そしてjnchitoさん、ありがとうございました。

--2019/3/4 0:43追記--

Twitterでtakeshinoda氏とやりとりしていて、スライドのコードに、今回の主旨と関係ない意図せぬダメダメコードがあったことに気がついた...。 スライド12ページ目こうなっていたところ、

# データ加工といってもこの程度ならclass切り出さなくてもいいのでは?
data
  .group_by(&:first)

  .sort
  .map { |key, values| [values[0], values[1]] }

意図してたのは、こう書くべきだった。

processed_data = data
                    .group_by(&:first)

                    .sort
                    .map { |key, values| [values[0], values[1]] }

13ページ目も同様に、ここは

data = Hoge::DataAggregator.aggregate
process_data(data)
Hoge::S3Sender.send(processed_data)

こうしたかった。

data = Hoge::DataAggregator.aggregate
processed_data = process_data(data)
Hoge::S3Sender.send(processed_data)

スライドを今から修正して上げ直すのはどうなんだ的な感じがするけど、主旨と関係ないところで混乱させるミスなので修正した。

--2019/3/4 1:11追記--

id:sinsoku さんが自分ならこうするというコードをご自身のブログにあげてくれていた。

sinsoku.hatenablog.com

社内でコーヒー淹れる環境をちょっとだけ良くしたLTをした

同僚から「久しぶりに社内でLT大会をやろう」という話を年末にもらって、上のスライドを使って発表をした。

今日の発表は、「DEMOと称して実際にコーヒーをドリップしながら、スライドはKeynoteiPhoneからRemoteで操作して発表する」ということをやったらおもしろいかなと思ってやってみたのだけれど、今思うとちょっとかっこつけすぎてたかなと思う。
とはいえ、楽しかった。
AWS Iotボタン、気軽で楽しいなぁ。2500円はちょい高いと思うけど。


ちなみに、デブサミで発表の機会をもらった、今まで運営していた社内LT大会はさすがに参加人数/発表人数が少なくなってきて、しばらくお休みしている。
そういえば、そのときの発表資料もこのブログに載せてなかったので、せっかくだから載せておこう。


www.makuake.com

↑これで手に入れたCODE COFFEE、今のところSwift→C→Javaときて、今回のRuby開封した。
CとJavaはおいしかった。

Swiftはこのとおりである。

ちなみに会社でのコーヒー文化についてはnoteにも書いた。

https://days.livesense.co.jp/n/nf27834be8dcc

コーヒーを淹れること自体が好きなので、仕事中のリラックスになっている。

新卒採用イベントで京都に行った

というタイトルで記事を書くつもりだったが、先にこれを書いてしまった。

https://days.livesense.co.jp/n/nef6eb6d712cfdays.livesense.co.jp

社員の日常が伝わるような気楽な/気軽な情報のストックを作りたいという、創業者の"精度高い思いつき"に乗っかり、livesense daysというnote上のマガジンに記事を追加したかたちだ。

桂さんの思いについては、詳しくはこれに書いてある。

https://days.livesense.co.jp/n/n79fde29f398adays.livesense.co.jp

僕は(悪い意味で)変にまじめなところがあり「"daysっぽさ"を重視して、肩肘張らないようにするぞ」という肩肘の張り方をしてしまったような気もする。

ひとまず、noteでのマガジンはあれこれ手探りで手探りでやってみて、ある程度継続できそう/定着できそう/意味ありそうという感覚を持てたら正式な共有をするのだと思う。

さて、京都の話だが、うちの会社では「採用イベントで遠方に行く際は前泊OK」ということになっていて(たぶん)、それを利用して前日の朝から京都に乗り込み、散々観光して写真を撮ったというかたちだ。 採用イベントで学生の方と話すのは楽しいし、本当に自分が学生の頃に持っていなかった優秀さを感じられて刺激を覚えるのだが「25分×10コマの面談を行うのはしんどい」という揺るぎない本音もあり、バランスとるためにも遠方開催の場合は目一杯楽しむことにしている。(とはいえ、同様のプレゼンテーションを繰り返さなくてはいけない、学生の方が大変だろうなという思いはあり、本当に頭が下がる思いがある)

祇園〜八坂や

嵐山を散策した。

予習として、Nasneに録画したっきりになっていたブラタモリの京都回を計6回分見るといったことを行ったので、地形や歴史について思いを馳せたりすることができた。

写真にハマっている

気が向いたので久しぶりにブログを書いてみる。

社会人1年目のときにNikon D7000を買って、それなりに写真が好きで、レンズもいくつか安いものを買い足したりしていたのだけど、とうとう去年くらいからフルサイズが欲しくなってきていた。 当初はNikon D850を考えていたのだけど、ある日家電量販店で「憧れのカメラD850に、憧れの大三元24-70mm」という状態でディスプレイされてるのを見て、意気揚々と持ち上げたらその重さに辟易してしまい、それ以降、今後のカメラステップアップをどうやっていこうものかと考えていた。

そんな中、今年の3月頃に、Sonyがミラーレスでフルサイズ一眼を出していて、評判もいいことを知った。 また、今度出るモデル「α7iiiは、これまでの連射性能やバッテリーの持ちや操作系といった、不便な点を解消してきた間違いないモデル」といった評判を聞くにつれ、欲しい気持ちが高まった。

おもむろにツイートしたら想像以上にバズった。

その後、Spreadsheetに資金計画などを書き、晴れて妻の許しもらって、購入に至った。

その後、会社に支援してもらって、

アメリピッツバーグで行われたRailsConf 2018に行く機会があったり

made.livesense.co.jp

仙台で行われたRubyKaigiに行く機会があったり、

と、撮影のチャンスに恵まれた。

当初はキットレンズ(f3.5-5.6 28-70mm)と撒き餌単焦点(f1.8 50mm)を手に入れて「高い買い物をしたのだし、しばらくはレンズを買い足さずに50mmという画角でいろいろな写真を撮り、うまくなろう」と思っていたのだが、人間とは恐ろしいもので、「旅行など再訪することが難しい場所に行くときに、任意の焦点距離をサッと選べないのは不便だし、そういうときに明るいズームレンズがあったほうが良い」というロジックで、キットレンズを売ってTamron A036(f2.8 28-75mm)を購入した。

やはり明るいズームレンズは正義で、会社のブログ用写真を撮る名目で開発合宿にカメラを持っていき、75mmで人が発表している様子を撮影した後に、晴海埠頭に行って広角で夜景を撮るといったこともできた。

そんな感じで、僕がいい感じに写真沼に浸かっていると「俺も浸かってるよ」「俺も浸かりたい」などと言ってくれる仲間たちが現れはじめて、休日に数人で家電量販店に押し寄せて機材を一緒に購入してから街でスナップを撮るなどやっていて、楽しい。

購入してからそろそろ半年になり、撮影枚数はだいたい8000枚くらいになった。 ひとまずSynologyのNASにつっこんだうえで、バックアップとしてjpgとrawをPrime Photosに、観賞用にjpgを圧縮してGoogle photosにアップロードしているが、いい感じに自分の作品(と言えるレベルのものでものないのだが)のみをどこかに置いておきたいなとも考えている。 ひとまず、500px に何枚かupしてみた。 このへん引き続き模索しつつ、たまにブログにも写真など載せたいと思う。

よちよち.rb の開発合宿に行った #yochiyochirb

9/4(金) - 9/6(日)で、よちよち.rbの開発合宿に行った。

行き先

マホロバマインズ三浦さん。 弊社の開発合宿でも過去に使われたらしい。

会議室あり / 温泉あり / 卓球場あり / 雀卓あり / 駅近し / コンビニ近し / 海近し

って感じで、すごくよかった。

よちよちの開発合宿について

詳細はこちら -> Doorkeeper

よちよちで開発合宿をやるのは、去年に引き続き2回目。去年は熱海の山喜旅館さん。ちなみに去年の開発合宿で僕が作ったのはこれ。

highwide.hatenablog.com

合宿では各自が自分の好きなことをやればいいということになっていて、みんな各々のことをやってた。

タイムスケジュール

1日目

時間 やったこと
- 20:10 会社でインターン生と飲んでた
20:30 品川駅集合
21:15 - 22:30 京急線ウィング号でトイレ我慢してた
23:00前 宿到着
23:00 - 2:30くらい ハリガリとか厨二UNOとかニムトとかカードゲーム大会

※ハリガリ

ゲーム ハリガリ フルーツゲーム<AMIGO社 ドイツ>

ゲーム ハリガリ フルーツゲーム<AMIGO社 ドイツ>

2日目

時間 やったこと
6:30 奇跡的に目が覚めた
7:30くらい 朝食バイキングでとろろご飯食べた
9:00 - 12:00 設計についてあれこれ相談させてもらった
12:00 - 13:00 昼食 (牛丼)
13:00 - 13:30 卓球 (海に行ってる人もいた)
13:30 - 18:00 コード書いてた
18:00 - 19:00 夕食 (お重に入ったあれこれ)
19:00 - 21:30 話したり、お風呂入ったり
21:30 - 23:00 とみーさんとペアプロでテスト書く
23:00 - 3:00 厨二UNOとかニムトとかカードゲーム大会

※厨二UNO (僕らが勝手にそう呼んでいる)

Gods' Gambit~神々の一手~

Gods' Gambit~神々の一手~

3日目

時間 やったこと
8:00 絶望的な起床
9:00 - 10:30 テスト書き上げる
10:30 - 12:00 各自成果発表して撤収
12:30 駅近くでマグロ丼
13:00前 帰りの京急線乗り込んだ

僕がやったこと

最近とみーさん(@ta1kt0me)と shibaph というWebアプリを遊びで作っていて、そのコードを書いた。

shibaphは、僕がGitHubのcontributions graphが好きなので、それ使ってタスク管理とかできたらおもしろいかなというアイデアで始まったもの。Rails4で書いてる。

4月に転職してコードを書ける仕事に就けた喜びを噛みしめる一方で、仕事ってコード書くだけじゃないなって改めて思ったり、今の自分が価値発揮できるところがコード書くだけじゃなかったり、って感じだったので、合宿では「コード書くことに集中しよう」ってなんとなく決めてた。 きっと仲いい人たちとみんなで合宿すると楽しくなったり、雑談も弾むだろうなと思いつつ、僕はあんまりマルチタスクの遂行が上手でないことを自覚しているので、「一つのことをうまくやる」精神で臨んだ。

あとは、同僚が、プロコンの大会やハッカソンで2-3日ぶっ通しですごいコードをすごい量書いてすごい結果を収めているのを、すごいなぁと思っていたので、集中できる空間で集中してコード書くと、今の自分がどの程度できるのか確かめたかった。

結果

f:id:highwide:20150911004119p:plain

f:id:highwide:20150911003911p:plain

「上ででかいこと書いたわりに、めっちゃカードゲームしてんじゃんww」ってのはさておき、個人的には集中してコードが書けたと思ってるし、その一方で今の自分に書けるのはまだまだこんなもんかぁと思い知らされた気持ちもある。

難しかったこと

元々は、グラフをViewが描画しやすいように「ARモデルをValueとしたHashの、Array」っていう構造をControllerのprivateメソッドで作っていたのだが、呼び出すところでいちいちその構造を意識しなくてはいけないのがダルくて、呼び出され方をメソッド化した中間ClassをControllerで作ってViewに引き渡すようにした。 その際の中間ClassってRailsのディレクトリのどこに配置すべき?とか結構悩んだ。(結局Modelに置いた)

あと、「趣味プロジェクトなんだし使ったことない技術を使おう」と採用したminitestの書き方を調べるのにも時間がかかった。 (RSpecが書けるとは言っていない)

とはいえ

コード書くのも、みんなと話したり遊んだりするのも、楽しかった!

ありがとうございましたーー!!!

YAPC::Asia行ってきた

行ってきました。 初カンファレンス。とても楽しかった。 以下、観たやつとか。

8/21(木) 前夜祭

行けるかなって思ってたら行けなかった

8/22(金) 1日目

ビッグサイトの長いエスカレーター素敵だった。

Merry Christmas (Larry Wall) ※敬称略

  • Perl5とPerl6の関係は「ホビットの冒険」と「ロードオブザリング」の関係に近い。
  • 言語を作ることは物語を紡ぐことに似ているってなんか素敵だなと。
  • 中学生のときに観たロードオブザリングのことなんとなく覚えててすごく助かった。
  • 同時通訳すげーって思った。
    • 日常の言葉と、技術的用語と、トールキンの作品のことを正しく訳をわけるのほんとすごい。
  • Perl6、リリースできそう、よくわかんないけどなんかすごそう。
    • Perl6でのフィボナッチの書き方、ちょっと意味わかんなくておもしろかった。

Effective ES6 (teppeis)

  • とってもわかりやすくて、勉強になった。
  • あーーー、ES6のことちゃんと知らなきゃな―って思いながら放置してたので、「スライドで説明してもらう」っていう受動的なスタイル取れるの大変ありがたかった。
  • ES6素敵感やばいので、今のJavaScriptあんまり勉強したくないなとすら思ってしまった。
  • この前、「え、素のjsにArray#each的なのないの!?」ってテンパったので、早くES6触りたい。
  • 「バベっていこうぜ」って印象的だった。

TBD (matz)

togetter.com

  • Perl書けないし、参加前の時点で一番のお目当てのセッションだった。
  • To Be Determined かと思いきや違った。-> Toward Brain-aware Design
  • Rubyの一番反省している点は、Perlの影響」めっちゃ笑った。
  • 一方で、質疑で「Rubyの99.8%はイケてる」的なこと言ってたのなんかいいなぁって思った。
  • 「今日はRubyの話は封印」 -> 「封印を解く」めっちゃ笑った。
  • たぶんこのYAPCで一番笑った。
  • ハードウェアの進化による言語の変遷とてもおもしろい。関数型が注目集めてるのもマルチコアとかでの並列化とか背景にあるし、いろいろ考えたい。
  • Streemの考え方、やっとわかってきた。おもしろい。
  • もっとシェルの考え方身につける必要あるなと思った。

Conway's Law of Distributed Work (Casey West)

  • リモートワークの話。
  • CAP定理を組織にあてはめるっておもしろかった。
  • 「全員がオフィス通えるロケーションにいる」って中でリモートやる価値あるかどうかとか気になった。
  • 「リモートやりたいならまずは一週間とにかく試してみろ」的なの、やってみたい。

Podcasting, Media for Web Engineer, and CPAN (yusukebe)

  • Podcastのテクニカルな話ガッツリ!って感じだった
  • 意外と始めるコスト低いんだなとわかった
  • エンジニアのYoutuber的な感ある。始めるのは簡単だけど、人集めるのと、継続するの大変そう。

LT

  • PHPの闇の話印象に残ってる
  • うちのSlackにいる小野寺小咲さんと会話したいなと思った。
  • 株式会社ネコトーストラボさん覚えた。

タイムテーブルの事情とか、満員だったりで聞き逃したので、あとで読むシリーズ

こうやってまとめると、結局見たいのだらけだった感じだ。


疲れたし、長くなったので、2日目はまた別途書きます。