[{"data":1,"prerenderedAt":112},["ShallowReactive",2],{"legacy-question-5fd09cefbff2abee86594cf82bfd95a4":3,"legacy-question-author-koji-kadoma":85,"legacy-question-category-website-building":101},{"id":4,"title":5,"author":6,"body":7,"category":71,"date":72,"description":73,"extension":74,"locale":75,"meta":76,"navigation":77,"path":78,"seo":79,"slug":80,"stem":81,"tag":82,"updated":72,"__hash__":84},"legacyQuestions\u002F20210402000000-GridsomeのGraphQLのidはどうやって決まる？.md","GridsomeのGraphQLのidはどうやって決まる？","koji-kadoma",{"type":8,"value":9,"toc":66},"minimark",[10,15,19,22,25,28,39,42,45,51,54,63],[11,12,14],"h2",{"id":13},"idはnodeのpathからハッシュ値を出して決定しています","idは、nodeのpathからハッシュ値を出して決定しています",[16,17,18],"p",{},"Gridsomeのドキュメントでは、どのようにidを発行しているか説明されていませんが、@gridsome\u002Fsource-filesystemでも、@gridsome\u002Fvue-remarkでも、オリジナルファイルのpathを元にidを決定しています。",[16,20,21],{},"ですので、タイトルやデータの中身が変更されても、ファイル名さえ同じであれば、idは不変です。逆に、ファイル名も1文字（1バイト）でも変えてしまうと、idが変わってしまうため、GraphQLのidをURLに使っている場合は、URLが変わってしまうので注意が必要です。",[11,23,24],{"id":24},"ソースコードをみてみる",[16,26,27],{},"この辺りの仕組みは、プラグインのソースコードを見ると仕組みが理解できます。",[29,30,35],"pre",{"className":31,"code":33,"language":34},[32],"language-text","async createNodeOptions (file, actions) {\n  const relPath = path.relative(this.context, file)\n  const origin = path.join(this.context, file)\n  const content = await fs.readFile(origin, 'utf8')\n  const { dir, name, ext = '' } = path.parse(file)\n  const mimeType = mime.lookup(file) || `application\u002Fx-${ext.replace('.', '')}`\n\n  return {\n    id: this.createUid(relPath),\n    path: this.createPath({ dir, name }, actions),\n    fileInfo: {\n      extension: ext,\n      directory: dir,\n      path: file,\n      name\n    },\n    internal: {\n      mimeType,\n      content,\n      origin\n    }\n  }\n}\n","text",[36,37,33],"code",{"__ignoreMap":38},"",[16,40,41],{},"idは、fileのrelPathを元にcreateUid関数で変換して決定しています。",[16,43,44],{},"createUidは何をしているかというと、",[29,46,49],{"className":47,"code":48,"language":34},[32],"createUid (orgId) {\n  return crypto.createHash('md5').update(orgId).digest('hex')\n}\n",[36,50,48],{"__ignoreMap":38},[16,52,53],{},"なので、ファイルのパスを元に、md5でハッシュを生成しているということになります。",[16,55,56],{},[57,58,62],"a",{"href":59,"rel":60},"https:\u002F\u002Fgithub.com\u002Fgridsome\u002Fgridsome\u002Fblob\u002Fmaster\u002Fpackages\u002Fsource-filesystem\u002Findex.js",[61],"nofollow","gridsome\u002Fpackages\u002Fsource-filesystem\u002Findex.js | Github",[16,64,65],{},"Gridsomeで、GraphQLにデータを取り込むのは、@gridsome\u002Fsource-filesystemと@gridsome\u002Fvue-remarkの2種類がありますが、@gridsome\u002Fvue-remarkは内部的には@gridsome\u002Fsource-filesystemを使ってマークダウンファイルをインスタンス化しているようなので、仕組みは同じでしょう。",{"title":38,"searchDepth":67,"depth":67,"links":68},2,[69,70],{"id":13,"depth":67,"text":14},{"id":24,"depth":67,"text":24},"website-building","2021-04-02T00:00:00.000Z","Gridsomeでサイトを作成する","md","ja",{},true,"\u002F20210402000000-gridsomegraphqlid",{"title":5,"description":73},"5fd09cefbff2abee86594cf82bfd95a4","20210402000000-GridsomeのGraphQLのidはどうやって決まる？",[83],"gridsome","2M0s57yWs2DNRzAMoIOd7NuYdmIW2kWMJM-6K4C5ITA",{"id":86,"title":87,"body":88,"date":92,"description":93,"extension":74,"locale":75,"meta":94,"name":97,"navigation":77,"path":98,"seo":99,"slug":6,"stem":6,"updated":92,"__hash__":100},"legacyAuthors\u002Fkoji-kadoma.md","Koji Kadoma",{"type":8,"value":89,"toc":90},[],{"title":38,"searchDepth":67,"depth":67,"links":91},[],"2021-04-01T00:00:00.000Z","Webエンジニアです。Javascript、PHP、Ruby、Dockerなどをメインで使っています。",{"image":95,"url":96},"https:\u002F\u002Fwww.codit.work\u002Fimgs\u002Favatar\u002Fkoji-kadoma.png","https:\u002F\u002Fkoji.pages.dev\u002F",null,"\u002Fkoji-kadoma",{"title":87,"description":93},"H1yaGicrsv1CzYTbFeEXQosuYx93lIutD3_XwXMhAFk",{"id":102,"title":103,"body":104,"date":92,"description":103,"extension":74,"locale":75,"meta":108,"navigation":77,"path":109,"seo":110,"slug":71,"stem":71,"updated":92,"__hash__":111},"legacyCategories\u002Fwebsite-building.md","Webサイト構築",{"type":8,"value":105,"toc":106},[],{"title":38,"searchDepth":67,"depth":67,"links":107},[],{},"\u002Fwebsite-building",{"title":103,"description":103},"h9jPLD2mzMm3L4sFN5qWSiSirySQQLdnxLhQcvw8VlQ",1783320301782]