何でも屋エンジニアのブログ

Rails中級者向け勉強会Step-to-Rails-Expert.rbや出席した勉強会に関するメモが多い

転職しました

LICTOOR株式会社からGMOペパボ株式会社に転職しました。

LICTOORについて

LICTOORでは、ほぼ全ての案件で要件定義から実装・保守運用まで行い、他にも新技術の採用にも携わりました。前職で積んだ経験は非常に貴重で、他の会社で働いた場合には積めないような経験が多くありました。

そして働き方の面でも、人数も少なく余裕はなかったものの融通を効かせてもらうことが多くとても働きやすかったです。比較的融通が効きやすいのはスタートアップのメリットだと思いますが、リクトールの場合は雰囲気も良く、殊更その良さが際立っていたと思います。

LICTOOR株式会社はこれからも満足度の高い受託開発と、世の中をより良くする自社サービスを提供していきますので、何卒宜しくお願い致します。

現職について

転職した理由の一つに、より多くのエンジニアと一緒に働き切磋琢磨したい、という気持ちがありました。働き出して少し経ちますが、技術的なコミットだけでなくプロダクトへの貢献の意識が高く、非常に刺激的な環境です。評価制度もよくできていて、個人がPCDAサイクルを回すことを制度的に実現するように設計されていて、いるだけで成長できる環境というのはこういうことか、と非常に納得しています。 しかしその一方で、求められるレベルが高く評価自体は甘くないため、正直焦りもありますが、なるべく早く慣れていき自分の得意な分野で少しでも良い影響を組織に与えていければと考えています。

仕事、OSS活動、コミュニティ活動と今までより高いレベルで取り組むことを目標に、これからも頑張っていきます。 中級者向けのRails勉強会Step-to-Rails-Expert.rbも引き続き行っていきますので、是非ご参加ください。

最後に

転職にあたり、以下の企業様には特に良くして頂きました。この場を借りてお礼を申し上げます(名前順)。本当にすごく良く対応して頂いたので、転職を考えている方はお話を聞きに行くのがオススメです!

  • 株式会社永和システムマネジメント様
  • 株式会社スタディスト様
  • ラクスル株式会社様

Step-to-Rails-Expert.rb第15回を開催しました

1/29(月)にStep-to-Rails-Expert.rb第15回をSpeeeさんで開催しました。

step-to-rails-expert-rb.connpass.com

流れ

今回はレビュー会でした。

当日の流れは

  • 自己紹介
  • 会の概要説明
  • レビュー会
  • 懇親会

という形で進めました。

会の様子

今回は2人のレビューを行いました。

PRのURLは以下になります。レビューの内容については、以下を見て頂ければと思います。

個人的に印象に残ったのは、ActiveStorageを使ったアプリのソースを見られたことです。シンプルなユースケースでは非常に簡便に実装でき、便利そうだという印象が残りました。ExpertTodoのような企画を使って、プレイグラウンドのアプリとして色々試す場にしてうまく使ってくれるのは主催者としても非常に嬉しいです。また、多数の人にレビューされると「考えていなかったことも聞けるので嬉しい」と感想を頂き、こちらも非常に嬉しかったです。 他にも何とか動く形にしてアプリを持ってきてくれましたが、最後に触ったのが3ヶ月前で全然覚えてなかった、という人や、pushするとやたら重いと思ったらvendor/bundle配下が正常にignoreされていなかったという人がいて、色々面白かったです。こういうのが笑い話になるのが個人アプリの良いところで、気軽に失敗ができます。 私の方ですが、今Vue.jsを使ってSPA化しているので、そちらを何とか次回までに形にしたいと思っています。

レビューに残らない会話や質問

  • レビュー速いけどどうやってみんな見てるんですか?

    • Githubのfilesタブのページを開いたら、hoge_controllerやmodelなど、設定ファイルではない実体のファイルまで飛んでしまう。レビュー対象になりそうなファイルから読む。
    • ルーティング → コントローラー → モデルの順で見ると良い
  • あんまり自信ない(コミット粒度とか雑だし、わかりにくいかも)けど、レビューできますか?
    主催者の回答: PRに実装した機能(仕様)を書いてくれれば大丈夫!最悪、その場にいるので説明してもらえれば良いし、中級者がステップアップする勉強会なので、進んで失敗してください。仕事で失敗するとヤバイので、こういう場をうまく使って欲しいです笑 最初は緊張すると思いますが、一歩踏み出すと慣れてきますし得るものも多いので、ぜひ一歩踏み出して下さい。

その他、便利な何かについて

次の仕様について

現在の最新の仕様を、誰も実装できていないので今回は追加なしです・・・

もくもく会 → レビュー会のサイクルについて

もくもく会 → レビュー会のサイクルを基本として行っていますが、レビュー会で時間の関係でレビューできなかった方、レビュー会に都合で参加できない方がいるので、そのような方を対象にもくもく会でもレビューを行うこととします。今回アプリを作ったけど参加できなかった・・・という人がいたらもくもく会でも気にせずにレビューされに来て下さい。

次回について

次回は2/26(月)Speeeさんにて開催します。もくもく会となりますので、気軽にご参加ください。 今回アプリは作ったけど出席できなかった・・という人は持ってきて頂ければレビューしますので、ぜひ再度ご参加ください!

フロントエンドランチに出席した

弊社では昼休みにも部活動(勉強会?)が多く行われています。その中でも、前から興味があったフロントエンドランチに興味を持ち出席してみました。

コンセプトとしては、はてなさんがやっているフロントエンドランチと同様のものをやってみよう、というもの。

developer.hatenastaff.com

興味を持った理由としては

  • RailsアプリでVue.jsを使用しSPAを作っているのでVue.jsの話が聞きたい
  • Vue.jsだけでなく、フロントエンドの話を広く情報収集をしたい
  • 就業後の夜にフロントエンドの勉強会に毎回出席して、というのは時間的にちょっと厳しい

というものがあります。昼休みに気軽に集まるという時間的な負担の少なさや、トレンドや流れを把握できるだけでキャッチアップの指針ができる点、そして分からないことあれば聞けるというのはとてもありがたいです。

今日出席しただけで色々学びがあったので、継続的に出てみようという気持ちでいます。

新婚旅行にクリスマスマーケットを見にドイツへ行ってきた

12月初旬、新婚旅行でドイツに行ってきました。色々なネットの情報に助けられたので、あまり載ってなくて困った情報も含めて、残しておきたいと思います。

クリスマスマーケットについて

最高です。それ以外の言葉が浮かびませんでした。メリーゴーラウンドから見た景色は一生忘れないと思います。

屋台メシ

f:id:biibiebi:20171211044735j:plain f:id:biibiebi:20171211044721j:plain f:id:biibiebi:20171211044705j:plain f:id:biibiebi:20171211044649j:plain f:id:biibiebi:20171211044635j:plain

ココアも最高でした。

夜の風景

周り方

おすすめの周り方として、昼も同じ箇所に行くことをおすすめします。昼は人も少なく、小さい子やお年寄りが多いので、夜とはまた違った雰囲気が楽しめます。買い物をじっくりとするにもオススメです。 夜にはイルミネーションを楽しんで、昼に買い物をするというやり方がとても良かったです。 f:id:biibiebi:20171211045302j:plain

形態

個人旅行でした。一日、現地で一日ツアーを申し込みましたが、それ以外はホテルの手配も含めすべて自己で行いました。

ツアーと個人どっちが良い?

個人的には、個人で手配して大正解でした。ツアーでは時間に追われている感覚の方が強く、「こっちの道良さそうだな」とか「あっちに良さげなお店が見える」とか思ったときにそちらに行けないのがストレスでした。クリスマスマーケットの時期で、かつ初めて行く土地であれば、正直どこを歩いていても楽しいので、自由気ままに行動できる方が満足度はかなり高かったです。

一方で、チェックイン/アウト、電車の行く方向、道、ホテルの設備の不備など、すべて現地で英語で対応しなければいけないので、全く英語/ドイツ語ができない方や不自由なやり取りな中でコミュニケーションをとることにストレスを感じる方であれば、間違いなくツアーがオススメです。また、地域的に外れた場所にある観光地に行きたい場合は、乗り継ぎ等のハードルがかなりあるので、ツアーがオススメです。

またいくつかハプニングが起きたのですが、このようなことが起きないというのもツアーの良いところですね。電車乗り違えたかでスイスまで行ってしまい、この日は潰れました。

英語について

ホテル・電車については通じますが、それ以外は通じないことの方が多いです。観光地の買い物する場所に関しては例外的に通じる人もいますが、そこまで多くないです。ただし、向こうはひるまずにコミュニケーションを取ろうとしてくれるので、ボディランゲージや伝わりそうな単語のみを出して意思疎通ができるので、意外となんとかなります。しかし英語ができるように書いたものの、逆のケース(向こうが流暢すぎてこっちが理解できない)もありました。完全なボディーランゲージのみでも先方が意思を汲み取ってくれて、意思疎通ができる場合もあり、とにかく、理由がどうあれ1度通じないことにひるまなければ、結構何とかなりました。

人の様子

上で「ひるまない」と書いたのは、愛想が良くない人が多いからです。ニコニコしている人はあまりいなくて、接客業であろうとさいごの「ありがとうございます」を言うときですらピクリとも表情が動かない人が結構います。ただ、その人たちも不親切かと言うともちろんそうではなく、ある面では非常に優しいです。例えば、スーツケースを出すのにドアにひっかかっていると開けておいてくれたり、場合によっては一緒に運んでくれる人もいました。最初は愛想の悪さに驚いていましたが、普通に親切な人が多く旅行を通してすごく楽しむことができました。

トイレ

有料です。掃除係がドアのところにいて料金番をしているところ、切符を買って改札を通りトイレに入るようなところがあります。駅のトイレですら、咳き込んでえずくレベルの箇所がありました・・デパートやホテル、飲食店のトイレを使うのが無難です。

また、ウォシュレットや温かい便座はもれなく設置していませんでした。寒いのもあり便座が冷たいので、使い捨てのカバーでもあれば持って行くと良いかもです。

服装

季節としては12月の1週目でした。 厚手のダウン、薄手のセーター、下着、ズボン下、普通のズポン、底の分厚い靴(トレッキングシューズ)、厚手の靴下 で行きました。昼間、夜ともに寒いと感じることはなく、室内や昼間では少し暑く感じるときがありました。 ただしそれでもクリスマスマーケットに長時間滞在すると、石畳の影響で足が冷えてきました。ただし、足が冷える問題はこれ以上はどうすべきか対応がわからないので、 ある程度の時間でお店に入り休憩する、などの対応が必要でしょう。

電車

ジャーマンレールウェイパスという乗り放題パスを買っていきましたが、これは大正解でした。初めてづくしの中、ただでさえ大変なのに仕組みを理解していない路線の切符を買うのは精神的にも負担になるので、おとなしくパスを買ってしまっていて正解でした。

1等と2等どっち?

1st classの列車も乗れるランクにしました。
かなり大きいスーツケースで行ったのですが、上の荷物棚にスーツケースが入らないときがあり、席の横に置かざるを得ませんでした。 しかし1st classは通路も広く、スーツケースを置いても他の人が通れました。一方、2nd classはスーツケースを通路に置くのは到底ムリな道幅でした(日本の新幹線くらい)。 他の利点としては、単純に空いていて座れる可能性が高い上に席が広いという利点もあるので、慣れない土地でのスーツケースを運ぶ神経を使う移動では、これらの要素は多少料金が高くなっても捨てがたいなと思います。

切り離しがある?

上記のスイスまで行ってしまった件について、駅員に確認し、google mapと時間、便ともに間違っていないことを確認し乗車したのにも関わらず間違えたのは、電車の切り離しがあったせいではないかと予想しています。到着予定時刻に着いた駅名が目的地と異なっていて、そこで慌てて現在地を確認したらスイスにいることが分かり絶望しました。宮城方面と山形方面の列車切り離しの感覚で国外へ行ってしまうのさすがですね。

おそらくアナウンスはされていたのでしょうが、ドイツの電車では日本と違い英語アナウンスが録音されたもので放送されるわけではないため、並の英語力では聞き取るのが難しいです。日本語でも車掌さんのアナウンスを聞き取りづらいことがありますが、それの英語版だと思ってくれれば分かりやすいかと思います。これは改善して欲しいですね・・

エスカレーター・エレベーター

当たり前ですが、新幹線も基本的に数分遅れます。雪の影響か、最大で30分ほど遅れたこともありました。 一方で、新幹線が遅れてもその後のローカル線はまってくれないので、20kgのスーツケース2個運び階段ダッシュするという地獄を味わいました。

小さい駅ではエレベーターもエスカレーターもない駅が多いので、スーツケースを持っての移動は小さめの駅を含まないようなルートで行うことをオススメします。

水・食生活

食生活はとても合っていて、日本が恋しくなりませんでした。もともとパンとコーヒーとケーキが好きで生きているので、それらが毎日食べられるのが幸せでした。 写真には載せていませんがビールやディナーもとても美味しかったですよ。でも、個人的には朝ごはんとケーキを食べている時が一番幸せでした。

f:id:biibiebi:20171211043032j:plainf:id:biibiebi:20171211043016j:plainf:id:biibiebi:20171211043011j:plainf:id:biibiebi:20171211042847j:plain

ドイツの水道水は飲めるそうで、私もごくごく飲んでいました。硬水のためお腹を壊す人がいますが、私は大丈夫でした。ただし、髪の毛は一日でゴワゴワになります。セットが面倒なので前日にパーマをかけて旅行に臨んだのですが、コントロール不能の天パーのようになってしまい、どう頑張っても言うことを聞いてくれませんでした。洗い流さないトリートメントとワックスをベタベタにつけてニット帽で潰したら最終的にある程度まとまりはしましたが・・結果余計な手間が増えたので、行く前にパーマはかけない方が良いです(個人的な主観)。トリートメント等は、迷ったら持っていくか、現地で調達した方が良いです。

持っていってよかったもの

  • スリッパやアメニティ
    ドイツはエコでアメニティ類が充実していないので、何があるのか調べた方が良いです。

  • ティッシュ
    なぜか洗面台あたりにペーパータオルのように備え付けになっていて、移動できず何かと不便です。

  • フリース
    外の寒さ対策として持って行きましたが、その目的では不要でした。何に役に立ったかというと、部屋の寒さ対策です。部屋が広い、機器が古い等の影響で暖房の効きが悪いことが多かったので、部屋着として着ていました。

  • ドライヤー
    ないホテルがありました(確かあるって書いてあったと記憶しているのですが・・)

  • ビニール袋やエコバック
    エコのため、袋はもらえないか有料です。ちょっとした買い物用にコンビニサイズのビニール袋やエコバッグを持って行くと便利です。エコバッグは現地のドラッグストアで調達もできます。

  • マスク
    外気の乾燥に加え空調の影響で室内はとても乾燥しているので、部屋で寝るときに使用するとノドを痛めなくてすみます。

持っていかなくてよかったもの

  • ケトル
    ケトルはなくてもネスプレッソのエスプレッソマシーンが置いてあるホテルが多く、そちらでお湯を使えました。しかし、ないホテルもあると思うのでそこはきちんと調べましょう。 f:id:biibiebi:20171211044128j:plain

Step-to-Rails-Expert.rb第13回を開催しました

11/27(月)にStep-to-Rails-Expert.rb第13回を実施しました。

step-to-rails-expert-rb.connpass.com

流れ

当日の流れは

  • 自己紹介
  • 会の概要説明
  • レビュー会
  • 懇親会

という形で進めました。

会の様子

今回は、主催者の他に参加者二人分のレビューを行いました(チャレンジして頂けてありがたい)。 結構いろいろな指摘・質問・議論が出てきました。主催者のebiのPRに対するコメントを以下に並べます。

  • il8nの漏れ
  • i18nをフルパスで書いている(t("task_files.index.task_file_name")
  • import Vue from 'vue/dist/vue.esm.js'import Vue from 'vue/dist/vue.esm'で動くはず
  • 表記揺れ(引数のカッコの有無など)
  • factory girl内で遅延評価を使っておくべき箇所
    { confirmed_at DateTime.current }と書かないと読み込まれたタイミングの時刻になってしまう
  • 特に理由がなければ、if !ではなくunlessを使う(Rubyスタイルガイドにのっている)
  • dependent: :destroyが漏れている
  • capybaraでsleepはなるべく使わず、capybaraのオプションで何とかしよう

特になるほど、と思ったのが

  • is_doneとdoneどっち(タスクの終了を表すカラム)
    Railsの世界では、isは付けない方が良いが、カラム名は・・・と考えると悩ましいが、つけない派が多かったです。 予約語っぽいカラム名(例えばprivate)をつけるときはisをつけてごまかすという意見もありました。

  • タスクの終了させる機能についての設計
    現在、Task.is_doneをtrueにするために、PATCH /task_stateを投げている(TaskStatesController#updateを実装している)が、

    • Completionを作成する、という考え方でPOST /tasks/:id/completionを投げるべきでは
    • また、影響範囲の最小化と可読性のため、トップレベルではなくネームスペースを区切る、すなわちTasks::ComplatesController#createに変更したら良いのでは

という意見を頂き、本当にその通りだなと思いました。2点の指摘両方とも汎用的に使える考え方なので気をつけていきたいですね。

また、私のレビューではないですが、clearance gemの作成するusersテーブルのemailカラムに、デフォルトではユニーク制約がついていないというハマりどころが発見されたのにびっくりしました。PR送った方が良い気がしますね・・・

主催者以外のレビューコメントは、以下のPRをご覧ください。conversationsを確認すれば、だいたいの内容が分かると思います。

議論の中で紹介されたリンクを貼っておきます。

ロケールファイルがきちんとメンテされているというのは非常に良いので、私も使おうと思いました。

次の仕様について

  • Level 1 is: タスクの複製(ひもづけは不要・タスクのどの内容まで複製するか選べない)
  • Level 2 is: タスクに優先度をつける
  • Level 3 is: Googleカレンダー共有

不明点があればぜひお問い合わせください。

反省点

時間配分が難しいので課題ですね。時間が足りず延長してしまい申し訳なかったです。 ただ、レビューをきっかけにせっかく良い議論が起こっているときに話を切るのももったいなく、悩ましいです。

次回について

次回は12/21(木)で、ExpertTodoのもくもく会です! 今まで参加したことない方は、雰囲気をつかむのに丁度良いのでぜひご参加ください。普段参加されている方もぜひ来てくださいね。 なお、途中参加も可能なので、既に最小実装をしてある人のリポジトリをforkするなどしてぜひご参加頂ければと思います。 ご興味ある方は、Step-to-Rails-Expert.rbのslackへこちらから招待を受けてください。

ところで

懇親会にて神速さんが書籍「CLEAN CODE FOR RAILS」(技術書展で販売)を持ってきてくださったので購入できました。 弊社LICTOORのメンバーも欲しがっていたので、購入でき非常にありがたかったです。ありがとうございました!

Step-to-Rails-Expert.rb第12回を開催しました

10/30(月)にStep-to-Rails-Expert.rb第12回を実施しました(祝1年:tada:)。

step-to-rails-expert-rb.connpass.com

お礼

Step-to-Rails-Expert.rbは開催一周年を迎えることができました。 現在会場提供頂いている株式会社Speee様、勉強会立ち上げ当初会場提供頂いていた株式会社アニメイトラボ様、実績もないコミュニティにロゴを提供してくださったセラリンさん、特に感謝申し上げます。これからもスタッフのtwo_sannとともに、実りあるコミュニティ活動を行っていくよう努力していきます。 また、参加者の方(特にいつも参加してくださっている方達)にもお礼申し上げます。みなさんから色々教わることで技術者としてもとても大きく成長することができました。これからも参加したくなるような企画を続けていきますので、ぜひ引き続きご参加頂けると幸いです。

流れ

当日の流れは

という形で進めました。

会の様子

作業&初参加の方への説明&雑談をしていました。 作業に集中されている方もいれば、「Heroku久しぶりに触るんだけどGithubと連携できるようになっているんだ」とか「コミットメッセージに絵文字入れるの良い」など、軽く雑談しながら進める方もいたり、好きに過ごされている感じが非常によかったです。 他にもRailsGirlsのコーチをやっている方が参加していたのでRailsGirlsについて色々教えてもらったり、GoRails良いよとか教えてもらったりもしました。

技術的なことに関しては、主催者のリポジトリ(ローカルでもPostgresを利用している)をforkして進める場合、MySQLSQLiteを使うケースでconfig/database.ymlだけ直してrails db:migrateを行うとDeviseのTrackableの箇所でundefined method inet とエラーを吐いてしまうので、該当のmigrationファイルのcurrent_sign_in_iplast_sign_in_ipをstringに修正する必要があるということを知れて、勉強になりました。

反省点

以下の2点を改善しておこうと思います。

  • README(ルールの記載)について、英語のものも用意しておく
  • 必ず元リポジトリもしくは他の参加者のリポジトリをforkするルールをもう少し強調して書いておく

後者について、「Railsで何かを作るときに参考にできるものが少ない」という辛さを、forkされたリポジトリを追えるようにすることで改善できるという考えがあり、結構大事なルールなのでもう少し伝わりやすく書いた方が良かったですね。初参加の方がいると反省点が浮かぶので非常にありがたいです。

次回について

次回は11/27(月)で、ExpertTodoのレビュー会です! 今アプリを作っている方は、ぜひ区切りの良いところまで完成させてレビューしてもらいましょう!次回初参加する予定の方は、アプリを作らなくても参加できますので、雰囲気をつかむ目的で参加して頂いても大丈夫です。 ご興味ある方は、Step-to-Rails-Expert.rbのslackへこちらから招待を受けてください。

Step-to-Rails-Expert.rb第11回を開催しました

9/25(月)にStep-to-Rails-Expert.rb第11回を実施しました。

step-to-rails-expert-rb.connpass.com

流れ

当日の流れは

  • 自己紹介
  • レビュー会
  • 懇親会

という形で進めました。

会の様子

今回は、主催者とスタッフのtwo_sannの二人分のレビューを行いました(他にもチャレンジしてくださった方がいましたが時間が足りなかったそう)。 元リポジトリはこちら

github.com

結構いろいろな指摘・質問・議論が出てきました。一部を並べると

  • nullを許容するようなカラムにはnull: false, default: '' の方が良いのでは
  • 文字列とシンボル両方かならシンボルの方が(本当に若干)パフォーマンスが良い
  • bulletで、N+1クエリがあったら例外投げる設定がある
  • I18n#l便利
  • I18nを使う場合、viewでplaceholder: trueyamlに使用する文字列を定義することができる
  • 1コミットはテストが通る状態がベスト(あくまでベスト)なので、rubocopのコミットはなるべく別コミットにしない方が良い
  • Strong Parameterで、params.require(:task).permit(Task.columns.map(&:name).map(&:to_sym))(全てのカラムを許可する)はカラムが増えたときに危険
  • POSIX準拠違反(See: https://www.slideshare.net/koic/stairway-to-the-pragmatic-rails-programmer#54

I18n周りの機能について色々知れて勉強になりました。 また、nullを許容するか否かについて、個人的には「ない状態」を表すためにnullではなく""を使うと、場合によってはnullを使用し別の場合は""を使用するケースがあり、複雑性が増すのではと思っていたので、極力nullableなカラムを定義しないようにし(テーブル分割する)、やむをえない場合はnull可にするという方向性で考えていました。 ですが、そもそも意味論的にnullより""の方がふさわしいです。nullは不明な状態なので、""とは意味が違います(指摘され思い出した)。あとはGemでカラムを生やすものは、null: false, default: ""を使っているのが多いので、統一できるという利点もあると思い考えを改めました。あとは空文字だとユニーク制約にひっかかってしまうので、validates :hoge, uniqueness: true, if:のように:ifオプションをつけないとなぁと思うなどしました。 ところで、カラムにNULLを許可する弊害については以下の書籍がとてもわかりやすく解説しているので、ぜひ一読することをおすすめします。 gihyo.jp

議論の中で紹介されたリンクを貼っておきます。

次の仕様

必須以外はランダムで選びました。この中から、順番に解いても例えばLevel 3だけでも解いても良いです。 前回までの課題の最小仕様までを自分で実装して頂いても構いません。

  • 必須: タスクの状態変更(単数タスク)
  • Level 1 is: 通常ユーザーの作成時に確認メールを送信する
  • Level 2 is: タスクへのファイルのアタッチ(複数)
  • Level 3 is: タスクの状態変更(複数一括)

次回について

次回は10/30(月)で、ExpertTodoのもくもく回です! 今まで参加したことない方は、雰囲気をつかむのに丁度良いのでぜひご参加ください。普段参加されている方もぜひ来てくださいね。 なお、途中参加も可能なので、既に最小実装をしてある人のリポジトリをforkするなどしてぜひご参加頂ければと思います。 ご興味ある方は、Step-to-Rails-Expert.rbのslackへこちらから招待を受けてください。