{"id":1879,"date":"2026-09-13T16:34:18","date_gmt":"2026-09-13T07:34:18","guid":{"rendered":"https:\/\/daba-no-heya.com\/?p=1879"},"modified":"2026-09-13T16:34:19","modified_gmt":"2026-09-13T07:34:19","slug":"post-1879","status":"publish","type":"post","link":"https:\/\/daba-no-heya.com\/?p=1879","title":{"rendered":"[Terraform] terraform-plugin-framework\u3067provider\u3092\u4f5c\u6210\u3057\u3066\u307f\u308b"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_87_1 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/daba-no-heya.com\/?p=1879\/#%E6%A6%82%E8%A6%81\" >\u6982\u8981<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/daba-no-heya.com\/?p=1879\/#provider%E3%81%AE%E5%AE%9A%E7%BE%A9\" >provider\u306e\u5b9a\u7fa9<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/daba-no-heya.com\/?p=1879\/#resource%E3%81%AE%E5%AE%9A%E7%BE%A9\" >resource\u306e\u5b9a\u7fa9<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/daba-no-heya.com\/?p=1879\/#main%E9%96%A2%E6%95%B0\" >main\u95a2\u6570<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/daba-no-heya.com\/?p=1879\/#%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D\" >\u52d5\u4f5c\u78ba\u8a8d<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%A6%82%E8%A6%81\"><\/span>\u6982\u8981<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Terraform\u3068\u5916\u90e8\u30b5\u30fc\u30d3\u30b9\u3092\u63a5\u7d9a\u3059\u308b\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u3053\u3068\u3092\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc(provider)\u3068\u547c\u3073\u307e\u3059\u3002<br>\u305f\u3068\u3048\u3070<code>hashicorp\/aws<\/code>\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066<code>aws_instance<\/code>\u3092\u547c\u3073\u51fa\u3059\u3068\u3001EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001\u3053\u308c\u306faws\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u304cTerraform\u3067\u6307\u5b9a\u3055\u308c\u305f\u5185\u5bb9\u306b\u5f93\u3063\u3066AWS SDK\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u304b\u3089\u3067\u3059\u3002<br>aws\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u30b3\u30fc\u30c9\u306f<a href=\"https:\/\/github.com\/hashicorp\/terraform-provider-aws\" data-type=\"link\" data-id=\"https:\/\/github.com\/hashicorp\/terraform-provider-aws\">GitHub<\/a>\u3067\u516c\u958b\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Terraform\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306fGo\u8a00\u8a9e\u3067\u4f5c\u6210\u3057\u307e\u3059\u3002<br>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001<a href=\"https:\/\/github.com\/hashicorp\/terraform-plugin-framework\" data-type=\"link\" data-id=\"https:\/\/github.com\/hashicorp\/terraform-plugin-framework\">terraform-plugin-framework<\/a>\u3092\u7528\u3044\u3066\u3001Misskey\u306e\u30ce\u30fc\u30c8\u3092\u7ba1\u7406\u3059\u308bresource\u3092\u4f5c\u6210\u3057\u3066\u307f\u307e\u3059\u3002<br>\u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306eGitHub\u30ec\u30dd\u30b8\u30c8\u30ea\u3067\u516c\u958b\u3057\u3066\u3044\u307e\u3059\u3002<br><a href=\"https:\/\/github.com\/maeda6uiui\/terraform-provider-misskey\">https:\/\/github.com\/maeda6uiui\/terraform-provider-misskey<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"provider%E3%81%AE%E5%AE%9A%E7%BE%A9\"><\/span>provider\u306e\u5b9a\u7fa9<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306fprovider\/internal\/provider\/provider.go\u3067\u3059\u3002<br>\u30b3\u30fc\u30c9\u5168\u4f53\u306fGitHub\u306e\u65b9\u3092\u78ba\u8a8d\u3057\u3066\u3044\u305f\u3060\u304f\u3068\u3057\u3066\u3001\u3053\u3053\u3067\u306f\u91cd\u8981\u305d\u3046\u306a\u90e8\u5206\u3060\u3051\u629c\u7c8b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-luxe-blocks-syntaxhighlighter line-numbers language-clike\"><code class=\"language-clike\">func (p *MisskeyProvider) Metadata(\n\tctx context.Context,\n\treq provider.MetadataRequest,\n\tresp *provider.MetadataResponse) {\n\tresp.TypeName = \"misskey\"\n\tresp.Version = p.version\n}\n\nfunc (p *MisskeyProvider) Schema(\n\tctx context.Context,\n\treq provider.SchemaRequest,\n\tresp *provider.SchemaResponse) {\n\tresp.Schema = schema.Schema{\n\t\tAttributes: map[string]schema.Attribute{\n\t\t\t\"server_url\": schema.StringAttribute{\n\t\t\t\tRequired:            true,\n\t\t\t\tMarkdownDescription: \"URL of the Misskey server\",\n\t\t\t},\n\t\t\t\"access_token\": schema.StringAttribute{\n\t\t\t\tOptional:            true,\n\t\t\t\tSensitive:           true,\n\t\t\t\tMarkdownDescription: \"Access token for the Misskey account\",\n\t\t\t},\n\t\t\t\"timeout_seconds\": schema.Int32Attribute{\n\t\t\t\tOptional:            true,\n\t\t\t\tMarkdownDescription: \"Timeout for HTTP requests to the Misskey server\",\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc (p *MisskeyProvider) Configure(\n\tctx context.Context,\n\treq provider.ConfigureRequest,\n\tresp *provider.ConfigureResponse) {\n\tvar model model.MisskeyProviderModel\n\n\tresp.Diagnostics.Append(req.Config.Get(ctx, &amp;model)...)\n\tif resp.Diagnostics.HasError() {\n\t\treturn\n\t}\n\n\tvar accessToken string\n\tif !model.AccessToken.IsNull() &amp;&amp; !model.AccessToken.IsUnknown() {\n\t\taccessToken = model.AccessToken.ValueString()\n\t} else {\n\t\taccessToken = os.Getenv(\"MISSKEY_ACCESS_TOKEN\")\n\t}\n\n\tif accessToken == \"\" {\n\t\tresp.Diagnostics.AddError(\n\t\t\t\"Missing Access Token\",\n\t\t\t\"The provider argument 'access_token' or the environment variable 'MISSKEY_ACCESS_TOKEN' must be set.\",\n\t\t)\n\t\treturn\n\t}\n\tmodel.AccessToken = types.StringValue(accessToken)\n\n\tvar timeoutSeconds int32\n\tif !model.TimeoutSeconds.IsNull() &amp;&amp; !model.TimeoutSeconds.IsUnknown() {\n\t\ttimeoutSeconds = model.TimeoutSeconds.ValueInt32()\n\t} else {\n\t\ttimeoutSeconds = 5\n\t}\n\tmodel.TimeoutSeconds = types.Int32Value(timeoutSeconds)\n\n\tresp.ResourceData = &amp;model\n\tresp.DataSourceData = &amp;model\n}\n\nfunc (p *MisskeyProvider) Resources(ctx context.Context) []func() resource.Resource {\n\treturn []func() resource.Resource{\n\t\tnote.NewNoteResource,\n\t}\n}\n\nfunc (p *MisskeyProvider) DataSources(ctx context.Context) []func() datasource.DataSource {\n\treturn []func() datasource.DataSource{\n\t\tnote.NewNoteDataSource,\n\t}\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Metadata<\/code>\u3067\u306f\u3053\u306eprovider\u306e\u60c5\u5831\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Schema<\/code>\u3067\u306f\u3001Terraform\u306e<code>provider<\/code>\u30d6\u30ed\u30c3\u30af\u3067\u53d7\u3051\u53d6\u308b\u5024\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<br>\u4eca\u56de\u306e\u5834\u5408\u3001<code>server_url<\/code>\u304c\u5fc5\u9808\u306a\u306e\u3067\u3001\u30e6\u30fc\u30b6\u30fc\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3057\u3066<code>server_url<\/code>\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-luxe-blocks-syntaxhighlighter line-numbers language-clike\"><code class=\"language-clike\">provider \"misskey\" {\n  server_url = \"https:\/\/misskey-dabansky.com\"\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Misskey\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306b\u306f\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u304c\u5fc5\u8981\u3067\u3059\u304c\u3001\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u3092\u30cf\u30fc\u30c9\u30b3\u30fc\u30c9\u3059\u308b\u306e\u306f\u9069\u5207\u3067\u306f\u306a\u3044\u305f\u3081\u3001\u74b0\u5883\u5909\u6570\u304b\u3089\u53d7\u3051\u53d6\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u305f\u3044\u3067\u3059\u3002<br>\u307e\u305f\u3001\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u306b\u3064\u3044\u3066\u306f\u5fc5\u9808\u3067\u306f\u306a\u304f\u3001\u6307\u5b9a\u3055\u308c\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u3092\u4f7f\u3046\u3088\u3046\u306b\u3057\u305f\u3044\u3067\u3059\u3002<br>\u3053\u306e\u3088\u3046\u306a\u51e6\u7406\u306f<code>Schema<\/code>\u3067\u306f\u5b9f\u73fe\u3067\u304d\u306a\u3044\u306e\u3067\u3001<code>Configure<\/code>\u3067\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Schema<\/code>\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30b9\u30ad\u30fc\u30de\u306b\u5bfe\u5fdc\u3059\u308b\u30e2\u30c7\u30eb(struct)\u3092\u5b9a\u7fa9\u3057\u3066\u304a\u3044\u3066\u3001<code>req.Config.Get(ctx, &amp;model)<\/code>\u3067\u30e2\u30c7\u30eb\u306b\u5024\u3092\u30bb\u30c3\u30c8\u3057\u307e\u3059\u3002<br>\u30e2\u30c7\u30eb\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-luxe-blocks-syntaxhighlighter line-numbers language-clike\"><code class=\"language-clike\">type MisskeyProviderModel struct {\n\tServerUrl      types.String `tfsdk:\"server_url\"`\n\tAccessToken    types.String `tfsdk:\"access_token\"`\n\tTimeoutSeconds types.Int32  `tfsdk:\"timeout_seconds\"`\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Terraform\u306e\u30b9\u30c6\u30fc\u30c8\u306e\u5b9f\u4f53\u306fJSON\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u304c\u3001<code>tfsdk<\/code>\u3067\u6307\u5b9a\u3057\u305f\u540d\u524d\u3092\u30ad\u30fc\u306b\u3057\u3066JSON\u30d5\u30a1\u30a4\u30eb\u306b\u5024\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002<br>provider\u306e\u30b9\u30ad\u30fc\u30de\u306e\u5834\u5408\u306f\u30b9\u30c6\u30fc\u30c8\u306b\u306f\u4fdd\u5b58\u3055\u308c\u307e\u305b\u3093\u304c\u3001resource\u306e\u5834\u5408\u306f<code>tfsdk<\/code>\u3067\u6307\u5b9a\u3057\u305f\u5024\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>provider<\/code>\u30d6\u30ed\u30c3\u30af\u304b\u3089\u5024\u3092\u8aad\u307f\u8fbc\u3093\u3060\u3089\u3001\u305d\u308c\u3092resource\u3068data source\u304b\u3089\u3082\u53c2\u7167\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002<br>\u4ee5\u4e0b\u306e\u3088\u3046\u306b<code>resp<\/code>\u306b\u5024\u3092\u30bb\u30c3\u30c8\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-luxe-blocks-syntaxhighlighter line-numbers language-clike\"><code class=\"language-clike\">resp.ResourceData = &amp;model\nresp.DataSourceData = &amp;model<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"resource%E3%81%AE%E5%AE%9A%E7%BE%A9\"><\/span>resource\u306e\u5b9a\u7fa9<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306fprovider\/internal\/provider\/note\/resource.go\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u307e\u305a\u3001<code>provider<\/code>\u30d6\u30ed\u30c3\u30af\u304b\u3089\u8aad\u307f\u8fbc\u3093\u3060\u5024\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<br>provider\u306e<code>Configure<\/code>\u3067<code>resp.ResourceData = &amp;model<\/code>\u3068\u3044\u3046\u3075\u3046\u306b\u30bb\u30c3\u30c8\u3057\u305f\u306e\u3067\u3001\u3053\u3053\u3067\u305d\u306e\u5024\u3092\u8aad\u307f\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-luxe-blocks-syntaxhighlighter line-numbers language-clike\"><code class=\"language-clike\">func (r *NoteResource) Configure(\n\tctx context.Context,\n\treq resource.ConfigureRequest,\n\tresp *resource.ConfigureResponse) {\n\tif req.ProviderData == nil {\n\t\treturn\n\t}\n\n\tdata, ok := req.ProviderData.(*model.MisskeyProviderModel)\n\tif !ok {\n\t\tresp.Diagnostics.AddError(\n\t\t\t\"Unexpected Resource Configure Type\",\n\t\t\tfmt.Sprintf(\"Expected *MisskeyProviderModel, got: %T. Please report this issue to the provider developers.\", req.ProviderData),\n\t\t)\n\t\treturn\n\t}\n\n\tmisskeyClient := misskey.NewMisskeyHttpClient(\n\t\tdata.ServerUrl.ValueString(),\n\t\tint(data.TimeoutSeconds.ValueInt32()),\n\t\tdata.AccessToken.ValueString(),\n\t)\n\tr.misskeyClient = misskeyClient\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8aad\u307f\u8fbc\u3093\u3060\u5024\u3092\u4f7f\u3063\u3066\u3001Misskey\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<br>\u3053\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306fMisskey\u306eHTTP API\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3059\u3002<br>HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u6295\u3052\u308b\u3060\u3051\u306a\u306e\u3067\u8a73\u7d30\u306f\u7701\u304d\u307e\u3059\u3002<br>\u30b3\u30fc\u30c9\u306fprovider\/internal\/provider\/misskey\/client.go\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">resource\u306e\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9\u3082provider\u3068\u307b\u3068\u3093\u3069\u540c\u3058\u3067\u3059\u304c\u3001\u5c11\u3057\u7570\u306a\u308b\u70b9\u304c\u3042\u308a\u307e\u3059\u3002<br>\u305f\u3068\u3048\u3070<code>text<\/code>\u306f\u30ce\u30fc\u30c8\u306e\u672c\u6587\u3092\u7ba1\u7406\u3059\u308b\u30d5\u30a3\u30fc\u30eb\u30c9\u3067\u3059\u304c\u3001Misskey\u306e\u5834\u5408\u3001\u30ce\u30fc\u30c8\u306e\u672c\u6587\u3092in-place\u3067\u66f4\u65b0\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002<br>\u305d\u306e\u305f\u3081\u3001<code>text<\/code>\u304c\u66f4\u65b0\u3055\u308c\u305f\u5834\u5408\u306fresource\u3092\u518d\u4f5c\u6210\u3059\u308b\u3088\u3046\u306b\u3057\u305f\u3044\u3067\u3059\u3002<br>\u305d\u308c\u3092\u5b9f\u73fe\u3059\u308b\u306e\u304c\u3001<code>PlanModifiers<\/code>\u3067\u3059\u3002<br><code>RequiresReplace()<\/code>\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u3053\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u5909\u5316\u3057\u305f\u5834\u5408\u306bresource\u306ereplace\u304c\u8981\u6c42\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-luxe-blocks-syntaxhighlighter line-numbers language-clike\"><code class=\"language-clike\">\"text\": schema.StringAttribute{\n\tRequired:            true,\n\tMarkdownDescription: \"Text of the note\",\n\tPlanModifiers: []planmodifier.String{\n\t\tstringplanmodifier.RequiresReplace(),\n\t},\n},<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b21\u306b\u3001\u30ce\u30fc\u30c8\u306b\u5bfe\u3059\u308bCRUD\u64cd\u4f5c\u3092\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<br><code>Create<\/code>\u306e\u4f8b\u3092\u4ee5\u4e0b\u306b\u8a18\u8f09\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">plan\u304b\u3089\u5024\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-luxe-blocks-syntaxhighlighter line-numbers language-clike\"><code class=\"language-clike\">var model NoteModel\n\nresp.Diagnostics.Append(req.Plan.Get(ctx, &amp;model)...)\nif resp.Diagnostics.HasError() {\n\treturn\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u7121\u4e8b\u306b\u30ce\u30fc\u30c8\u3092\u4f5c\u6210\u3067\u304d\u308b\u3068\u3001\u4f5c\u6210\u3057\u305f\u30ce\u30fc\u30c8\u306eID\u304c\u53d6\u5f97\u3067\u304d\u308b\u306e\u3067\u3001\u305d\u308c\u3092\u30b9\u30c6\u30fc\u30c8\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-luxe-blocks-syntaxhighlighter line-numbers language-clike\"><code class=\"language-clike\">model.Id = types.StringValue(respModel.CreatedNote.Id)\n\nresp.Diagnostics.Append(resp.State.Set(ctx, &amp;model)...)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u540c\u69d8\u306b\u3057\u3066\u3001<code>Read<\/code>\u3001<code>Update<\/code>\u3001<code>Delete<\/code>\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002<br>Misskey\u306e\u30ce\u30fc\u30c8\u306e\u5834\u5408\u306fin-place\u3067\u306eupdate\u306f\u4e0d\u53ef\u80fd\u306a\u306e\u3067\u3001\u3082\u3057<code>Update<\/code>\u304c\u547c\u3070\u308c\u3066\u3082\u30a8\u30e9\u30fc\u306b\u306a\u308b\u3088\u3046\u306b\u3057\u3066\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-luxe-blocks-syntaxhighlighter line-numbers language-clike\"><code class=\"language-clike\">func (r *NoteResource) Update(\n\tctx context.Context,\n\treq resource.UpdateRequest,\n\tresp *resource.UpdateResponse) {\n\t\/\/ Every attribute requires replacement, so this should never be called\n\tresp.Diagnostics.AddError(\n\t\t\"Update Not Supported\",\n\t\t\"Misskey note cannot be updated in place, it must be recreated instead\",\n\t)\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"main%E9%96%A2%E6%95%B0\"><\/span>main\u95a2\u6570<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u3068\u306a\u308bmain\u95a2\u6570\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002<br>\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306fprovider\/main.go\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-luxe-blocks-syntaxhighlighter line-numbers language-clike\"><code class=\"language-clike\">package main\n\nimport (\n\t\"context\"\n\t\"flag\"\n\t\"log\"\n\n\t\"github.com\/hashicorp\/terraform-plugin-framework\/providerserver\"\n\t\"github.com\/maeda6uiui\/terraform-provider-misskey\/internal\/provider\"\n)\n\nvar (\n\tversion string = \"0.0.1-alpha1\"\n)\n\nfunc main() {\n\tvar debug bool\n\n\tflag.BoolVar(&amp;debug, \"debug\", false, \"set to true to run the provider with support for debuggers like delve\")\n\tflag.Parse()\n\n\topts := providerserver.ServeOpts{\n\t\tAddress: \"registry.terraform.io\/maeda6uiui\/misskey\",\n\t\tDebug:   debug,\n\t}\n\terr := providerserver.Serve(context.Background(), provider.New(version), opts)\n\tif err != nil {\n\t\tlog.Fatal(err.Error())\n\t}\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D\"><\/span>\u52d5\u4f5c\u78ba\u8a8d<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>misskey_note<\/code> resource\u306e\u52d5\u4f5c\u78ba\u8a8d\u3092\u3059\u308b\u305f\u3081\u3001Terraform\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<br>\u52d5\u4f5c\u78ba\u8a8d\u7528\u306e\u30b3\u30fc\u30c9\u306fexample\/resource\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u307e\u305a\u3001providers.tf\u3067provider\u306e\u8a2d\u5b9a\u3092\u884c\u3044\u307e\u3059\u3002<br>\u52d5\u4f5c\u78ba\u8a8d\u7528\u306a\u306e\u3067\u3001\u30b9\u30c6\u30fc\u30c8\u306f\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002<br><code>provider<\/code>\u30d6\u30ed\u30c3\u30af\u3067\u306f<code>server_url<\/code>\u306e\u307f\u6307\u5b9a\u3057\u3001\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u306f\u74b0\u5883\u5909\u6570<code>MISSKEY_ACCESS_TOKEN<\/code>\u3067\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-luxe-blocks-syntaxhighlighter line-numbers language-clike\"><code class=\"language-clike\">terraform {\n  required_providers {\n    misskey = {\n      source  = \"maeda6uiui\/misskey\"\n      version = \"0.0.1-alpha1\"\n    }\n  }\n\n  backend \"local\" {\n    path = \"terraform.tfstate\"\n  }\n\n  required_version = \"~>1.9\"\n}\n\nprovider \"misskey\" {\n  server_url = \"https:\/\/misskey-dabansky.com\"\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">main.tf\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-luxe-blocks-syntaxhighlighter line-numbers language-clike\"><code class=\"language-clike\">resource \"misskey_note\" \"test\" {\n  text             = &lt;&lt;-EOT\n        \u30c6\u30b9\u30c81\n        \u30c6\u30b9\u30c82\n        \u30c6\u30b9\u30c83\n    EOT\n  visibility       = \"specified\"\n  visible_user_ids = []\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067<code>terraform apply<\/code>\u3092\u5b9f\u884c\u3057\u3001Misskey\u306e\u30ce\u30fc\u30c8\u304c\u4f5c\u6210\u3055\u308c\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6982\u8981 Terraform\u3068\u5916\u90e8\u30b5\u30fc\u30d3\u30b9\u3092\u63a5\u7d9a\u3059\u308b\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u3053\u3068\u3092\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc(provider)\u3068\u547c\u3073\u307e\u3059\u3002\u305f\u3068\u3048\u3070hashicorp\/aws\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066aws_instance\u3092\u547c\u3073\u51fa\u3059\u3068\u3001EC2\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-1879","post","type-post","status-publish","format-standard","hentry","category-terraform"],"_links":{"self":[{"href":"https:\/\/daba-no-heya.com\/index.php?rest_route=\/wp\/v2\/posts\/1879","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/daba-no-heya.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daba-no-heya.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daba-no-heya.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/daba-no-heya.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1879"}],"version-history":[{"count":10,"href":"https:\/\/daba-no-heya.com\/index.php?rest_route=\/wp\/v2\/posts\/1879\/revisions"}],"predecessor-version":[{"id":1890,"href":"https:\/\/daba-no-heya.com\/index.php?rest_route=\/wp\/v2\/posts\/1879\/revisions\/1890"}],"wp:attachment":[{"href":"https:\/\/daba-no-heya.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1879"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daba-no-heya.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1879"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daba-no-heya.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1879"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}