{"id":79848,"date":"2025-10-16T09:00:00","date_gmt":"2025-10-16T00:00:00","guid":{"rendered":"https:\/\/www.creationline.com\/tech-blog\/?p=79848"},"modified":"2025-10-30T15:56:08","modified_gmt":"2025-10-30T06:56:08","slug":"db%e3%83%9e%e3%82%a4%e3%82%b0%e3%83%ac%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%83%84%e3%83%bc%e3%83%abatlas%e3%81%a7devops%e7%92%b0%e5%a2%83%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8bdb%e3%82%b9%e3%82%ad-3","status":"publish","type":"post","link":"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848","title":{"rendered":"DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30ebAtlas\u3067DevOps\u74b0\u5883\u306b\u304a\u3051\u308bDB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u3092\u5b9f\u8df5\u3057\u3066\u307f\u3088\u3046(\u524d\u7de8)"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u306f\u3058\u3081\u306b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u5bfe\u8c61\u8aad\u8005\u306e\u30ec\u30d9\u30eb\u611f<\/h3>\n\n\n\n<p>\u672c\u8a18\u4e8b\u306f\u3001DevOps\u74b0\u5883\u306b\u304a\u3051\u308bDB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u306e\u8ab2\u984c\u306b\u76f4\u9762\u3057\u3066\u3044\u308b\u4e2d\u7d1a\u8005\u4ee5\u4e0a\u306e\u65b9\u3001\u307e\u305f\u306f\u3001DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30eb\u3092CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306b\u7d44\u307f\u8fbc\u307f\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u308b\u65b9\u3092\u4e3b\u306a\u5bfe\u8c61\u3068\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u524d\u63d0\u77e5\u8b58\u3068\u3057\u3066\u3001Git\u306a\u3069\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u57fa\u672c\u7684\u306a\u64cd\u4f5c\u3001\u304a\u3088\u3073Postgresql\u306a\u3069\u306eRDB\u306e\u57fa\u790e\u77e5\u8b58\u304c\u3042\u308b\u3053\u3068\u3092\u60f3\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u8a18\u4e8b\u306e\u30b4\u30fc\u30eb<\/h3>\n\n\n\n<p>\u672c\u8a18\u4e8b\u3092\u901a\u3058\u3066\u3001\u8aad\u8005\u306f\u4ee5\u4e0b\u306e\u70b9\u3092\u9054\u6210\u3059\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Atlas<\/strong>\u306b\u3088\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u3088\u308b\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u30a4\u30e1\u30fc\u30b8\u3092\u3064\u304b\u3080 (\u4eca\u56de\u306e\u5185\u5bb9)<\/li>\n\n\n\n<li>DB\u30b9\u30ad\u30fc\u30de\u306e\u521d\u671f\u4f5c\u6210\u304b\u3089\u3001\u5909\u66f4\u306e\u8ffd\u52a0\u9069\u7528\u306e\u5177\u4f53\u7684\u306a\u624b\u9806\u3092Postgresql\u74b0\u5883\u3067\u691c\u8a3c\u3059\u308b (\u4eca\u56de\u306e\u5185\u5bb9)<\/li>\n\n\n\n<li>CI\/CD\u3068\u306e\u7d71\u5408\u65b9\u6cd5\u306b\u3064\u3044\u3066\u5b66\u3076 (<a href=\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/80021\">\u5f8c\u7de8<\/a>\u306e\u5185\u5bb9)<\/li>\n\n\n\n<li>\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u306a\u3069\u3001Atlas\u3092\u4f7f\u7528\u3059\u308b\u969b\u306e\u6ce8\u610f\u70b9\u3084\u5b9f\u8df5\u7684\u306aTIPS\u3092\u5b66\u3076 (<a href=\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/80021\">\u5f8c\u7de8<\/a>\u306e\u5185\u5bb9)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">DB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u306e\u8ab2\u984c<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">DevOps\u74b0\u5883\u306b\u304a\u3051\u308bDB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406<\/h3>\n\n\n\n<p>\u7686\u3055\u3093\u3001DB\u306e\u30b9\u30ad\u30fc\u30de(\u30c6\u30fc\u30d6\u30eb\u5b9a\u7fa9)\u306e\u7ba1\u7406\u3063\u3066\u3069\u3046\u3057\u3066\u307e\u3059\u304b\uff1f<br>DBeaver\u306a\u3069\u306eSQL\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u6301\u3064\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u6a5f\u80fd\u3092\u5229\u7528\u3057\u305f\u308a\u3001\u53e4\u5178\u7684\u306a\u65b9\u6cd5\u3060\u30681\u3064\u306e\u30d5\u30a1\u30a4\u30eb\u3067DDL\u3092\u7ba1\u7406\u3057\u3066\u3044\u305f\u308a\u3068\u3001\u8272\u3005\u3068\u3084\u308a\u65b9\u306f\u3042\u308b\u3068\u601d\u3044\u307e\u3059\u3002<br>\u8907\u6570\u74b0\u5883\u304c\u3042\u308b\u3088\u3046\u306a\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30ea\u30ea\u30fc\u30b9\u3068DB\u30b9\u30ad\u30fc\u30de\u306e\u5909\u66f4\u304c\u9069\u5207\u306b\u7ba1\u7406\u3055\u308c\u3066\u3044\u306a\u3044\u3068\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u305f\u3082\u306e\u306e\u30b9\u30ad\u30fc\u30de\u5909\u66f4\u304c\u6f0f\u308c\u3066\u3057\u307e\u3044\u3001\u30b7\u30b9\u30c6\u30e0\u304c\u6b63\u5e38\u306b\u52d5\u4f5c\u3057\u306a\u3044\u3068\u3044\u3063\u305f\u30c8\u30e9\u30d6\u30eb\u304c\u767a\u751f\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>DevOps\u74b0\u5883\u306b\u304a\u3044\u3066\u3001DB\u30b9\u30ad\u30fc\u30de\u306e\u7ba1\u7406\u3092IaC(Infrastructure as Code)\u3084CI\/CD\u306e\u6587\u8108\u3067\u9069\u5207\u306b\u884c\u3046\u306b\u306f\u3001DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30eb\u3092\u5229\u7528\u3057\u3066\u3001\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9\u306e\u5909\u66f4\u5185\u5bb9\u3092\u30b3\u30fc\u30c9\u3068\u3057\u3066\u7ba1\u7406\u3057\u3001\u305d\u308c\u3092CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306b\u7d44\u8fbc\u3080\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Atlas\u3068\u306f\uff1a\u300cDatabase Schema as Code\u300d\u30c4\u30fc\u30eb<\/h3>\n\n\n\n<p>Atlas\u306f\u3001DB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u3068\u3044\u3046\u9577\u5e74\u306e\u8ab2\u984c\u306b\u5bfe\u3057\u3066\u3001\u73fe\u4ee3\u306eDevOps\u306e\u539f\u5247\u3092\u9069\u7528\u3057\u305f<strong>\u300cDatabase Schema as Code\u300d<\/strong>\u30c4\u30fc\u30eb\u3067\u3059\u3002<br>\u4ed6\u306e\u985e\u4f3c\u30c4\u30fc\u30eb\u3068\u306e\u9055\u3044\u3068\u3057\u3066\u3001\u6700\u7d42\u7684\u306a\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9\u3078\u306e\u5ba3\u8a00\u7684\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u63a1\u7528\u3057\u3066\u3044\u308b\u305f\u3081\u300cDB\u7528\u306eTerraform\u300d\u3068\u547c\u3070\u308c\u308b\u3053\u3068\u3082\u3042\u308b\u3088\u3046\u3067\u3059\u3002<\/p>\n\n\n\n<p>Atlas\u306b\u306f\u7121\u511f\u5229\u7528\u3067\u304d\u308bStarter\u30d7\u30e9\u30f3\u3092\u542b\u3080<a href=\"https:\/\/Atlas.io\/pricing\">3\u3064\u306e\u30d7\u30e9\u30f3<\/a>\u304c\u3042\u308a\u3001\u4eca\u56de\u306f<a href=\"https:\/\/Atlas.io\/features\">Starter\u3067\u5229\u7528\u3067\u304d\u308b\u6a5f\u80fd(\u203bOpen\u3068\u306a\u3063\u3066\u3044\u308b\u6a5f\u80fd)<\/a>\u3060\u3051\u3092\u5229\u7528\u3057\u3066\u3001DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u30a4\u30e1\u30fc\u30b8\u3092\u3064\u304b\u3093\u3067\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5ba3\u8a00\u7684\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3 \u3068 \u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3<\/h3>\n\n\n\n<p>Atlas\u306f\u5ba3\u8a00\u7684\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3060\u3051\u3067\u306a\u304f\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5229\u7528\u3082\u53ef\u80fd\u3067\u3059\u30022\u3064\u306e\u9055\u3044\u306b\u3064\u3044\u3066\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u65b9\u5f0f<\/th><th>\u6982\u8981<\/th><th>\u30e1\u30ea\u30c3\u30c8<\/th><th>\u30c7\u30e1\u30ea\u30c3\u30c8<\/th><\/tr><tr><td><strong>\u5ba3\u8a00\u7684<\/strong><\/td><td>\u76ee\u6307\u3059\u30b9\u30ad\u30fc\u30de\u72b6\u614b\u3092\u5b9a\u7fa9\u3057\u3001\u73fe\u5728\u306e\u72b6\u614b\u3068\u306e\u5dee\u5206\u3092Atlas\u304c\u8a08\u7b97\u3057\u3001SQL\u81ea\u52d5\u751f\u6210\u30fb\u9069\u7528\u307e\u3067\u81ea\u52d5\u3067\u884c\u3046\u3002<\/td><td>\u958b\u767a\u8005\u304c\u624b\u52d5\u3067\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u3092\u4f5c\u6210\u30fb\u9069\u7528\u3059\u308b\u5fc5\u8981\u304c\u306a\u3044\u3002<\/td><td>\u5909\u66f4\u5185\u5bb9\u304c\u4e0d\u900f\u660e\u306b\u306a\u308a\u3001\u5c65\u6b74\u304c\u660e\u78ba\u306b\u6b8b\u3089\u306a\u3044\u3002<\/td><\/tr><tr><td><strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406<\/strong><\/td><td>\u5dee\u5206\u304b\u3089\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u3092\u81ea\u52d5\u751f\u6210\u3059\u308b\u304c\u3001\u9069\u7528\u306f\u5225\u30d7\u30ed\u30bb\u30b9\u3067\u884c\u3046\u3002<\/td><td>\u9069\u7528\u3055\u308c\u308bSQL\u30d5\u30a1\u30a4\u30eb\u304c\u4e8b\u524d\u306b\u4f5c\u6210\u3055\u308c\u308b\u305f\u3081\u3001\u5b9f\u884c\u524d\u306b\u9069\u7528\u5185\u5bb9\u3092\u5b8c\u5168\u306b\u628a\u63e1\u3067\u304d\u3001\u5909\u66f4\u5c65\u6b74\u3092\u660e\u78ba\u306b\u8ffd\u8de1\u3067\u304d\u308b\uff08<strong>\u5b89\u5168\u6027\u304c\u9ad8\u3044<\/strong>\uff09\u3002<\/td><td>\u5dee\u5206\u3068\u3057\u3066\u7ba1\u7406\u3059\u308b\u3068\u3044\u3046\u7279\u6027\u304b\u3089\u3001\u9069\u7528\u6f0f\u308c\u306b\u3088\u308a\u30b9\u30ad\u30fc\u30de\u306e\u305a\u308c\uff08\u30c9\u30ea\u30d5\u30c8\uff09\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u3001\u624b\u52d5\u3067\u306e\u5fa9\u65e7\u304c\u5fc5\u8981\u306b\u306a\u308b\u5834\u5408\u304c\u3042\u308b\u3002<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u4eca\u56de\u306f\u5909\u66f4\u6642\u306e\u5b89\u5168\u6027\u306e\u9ad8\u3055\u3092\u512a\u5148\u3057\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u65b9\u5f0f\u3092\u63a1\u7528\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u691c\u8a3c\u74b0\u5883\u306e\u69cb\u7bc9\u3068\u521d\u671f\u6e96\u5099<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u691c\u8a3c\u3057\u305f\u74b0\u5883<\/h3>\n\n\n\n<p>\u4eca\u56de\u691c\u8a3c\u3067\u5229\u7528\u3057\u305f\u74b0\u5883\u306f\u4ee5\u4e0b\u901a\u308a\u3067\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Windows 11 + WSL2 (Ubuntu 22.04.5 LTS)<\/li>\n\n\n\n<li>Docker CE 28.4.0<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u74b0\u5883\u306b\u5bfe\u3057\u3066\u3001<a href=\"https:\/\/Atlas.io\/guides\/evaluation\/install\">Atlas\u516c\u5f0f\u306e\u624b\u9806<\/a>\u901a\u308a\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3067 Atlas \u306e\u6700\u65b0\u7248(\u8a18\u4e8b\u57f7\u7b46\u6642\u70b9\u3067\u306f<strong>v0.28.2<\/strong>)\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">curl -sSf https:\/\/Atlas.sh | sh<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u6210\u3068Atlas\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb<\/h3>\n\n\n\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30eb\u30fc\u30c8\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\/\u30d5\u30a1\u30a4\u30eb\u3092\u914d\u7f6e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30eb\u30fc\u30c8\/<br>\u3000\u251c schemas\/<\/strong>\u3000\u21d2 \u76ee\u6307\u3059\u30b9\u30ad\u30fc\u30de\u72b6\u614b\u306e\u5b9a\u7fa9\u304c\u683c\u7d0d\u3055\u308c\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea<br><strong>\u3000\u2502\u3000\u251c 1_users.sql<\/strong>\u3000\u21d2 \u5f8c\u307b\u3069\u4f5c\u6210<br><strong>\u3000\u2502\u3000\u2514 2_repos.sql<\/strong>\u3000\u21d2 \u5f8c\u307b\u3069\u4f5c\u6210<br><strong>\u3000\u251c migrations\/<\/strong>\u3000\u21d2 \u6b74\u4ee3\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u304c\u683c\u7d0d\u3055\u308c\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea<br><strong>\u3000\u2502<\/strong>\u3000\u2514 (\u521d\u671f\u72b6\u614b\u3067\u306f\u4f55\u3082\u30d5\u30a1\u30a4\u30eb\u304c\u7121\u3044\u72b6\u614b)<br><strong>\u3000\u2514 atlas.hcl<\/strong>\u3000\u21d2 Atlas\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3001\u3053\u306e\u5f8c\u4f5c\u6210<\/p>\n\n\n\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30eb\u30fc\u30c8\u914d\u4e0b\u306e Atlas\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code><strong>atlas.hcl<\/strong><\/code><\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># migrate diff \u5b9f\u884c\u6642\u306e\u8a2d\u5b9a\nenv \"temp\" {\n  migration {\n    dir = \"file:\/\/migrations\"       # \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u683c\u7d0d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\n  }\n  src = \"file:\/\/schemas\"            # \u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9\u683c\u7d0d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\n  dev = \"docker:\/\/postgres\/16\/dev\"  # \u51e6\u7406\u7528\u306e\u4e00\u6642DB\n}\n\n# migrate apply \u5b9f\u884c\u6642\u306e\u8a2d\u5b9a\nenv \"demo\" {\n  migration {\n    dir = \"file:\/\/migrations\"       # \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u683c\u7d0d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\n  }\n  url = \"postgres:\/\/postgres:pass@:5432\/demo?search_path=public&amp;sslmode=disable\"  # \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u5bfe\u8c61DB\u3078\u306e\u63a5\u7d9a\u6587\u5b57\u5217\n  dev = \"docker:\/\/postgres\/16\/dev\"  # \u51e6\u7406\u7528\u306e\u4e00\u6642DB\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u521d\u671f\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9\u306e\u4f5c\u6210<\/h3>\n\n\n\n<p>\u6b21\u306b\u521d\u671f\u306eDB\u30b9\u30ad\u30fc\u30de\u3068\u3057\u3066\u3001<code>schemas<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b <code>users<\/code> \u30c6\u30fc\u30d6\u30eb\u3068 <code>repos<\/code> \u30c6\u30fc\u30d6\u30eb\u306e\u5b9a\u7fa9\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>schemas<strong>\/1_users.sql<\/strong><\/code><\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-- Create \"users\" table\nCREATE TABLE \"public\".\"users\" (\n    \"id\" bigint NOT NULL,\n    \"name\" character varying NOT NULL,\n    PRIMARY KEY (\"id\")\n);<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>schemas<strong>\/2_repos.sql<\/strong><\/code><\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-- Create \"repos\" table\nCREATE TABLE \"public\".\"repos\" (\n    \"id\" bigint NOT NULL,\n    \"name\" character varying NOT NULL,\n    \"owner_id\" bigint NOT NULL,\n    PRIMARY KEY (\"id\"),\n    CONSTRAINT \"fk_repo_owner\" FOREIGN KEY (\"owner_id\") REFERENCES \"public\".\"users\" (\"id\") ON UPDATE NO ACTION ON DELETE NO ACTION\n);<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u691c\u8a3c\u7528DB\u306e\u8d77\u52d5<\/h3>\n\n\n\n<p>\u6700\u5f8c\u306b\u691c\u8a3c\u7528\u306eDB\u3068\u3057\u3066\u3001\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u3067PostgreSQL\u3092Docker\u3067\u8d77\u52d5\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run --rm -d --name atlas-demo -e POSTGRES_PASSWORD=pass -e POSTGRES_DB=demo -p 5432:5432 postgres<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Atlas\u306b\u3088\u308b\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u624b\u9806<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u306e\u4f5c\u6210\uff08\u521d\u671f\u30b9\u30ad\u30fc\u30de\uff09<\/h3>\n\n\n\n<p>\u521d\u671f\u30b9\u30ad\u30fc\u30de\u306e\u5b9a\u7fa9\u30d5\u30a1\u30a4\u30eb\u3092\u6e96\u5099\u3057\u305f\u72b6\u614b\u3067\u3001<code>atlas migrate diff<\/code> \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3001\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u3092\u81ea\u52d5\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">atlas migrate diff initial --env temp<\/pre>\n\n\n\n<p>\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306b\u3088\u308a\u3001\u307e\u305a\u30b3\u30f3\u30c6\u30ca\u3067\u5b9f\u884c\u3055\u308c\u308b\u4e00\u6642DB\u306b\u5bfe\u3057\u3066 <code>migrations<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u914d\u4e0b\u306b\u3042\u308b\u6b74\u4ee3\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u3092\u9806\u756a\u306b\u9069\u7528\u3057\u3001\u76f4\u8fd1\u306eDB\u30b9\u30ad\u30fc\u30de\u72b6\u614b\u3092\u518d\u73fe\u3057\u307e\u3059\u3002(\u203b\u4eca\u56de\u306f\u521d\u56de\u3067 <code>migrations<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u7a7a\u3063\u307d\u306a\u306e\u3067\u4f55\u3082\u4f5c\u6210\u3055\u308c\u307e\u305b\u3093)<br>\u6b21\u306b\u3001\u4e00\u6642DB\u306e\u72b6\u614b\u3068\u3001<code>schemas<\/code> \u914d\u4e0b\u306e<strong>\u6700\u7d42\u7684\u306a\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9<\/strong>\u3068\u306e\u5dee\u5206\u3092Atlas\u304c\u8a08\u7b97\u3057\u3066\u3001\u5dee\u5206\u3092\u57cb\u3081\u308b\u305f\u3081\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u3092\u81ea\u52d5\u751f\u6210\u3057\u3001<code>migrations<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u51fa\u529b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"506\" src=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-40-1024x506.png\" alt=\"\" class=\"wp-image-79993\" srcset=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-40-1024x506.png 1024w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-40-360x178.png 360w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-40-768x379.png 768w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-40-1536x759.png 1536w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-40-2048x1012.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u4eca\u56de\u306f\u521d\u56de\u3067\u3042\u308b\u305f\u3081\u3001\u51fa\u529b\u3055\u308c\u308bSQL\u306f(\u4e00\u90e8\u7570\u306a\u308a\u307e\u3059\u304c)\u57fa\u672c\u7684\u306b <code>users<\/code> \u30c6\u30fc\u30d6\u30eb\u3068 <code>repos<\/code> \u30c6\u30fc\u30d6\u30eb\u306e <code>CREATE TABLE<\/code> \u6587\u3092\u30de\u30fc\u30b8\u3057\u305f\u5185\u5bb9\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ atlas migrate diff initial --env temp\n\n$ ls migrations\/\n20251009010729_initial.sql  atlas.sum\n\n$ cat migrations\/20251009010729_initial.sql\n-- Create \"users\" table\nCREATE TABLE \"users\" (\"id\" bigint NOT NULL, \"name\" character varying NOT NULL, PRIMARY KEY (\"id\"));\n-- Create \"repos\" table\nCREATE TABLE \"repos\" (\"id\" bigint NOT NULL, \"name\" character varying NOT NULL, \"owner_id\" bigint NOT NULL, PRIMARY KEY (\"id\"), CONSTRAINT \"fk_repo_owner\" FOREIGN KEY (\"owner_id\") REFERENCES \"users\" (\"id\") ON UPDATE NO ACTION ON DELETE NO ACTION);<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. DB\u306b\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u3092\u9069\u7528<\/h3>\n\n\n\n<p>\u4f5c\u6210\u3055\u308c\u305fSQL\u3092\u691c\u8a3c\u7528DB\u306b\u9069\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">atlas migrate apply --env demo<\/pre>\n\n\n\n<p>\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306b\u3088\u308a\u3001\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u5bfe\u8c61\u306eDB\u5185\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u5c65\u6b74\u30c6\u30fc\u30d6\u30eb <code>atlas_schema_revisions<\/code> \u3068\u5c65\u6b74\u306e\u7167\u5408\u304c\u884c\u308f\u308c\u3001<code>migrations<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u914d\u4e0b\u306e\u672a\u9069\u7528\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u304c\u9806\u756a\u306b\u9069\u7528\u3055\u308c\u307e\u3059\u3002<br>\u3053\u306e\u6642\u70b9\u3067\u306f\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u5c65\u6b74\u30c6\u30fc\u30d6\u30eb\u304c\u7a7a\u306e\u305f\u3081\u3001\u5168\u3066\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u304c\u5bfe\u8c61\u3068\u306a\u308a\u307e\u3059\u304c\u3001\u4eca\u56de\u306e\u30b1\u30fc\u30b9\u3067\u306f\u521d\u671f\u306eDB\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9\u3092\u4f5c\u6210\u3059\u308b1\u30d5\u30a1\u30a4\u30eb\u3060\u3051\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"460\" src=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-41-1024x460.png\" alt=\"\" class=\"wp-image-79994\" srcset=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-41-1024x460.png 1024w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-41-360x162.png 360w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-41-768x345.png 768w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-41-1536x690.png 1536w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-41-2048x920.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u9069\u7528\u30ed\u30b0\u306b\u306f\u3001<code>users<\/code> \u30c6\u30fc\u30d6\u30eb\u3068 <code>repos<\/code> \u30c6\u30fc\u30d6\u30eb\u304c\u4f5c\u6210\u3055\u308c\u305f\u3053\u3068\u304c\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ atlas migrate apply --env demo\nMigrating to version 20251009103327 (1 migrations in total):\n  -- migrating version 20251009103327\n    -> CREATE TABLE \"public\".\"users\" (\"id\" bigint NOT NULL, \"name\" character varying NOT NULL, PRIMARY KEY (\"id\"));\n    -> CREATE TABLE \"public\".\"repos\" (\"id\" bigint NOT NULL, \"name\" character varying NOT NULL, \"owner_id\" bigint NOT NULL, PRIMARY KEY (\"id\"), CONSTRAINT \"fk_repo_owner\" FOREIGN KEY (\"owner_id\") REFERENCES \"public\".\"users\" (\"id\") ON UPDATE NO ACTION ON DELETE NO ACTION);\n  -- ok (5.648392ms)\n\n  -------------------------\n  -- 40.526546ms\n  -- 1 migration\n  -- 2 sql statements<\/pre>\n\n\n\n<p>\u5b9f\u969b\u306bDB\u306b\u63a5\u7d9a\u3057\u3066\u78ba\u8a8d\u3057\u3066\u307f\u308b\u3068\u3001\u521d\u671f\u306e\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9\u304c\u4f5c\u6210\u3055\u308c\u3066\u3044\u308b\u306e\u3068\u3001\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u5c65\u6b74\u30c6\u30fc\u30d6\u30eb\u306b\u5c65\u6b74\u304c\u66f8\u304d\u8fbc\u307e\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ psql -h localhost -p 5432 -d demo -U postgres\nPassword for user postgres:\npsql (15.14 (Ubuntu 15.14-1.pgdg22.04+1), server 17.2 (Debian 17.2-1.pgdg120+1))\nType \"help\" for help.<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30c6\u30fc\u30d6\u30eb\u4e00\u89a7<\/strong><\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">demo=# \\dt\n                 List of relations\n Schema |          Name          | Type  |  Owner\n--------+------------------------+-------+----------\n public | atlas_schema_revisions | table | postgres\n public | repos                  | table | postgres\n public | users                  | table | postgres\n(3 rows)<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>users<\/code> \u30c6\u30fc\u30d6\u30eb\u306e\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9<\/strong><\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">demo=# \\d users\n                    Table \"public.users\"\n Column |       Type        | Collation | Nullable | Default\n--------+-------------------+-----------+----------+---------\n id     | bigint            |           | not null |\n name   | character varying |           | not null |\nIndexes:\n    \"users_pkey\" PRIMARY KEY, btree (id)\nReferenced by:\n    TABLE \"repos\" CONSTRAINT \"fk_repo_owner\" FOREIGN KEY (owner_id) REFERENCES users(id)<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>repos<\/code> \u30c6\u30fc\u30d6\u30eb\u306e\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9<\/strong><\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">demo=# \\d repos\n                     Table \"public.repos\"\n  Column  |       Type        | Collation | Nullable | Default\n----------+-------------------+-----------+----------+---------\n id       | bigint            |           | not null |\n name     | character varying |           | not null |\n owner_id | bigint            |           | not null |\nIndexes:\n    \"repos_pkey\" PRIMARY KEY, btree (id)\nForeign-key constraints:\n    \"fk_repo_owner\" FOREIGN KEY (owner_id) REFERENCES users(id)<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>atlas_schema_revisions<\/code> \u30c6\u30fc\u30d6\u30eb\u306e\u5185\u5bb9<\/strong><\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">demo=# SELECT version,description,hash FROM atlas_schema_revisions;\n    version     | description |                     hash\n----------------+-------------+----------------------------------------------\n 20251009103327 | initial     | k6B212fSjYGW\/i\/4rF8PUQUk0+WOHcpWOMrE+80j3fs=\n(1 row)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. \u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9\u306e\u5909\u66f4\u3068\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u306e\u8ffd\u52a0\u4f5c\u6210\uff08\u30c6\u30fc\u30d6\u30eb\u5909\u66f4\uff09<\/h3>\n\n\n\n<p>\u5148\u307b\u3069\u4f5c\u6210\u3057\u305f <code>repos<\/code> \u30c6\u30fc\u30d6\u30eb\u306b <code>description<\/code> \u30ab\u30e9\u30e0\u3092\u8ffd\u52a0\u3059\u308b\u4fee\u6b63\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>schemas<strong>\/2_repos.sql<\/strong><\/code><\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-- Create \"repos\" table\nCREATE TABLE \"public\".\"repos\" (\n    \"id\" bigint NOT NULL,\n    \"name\" character varying NOT NULL,\n    \"description\" character varying NULL,  -- \u3053\u3053\u306b\u30ab\u30e9\u30e0\u3092\u8ffd\u52a0\n    \"owner_id\" bigint NOT NULL,\n    PRIMARY KEY (\"id\"),\n    CONSTRAINT \"fk_repo_owner\" FOREIGN KEY (\"owner_id\") REFERENCES \"public\".\"users\" (\"id\") ON UPDATE NO ACTION ON DELETE NO ACTION\n);<\/pre>\n\n\n\n<p>\u4fee\u6b63\u5f8c\u3001\u518d\u5ea6 <code>atlas migrate diff<\/code> \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">atlas migrate diff mod_repos --env temp<\/pre>\n\n\n\n<p><code>migrations<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u914d\u4e0b\u306b\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u304c1\u3064\u3042\u308b\u306e\u3067\u3001\u305d\u308c\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u3067\u4e00\u6642DB\u306b\u521d\u671f\u306e\u30b9\u30ad\u30fc\u30de\u72b6\u614b\u304c\u518d\u73fe\u3055\u308c\u307e\u3059\u3002<br>Atlas\u306f\u3001\u4e00\u6642DB\u3068 <code>schamas<\/code> \u914d\u4e0b\u306e\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9\u30d5\u30a1\u30a4\u30eb\u306e\u5dee\u5206\u3092\u691c\u77e5\u3057\u3001\u305d\u306e\u5dee\u5206\u3092\u57cb\u3081\u308b\u305f\u3081\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u3092\u81ea\u52d5\u4f5c\u6210\u3057\u3066 <code>migrations<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u8ffd\u52a0\u51fa\u529b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"540\" src=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-42-1024x540.png\" alt=\"\" class=\"wp-image-79995\" srcset=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-42-1024x540.png 1024w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-42-360x190.png 360w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-42-768x405.png 768w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-42-1536x810.png 1536w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-42-2048x1080.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u4eca\u56de\u306f\u65e2\u5b58\u30c6\u30fc\u30d6\u30eb\u306e\u5909\u66f4\u306a\u306e\u3067\u3001<code>ALTER TABLE<\/code> \u6587\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u304c\u51fa\u529b\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ atlas migrate diff mod_repos --env temp\n\n$ ls migrations\/\n20251009103327_initial.sql  20251010023825_mod_repos.sql  atlas.sum\n\n$ cat migrations\/20251010023825_mod_repos.sql\n-- Modify \"repos\" table\nALTER TABLE \"public\".\"repos\" ADD COLUMN \"description\" character varying NULL;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. \u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9\u306e\u5909\u66f4\u3068\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u306e\u8ffd\u52a0\u4f5c\u6210\uff08\u30c6\u30fc\u30d6\u30eb\u8ffd\u52a0\uff09<\/h3>\n\n\n\n<p>\u3055\u3089\u306b\u5225\u306e\u5909\u66f4\u3068\u3057\u3066\u3001<code>commits<\/code> \u30c6\u30fc\u30d6\u30eb\u3092\u65b0\u898f\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>schemas<strong>\/3_commits.sql<\/strong><\/code><\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-- Create \"commits\" table\nCREATE TABLE \"commits\" (\n  \"id\" bigint,\n  \"message\" character varying NOT NULL,\n  \"repo_id\" bigint NOT NULL,\n  \"author_id\" bigint NOT NULL,\n  PRIMARY KEY (\"id\"),\n  FOREIGN KEY (\"repo_id\") REFERENCES \"repos\" (\"id\"),\n  FOREIGN KEY (\"author_id\") REFERENCES \"users\" (\"id\")\n);<\/pre>\n\n\n\n<p>\u30d5\u30a1\u30a4\u30eb\u4f5c\u6210\u5f8c\u3001\u518d\u5ea6 <code>atlas migrate diff<\/code> \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">atlas migrate diff add_commits --env temp<\/pre>\n\n\n\n<p>\u4eca\u5ea6\u306f <code>migrations<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u914d\u4e0b\u306b\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u304c2\u3064\u3042\u308b\u306e\u3067\u3001\u305d\u308c\u3092\u9806\u756a\u306b\u9069\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4e00\u6642DB\u306b\u76f4\u8fd1\u306eDB\u30b9\u30ad\u30fc\u30de\u72b6\u614b(repos\u30c6\u30fc\u30d6\u30eb\u5909\u66f4\u5f8c\u306e\u72b6\u614b)\u304c\u518d\u73fe\u3055\u308c\u307e\u3059\u3002<br>Atlas\u306f\u5148\u307b\u3069\u3068\u540c\u69d8\u3001\u4e00\u6642DB\u3068 <code>schamas<\/code> \u914d\u4e0b\u306e\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9\u30d5\u30a1\u30a4\u30eb\u306e\u5dee\u5206\u3092\u691c\u77e5\u3057\u3001\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u3092\u81ea\u52d5\u4f5c\u6210\u3057\u3066 <code>migrations<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u8ffd\u52a0\u51fa\u529b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"805\" src=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-43-1024x805.png\" alt=\"\" class=\"wp-image-79996\" srcset=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-43-1024x805.png 1024w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-43-360x283.png 360w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-43-768x603.png 768w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-43-1536x1207.png 1536w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-43-2048x1609.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u4eca\u56de\u306f\u30c6\u30fc\u30d6\u30eb\u306e\u65b0\u898f\u8ffd\u52a0\u306a\u306e\u3067\u3001<code>CREATE TABLE<\/code> \u6587\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u304c\u8ffd\u52a0\u3067\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ atlas migrate diff add_commits --env temp\n\n$ ls migrations\/\n20251009103327_initial.sql  20251010023825_mod_repos.sql  20251010030347_add_commits.sql  atlas.sum\n\n$ cat migrations\/20251010030347_add_commits.sql\n-- Create \"commits\" table\nCREATE TABLE \"public\".\"commits\" (\"id\" bigint NOT NULL, \"message\" character varying NOT NULL, \"repo_id\" bigint NOT NULL, \"author_id\" bigint NOT NULL, PRIMARY KEY (\"id\"), CONSTRAINT \"commits_author_id_fkey\" FOREIGN KEY (\"author_id\") REFERENCES \"public\".\"users\" (\"id\") ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT \"commits_repo_id_fkey\" FOREIGN KEY (\"repo_id\") REFERENCES \"public\".\"repos\" (\"id\") ON UPDATE NO ACTION ON DELETE NO ACTION);<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. DB\u3078\u306e\u5909\u66f4\u306e\u8ffd\u52a0\u9069\u7528<\/h3>\n\n\n\n<p>\u5148\u307b\u3069\u4f5c\u6210\u3055\u308c\u305f2\u3064\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\uff08\u30ab\u30e9\u30e0\u8ffd\u52a0\u3068\u30c6\u30fc\u30d6\u30eb\u65b0\u898f\u8ffd\u52a0\uff09\u3092DB\u306b\u9069\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">atlas migrate apply --env demo<\/pre>\n\n\n\n<p>\u4eca\u56de\u306f\u521d\u56de\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u5c65\u6b74\u304c\u3042\u308b\u305f\u3081\u3001<code>atlas_schema_revisions<\/code> \u3068\u7167\u5408\u3055\u308c\u3001\u8ffd\u52a0\u3067\u4f5c\u6210\u3055\u308c\u305f2\u3064\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u304c\u9806\u756a\u306b\u9069\u7528\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" src=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-44-1024x608.png\" alt=\"\" class=\"wp-image-79997\" srcset=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-44-1024x608.png 1024w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-44-360x214.png 360w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-44-768x456.png 768w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-44-1536x913.png 1536w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/image-44-2048x1217.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u518d\u3073\u5ea6DB\u306b\u63a5\u7d9a\u3057\u3066\u72b6\u614b\u3092\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ psql -h localhost -p 5432 -d demo -U postgres\nPassword for user postgres:\npsql (15.14 (Ubuntu 15.14-1.pgdg22.04+1), server 17.2 (Debian 17.2-1.pgdg120+1))\nType \"help\" for help.<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30c6\u30fc\u30d6\u30eb\u4e00\u89a7<\/strong>\u3000\u21d2 <code>commits<\/code> \u30c6\u30fc\u30d6\u30eb\u304c\u8ffd\u52a0<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">demo=# \\dt\n                 List of relations\n Schema |          Name          | Type  |  Owner\n--------+------------------------+-------+----------\n public | atlas_schema_revisions | table | postgres\n public | commits                | table | postgres  -- commits\u30c6\u30fc\u30d6\u30eb\u304c\u8ffd\u52a0\n public | repos                  | table | postgres\n public | users                  | table | postgres\n(4 rows)<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>commits<\/code> \u30c6\u30fc\u30d6\u30eb\u306e\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9<\/strong>\u3000\u21d2 \u65b0\u898f\u8ffd\u52a0<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">demo=# \\d commits\n                     Table \"public.commits\"\n  Column   |       Type        | Collation | Nullable | Default\n-----------+-------------------+-----------+----------+---------\n id        | bigint            |           | not null |\n message   | character varying |           | not null |\n repo_id   | bigint            |           | not null |\n author_id | bigint            |           | not null |\nIndexes:\n    \"commits_pkey\" PRIMARY KEY, btree (id)\nForeign-key constraints:\n    \"commits_author_id_fkey\" FOREIGN KEY (author_id) REFERENCES users(id)\n    \"commits_repo_id_fkey\" FOREIGN KEY (repo_id) REFERENCES repos(id)<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>repos<\/code> \u30c6\u30fc\u30d6\u30eb\u306e\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9<\/strong>\u3000\u21d2 <code>description<\/code> \u30ab\u30e9\u30e0\u304c\u8ffd\u52a0 + <code>commits<\/code> \u30c6\u30fc\u30d6\u30eb\u304b\u3089\u306e\u53c2\u7167\u304c\u8ffd\u52a0<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">demo=# \\d repos\n                       Table \"public.repos\"\n   Column    |       Type        | Collation | Nullable | Default\n-------------+-------------------+-----------+----------+---------\n id          | bigint            |           | not null |\n name        | character varying |           | not null |\n owner_id    | bigint            |           | not null |\n description | character varying |           |          |           -- \u30ab\u30e9\u30e0\u304c\u8ffd\u52a0\nIndexes:\n    \"repos_pkey\" PRIMARY KEY, btree (id)\nForeign-key constraints:\n    \"fk_repo_owner\" FOREIGN KEY (owner_id) REFERENCES users(id)\nReferenced by:\n    TABLE \"commits\" CONSTRAINT \"commits_repo_id_fkey\" FOREIGN KEY (repo_id) REFERENCES repos(id)  -- commits\u30c6\u30fc\u30d6\u30eb\u304b\u3089\u306e\u53c2\u7167\u304c\u8ffd\u52a0<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>users<\/code> \u30c6\u30fc\u30d6\u30eb\u306e\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9<\/strong>\u3000\u21d2 <code>commits<\/code> \u30c6\u30fc\u30d6\u30eb\u304b\u3089\u306e\u53c2\u7167\u304c\u8ffd\u52a0<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">demo=# \\d users\n                    Table \"public.users\"\n Column |       Type        | Collation | Nullable | Default\n--------+-------------------+-----------+----------+---------\n id     | bigint            |           | not null |\n name   | character varying |           | not null |\nIndexes:\n    \"users_pkey\" PRIMARY KEY, btree (id)\nReferenced by:\n    TABLE \"commits\" CONSTRAINT \"commits_author_id_fkey\" FOREIGN KEY (author_id) REFERENCES users(id)  -- commits\u30c6\u30fc\u30d6\u30eb\u304b\u3089\u306e\u53c2\u7167\u304c\u8ffd\u52a0\n    TABLE \"repos\" CONSTRAINT \"fk_repo_owner\" FOREIGN KEY (owner_id) REFERENCES users(id)<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>atlas_schema_revisions<\/code> \u30c6\u30fc\u30d6\u30eb\u306e\u5185\u5bb9<\/strong>\u3000\u21d2 2\u3064\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u5c65\u6b74\u304c\u8ffd\u52a0<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">demo=# SELECT version,description,hash FROM atlas_schema_revisions;\n    version     | description |                     hash\n----------------+-------------+----------------------------------------------\n 20251009103327 | initial     | k6B212fSjYGW\/i\/4rF8PUQUk0+WOHcpWOMrE+80j3fs=\n 20251010023825 | mod_repos   | 4t3rp8ghYpS7eU+fH1\/zaR1CUZcvzSEdbWnubL241jc=\n 20251010030347 | add_commits | s5LUiesbVt4Pu6mcpS\/EptFWZBae75ee38Ed8L1pJrc=\n(3 rows)<\/pre>\n\n\n\n<p>2\u56de\u306e\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9\u306e\u5909\u66f4\u304c\u6b63\u3057\u304f\u53cd\u6620\u3055\u308c\u3066\u3044\u308b\u306e\u3068\u3001\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u5c65\u6b74\u30c6\u30fc\u30d6\u30eb\u306b2\u3064\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u5c65\u6b74\u304c\u8ffd\u52a0\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u78ba\u8a8d\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u307e\u3068\u3081<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b66\u3093\u3060\u3053\u3068\u306e\u6574\u7406<\/h3>\n\n\n\n<p>\u4eca\u56de\u306e\u691c\u8a3c\u3092\u901a\u3058\u3066\u3001Atlas\u306e<strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30a2\u30d7\u30ed\u30fc\u30c1<\/strong>\u306e\u5177\u4f53\u7684\u306a\u52d5\u4f5c\u3092\u7406\u89e3\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DB\u30b9\u30ad\u30fc\u30de\u306e\u6700\u7d42\u5b9a\u7fa9 (<code>schemas<\/code>\u30c7\u30a3\u30ec\u30af\u30c8\u30ea) \u3068\u73fe\u5728\u306e\u72b6\u614b\u3068\u306e\u5dee\u5206\u3092\u8a08\u7b97\u3057\u3001\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3SQL\u3092\u81ea\u52d5\u751f\u6210\u3059\u308b\u3053\u3068\u3002<\/li>\n\n\n\n<li>\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u5c65\u6b74\u304c<code>migrations<\/code>\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306b\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u4ed8\u304d\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u6b8b\u308a\u3001Git\u3067\u5909\u66f4\u5c65\u6b74\u3092\u660e\u78ba\u306b\u8ffd\u8de1\u3067\u304d\u308b\u3053\u3068\u3002<\/li>\n\n\n\n<li><code>atlas migrate diff<\/code>\u3068<code>atlas migrate apply<\/code>\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u521d\u671f\u69cb\u7bc9\u304b\u3089\u7d99\u7d9a\u7684\u306a\u30b9\u30ad\u30fc\u30de\u66f4\u65b0\u307e\u3067\u3092\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3067\u5b89\u5168\u306b\u7ba1\u7406\u3067\u304d\u308b\u3053\u3068\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/h3>\n\n\n\n<p><a href=\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/80021\">\u5f8c\u7de8<\/a>\u3067\u306f\u5f15\u304d\u7d9a\u304d\u3001CI\/CD\u3068\u306e\u7d71\u5408\u65b9\u6cd5\u306b\u3064\u3044\u3066\u3084\u3001\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u306a\u3069\u3001\u5b9f\u8df5\u306b\u5411\u3051\u3066\u306e\u6ce8\u610f\u70b9\u30fbTIPS\u306a\u3069\u306b\u3064\u3044\u3066\u8a18\u8f09\u3057\u3066\u3044\u304d\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u306f\u3058\u3081\u306b \u5bfe\u8c61\u8aad\u8005\u306e\u30ec\u30d9\u30eb\u611f \u672c\u8a18\u4e8b\u306f\u3001DevOps\u74b0\u5883\u306b\u304a\u3051\u308bDB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u306e\u8ab2\u984c\u306b\u76f4\u9762\u3057\u3066\u3044\u308b\u4e2d\u7d1a\u8005\u4ee5\u4e0a\u306e\u65b9\u3001\u307e\u305f\u306f\u3001DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30eb\u3092CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306b\u7d44\u307f\u8fbc\u307f\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u308b\u65b9\u3092\u4e3b\u306a\u5bfe\u8c61\u3068\u3057\u3066\u3044 [&#8230;]<\/p>\n","protected":false},"author":58,"featured_media":79999,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[67,935],"tags":[1111,271,1112,331,68,1113],"class_list":["post-79848","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","category-s-sato","tag-atlasgo","tag-db","tag-db-migration","tag-dba","tag-devops","tag-1113"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30ebAtlas\u3067DevOps\u74b0\u5883\u306b\u304a\u3051\u308bDB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u3092\u5b9f\u8df5\u3057\u3066\u307f\u3088\u3046(\u524d\u7de8) - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3<\/title>\n<meta name=\"description\" content=\"DevOps, s-sato |\u306f\u3058\u3081\u306b \u5bfe\u8c61\u8aad\u8005\u306e\u30ec\u30d9\u30eb\u611f\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30ebAtlas\u3067DevOps\u74b0\u5883\u306b\u304a\u3051\u308bDB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u3092\u5b9f\u8df5\u3057\u3066\u307f\u3088\u3046(\u524d\u7de8) - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\" \/>\n<meta property=\"og:description\" content=\"DevOps, s-sato |\u306f\u3058\u3081\u306b \u5bfe\u8c61\u8aad\u8005\u306e\u30ec\u30d9\u30eb\u611f\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848\" \/>\n<meta property=\"og:site_name\" content=\"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/creationline\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-16T00:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-30T06:56:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/Gemini_Generated_Image_61uxss61uxss61ux.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"\u4f50\u85e4\u6ecb\u6643\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@creationline\" \/>\n<meta name=\"twitter:site\" content=\"@creationline\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u4f50\u85e4\u6ecb\u6643\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848\"},\"author\":{\"name\":\"\u4f50\u85e4\u6ecb\u6643\",\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/6327e24b340d0dace8dc67be8c8693c6\"},\"headline\":\"DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30ebAtlas\u3067DevOps\u74b0\u5883\u306b\u304a\u3051\u308bDB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u3092\u5b9f\u8df5\u3057\u3066\u307f\u3088\u3046(\u524d\u7de8)\",\"datePublished\":\"2025-10-16T00:00:00+00:00\",\"dateModified\":\"2025-10-30T06:56:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848\"},\"wordCount\":136,\"image\":{\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/Gemini_Generated_Image_61uxss61uxss61ux.png\",\"keywords\":[\"AtlasGo\",\"db\",\"DB Migration\",\"DBA\",\"DevOps\",\"\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\"],\"articleSection\":[\"DevOps\",\"s-sato\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848\",\"url\":\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848\",\"name\":\"DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30ebAtlas\u3067DevOps\u74b0\u5883\u306b\u304a\u3051\u308bDB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u3092\u5b9f\u8df5\u3057\u3066\u307f\u3088\u3046(\u524d\u7de8) - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\",\"isPartOf\":{\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/Gemini_Generated_Image_61uxss61uxss61ux.png\",\"datePublished\":\"2025-10-16T00:00:00+00:00\",\"dateModified\":\"2025-10-30T06:56:08+00:00\",\"author\":{\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/6327e24b340d0dace8dc67be8c8693c6\"},\"description\":\"DevOps, s-sato |\u306f\u3058\u3081\u306b \u5bfe\u8c61\u8aad\u8005\u306e\u30ec\u30d9\u30eb\u611f\",\"breadcrumb\":{\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848#primaryimage\",\"url\":\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/Gemini_Generated_Image_61uxss61uxss61ux.png\",\"contentUrl\":\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/Gemini_Generated_Image_61uxss61uxss61ux.png\",\"width\":1024,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"HOME\",\"item\":\"https:\/\/www.creationline.com\/tech-blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u30a2\u30b8\u30e3\u30a4\u30eb\uff06DevOps\",\"item\":\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"DevOps\",\"item\":\"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30ebAtlas\u3067DevOps\u74b0\u5883\u306b\u304a\u3051\u308bDB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u3092\u5b9f\u8df5\u3057\u3066\u307f\u3088\u3046(\u524d\u7de8)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/#website\",\"url\":\"https:\/\/www.creationline.com\/tech-blog\/\",\"name\":\"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\",\"description\":\"\u30a2\u30b8\u30e3\u30a4\u30eb\uff06DevOps\u3001\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u3001AI\uff06LLM\u306e\u5148\u7aef\u6280\u8853\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.creationline.com\/tech-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/6327e24b340d0dace8dc67be8c8693c6\",\"name\":\"\u4f50\u85e4\u6ecb\u6643\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/12\/avatar.png\",\"url\":\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/12\/avatar.png\",\"contentUrl\":\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/12\/avatar.png\",\"caption\":\"\u4f50\u85e4\u6ecb\u6643\"},\"url\":\"https:\/\/www.creationline.com\/tech-blog\/author\/s-sato\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30ebAtlas\u3067DevOps\u74b0\u5883\u306b\u304a\u3051\u308bDB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u3092\u5b9f\u8df5\u3057\u3066\u307f\u3088\u3046(\u524d\u7de8) - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","description":"DevOps, s-sato |\u306f\u3058\u3081\u306b \u5bfe\u8c61\u8aad\u8005\u306e\u30ec\u30d9\u30eb\u611f","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:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848","og_locale":"ja_JP","og_type":"article","og_title":"DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30ebAtlas\u3067DevOps\u74b0\u5883\u306b\u304a\u3051\u308bDB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u3092\u5b9f\u8df5\u3057\u3066\u307f\u3088\u3046(\u524d\u7de8) - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","og_description":"DevOps, s-sato |\u306f\u3058\u3081\u306b \u5bfe\u8c61\u8aad\u8005\u306e\u30ec\u30d9\u30eb\u611f","og_url":"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848","og_site_name":"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","article_publisher":"https:\/\/www.facebook.com\/creationline","article_published_time":"2025-10-16T00:00:00+00:00","article_modified_time":"2025-10-30T06:56:08+00:00","og_image":[{"width":1024,"height":1024,"url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/Gemini_Generated_Image_61uxss61uxss61ux.png","type":"image\/png"}],"author":"\u4f50\u85e4\u6ecb\u6643","twitter_card":"summary_large_image","twitter_creator":"@creationline","twitter_site":"@creationline","twitter_misc":{"\u57f7\u7b46\u8005":"\u4f50\u85e4\u6ecb\u6643","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"6\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848#article","isPartOf":{"@id":"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848"},"author":{"name":"\u4f50\u85e4\u6ecb\u6643","@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/6327e24b340d0dace8dc67be8c8693c6"},"headline":"DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30ebAtlas\u3067DevOps\u74b0\u5883\u306b\u304a\u3051\u308bDB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u3092\u5b9f\u8df5\u3057\u3066\u307f\u3088\u3046(\u524d\u7de8)","datePublished":"2025-10-16T00:00:00+00:00","dateModified":"2025-10-30T06:56:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848"},"wordCount":136,"image":{"@id":"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848#primaryimage"},"thumbnailUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/Gemini_Generated_Image_61uxss61uxss61ux.png","keywords":["AtlasGo","db","DB Migration","DBA","DevOps","\u30b9\u30ad\u30fc\u30de\u7ba1\u7406"],"articleSection":["DevOps","s-sato"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848","url":"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848","name":"DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30ebAtlas\u3067DevOps\u74b0\u5883\u306b\u304a\u3051\u308bDB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u3092\u5b9f\u8df5\u3057\u3066\u307f\u3088\u3046(\u524d\u7de8) - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","isPartOf":{"@id":"https:\/\/www.creationline.com\/tech-blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848#primaryimage"},"image":{"@id":"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848#primaryimage"},"thumbnailUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/Gemini_Generated_Image_61uxss61uxss61ux.png","datePublished":"2025-10-16T00:00:00+00:00","dateModified":"2025-10-30T06:56:08+00:00","author":{"@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/6327e24b340d0dace8dc67be8c8693c6"},"description":"DevOps, s-sato |\u306f\u3058\u3081\u306b \u5bfe\u8c61\u8aad\u8005\u306e\u30ec\u30d9\u30eb\u611f","breadcrumb":{"@id":"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848#primaryimage","url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/Gemini_Generated_Image_61uxss61uxss61ux.png","contentUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2025\/10\/Gemini_Generated_Image_61uxss61uxss61ux.png","width":1024,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops\/79848#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"HOME","item":"https:\/\/www.creationline.com\/tech-blog"},{"@type":"ListItem","position":2,"name":"\u30a2\u30b8\u30e3\u30a4\u30eb\uff06DevOps","item":"https:\/\/www.creationline.com\/tech-blog\/agile-devops"},{"@type":"ListItem","position":3,"name":"DevOps","item":"https:\/\/www.creationline.com\/tech-blog\/agile-devops\/devops"},{"@type":"ListItem","position":4,"name":"DB\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30c4\u30fc\u30ebAtlas\u3067DevOps\u74b0\u5883\u306b\u304a\u3051\u308bDB\u30b9\u30ad\u30fc\u30de\u7ba1\u7406\u3092\u5b9f\u8df5\u3057\u3066\u307f\u3088\u3046(\u524d\u7de8)"}]},{"@type":"WebSite","@id":"https:\/\/www.creationline.com\/tech-blog\/#website","url":"https:\/\/www.creationline.com\/tech-blog\/","name":"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","description":"\u30a2\u30b8\u30e3\u30a4\u30eb\uff06DevOps\u3001\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u3001AI\uff06LLM\u306e\u5148\u7aef\u6280\u8853","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.creationline.com\/tech-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/6327e24b340d0dace8dc67be8c8693c6","name":"\u4f50\u85e4\u6ecb\u6643","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/12\/avatar.png","url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/12\/avatar.png","contentUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/12\/avatar.png","caption":"\u4f50\u85e4\u6ecb\u6643"},"url":"https:\/\/www.creationline.com\/tech-blog\/author\/s-sato"}]}},"_links":{"self":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/79848","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/comments?post=79848"}],"version-history":[{"count":70,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/79848\/revisions"}],"predecessor-version":[{"id":80341,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/79848\/revisions\/80341"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/media\/79999"}],"wp:attachment":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/media?parent=79848"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/categories?post=79848"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/tags?post=79848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}