BackEnd

Rails Developer Meetup に参加してきました【2日目】

投稿日:

はじめに

3月25日に開催されたRails Developer Meetup(2日目)に参加しました。
私が拝聴したセッションの内容の一部を簡単に紹介します。
1日目の記事はこちら

Rails Developer Meetup

2日目の会場は株式会社ドリコム様のオフィスの一角をお借りして行われました。
イベントの詳細は下記よりご確認ください。
http://techplay.jp/event/655769

また、資料につきましては下記のサイト様がまとめてくださっています。
https://qiita.com/dyoshimitsu/items/20a41ab656d2da80e4d9

それでは、当日の内容を振り返ります。

テストのないレガシーなRailsアプリをリファクタした話

株式会社スタディスト様のランチセッションでの発表です。

内容としては5年ほど前に開発したBtoB向けサービスのRailsのバージョンをおよそ半年かけて上げる際に行ったリファクタリングに関しての発表です。

なぜリファクタリングしたのか

Railsのバージョンを上げる際様々な箇所でエラーが発生します(e.g. 引数が変わった)
リファクタリングを行うことで対応箇所を減らすことができます。

リファクタリングでは下記の3つの要点があります。

  1. コードを3種類に分類する
  2. 処理をモデルに寄せる
  3. 処理を共通化する

それぞれについて説明します。

コードを3種類に分類する

3種類とは、「必要かつ使用が明確な処理」、「不要な処理」、「(必要なのか)わからない処理」です。

「必要かつ使用が明確な処理」に関してはあるべき流れに沿って書き直しました。

「不要な処理」に関しては勿論削除しました。
ただし、メソッドは呼ばれているけれど実は呼び出し元も不要な場合があるので、本当に不要なのか確認するのが大変だったそうです。

「わからない処理」に関しては、本流とは別の場所にまとめて、不要だとわかったときに削除しました。

モデルに寄せる

モデルに寄せることでテストがしやすくなります(コントローラのテストは時間がかかる)
また、今後サービス層などを導入する際に処理を分離しやすくなります。

共通化

コントローラ感はconcernに、APIとWeb間はcommonに、モデル間はmoduleに共通の処理を記述していきます。

環境面の整理

コードの品質を上げるためにRubocopを導入し、プルリク時にSideCIで自動チェックするようにしました。

また、プルリクに関しては最低2人がOKを出すまでマージしないなど、ルール面を整備しました。

リファクタリング結果

コードの行数が約44,000行から約28,000行に削減され、テストコードの行数が6行から約3000行に増加しました。

知性の習得 – 新人研修内容の一考察

本発表は新人教育を行う方(メンター)の養成講座のような内容です。

新人教育では仕事のやり方などを教えますが、新人に本当に必要なのはいかにして学んでいくかという方法ではないかという考えから、知性とは何かということに関して考察します。

また、発表では最初に新人教育に当たっての参考書籍が紹介されていますので、初学者の方は一読をおすすめします。

知性とは

知性に関しては発表資料から引用します。

  • 生きていくために有用なあらゆる力
  • 世界の幸せを増やす力 (性善説)
  • 抽象化された技術力 (今日の文脈では)
    • 適用できる範囲が広く長く使える
  • 人生と世界を豊かに鮮やかにする力
  • 冒険の旅の最初にあげたいスキルNo.1(王様100人に聞きました)
  • 採用担当者の言う「地頭がいい人」は高いレベルで「知性」を持っている人だと思う

型と実践

知性は「型」と「実践」に分解することができます。

「型」と「知識」を野球に例えると、「型」はボールの投げ方やバットの振り方などの知識で「実践」は実際にボールを撃ってみる行為です。

見て学ぶは本当か

日々の観察からわかるのは結果であり、他にどんな「型」があって、なぜその「型」を使ったのかという理由まではわかりません。

研修で教えるべきは「実践」

「型」については座学で学ぶことができますが、「実践」はメンターがいる方がより理解が深まります。

FintechとRailsとgRPCと

株式会社お金のデザインのサービス(THEO)を例に、マイクロサービスの良さとgRPCのメリット・デメリットについての発表です。
全体的に駆け足の発表となりました。

個人的には一番おもしろいセッションだったので、資料の一読をお薦めします。

どのような開発チームが良いか

入出金や口座管理など高い可用性とセキュリティが求められる箇所はJava、UI/UXの部分はRailsやVue.js、市場で証券を売買する部分はC++などそれぞれ得意な分野を担当する。

どのように各サービスをつなぐか

ここで登場するのがgRPCです。

APIの設計方針としてREST、RPCが、データの表現形式としてJSON、Protocol Buffersなどがあります。
登壇者曰く、RESTとRPCの違いの一つとして「APIの設計時にどこに着目するか」が挙げられます。

RESTではリソースに着目し、RPCではアクションに着目します。
RESTの方が向いているケースとしてCRUD、RPCの方が向いているケースとしてSlackのようなチャットサービスのAPIが挙げられていました。

チャットサービスを例にしたAPI

ユーザがあるチャンネルから退出するアクションをleave、あるユーザをチャンネルから追放するアクションをkickとすると、leaveとkickを綺麗なRESTで表現するのは難しいです。

これらをRPCで表現すると下記のようになります。

URL: https://example.com/api/leaveFromChannel
body: { "channel_id": 123, "user_id": 456 }

URL: https://example.com/api/kickFromChannel
body: { "channel_id": 123, "user_id": 456 }

gRPCでの表現形式

デフォルトではProtocol Buffer(Protobuf)が採用されています。
Protobuf大きなのメリットしては下記が挙げられます。

  • 型がある
  • messageに相当するクラスが自動生成される
  • 違うチームの開発者ともコミュニケーションしやすい

反面デメリットとしは下記が挙げられます。

  • curlなどで手軽に試せない
  • 確認のために簡単なクライアントを書く必要がる

RailsへのgRPCの導入

導入に関しましては発表資料を御覧ください。

さいごに

一番興味を持ったのはgRPCでした。
gRPCに関してはなかなか使う機会が無いのですが、ぜひ使ってみたいと思います。

blog-page_footer_336




blog-page_footer_336




-BackEnd
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

Stripe Connectを使ってCheckoutを利用した継続課金を実装

1 はじめに1.1 Checkoutを使う場合の動線2 決済画面への遷移2.1 マイグレーション2.2 Checkout Sessionの作成3 決済完了後の制御4 おまけ4.1 ローカルでWebho ...

Go言語

Goの抽象構文木でコードを解析する

1 はじめに1.1 抽象構文木とは2 ASTでコードを解析する2.1 サンプルコードを解析する2.2 構造体の木構造を確認する2.3 メソッドの木構造を確認する3 任意の対象を捜索する4 ASTをファ ...

laravel logo

Laravel Cashier サブスクリプションに使用するテーブルを理解する

1 はじめに2 Laravel Cashierのテーブル2.1 usersテーブル2.2 subscriptionsテーブル2.3 supscription_itemsテーブル3 課金情報の更新方法4 ...

php logo

PHPでGmail APIを利用してメールデータを取得してみる その2

1 はじめに2 メールの内容取得3 MessagePartオブジェクト3.1 件名3.2 本文4 multipartの場合4.1 本文の取得5 全文6 さいごに7 おすすめ書籍 はじめに 前回は、Gm ...

Go言語

Go言語の基礎〜基本構文その1〜

1 はじめに2 変数2.1 変数の定義2.2 暗黙的な定義2.3 varと暗黙的な定義2.4 ローカル変数とパッケージ変数3 定数3.1 const3.2 iota4 関数4.1 関数定義の基本4.2 ...

フォロー

blog-page_side_responsive

2018年3月
 123
45678910
11121314151617
18192021222324
25262728293031

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。