{"id":116,"date":"2010-07-11T22:03:50","date_gmt":"2010-07-11T22:03:50","guid":{"rendered":"http:\/\/ketoha.co.jp\/blog\/archives\/116"},"modified":"2015-01-02T06:33:57","modified_gmt":"2015-01-02T06:33:57","slug":"%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3-state-%ef%bc%88php%ef%bc%86ruby%ef%bc%89","status":"publish","type":"post","link":"https:\/\/ketoha.co.jp\/blog\/?p=116","title":{"rendered":"\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3 State \uff08php\uff06ruby\uff09"},"content":{"rendered":"<p>\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e<a href=\"http:\/\/www.google.co.jp\/search?q=%83f%83U%83C%83%93%83p%83^%81[%83%93+State\">State<\/a>\u306f\u3001\u300c<strong>\u72b6\u614b<\/strong>\u300d\u3092\u30af\u30e9\u30b9\u3067\u7ba1\u7406\u3057\u307e\u3059\u3002<br \/>\n\u305f\u3068\u3048\u3070\u3001\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3044\u308b\u72b6\u614b\u3001\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3044\u306a\u3044\u72b6\u614b\u3001\u3068\u3044\u3046\uff12\u7a2e\u985e\u306e\u300c\u72b6\u614b\u300d\u304c\u3042\u308a\u307e\u3059\u3002<br \/>\n\u305d\u308c\u3089\u306e\u72b6\u614b\u306b\u3088\u3063\u3066\u632f\u308b\u821e\u3044\u304c\u7570\u306a\u308b\u3068\u304d\u3001\u5225\u3005\u306e\u30af\u30e9\u30b9\u306b\u66f8\u304d\u5206\u3051\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u3001\u5229\u7528\u5074\u306f\u72b6\u614b\u306e\u5909\u66f4\u3092\u901a\u77e5\u3059\u308b\u3060\u3051\u3067\u3088\u304f\u3001\u30af\u30e9\u30b9\u5074\u306f\u72b6\u614b\u306b\u3088\u3063\u3066\u6761\u4ef6\u5206\u5c90\u306e\u30ed\u30b8\u30c3\u30af\u3092\u4ed5\u8fbc\u307e\u305a\u306b\u6e08\u3080\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\n\u3053\u3053\u3067\u306f\u3001\u5b9f\u969b\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3044\u308b|\u3057\u3066\u3044\u306a\u3044\u3001\u306e\u72b6\u614b\u3092\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e<strong>State<\/strong>\u3092\u4f7f\u3063\u3066\u3001php\u3068ruby\u3067\u305d\u308c\u305e\u308c\u5b9f\u88c5\u3057\u3066\u307f\u307e\u3059\u3002<br \/>\n\u307e\u305a\u3001\u30af\u30e9\u30b9\u56f3\u3092\u307f\u3066\u307f\u307e\u3057\u3087\u3046\u3002<br \/>\n<a class=\"mb\" href=\"http:\/\/wb.cocolog-nifty.com\/.shared\/image.html?\/photos\/uncategorized\/2010\/07\/11\/state_pattern_2.png\"><img loading=\"lazy\" decoding=\"async\" title=\"State_pattern_2\" src=\"http:\/\/wb.cocolog-nifty.com\/blog\/images\/2010\/07\/11\/state_pattern_2.png\" alt=\"State_pattern_2\" width=\"300\" height=\"248\" border=\"0\" \/><\/a><br \/>\n<strong>User\u30af\u30e9\u30b9<\/strong>\u306f\u5229\u7528\u5074\u3067\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3055\u308c\u308b\u552f\u4e00\u306e\u30af\u30e9\u30b9\u3067\u3059\u3002\u3053\u306e\u30af\u30e9\u30b9\u306f\u5185\u90e8\u306b\u300c\u72b6\u614b\u300d\u30aa\u30d6\u30b8\u30a7\u30af\u30c8(UserState)\u3092\u4fdd\u6301\u3057\u3066\u3044\u3066\u3001\u30dd\u30ea\u30e2\u30fc\u30d5\u30a3\u30ba\u30e0\u3092\u4f7f\u3063\u305f\u5171\u901a\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9(isAuth(), getMenu(), doEdit(), doExit())\u3092\u4e2d\u7d99\u3057\u307e\u3059\u3002\u72b6\u614b\u3092\u5207\u308a\u66ff\u3048\u308b\u305f\u3081\u306eswitchState()\u30e1\u30bd\u30c3\u30c9\u304c\u53e9\u304b\u308c\u308b\u3068\u3001\u30e9\u30c3\u30d4\u30f3\u30b0\u3055\u308c\u305fnextStage()\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u7d4c\u7531\u3057\u3066\u3001\u5185\u90e8\u306b\u4fdd\u6301\u3057\u305f\u300c\u72b6\u614b\u300d\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u307e\u308b\u3054\u3068\u5165\u308c\u66ff\u3048\u307e\u3059\u3002<br \/>\n<strong>UserState\u30af\u30e9\u30b9<\/strong>\u306f\u3001\u300c\u72b6\u614b\u300d\u3092\u8868\u3059\u30af\u30e9\u30b9\u306b\u5171\u901a\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4ed8\u4e0e\u3059\u308b\u305f\u3081\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u30af\u30e9\u30b9\u3067\u3059\u3002<br \/>\n<strong>AuthState\u30af\u30e9\u30b9<\/strong>\u3068<strong>UnauthState\u30af\u30e9\u30b9<\/strong>\u306f\u3001\u305d\u308c\u305e\u308c\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3044\u308b|\u3057\u3066\u3044\u306a\u3044\u3001\u3092\u8868\u3059\u30af\u30e9\u30b9\u3067\u3059\u3002<br \/>\n\u7740\u76ee\u3057\u305f\u3044\u306e\u306f\u3001nextStage()\u30e1\u30bd\u30c3\u30c9\u304c\u3001\u524d\u8005\u3067\u306f\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3044\u306a\u3044\u72b6\u614b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8(UnauthState)\u3092\u3001\u5f8c\u8005\u3067\u306f\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3044\u308b\u72b6\u614b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8(AuthState)\u3092\u8fd4\u5374\u3057\u3066\u3044\u308b\u3053\u3068\u3067\u3059\u3002\u3053\u308c\u306f\u3001\u53d7\u3051\u53d6\u308b\u5074\u306eUser\u30af\u30e9\u30b9\u304b\u3089\u307f\u308b\u3068\u3001\u300c\u72b6\u614b\u300d\u304c\u307e\u308b\u3054\u3068\u5165\u308c\u66ff\u308f\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002<br \/>\n\u3053\u308c\u306b\u3088\u3063\u3066\u3001\u958b\u767a\u8005\u306f\u72b6\u614b\u306e\u9055\u3044\u306b\u3088\u308b\u56fa\u6709\u306a\u632f\u308b\u821e\u3044\u3092\u3001\u305d\u308c\u305e\u308c\u306e\u30af\u30e9\u30b9\u306b\u8a18\u8ff0\u3059\u308b\u3053\u3068\u3060\u3051\u306b\u96c6\u4e2d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<br \/>\n\u3044\u3088\u3044\u3088\u30b3\u30fc\u30c9\u3092\u307f\u3066\u307f\u307e\u3057\u3087\u3046\u3002<br \/>\n\u307e\u305aphp\u3067\u3059\u3002<br \/>\nUser.class.php (<strong>User\u30af\u30e9\u30b9<\/strong>)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">&lt;?php\r\nClass User\r\n{\r\nprivate $_name = null;\r\nprivate $_state = null;\r\npublic function __construct($name) {\r\n$this-&gt;_name = $name;\r\n$this-&gt;_state = UnauthState::getInstance();\r\n}\r\npublic function switchState() {\r\n$this-&gt;_state = $this-&gt;_state-&gt;nextStage();\r\n}\r\npublic function isAuth() {\r\nreturn $this-&gt;_state-&gt;isAuth();\r\n}\r\npublic function getMenu() {\r\nreturn $this-&gt;_state-&gt;getMenu();\r\n}\r\npublic function doEdit() {\r\nreturn $this-&gt;_state-&gt;doEdit();\r\n}\r\npublic function doExit() {\r\nreturn $this-&gt;_state-&gt;doExit();\r\n}\r\npublic function getName() {\r\nreturn $this-&gt;_name;\r\n}\r\n}\r\n<\/pre>\n<p>UserState.class.php (<strong>UserState\u30af\u30e9\u30b9<\/strong>)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">&lt;?php\r\nInterface UserState\r\n{\r\npublic function isAuth();\r\npublic function nextStage();\r\npublic function getMenu();\r\npublic function doEdit();\r\npublic function doExit();\r\n}\r\n<\/pre>\n<p>AuthState.class.php (<strong>AuthState\u30af\u30e9\u30b9<\/strong>)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">&lt;?php\r\nClass AuthState implements UserState\r\n{\r\nprivate static $_singleton = null;\r\nprivate function __construct() {\r\n}\r\npublic static function getInstance() {\r\nif (self::$_singleton == null) self::$_singleton = new AuthState();\r\nreturn self::$_singleton;\r\n}\r\npublic function isAuth() {\r\nreturn true;\r\n}\r\npublic function nextStage() {\r\nreturn UnauthState::getInstance();\r\n}\r\npublic function getMenu() {\r\necho \"now login...\\n  1: edit\\n  2: logout\\n  input number: \";\r\nreturn intval(chop(fgets(STDIN)));\r\n}\r\npublic function doEdit() {\r\necho \"edit...\";\r\nreturn true;\r\n}\r\npublic function doExit() {\r\nreturn false;\r\n}\r\npublic final function __clone() {\r\nthrow new RuntimeException('cannot make clone: ' . get_class($this));\r\n}\r\n}\r\n<\/pre>\n<p>UnauthState.class.php (<strong>UnauthState\u30af\u30e9\u30b9<\/strong>)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">&lt;?php\r\nClass UnauthState implements UserState\r\n{\r\nprivate static $_singleton = null;\r\nprivate function __construct() {\r\n}\r\npublic static function getInstance() {\r\nif (self::$_singleton == null) self::$_singleton = new UnauthState();\r\nreturn self::$_singleton;\r\n}\r\npublic function isAuth() {\r\nreturn false;\r\n}\r\npublic function nextStage() {\r\nreturn AuthState::getInstance();\r\n}\r\npublic function getMenu() {\r\necho \"now logout...\\n  2: login\\n  3: exit\\n  input number: \";\r\nreturn intval(chop(fgets(STDIN)));\r\n}\r\npublic function doEdit() {\r\nreturn false;\r\n}\r\npublic function doExit() {\r\necho \"bye\\n\";\r\nreturn true;\r\n}\r\npublic final function __clone() {\r\nthrow new RuntimeException('cannot make clone: ' . get_class($this));\r\n}\r\n}\r\n<\/pre>\n<p>state_client.php (\u5229\u7528\u5074)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">&lt;?php\r\nrequire 'User.class.php';\r\nrequire 'UserState.class.php';\r\nrequire 'AuthState.class.php';\r\nrequire 'UnauthState.class.php';\r\ndefine('MODE_EDIT',  1);\r\ndefine('MODE_STATE', 2);\r\ndefine('MODE_EXIT',  3);\r\n$context = new User('hoge');\r\n$mode = null;\r\nwhile (true) {\r\nswitch ($mode) {\r\ncase MODE_STATE :\r\n$context-&gt;switchState();\r\nif ($context-&gt;isAuth()) echo 'welcome ' . $context-&gt;getName() . \"\\n\";\r\nbreak;\r\ncase MODE_EDIT :\r\nif ($context-&gt;doEdit()) echo \"OK\\n\";\r\nbreak;\r\ncase MODE_EXIT :\r\nif ($context-&gt;doExit()) exit();\r\nbreak;\r\n}\r\n$mode = $context-&gt;getMenu();\r\n}\r\n<\/pre>\n<p>\u6b21\u306bruby\u3067\u3059\u3002<br \/>\nUser.class.rb (<strong>User\u30af\u30e9\u30b9<\/strong>)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">class User\r\ndef initialize(name)\r\n@_name = name\r\n@_state = UnauthState.instance\r\nend\r\ndef switchState\r\n@_state = @_state.nextStage\r\nend\r\ndef isAuth\r\n@_state.isAuth\r\nend\r\ndef getMenu\r\n@_state.getMenu\r\nend\r\ndef doEdit\r\n@_state.doEdit\r\nend\r\ndef doExit\r\n@_state.doExit\r\nend\r\ndef getName\r\n@_name\r\nend\r\nend\r\n<\/pre>\n<p>UserState.class.rb (<strong>UserState\u30af\u30e9\u30b9<\/strong>)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">class NotImplements &lt; Exception;end\r\nmodule UserState\r\ndef isAuth\r\nraise NotImplements\r\nend\r\ndef nextStage\r\nraise NotImplements\r\nend\r\ndef getMenu\r\nraise NotImplements\r\nend\r\ndef doEdit\r\nraise NotImplements\r\nend\r\ndef doExit\r\nraise NotImplements\r\nend\r\nend\r\n<\/pre>\n<p>AuthState.class.rb (<strong>AuthState\u30af\u30e9\u30b9<\/strong>)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">class AuthState\r\ninclude UserState\r\ninclude Singleton\r\ndef isAuth\r\ntrue\r\nend\r\ndef nextStage\r\nUnauthState.instance\r\nend\r\ndef getMenu\r\nprint \"now login...\\n  1: edit\\n  2: logout\\n  input number: \"\r\nSTDIN.gets.chomp.to_i\r\nend\r\ndef doEdit\r\nprint \"edit...\"\r\ntrue\r\nend\r\ndef doExit\r\nfalse\r\nend\r\nend\r\n<\/pre>\n<p>UnauthState.class.rb (<strong>UnauthState\u30af\u30e9\u30b9<\/strong>)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">class UnauthState\r\ninclude UserState\r\ninclude Singleton\r\ndef isAuth\r\nfalse\r\nend\r\ndef nextStage\r\nAuthState.instance\r\nend\r\ndef getMenu\r\nprint \"now logout...\\n  2: login\\n  3: exit\\n  input number: \"\r\nSTDIN.gets.chomp.to_i\r\nend\r\ndef doEdit\r\nfalse\r\nend\r\ndef doExit\r\nprint \"bye\\n\"\r\ntrue\r\nend\r\nend\r\n<\/pre>\n<p>state_client.rb (\u5229\u7528\u5074)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">require 'singleton'\r\nrequire 'User.class.rb'\r\nrequire 'UserState.class.rb'\r\nrequire 'AuthState.class.rb'\r\nrequire 'UnauthState.class.rb'\r\nMODE_EDIT  = 1\r\nMODE_STATE = 2\r\nMODE_EXIT  = 3\r\ncontext = User.new('hoge')\r\nmode = nil\r\nwhile(true)\r\ncase mode\r\nwhen MODE_STATE\r\ncontext.switchState\r\nprint \"welcome #{context.getName}\\n\" if context.isAuth\r\nwhen MODE_EDIT\r\nprint \"OK\\n\" if context.doEdit\r\nwhen MODE_EXIT\r\nexit if context.doExit\r\nend\r\nmode = context.getMenu\r\nend\r\n<\/pre>\n<p>php .\/state_client.php | ruby .\/state_client.rb (php&amp;ruby\u5171\u901a\u306e\u5b9f\u884c\u7d50\u679c)<\/p>\n<pre class=\"linux\" style=\"border: 1px solid gray; background-color: #000000; padding: 4px 2px 2px 6px; color: #ffffff; line-height: 1em;\">now logout...\r\n2: login\r\n3: exit\r\ninput number: 2\r\nwelcome hoge\r\nnow login...\r\n1: edit\r\n2: logout\r\ninput number: 1\r\nedit...OK\r\nnow login...\r\n1: edit\r\n2: logout\r\ninput number: 2\r\nnow logout...\r\n2: login\r\n3: exit\r\ninput number: 3\r\nbye\r\n<\/pre>\n<p>\u307e\u3068\u3081:<br \/>\n\u30b5\u30fc\u30d3\u30b9\u3092\u30e2\u30c7\u30eb\u5316\u3057\u3066\u30af\u30e9\u30b9\u306b\u843d\u3068\u3057\u8fbc\u3080\u969b\u306b\u3001\u3069\u3046\u3057\u3066\u3082<a href=\"http:\/\/www.google.co.jp\/search?q=%96%BC%8E%8C%92%8A%8Fo%96@\">\u540d\u8a5e\u62bd\u51fa\u6cd5<\/a>\u306b\u982d\u304c\u3068\u3089\u308f\u308c\u308b\u3068\u3001\u306a\u304b\u306a\u304b\u6982\u5ff5\u30e2\u30c7\u30eb\u3092\u30af\u30e9\u30b9\u306b\u3042\u3066\u306f\u3081\u308b\u3068\u3044\u3046\u6a5f\u77e5\u304c\u50cd\u304b\u306a\u3044\u306e\u3067\u3059\u304c\u3001\u3053\u3046\u3044\u3063\u305f\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3092\u304a\u3055\u3048\u3066\u304a\u304f\u3068\u3001\u305d\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u3068\u3063\u3066\u4e3b\u8981\u3067\u660e\u78ba\u306a\u632f\u308b\u821e\u3044\u3092\u6301\u3064\u6982\u5ff5\u3092\u30af\u30e9\u30b9\u5316\u3057\u3066\u307f\u308b\u3053\u3068\u3067\u3001\u305a\u3044\u3076\u3093\u3068if\u6587\u3084switch\u6587\u304c\u6e1b\u3089\u305b\u3066\u53ef\u8aad\u6027\u304c\u3042\u304c\u308a\u3001\u5982\u3044\u3066\u306f\u5805\u7262\u6027\u3084\u6c4e\u7528\u6027\u3082\u9ad8\u307e\u308b\u3068\u3044\u3046\u6069\u6075\u3092\u53d7\u3051\u3089\u308c\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u306d\u3002<br \/>\n\u30c7\u30b6\u30a4\u30f3\u30d1\u30fc\u30f3\u3067\u306f\u4ed6\u306b\u3082\u300c\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u300d\u306b\u3068\u3089\u308f\u308c\u306a\u3044\u30e2\u30c7\u30ea\u30f3\u30b0\u306e\u4ed5\u65b9\u304c\u591a\u3005\u3042\u308a\u307e\u3059\u3002\u6a5f\u4f1a\u304c\u3042\u308c\u3070\u5225\u306e\u30d1\u30bf\u30fc\u30f3\u3082\u7d39\u4ecb\u3067\u304d\u308c\u3070\u3068\u601d\u3044\u307e\u3059\u3002<br \/>\nphp\u3068ruby\u3092\u4e26\u3079\u3066\u66f8\u304f\u3068\u3001\u3084\u3063\u3071\u308aruby\u306e\u65b9\u304c\u697d\u3067\u65e9\u3044\u308f\u3042\u3001\u3068\u611f\u3058\u307e\u3059\u3002\u30b7\u30f3\u30b0\u30eb\u30c8\u30f3\u306a\u3093\u3066\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3001php\u307f\u305f\u3044\u306b\u81ea\u524d\u3067\u3053\u3057\u3089\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u30a2\u30b8\u30e3\u30a4\u30eb\u958b\u767a\u306a\u3089\u65ad\u7136php\u3088\u308aruby\u3067\u3059\u306d\u3002<br \/>\n\u306a\u304a\u3001php\u306fversion5.3.1\u3001ruby\u306fversion1.9.1\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u52d5\u4f5c\u7d50\u679c\u306f\u30b7\u30a7\u30eb\u304b\u3089\u30b3\u30de\u30f3\u30c9\u3068\u3057\u3066\u5b9f\u884c\u3057\u305f\u3082\u306e\u3067\u3059\u3002<br \/>\n\u53c2\u8003\u66f8\u7c4d: <a href=\"http:\/\/www.shuwasystem.co.jp\/products\/7980html\/1516.html\">PHP\u306b\u3088\u308b\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u5165\u9580<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306eState\u306f\u3001\u300c\u72b6\u614b\u300d\u3092\u30af\u30e9\u30b9\u3067\u7ba1\u7406\u3057\u307e\u3059\u3002 \u305f\u3068\u3048\u3070\u3001\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3044\u308b\u72b6\u614b\u3001\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3044\u306a\u3044\u72b6\u614b\u3001\u3068\u3044\u3046\uff12\u7a2e\u985e\u306e\u300c\u72b6\u614b\u300d\u304c\u3042\u308a\u307e\u3059\u3002 \u305d\u308c\u3089\u306e\u72b6\u614b\u306b\u3088\u3063\u3066\u632f\u308b\u821e\u3044\u304c\u7570\u306a\u308b\u3068\u304d\u3001\u5225\u3005\u306e\u30af\u30e9\u30b9\u306b\u66f8\u304d\u5206\u3051<a class=\"moretag read-more-link\" href=\"https:\/\/ketoha.co.jp\/blog\/?p=116\">&#133;<\/a><\/p>\n","protected":false},"author":1,"featured_media":117,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":{"0":"entry","1":"post","2":"publish","3":"author-ketoher","4":"post-116","6":"format-standard","7":"has-post-thumbnail","8":"category-tech"},"_links":{"self":[{"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=116"}],"version-history":[{"count":2,"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/116\/revisions"}],"predecessor-version":[{"id":158,"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/116\/revisions\/158"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=\/wp\/v2\/media\/117"}],"wp:attachment":[{"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ketoha.co.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}