ページ内ナビ
概要
CanCanCanはRubyとRuby on Rails向けの認可ライブラリです。ユーザーがどのresourceへどのactionを実行できるかをAbilityへ定義し、コントローラー、ビュー、database queryで同じruleを再利用できます。Rails向けhelperを使うとresourceの読み込みと認可もまとめられます。
特徴と向いている用途
公式資料に基づく紹介・実機未検証 · 内容確認日:
主な特徴
認可ルールをAbilityへまとめて一元管理する
CanCan::AbilityをincludeしたAbility classへcan ruleを定義し、controllerやviewへ同じ条件を重複して書かずに権限判定を共有できます。
出典:[1]
can?とauthorize!で表示・処理の可否を確認する
viewやcontrollerではcan?・cannot?で判定でき、authorize!は許可されていないactionで例外を発生させます。
出典:[1]
accessible_byで閲覧可能なrecordだけを取得する
model queryにaccessible_by(current_ability)を適用し、Ability ruleに基づいて利用者がアクセスできるrecordへ結果を絞れます。
出典:[1]
向いている用途
Railsアプリの認可条件を画面・controller・queryで統一したい場合に向く
roleや所有者、resource属性に応じた認可を複数layerで同じruleから評価したいRails applicationに適します。
出典:[1]
導入前の確認
認証ではなく認可を担当するlibraryとして分離する
CanCanCanが扱うのはresourceへのpermissionです。loginやidentity verificationは別のauthentication機構で行い、認証結果をAbilityへ渡す構成にします。
出典:[1]
自動load/authorizeの挙動をcontrollerごとにtestする
load_and_authorize_resourceはRESTful controllerのresource読み込みと認可を自動化します。custom actionや複雑なassociationでは意図したrecordとruleが使われるかをtestで確認します。
出典:[1]
参考にした公式資料
- [1]CanCanCan 3.5.0 README(2026-10-03)
- [2]CanCanCan 3.5.0 gemspec(2026-10-03)
- [3]CanCanCan 3.5.0 release(2026-10-03)
- [4]CanCanCommunity/cancancan repository(2026-10-03)
- [5]CanCanCan MIT license(2026-10-03)
編集部からの補足
認証済みユーザーが「何をできるか」を一か所で管理したいRailsアプリに向きます。ルールを増やすほどAbilityの責務が膨らむため、domain単位の分割とauthorization testを早めに用意すると保守しやすくなります。
3ステップで試す
- 1
CanCanCan 3.5.0をGemfileへ追加する
Rails projectのGemfileへstable releaseを固定して追加し、
bundle installを実行します。gem 'cancancan', '3.5.0' - 2
Ability classを生成する
認可ruleを置く
Abilityclassを生成します。bin/rails generate cancan:ability - 3
画面またはcontrollerでpermissionを確認する
Abilityへ
can :read, Post, ...等のruleを定義し、viewではcan?、controllerではauthorize!等で同じpermissionを利用します。can? :read, @post
成長
成長の推移 · 直近30日
5,681 Stars
推移データを蓄積中です。
開発アクティビティ
直近90日・週次
- Commit(直近30日)
- 1
- Open PR
- 31
開発アクティビティを蓄積中です。
Built with
カテゴリとタグ
GitHubデータ
関連情報
関連記事を投稿するこのOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。
あわせて探訪
- Chatwoot37,488 Stars
共通タグ 1件 · 同じ言語
Web chat・email・WhatsApp・social channelをshared inbox・automation・AI supportへ統合する
Ruby - Vagrant27,211 Stars
共通タグ 1件 · 同じ言語
Vagrantfileでprovider差を隠し、portableな開発環境を配布するsource-available tool
Ruby - GitLab CE/EE Mirror24,554 Stars
共通タグ 1件 · 同じ言語
GitLabの巨大なDevOps codebaseをGitHub mirrorから参照する
Ruby - Ruby23,771 Stars
共通タグ 1件 · 同じ言語
Web開発・自動化からCRuby VM、YJIT/ZJITまで同じ上流で追える言語処理系
Ruby - OpenProject16,299 Stars
共通タグ 1件 · 同じ言語
Gantt・Agile・工数・Wiki・会議を一つにまとめてセルフホストするプロジェクト管理基盤
Ruby - Draper5,277 Stars
共通タグ 2件 · 共通カテゴリ 1件 · 同じ言語
Rails modelをdecorator/view-modelでwrapし、presentation logicをmodelやglobal helperから分離するRuby library
Ruby
情報の誤りを報告
掲載内容に誤りや古い情報があればお知らせください。