この方法が最善ではないかもしれませんが自己解決しました。
はじめにGitHubのAPIのデータを取得するためuseStaticQueryを使いました。
まずはreact@^16.8.0とreact-dom@^16.8.0をターミナルでインストールします。
yarn add react@^16.8.0 react-dom@^16.8.0
そして次のコードでプログラム言語のデータを目的の連想配列にすることができました。
jsx
1import React from "react"
2import {useStaticQuery,graphql} from "gatsby"
3import {Doughnut} from "react-chartjs-2"
4
5const LangData=()=>{
6 const tempData= useStaticQuery(graphql`
7 query GitData{
8 githubData {
9 data{
10 viewer {
11 name
12 avatarUrl
13 isHireable
14 resourcePath
15 repositories {
16 totalCount
17 nodes {
18 name
19 description
20 homepageUrl
21 forkCount
22 createdAt
23 updatedAt
24 resourcePath
25 languages {
26 totalSize
27 totalCount
28 edges {
29 size
30 node {
31 name
32 color
33 }
34 }
35 }
36 stargazers {
37 totalCount
38 }
39 }
40 }
41 }
42 }
43 }
44 }
45 `)
46 // リポジトリのtotalCountを取得してリポジトリごとの言語の名前とバイト数を取得する
47const totalRepo=tempData.githubData.data.viewer.repositories.totalCount
48const langName1=[]
49const langSize1=[]
50for(let i=0;i<totalRepo;i++){
51 let langEachRepo=tempData.githubData.data.viewer.repositories.nodes[i].languages.totalCount
52 for(let j=0;j<langEachRepo;j++){
53 langName1.push(tempData.githubData.data.viewer.repositories.nodes[i].languages.edges[j].node.name)
54 langSize1.push(tempData.githubData.data.viewer.repositories.nodes[i].languages.edges[j].size)
55 }
56}
57
58// 言語の名前とバイト数を[key,value]からなる配列にする
59var langSet = [];
60for(var i=0;i<langSize1.length;i++){
61 langSet.push([langName1[i],langSize1[i]]);
62}
63
64// 言語の名前ごとの合計を出す
65var sum={}; // 連想配列
66for(var i=0;i<langSet.length;i++){
67 var key=langSet[i][0]; // i++されるたび変数keyにlangSet[i]のキーを入れる
68 if(key in sum){ // sumのキーに変数keyと同じキーが存在するかチェック
69 sum[key]+=langSet[i][1]; // 存在するときは同じキーごとにlangSet[i]の値を足す
70 }else{
71 sum[key]=langSet[i][1]; //存在しないときはキーに値を入れる
72 }
73}
74
75delete sum['Mask']
76delete sum['HLSL']
77delete sum['Mathematica']
78delete sum['ShaderLab']
79
80const label1=[];
81const data1=[];
82for(var key in sum){
83 label1.push(key);
84 data1.push(sum[key])
85}
86 const data={
87 labels:label1,
88 datasets:[{
89 backgroundColor:["#178600","#2B7489","#e34c26","#563D7C","#f1e05a"],
90 data:data1,
91 },],
92 };
93return(
94 <Doughnut data={data} />
95)
96}
97export default LangData
JavaScriptやフレームワークを始めたばかりでまだ改善できるかもしれないですが今後に活かすようにしていきたいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。