Rails Webook

Web業界で働いています。Railsを中心にプログラミングや事業開発のようなことを書いていきます。

RailsのActiveRecordのAutosaveAssociationのコードリーディング

RailsのActiveRecordのautosave機能についてソースコードリーディングをしました。

Autosaveは、親モデルが保存された時に、関連するモデルも一緒に作成/更新する機能を提供します。 また、関連するモデルでmark_for_destricutionメソッドを実行し、削除フラグを立てることで、親モデルを保存時に関連レコードを削除することもできます。
これらのレコードの操作はトランザクション内で実行されるのでDBでデータ不整合が発生しません。

続きを読む

JWT(Json Web Tpken)のRuby実装のruby-jwtのコードリーディング

f:id:nipe880324:20181118151202p:plain:w420

JWT(Json Web Token)のRuby実装のruby-jwtのコードリーディングをしました。
JWTの仕様やその実装についてみまして。仕様がシンプルなので、本体のコード量は500行程度で読みやすかったです。

  • 目的
  • 1. JWTとは
    • ヘッダー部
    • ペイロード部
    • 電子署名部
    • 注意点
    • 2. ruby-jwtの簡単な使い方
  • 3. JWTのエンコード処理の実装
  • 4. JWTのデコード処理の実装
  • まとめ
  • 参考
続きを読む

Railsの認証機能Gemのclearanceのコードリーディング

Railsに認証機能を追加するGemのClearanceのソースコードを読んでみました。
本体のコード量は、1,200行程度ですので比較的読みやすいと思います。

Clearnaceは、メールとパスワードで認証できるようにする機能を提供しています。
目的は、小さく、シンプルで、よくテストされていることを意識しており、また、デフォルトを用意しているが簡単に変更できるようなことも気にしているような作りのようです。

  • 1. コードを読む目的
  • 2. 基本情報
    • 対象バージョン
    • コード量
    • ディレクトリ構成
    • 提供している主な機能
    • 簡単な使い方
    • クラス図
    • DBモデル
  • 3. 認証機能の本体となる実装方法
  • 4. Railsで認証機能を使う方法
  • 5. まとめ
続きを読む

Railsのページネーション機能のKaminariのソースコードリーディング

Railsにページネーション機能を追加するKaminariのソースコードを読んでみてまとめました。 本体のコード量は、700行程度ですので、比較的読みやすいと思います。  

モデルはActiveRecord::Baseのメソッドの名前空間を汚さずに、ページネーションのメソッドを追加する方法がライブラリ開発では参考になると思いました。
また、ビューあたりはRailsらしい黒魔術があり処理の流れや処理を理解するのが難しいですが、表示ロジックとHTML表示を分けてる実装は面白かったです。

  • 1. 目的
  • 2. 基本情報
    • 対象バージョン
    • コード量
    • ディレクトリ構成
    • ドキュメント
    • 基本的な使い方
  • 3. ActiveRecordのpageメソッドとperメソッドの実装方法
  • 4. ビューのpaginateヘルパーメソッドの実装方法
  • 5. Configuの実装方法
  • まとめ
続きを読む

Railsの権限管理CanCanCanのソースコードリーディング

Railsの権限管理のCanCanCanのソースコードを読んでみてまとめました。 本体のコード量的は1,000行程度で、同じ権限管理をするPundit(300行程度)と比べると多めです。

  • 1. 目的
  • 2. 基本情報
    • 対象バージョン
    • コード量
    • ディレクトリ構成
    • クラス図
    • ドキュメント
    • 基本的な使い方
  • 3. CanCanCanの権限管理を実装する方法
  • 4. CanCanCanの権限管理をRailsに東吾する方法
  • 5. その他気になったことメモ
  • まとめ
続きを読む

Railsの権限管理Punditのソースコードリーディング

Railsの権限管理のPunditのソースコードを読んでみてまとめました。 本体のコード量的には300行程度なので比較的簡単に読めるかと思います。

  • 1. 目的
  • 2. 基本情報
    • 対象バージョン
    • コード量
    • ディレクトリ構成
    • クラス図
    • ドキュメント
  • 3. Punditの権限管理の実装する方法
  • 4. 権限管理機能をRailsと統合する方法
  • 5. RailsのGeneratorの作り方
    • 5.1. pundit:install
    • 5.2. pundit:policy [model]
  • まとめ
続きを読む

Rails5.2から入ったActiveStorageのソースコードを読んでみた

f:id:nipe880324:20180818220123p:plain:w420

Active Storageの実装にいくつか興味があるところがあったので、いくつかピックアップしてソースコードリーディングをしてみました。
ライブラリということもあり、ビジネスロジックのややこいところもないため、シンプルで読みやすいコードでしたのでぜひ興味があるかたは読んでみてください。

ソースコードはRails 5.2.1時点のものです。
読む際は、Active Storageの概要 | Rails ガイドを軽く読んでおいて挙動を軽く確認しておくと読みやすいと思います。

続きを読む