{"id":5358,"date":"2025-09-13T04:19:42","date_gmt":"2025-09-13T04:19:42","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=5358"},"modified":"2025-09-13T04:19:42","modified_gmt":"2025-09-13T04:19:42","slug":"rails-action_policy-gem%e3%81%ae%e7%b4%b9%e4%bb%8b%ef%bd%9ctechracho-by-bps%e6%a0%aa%e5%bc%8f%e4%bc%9a%e7%a4%be","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/5358\/","title":{"rendered":"Rails: action_policy gem\u306e\u7d39\u4ecb\uff5cTechRacho by BPS\u682a\u5f0f\u4f1a\u793e"},"content":{"rendered":"\n<\/p>\n<div id=\"js-single-body\">\n<p>Rails\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u5229\u7528\u53ef\u80fd\u306a\u8a8d\u53efgem\u3067\u3042\u308b<a target=\"_blank\" href=\"https:\/\/github.com\/palkan\/action_policy\" data-wpel-link=\"external\" target=\"_blank\" rel=\"external noopener\" class=\"wpel-icon-right\">action_policy<span class=\"wpel-icon wpel-image wpel-icon-19\"\/><\/a>\u306e\u6a5f\u80fd\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<br \/>\u3053\u3053\u3067\u306f\u985e\u4f3c\u3057\u305f\u30d1\u30e9\u30c0\u30a4\u30e0\u3067\u69cb\u6210\u3055\u308c\u308b<a target=\"_blank\" href=\"https:\/\/github.com\/varvet\/pundit\" data-wpel-link=\"external\" target=\"_blank\" rel=\"external noopener\" class=\"wpel-icon-right\">pundit<span class=\"wpel-icon wpel-image wpel-icon-19\"\/><\/a>\u3068\u6bd4\u8f03\u3057\u306a\u304c\u3089\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/github.com\/palkan\/action_policy\" data-wpel-link=\"external\" target=\"_blank\" rel=\"external noopener\"><img decoding=\"async\" src=\"https:\/\/gh-card.dev\/repos\/palkan\/action_policy.svg\" alt=\"palkan\/action_policy - GitHub\"\/><\/a><br \/><a target=\"_blank\" href=\"https:\/\/github.com\/varvet\/pundit\" data-wpel-link=\"external\" target=\"_blank\" rel=\"external noopener\"><img decoding=\"async\" src=\"https:\/\/gh-card.dev\/repos\/varvet\/pundit.svg\" alt=\"varvet\/pundit - GitHub\"\/><\/a><\/p>\n<p>\u4ed6\u306b\u306f<a target=\"_blank\" href=\"https:\/\/github.com\/CanCanCommunity\/cancancan\" data-wpel-link=\"external\" target=\"_blank\" rel=\"external noopener\" class=\"wpel-icon-right\">cancancan<span class=\"wpel-icon wpel-image wpel-icon-19\"\/><\/a> gem\u3082\u6709\u540d\u3067\u306f\u3042\u308a\u307e\u3059\u304c\u3001\u3053\u3061\u3089\u3068\u306e\u6bd4\u8f03\u306f\u65e2\u5b58\u8a18\u4e8b\u306e\u300c<a target=\"_blank\" href=\"https:\/\/www.vector-logic.com\/blog\/posts\/authorizing-controller-endpoints-in-rails-punit-versus-cancan\" data-wpel-link=\"external\" target=\"_blank\" rel=\"external noopener\" class=\"wpel-icon-right\">Authorization in Rails controllers: Pundit versus CanCan<span class=\"wpel-icon wpel-image wpel-icon-19\"\/><\/a>\u300d\u306a\u3069\u306b\u8b72\u308a\u307e\u3059\u3002<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/github.com\/CanCanCommunity\/cancancan\" data-wpel-link=\"external\" target=\"_blank\" rel=\"external noopener\"><img decoding=\"async\" src=\"https:\/\/gh-card.dev\/repos\/CanCanCommunity\/cancancan.svg\" alt=\"CanCanCommunity\/cancancan - GitHub\"\/><\/a><\/p>\n<h2>pundit\u3068action_policy<\/h2>\n<p>pundit\u3068action_policy\u306e\u6a5f\u80fd\u306f\u304b\u306a\u308a\u8fd1\u3057\u3044\u3067\u3059\u3002action_policy\u304cpundit\u3092\u53c2\u8003\u306b\u3057\u3066\u3044\u308b\u305f\u3081\u5f53\u7136\u306e\u8a71\u3067\u306f\u3042\u308a\u307e\u3059\u3002<br \/>action_policy\u81ea\u8eab\u306f\u300cpundit\u3067\u5fc5\u8981\u3068\u3055\u308c\u3066\u3044\u305fHACK\u304caction_policy\u306b\u306a\u3063\u305f\u300d\u3068\u4e3b\u5f35\u3057\u3066\u304a\u308a\u3001\u3053\u308c\u304c\u4e21\u8005\u306e\u5dee\u7570\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/actionpolicy.evilmartians.io\/#\/?id=what-about-the-existing-solutions\" data-wpel-link=\"external\" target=\"_blank\" rel=\"external noopener\" class=\"wpel-icon-right\">What about the existing solutions? &#8212; Action Policy: authorization framework for Ruby\/Rails applications<span class=\"wpel-icon wpel-image wpel-icon-19\"\/><\/a><\/p>\n<p>\u4ee5\u4e0b\u3001\u7d30\u304b\u3044\u8a71\u3067\u3059\u304c\u4f8b\u3092\u4e8c\u3064\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n<h3>namespace\u306e\u63a8\u8ad6<\/h3>\n<p>action_policy\u3067\u306fPolicy\u306enamespace\u3092\u63a8\u8ad6\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/actionpolicy.evilmartians.io\/#\/.\/namespaces\" data-wpel-link=\"external\" target=\"_blank\" rel=\"external noopener\" class=\"wpel-icon-right\">Namespaces &#8212; Action Policy: authorization framework for Ruby\/Rails applications<span class=\"wpel-icon wpel-image wpel-icon-19\"\/><\/a><\/p>\n<pre><code class=\"ruby\">module Admin\n  class UsersController <\/code><\/pre>\n<p>\u4e00\u65b9\u3067pundti\u3067\u306f\u547c\u3073\u51fa\u3057\u6642\u306b\u660e\u793a\u7684\u306a\u6307\u5b9a\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/github.com\/varvet\/pundit?tab=readme-ov-file#policy-namespacing\" data-wpel-link=\"external\" target=\"_blank\" rel=\"external noopener\" class=\"wpel-icon-right\">Policy Namespacing &#8212; varvet\/pundit: Minimal authorization through OO design and pure Ruby classes<span class=\"wpel-icon wpel-image wpel-icon-19\"\/><\/a><\/p>\n<pre><code class=\"ruby\">authorize(post)                   # =&gt; will look for a PostPolicy\nauthorize([:admin, post])         # =&gt; will look for an Admin::PostPolicy\nauthorize([:foo, :bar, post])     # =&gt; will look for a Foo::Bar::PostPolicy\n\npolicy_scope(Post)                # =&gt; will look for a PostPolicy::Scope\npolicy_scope([:admin, Post])      # =&gt; will look for an Admin::PostPolicy::Scope\npolicy_scope([:foo, :bar, Post])  # =&gt; will look for a Foo::Bar::PostPolicy::Scope\n<\/code><\/pre>\n<h3>\u8a8d\u53ef\u5bfe\u8c61\u540d\u3068Policy\u30af\u30e9\u30b9\u540d\u306e\u4e0d\u4e00\u81f4\u306e\u51e6\u7406<\/h3>\n<p>\u4f8b\u3068\u3057\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u6ce8\u6587\uff08<code>Order<\/code>\uff09\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3059\u308b\u305f\u3081\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u4f5c\u6210\u3057\u3001\u3053\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u30ea\u30af\u30a8\u30b9\u30c8\u3059\u308b\u30dc\u30bf\u30f3\u3092View\u3067\u5b9f\u88c5\u3059\u308b\u3053\u3068\u306b\u3057\u307e\u3059\u3002<\/p>\n<pre><code class=\"ruby\">class Orders::CancelsController <\/code><\/pre>\n<p>pundit\u3067\u5b9f\u88c5\u3059\u308b\u5834\u5408\u3001\u307e\u305a\u4ee5\u4e0b\u306e\u3088\u3046\u306aPolicy\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<pre><code class=\"ruby\">class Orders::CancelPolicy <\/code><\/pre>\n<p>pundit\u3067\u306f\u3001\u3053\u306e\u3088\u3046\u306b\u8a8d\u53ef\u5bfe\u8c61\u3068\u30af\u30e9\u30b9\u540d\u304c\u4e00\u81f4\u3057\u3066\u3044\u306a\u3044Policy\u306b\u3064\u3044\u3066\u3001View\u304b\u3089\u547c\u3073\u51fa\u3059\u305f\u3081\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u304c\u82e5\u5e72\u5f31\u3044\u3067\u3059\u3002<br \/>\u901a\u5e38\u3067\u3042\u308c\u3070 <code>#policy<\/code> \u3068\u3044\u3046\u30d8\u30eb\u30d1\u30fc\u30e1\u30bd\u30c3\u30c9\u3092\u5229\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre><code class=\"erb\">\n\n  \n\n<\/code><\/pre>\n<p>\u3057\u304b\u3057\u3001\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u901a\u3058\u3066 <code>Orders::CancelPolicy<\/code> \u306e\u30ed\u30b8\u30c3\u30af\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n<pre><code class=\"erb\">\n\n\n  \n\n\n\n\n  \n\n\n\n\n  \n\n<\/code><\/pre>\n<p>\u5358\u306bPolicy\u3092\u547c\u3073\u51fa\u3059\u3060\u3051\u3067\u3042\u308c\u3070\u3001 <code>Orders::CancelPolicy.new<\/code> \u3068\u3059\u308c\u3070\u53ef\u80fd\u3067\u3059\u3002<\/p>\n<pre><code class=\"erb\">\n  \n\n<\/code><\/pre>\n<p>\u305f\u3060\u3057\u3001pundit\u306b\u306f<a target=\"_blank\" href=\"https:\/\/github.com\/varvet\/pundit\/blob\/a45734349b075d67089c27e1e96dc2fa4477e4bc\/lib\/pundit\/context.rb#L158-L171\" data-wpel-link=\"external\" target=\"_blank\" rel=\"external noopener\" class=\"wpel-icon-right\">Policy\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30ad\u30e3\u30c3\u30b7\u30e5<span class=\"wpel-icon wpel-image wpel-icon-19\"\/><\/a>\u3068\u3044\u3046\u6a5f\u80fd\u304c\u3042\u308a\u3001 <code>#policy<\/code> \u30e1\u30bd\u30c3\u30c9\u3092\u7d4c\u7531\u305b\u305a\u306b\u4f5c\u6210\u3055\u308c\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u306f\u3053\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u52b9\u304d\u307e\u305b\u3093\u3002<br \/>\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u52b9\u304b\u306a\u3044\u304b\u3089\u81f4\u547d\u7684\u3068\u3044\u3046\u3053\u3068\u306f\u306a\u3044\u306e\u3067\u3059\u304c\u3001\u7528\u610f\u3055\u308c\u305f\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u5229\u7528\u3057\u306a\u3044\u305f\u3081\u306b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u4e0a\u306e\u6069\u6075\u3092\u53d7\u3051\u3089\u308c\u305a\u3001HACK\u306e\u3088\u3046\u306a\u5b9f\u88c5\u306b\u306a\u3063\u3066\u3057\u307e\u3044\u307e\u3059\u3002<\/p>\n<hr\/>\n<p>\u4e00\u65b9\u3001action_policy\u306b\u306f<a target=\"_blank\" href=\"https:\/\/actionpolicy.evilmartians.io\/#\/authorization_context?id=authorization-context\" data-wpel-link=\"external\" target=\"_blank\" rel=\"external noopener\" class=\"wpel-icon-right\">Authorization Context<span class=\"wpel-icon wpel-image wpel-icon-19\"\/><\/a>\u3068\u3044\u3046\u3001\u305d\u306e\u540d\u306e\u901a\u308a\u8a8d\u53ef\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u6307\u5b9a\u3059\u308b\u6a5f\u80fd\u304c\u5b58\u5728\u3057\u307e\u3059\u3002<br \/>Policy\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3059\u308b\u3068\u304d\u306b\u3053\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<pre><code class=\"ruby\">class Orders::CancelPolicy <\/code><\/pre>\n<p>View\u304b\u3089\u306f <code>allow_to?<\/code> \u30d8\u30eb\u30d1\u30fc\u30e1\u30bd\u30c3\u30c9\u306e <code>with:<\/code> \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001Policy\u30af\u30e9\u30b9\u306e\u30ed\u30b8\u30c3\u30af\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre><code class=\"erb\">\n  \n\n<\/code><\/pre>\n<p>\u3053\u308c\u306f\u7d20\u76f4\u306a\u547c\u3073\u51fa\u3057\u65b9\u306b\u898b\u3048\u307e\u3059\u3057\u3001pundit\u3068\u9055\u3063\u3066<a target=\"_blank\" href=\"https:\/\/actionpolicy.evilmartians.io\/#\/caching?id=policy-memoization\" data-wpel-link=\"external\" target=\"_blank\" rel=\"external noopener\" class=\"wpel-icon-right\">Policy\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3082\u52b9\u304d\u307e\u3059<span class=\"wpel-icon wpel-image wpel-icon-19\"\/><\/a>\u3002<br \/>pundit\u3067\u5fae\u5999\u306b\u624b\u304c\u5c4a\u304b\u306a\u3044\u7b87\u6240\u3092\u30ab\u30d0\u30fc\u3059\u308b\u4e00\u4f8b\u3068\u3057\u3066\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002<\/p>\n<hr\/>\n<p>\u305d\u306e\u4ed6\u3001pundit\u3068\u306e\u5dee\u5206\u5185\u5bb9\u306b\u3064\u3044\u3066\u306faction_policy\u306e\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3054\u53c2\u7167\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/actionpolicy.evilmartians.io\/#\/?id=what-about-the-existing-solutions\" data-wpel-link=\"external\" target=\"_blank\" rel=\"external noopener\" class=\"wpel-icon-right\">What about the existing solutions? &#8212; Action Policy: authorization framework for Ruby\/Rails applications<span class=\"wpel-icon wpel-image wpel-icon-19\"\/><\/a><\/p>\n<p>\u500b\u4eba\u7684\u306b\u306f\u3001action_policy\u3067\u4e0d\u6e80\u8db3\u306a\u3053\u3068\u304c\u306a\u3044\u305f\u3081\u3001\u8a8d\u53efgem\u306b\u306f\u3053\u3061\u3089\u3092\u63a1\u7528\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<p>\n          <\/div>\n\n<br \/><a href=\"https:\/\/techracho.bpsinc.jp\/konaga\/2025_09_12\/153391\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"Rails\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u5229\u7528\u53ef\u80fd\u306a\u8a8d\u53efgem\u3067\u3042\u308baction_policy\u306e\u6a5f\u80fd\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u985e\u4f3c\u3057\u305f\u30d1\u30e9\u30c0\u30a4\u30e0\u3067\u69cb\u6210\u3055\u308c\u308bpundit\u3068\u6bd4\u8f03\u3057\u306a\u304c\u3089\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002 \u4ed6\u306b\u306fcancancan gem\u3082\u6709 [&hellip;]","protected":false},"author":1,"featured_media":5359,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-5358","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-company-tec"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Rails: action_policy gem\u306e\u7d39\u4ecb\uff5cTechRacho by BPS\u682a\u5f0f\u4f1a\u793e - \u30dd\u30b1\u30b3\u30f3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/techracho.bpsinc.jp\/konaga\/2025_09_12\/153391\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rails: action_policy gem\u306e\u7d39\u4ecb\uff5cTechRacho by BPS\u682a\u5f0f\u4f1a\u793e - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"Rails\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u5229\u7528\u53ef\u80fd\u306a\u8a8d\u53efgem\u3067\u3042\u308baction_policy\u306e\u6a5f\u80fd\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u985e\u4f3c\u3057\u305f\u30d1\u30e9\u30c0\u30a4\u30e0\u3067\u69cb\u6210\u3055\u308c\u308bpundit\u3068\u6bd4\u8f03\u3057\u306a\u304c\u3089\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002 \u4ed6\u306b\u306fcancancan gem\u3082\u6709 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/techracho.bpsinc.jp\/konaga\/2025_09_12\/153391\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-13T04:19:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/rails_gems_action_policy_eyecatch-min.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"1\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/techracho.bpsinc.jp\\\/konaga\\\/2025_09_12\\\/153391#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/5358\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"Rails: action_policy gem\u306e\u7d39\u4ecb\uff5cTechRacho by BPS\u682a\u5f0f\u4f1a\u793e\",\"datePublished\":\"2025-09-13T04:19:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/5358\\\/\"},\"wordCount\":123,\"image\":{\"@id\":\"https:\\\/\\\/techracho.bpsinc.jp\\\/konaga\\\/2025_09_12\\\/153391#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/rails_gems_action_policy_eyecatch-min.png\",\"articleSection\":[\"\u4f01\u696d\u30c6\u30c3\u30af\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/5358\\\/\",\"url\":\"https:\\\/\\\/techracho.bpsinc.jp\\\/konaga\\\/2025_09_12\\\/153391\",\"name\":\"Rails: action_policy gem\u306e\u7d39\u4ecb\uff5cTechRacho by BPS\u682a\u5f0f\u4f1a\u793e - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/techracho.bpsinc.jp\\\/konaga\\\/2025_09_12\\\/153391#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/techracho.bpsinc.jp\\\/konaga\\\/2025_09_12\\\/153391#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/rails_gems_action_policy_eyecatch-min.png\",\"datePublished\":\"2025-09-13T04:19:42+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/techracho.bpsinc.jp\\\/konaga\\\/2025_09_12\\\/153391#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/techracho.bpsinc.jp\\\/konaga\\\/2025_09_12\\\/153391\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/techracho.bpsinc.jp\\\/konaga\\\/2025_09_12\\\/153391#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/rails_gems_action_policy_eyecatch-min.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/rails_gems_action_policy_eyecatch-min.png\",\"width\":1200,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/techracho.bpsinc.jp\\\/konaga\\\/2025_09_12\\\/153391#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rails: action_policy gem\u306e\u7d39\u4ecb\uff5cTechRacho by BPS\u682a\u5f0f\u4f1a\u793e\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Rails: action_policy gem\u306e\u7d39\u4ecb\uff5cTechRacho by BPS\u682a\u5f0f\u4f1a\u793e - \u30dd\u30b1\u30b3\u30f3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/techracho.bpsinc.jp\/konaga\/2025_09_12\/153391","og_locale":"ja_JP","og_type":"article","og_title":"Rails: action_policy gem\u306e\u7d39\u4ecb\uff5cTechRacho by BPS\u682a\u5f0f\u4f1a\u793e - \u30dd\u30b1\u30b3\u30f3","og_description":"Rails\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u5229\u7528\u53ef\u80fd\u306a\u8a8d\u53efgem\u3067\u3042\u308baction_policy\u306e\u6a5f\u80fd\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u985e\u4f3c\u3057\u305f\u30d1\u30e9\u30c0\u30a4\u30e0\u3067\u69cb\u6210\u3055\u308c\u308bpundit\u3068\u6bd4\u8f03\u3057\u306a\u304c\u3089\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002 \u4ed6\u306b\u306fcancancan gem\u3082\u6709 [&hellip;]","og_url":"https:\/\/techracho.bpsinc.jp\/konaga\/2025_09_12\/153391","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-09-13T04:19:42+00:00","og_image":[{"width":1200,"height":720,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/rails_gems_action_policy_eyecatch-min.png","type":"image\/png"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"1\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/techracho.bpsinc.jp\/konaga\/2025_09_12\/153391#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/5358\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"Rails: action_policy gem\u306e\u7d39\u4ecb\uff5cTechRacho by BPS\u682a\u5f0f\u4f1a\u793e","datePublished":"2025-09-13T04:19:42+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/5358\/"},"wordCount":123,"image":{"@id":"https:\/\/techracho.bpsinc.jp\/konaga\/2025_09_12\/153391#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/rails_gems_action_policy_eyecatch-min.png","articleSection":["\u4f01\u696d\u30c6\u30c3\u30af"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/5358\/","url":"https:\/\/techracho.bpsinc.jp\/konaga\/2025_09_12\/153391","name":"Rails: action_policy gem\u306e\u7d39\u4ecb\uff5cTechRacho by BPS\u682a\u5f0f\u4f1a\u793e - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/techracho.bpsinc.jp\/konaga\/2025_09_12\/153391#primaryimage"},"image":{"@id":"https:\/\/techracho.bpsinc.jp\/konaga\/2025_09_12\/153391#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/rails_gems_action_policy_eyecatch-min.png","datePublished":"2025-09-13T04:19:42+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/techracho.bpsinc.jp\/konaga\/2025_09_12\/153391#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/techracho.bpsinc.jp\/konaga\/2025_09_12\/153391"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/techracho.bpsinc.jp\/konaga\/2025_09_12\/153391#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/rails_gems_action_policy_eyecatch-min.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/rails_gems_action_policy_eyecatch-min.png","width":1200,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/techracho.bpsinc.jp\/konaga\/2025_09_12\/153391#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"Rails: action_policy gem\u306e\u7d39\u4ecb\uff5cTechRacho by BPS\u682a\u5f0f\u4f1a\u793e"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/5358","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=5358"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/5358\/revisions"}],"predecessor-version":[{"id":5360,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/5358\/revisions\/5360"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/5359"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=5358"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=5358"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=5358"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}