[{"data":1,"prerenderedAt":10034},["ShallowReactive",2],{"\u002Fcategory\u002Fprogramming":3},[4,1525,3988,5415,6625,7125,7510,8701,9205,9873],{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"category":11,"tag":13,"thumbnail":19,"createdAt":20,"updatedAt":21,"body":22,"_type":1519,"_id":1520,"_source":1521,"_file":1522,"_stem":1523,"_extension":1524},"\u002Farticles\u002Fhacker-2","articles",false,"","ちょっとだけハッカー2","エクセルマクロ作成にAIエージェントを使ってみた",[12],"programming",[14,15,16,17,18],"ai","beginner-programming","information-ed","management","dx","hacker-2.jpg","2026\u002F4\u002F13","2026\u002F5\u002F5",{"type":23,"children":24,"toc":1510},"root",[25,33,48,53,57,63,68,76,81,86,89,96,125,136,164,169,172,178,240,453,465,477,480,486,605,610,640,663,705,710,715,718,724,748,759,792,797,804,811,850,856,895,900,933,939,944,949,962,967,972,991,994,1000,1029,1034,1039,1062,1067,1072,1091,1094,1099,1105,1118,1123,1128,1141,1146,1149,1154,1165,1168,1174,1187,1200,1204,1312,1316,1399,1403,1496,1499,1502],{"type":26,"tag":27,"props":28,"children":29},"element","p",{},[30],{"type":31,"value":32},"text","　現役教員時代、「ハダノ先生はハッカーみたいなことできるんでしょ」と生徒たちに言われていました。",{"type":26,"tag":34,"props":35,"children":36},"ul",{},[37],{"type":26,"tag":38,"props":39,"children":40},"li",{},[41],{"type":26,"tag":42,"props":43,"children":45},"a",{"href":44},"\u002Farticles\u002Fhacker-1",[46],{"type":31,"value":47},"🔗AIエージェントで「ちょっとだけハッカー」になれ、アプリを改造できた",{"type":26,"tag":27,"props":49,"children":50},{},[51],{"type":31,"value":52},"の要領で、エクセルマクロが作れるかもと思いました。",{"type":26,"tag":54,"props":55,"children":56},"br",{},[],{"type":26,"tag":58,"props":59,"children":61},"h2",{"id":60},"エクセルマクロ作成にaiエージェントを使ってみた",[62],{"type":31,"value":10},{"type":26,"tag":27,"props":64,"children":65},{},[66],{"type":31,"value":67},"　今年度から自治会の役員になり、Windowsタブレットで表計算ソフトを使うことにしました。「エクセル互換ソフトでいけるだろう」と思っていたのですが、自分がよく使っていた機能がないことに気づき、やむなくエクセルをインストールしました。",{"type":26,"tag":69,"props":70,"children":75},"img",{"src":71,"alt":72,"className":73},"\u002Fimg\u002Flaptopexcel.jpg","Windowsタブレットでエクセル",[74],"imghc",[],{"type":26,"tag":27,"props":77,"children":78},{},[79],{"type":31,"value":80},"　教頭としてPTA事務局・会計をしていたころと違って、伝票処理のデジタル化が進んでいました。",{"type":26,"tag":27,"props":82,"children":83},{},[84],{"type":31,"value":85},"　銀行の入出金は、「QR伝票作成サービス」を使えば手書き不要です。通帳摘要など全角入力できるのですが、なぜか半角も必要でした。Webで禁止の半角カタカナを久しぶりに扱います。そこで、この作業をエクセルで効率化してみることにしました。",{"type":26,"tag":54,"props":87,"children":88},{},[],{"type":26,"tag":90,"props":91,"children":93},"h3",{"id":92},"qr伝票入力をどうやって効率化するか",[94],{"type":31,"value":95},"QR伝票入力をどうやって効率化するか？",{"type":26,"tag":97,"props":98,"children":99},"ol",{},[100,105,110,115,120],{"type":26,"tag":38,"props":101,"children":102},{},[103],{"type":31,"value":104},"入力は1度だけにしたい",{"type":26,"tag":38,"props":106,"children":107},{},[108],{"type":31,"value":109},"全角入力したら、自動的に半角に変換してほしい",{"type":26,"tag":38,"props":111,"children":112},{},[113],{"type":31,"value":114},"「半角〇字以内」「全角〇字以内」の指定字数で切り出してほしい",{"type":26,"tag":38,"props":116,"children":117},{},[118],{"type":31,"value":119},"切り出したものを訂正・変更できるようにしたい（フリガナ違いへの対応）",{"type":26,"tag":38,"props":121,"children":122},{},[123],{"type":31,"value":124},"指定字数の異なる場面ごとにシートを分けたい",{"type":26,"tag":27,"props":126,"children":127},{},[128,130,133],{"type":31,"value":129},"、、、という要求をかなえるためには、",{"type":26,"tag":54,"props":131,"children":132},{},[],{"type":26,"tag":54,"props":134,"children":135},{},[],{"type":26,"tag":97,"props":137,"children":138},{},[139,144,149,154,159],{"type":26,"tag":38,"props":140,"children":141},{},[142],{"type":31,"value":143},"D列を入力用とし、日本語入力（ひらがな）を強制する",{"type":26,"tag":38,"props":145,"children":146},{},[147],{"type":31,"value":148},"E列を半角フリガナ用とし、PHONETIC関数（LibreCalcやGoogleスプレッドシートには存在しない）で左のセルのフリガナを抽出し、ASC関数で半角に変換する",{"type":26,"tag":38,"props":150,"children":151},{},[152],{"type":31,"value":153},"LEFT関数で指定字数分、左から切り出す",{"type":26,"tag":38,"props":155,"children":156},{},[157],{"type":31,"value":158},"値を複写するマクロが必要だが、マクロ記録で作ると選択されっぱなしになるので、Cells().Valueを使う",{"type":26,"tag":38,"props":160,"children":161},{},[162],{"type":31,"value":163},"一行目（絶対参照）の数字を読み取って指定字数とするために、MID関数で3,4文字目を切り出したあと、VALUE関数で数値に変換する。",{"type":26,"tag":27,"props":165,"children":166},{},[167],{"type":31,"value":168},"、、、という設定・式・マクロが必要になりそうです。",{"type":26,"tag":54,"props":170,"children":171},{},[],{"type":26,"tag":90,"props":173,"children":175},{"id":174},"qr伝票入力支援マクロをaiエージェントに頼むと",[176],{"type":31,"value":177},"QR伝票入力支援マクロをAIエージェントに頼むと……",{"type":26,"tag":179,"props":180,"children":183},"div",{"className":181},[182],"balloon2",[184,186,200,202,205,207,210,212,215,217,220,222,225,227,230,232,235,237],{"type":31,"value":185},"\n  ",{"type":26,"tag":179,"props":187,"children":190},{"className":188},[189],"icon",[191,193,199],{"type":31,"value":192}," ",{"type":26,"tag":69,"props":194,"children":198},{"src":195,"alt":196,"width":197},"\u002Fimg\u002Fhadano80.png","ハダノ",80,[],{"type":31,"value":192},{"type":31,"value":201},"\n銀行のQR伝票作成サービスを使うときに、「半角〇字以内」と「全角〇字以内」の両方を入力する必要がありますが、これをエクセル2019で効率化しようとしています。",{"type":26,"tag":54,"props":203,"children":204},{},[],{"type":31,"value":206},"\n1行目のタイトル行を",{"type":26,"tag":54,"props":208,"children":209},{},[],{"type":31,"value":211},"\nA1セル：№、B1セル：半角、C1セル：全角、D1セル：入力（その後Ctrl+J）、E1セル：半角14字以内、F1セル：全角07字以内",{"type":26,"tag":54,"props":213,"children":214},{},[],{"type":31,"value":216},"\nなどとし、",{"type":26,"tag":54,"props":218,"children":219},{},[],{"type":31,"value":221},"\nD列に全角で入力した文字列の半角フリガナをPHONETIC関数・ASC関数、VALUE関数、MID関数、LEFT関数などを使った式によって同じ行のE列に指定字数で切り出し、全角をVALUE関数、MID関数、LEFT関数などを使った式によって同じ行のF列に指定字数で切り出します。",{"type":26,"tag":54,"props":223,"children":224},{},[],{"type":31,"value":226},"\nその行にカーソルがある状態で、Ctrl+Jというショートカットでマクロを実行して、E列・F列のセルの値をB列・C列にコピーします。コピーしたものを訂正・変更することがあるためです。",{"type":26,"tag":54,"props":228,"children":229},{},[],{"type":31,"value":231},"\nそこで、E2セルの式、F2セルの式、マクロ Sub Phonetic1() の３つを提案してください。",{"type":26,"tag":54,"props":233,"children":234},{},[],{"type":31,"value":236},"\nちなみに、文字数は場面によって変わるので、シートを場面数分コピーして、E1セル・F1セルの数字2桁で指定することとします。",{"type":26,"tag":54,"props":238,"children":239},{},[],{"type":26,"tag":179,"props":241,"children":244},{"className":242},[243],"balloon1",[245,246,257,259,262,265,273,281,290,318,322,331,336,344,357,360,369,374,384,417],{"type":31,"value":185},{"type":26,"tag":179,"props":247,"children":249},{"className":248},[189],[250,251,256],{"type":31,"value":192},{"type":26,"tag":69,"props":252,"children":255},{"src":253,"alt":254,"width":197},"\u002Fimg\u002Faiagent.png","Gemini CLI",[],{"type":31,"value":192},{"type":31,"value":258},"\n✦ ご要望に合わせて、Excel 2019で効率的に銀行のQR伝票用データを作成するための数式とマクロを提案します。",{"type":26,"tag":54,"props":260,"children":261},{},[],{"type":26,"tag":54,"props":263,"children":264},{},[],{"type":26,"tag":97,"props":266,"children":267},{},[268],{"type":26,"tag":38,"props":269,"children":270},{},[271],{"type":31,"value":272},"E2セルの数式（半角フリガナ切り出し）",{"type":26,"tag":27,"props":274,"children":275},{},[276,278],{"type":31,"value":277},"D列の入力からフリガナを取得し、半角に変換した上で、E1セルの3〜4文字目にある数字の文字数分だけ左から取り出します。",{"type":26,"tag":54,"props":279,"children":280},{},[],{"type":26,"tag":27,"props":282,"children":283},{},[284],{"type":26,"tag":285,"props":286,"children":287},"strong",{},[288],{"type":31,"value":289},"=LEFT(ASC(PHONETIC(D2)), VALUE(MID(E$1, 3, 2)))",{"type":26,"tag":34,"props":291,"children":292},{},[293,298,303,308,313],{"type":26,"tag":38,"props":294,"children":295},{},[296],{"type":31,"value":297},"PHONETIC(D2): D2セルのフリガナを取得します。",{"type":26,"tag":38,"props":299,"children":300},{},[301],{"type":31,"value":302},"ASC(...): 全角文字を半角に変換します（カタカナも半角になります）。",{"type":26,"tag":38,"props":304,"children":305},{},[306],{"type":31,"value":307},"MID(E$1, 3, 2): E1セルの「半角14字以内」から「14」という文字列を取り出します。",{"type":26,"tag":38,"props":309,"children":310},{},[311],{"type":31,"value":312},"VALUE(...): 文字列を数値に変換します。",{"type":26,"tag":38,"props":314,"children":315},{},[316],{"type":31,"value":317},"LEFT(..., ...): 指定された文字数分、左から切り出します。",{"type":26,"tag":319,"props":320,"children":321},"hr",{},[],{"type":26,"tag":97,"props":323,"children":325},{"start":324},2,[326],{"type":26,"tag":38,"props":327,"children":328},{},[329],{"type":31,"value":330},"F2セルの数式（全角文字切り出し）",{"type":26,"tag":27,"props":332,"children":333},{},[334],{"type":31,"value":335},"D列の入力をそのまま、F1セルの3〜4文字目にある数字の文字数分だけ左から取り出します。",{"type":26,"tag":27,"props":337,"children":338},{},[339],{"type":26,"tag":285,"props":340,"children":341},{},[342],{"type":31,"value":343},"=LEFT(D2, VALUE(MID(F$1, 3, 2)))",{"type":26,"tag":34,"props":345,"children":346},{},[347,352],{"type":26,"tag":38,"props":348,"children":349},{},[350],{"type":31,"value":351},"LEFT(D2, ...): D2の文字列を左から指定数切り出します。",{"type":26,"tag":38,"props":353,"children":354},{},[355],{"type":31,"value":356},"VALUE(MID(F$1, 3, 2)): F1セルの「全角07字以内」から「07」を取り出し、数値の7として扱います。",{"type":26,"tag":319,"props":358,"children":359},{},[],{"type":26,"tag":97,"props":361,"children":363},{"start":362},3,[364],{"type":26,"tag":38,"props":365,"children":366},{},[367],{"type":31,"value":368},"マクロ Sub Phonetic1()",{"type":26,"tag":27,"props":370,"children":371},{},[372],{"type":31,"value":373},"現在選択されているセルがある行のE列・F列の値を、B列・C列に「値として」貼り付けます。これにより、貼り付けた後にB列・C列で個別に修正が可能になります。",{"type":26,"tag":375,"props":376,"children":378},"pre",{"code":377},"1 Sub Phonetic1()  \n2     Dim r As Long  \n3     r = ActiveCell.Row  \n4  \n5     ' 1行目（見出し）の場合は実行しない  \n6     If r \u003C 2 Then Exit Sub  \n7  \n8     ' E列の値をB列に、F列の値をC列に「値のみ」コピー  \n9     Cells(r, \"B\").Value = Cells(r, \"E\").Value  \n",[379],{"type":26,"tag":380,"props":381,"children":382},"code",{"__ignoreMap":8},[383],{"type":31,"value":377},{"type":26,"tag":27,"props":385,"children":386},{},[387,389,392,394,397,399,402,404,407,409,412,415],{"type":31,"value":388},"10　　Cells(r, \"C\").Value = Cells(r, \"F\").Value",{"type":26,"tag":54,"props":390,"children":391},{},[],{"type":31,"value":393},"\n11",{"type":26,"tag":54,"props":395,"children":396},{},[],{"type":31,"value":398},"\n12　　' 完了を通知したい場合は以下を有効にしてください（任意）",{"type":26,"tag":54,"props":400,"children":401},{},[],{"type":31,"value":403},"\n13　　' Application.StatusBar = r & \"行目のコピーが完了しました\"",{"type":26,"tag":54,"props":405,"children":406},{},[],{"type":31,"value":408},"\n14 End Sub",{"type":26,"tag":54,"props":410,"children":411},{},[],{"type":26,"tag":54,"props":413,"children":414},{},[],{"type":31,"value":416},"\n設定手順：",{"type":26,"tag":97,"props":418,"children":419},{},[420,425,430,435,440],{"type":26,"tag":38,"props":421,"children":422},{},[423],{"type":31,"value":424},"Excelで Alt + F11 を押してVBAエディタを開きます。",{"type":26,"tag":38,"props":426,"children":427},{},[428],{"type":31,"value":429},"「挿入」→「標準モジュール」を選択し、上記コードを貼り付けます。",{"type":26,"tag":38,"props":431,"children":432},{},[433],{"type":31,"value":434},"エディタを閉じ、Excel画面で Alt + F8 を押します。",{"type":26,"tag":38,"props":436,"children":437},{},[438],{"type":31,"value":439},"Phonetic1 を選択して「オプション」をクリックします。",{"type":26,"tag":38,"props":441,"children":442},{},[443,445,448,451],{"type":31,"value":444},"ショートカットキーの欄に j （または J）を入力して「OK」を押します。\n",{"type":26,"tag":54,"props":446,"children":447},{},[],{"type":26,"tag":54,"props":449,"children":450},{},[],{"type":31,"value":452},"\nこれで、D列に入力した後、その行のどこかにカーソルを置いて Ctrl + J を押すと、B列とC列に変換済みの値が入力されます。シートをコピーしてE1やF1の数字（14や07など）を書き換えるだけで、異なる文字数制限にも対応可能です。",{"type":26,"tag":27,"props":454,"children":455},{},[456,458,463],{"type":31,"value":457},"　さすがは ",{"type":26,"tag":285,"props":459,"children":460},{},[461],{"type":31,"value":462},"Gemini CLI 最新版",{"type":31,"value":464},"、一発でパーフェクトな提案です。これで行くことにします。",{"type":26,"tag":27,"props":466,"children":467},{},[468,474],{"type":26,"tag":69,"props":469,"children":473},{"src":470,"alt":471,"width":472},"\u002Fimg\u002Fphonetic1.jpg","値を複写するマクロPhonetic1","100%",[],{"type":26,"tag":54,"props":475,"children":476},{},[],{"type":26,"tag":54,"props":478,"children":479},{},[],{"type":26,"tag":90,"props":481,"children":483},{"id":482},"もしも-copilot-に頼んだらどうなるか",[484],{"type":31,"value":485},"もしも Copilot に頼んだらどうなるか？",{"type":26,"tag":179,"props":487,"children":489},{"className":488},[243],[490,491,502,504,517,529,534,544,554,564,575,590,600],{"type":31,"value":185},{"type":26,"tag":179,"props":492,"children":494},{"className":493},[189],[495,496,501],{"type":31,"value":192},{"type":26,"tag":69,"props":497,"children":500},{"src":498,"alt":499,"width":197},"\u002Fimg\u002Fgenai.png","ChatGPT",[],{"type":31,"value":192},{"type":31,"value":503},"\n　　　：：：：： \n",{"type":26,"tag":27,"props":505,"children":506},{},[507,512,515],{"type":26,"tag":285,"props":508,"children":509},{},[510],{"type":31,"value":511},"=LEFT(ASC(PHONETIC(D2)),14)",{"type":26,"tag":54,"props":513,"children":514},{},[],{"type":31,"value":516},"\n　　　：：：：：",{"type":26,"tag":27,"props":518,"children":519},{},[520,525,528],{"type":26,"tag":285,"props":521,"children":522},{},[523],{"type":31,"value":524},"=LEFT(D2,7)",{"type":26,"tag":54,"props":526,"children":527},{},[],{"type":31,"value":516},{"type":26,"tag":27,"props":530,"children":531},{},[532],{"type":31,"value":533},"Sub Phonetic1()",{"type":26,"tag":27,"props":535,"children":536},{},[537,539,542],{"type":31,"value":538},"　　Dim r As Long",{"type":26,"tag":54,"props":540,"children":541},{},[],{"type":31,"value":543},"\n　　r = ActiveCell.Row",{"type":26,"tag":27,"props":545,"children":546},{},[547,549,552],{"type":31,"value":548},"　　'E列 → B列（半角）",{"type":26,"tag":54,"props":550,"children":551},{},[],{"type":31,"value":553},"\n　　Range(\"B\" & r).Value = Range(\"E\" & r).Value",{"type":26,"tag":27,"props":555,"children":556},{},[557,559,562],{"type":31,"value":558},"　　'F列 → C列（全角）",{"type":26,"tag":54,"props":560,"children":561},{},[],{"type":31,"value":563},"\n　　Range(\"C\" & r).Value = Range(\"F\" & r).Value",{"type":26,"tag":27,"props":565,"children":566},{},[567,569,572],{"type":31,"value":568},"End Sub  ",{"type":26,"tag":54,"props":570,"children":571},{},[],{"type":26,"tag":54,"props":573,"children":574},{},[],{"type":26,"tag":27,"props":576,"children":577},{},[578,580,583,585,588],{"type":31,"value":579},"✨ 次の一手（あなたに確認したいこと）",{"type":26,"tag":54,"props":581,"children":582},{},[],{"type":31,"value":584},"\n半角14字・全角7字という字数は固定ですか？",{"type":26,"tag":54,"props":586,"children":587},{},[],{"type":31,"value":589},"\nそれとも行ごとに変わる可能性がありますか？",{"type":26,"tag":27,"props":591,"children":592},{},[593,595,598],{"type":31,"value":594},"可変なら、A列に「14」「7」などの数字を入れて、",{"type":26,"tag":54,"props":596,"children":597},{},[],{"type":31,"value":599},"\n式を動的にするバージョンも作れます。",{"type":26,"tag":27,"props":601,"children":602},{},[603],{"type":31,"value":604},"必要ならすぐ作りますよ。",{"type":26,"tag":27,"props":606,"children":607},{},[608],{"type":31,"value":609},"　なぜ「字数が行ごとに変わる可能性がある」と考えてしまうのか、理解に苦しみます。『シートを場面数分コピーして一行目を打ち換えればそのまま動くようになることを想定しています。』と念を押すと、、、",{"type":26,"tag":179,"props":611,"children":613},{"className":612},[243],[614,615,624,632],{"type":31,"value":185},{"type":26,"tag":179,"props":616,"children":618},{"className":617},[189],[619,620,623],{"type":31,"value":192},{"type":26,"tag":69,"props":621,"children":622},{"src":498,"alt":499,"width":197},[],{"type":31,"value":192},{"type":26,"tag":27,"props":625,"children":626},{},[627],{"type":26,"tag":285,"props":628,"children":629},{},[630],{"type":31,"value":631},"=LEFT(ASC(PHONETIC(D2)), VALUE(MID(E1, FIND(\"半角\", E1) + 2, 10)))",{"type":26,"tag":27,"props":633,"children":634},{},[635],{"type":26,"tag":285,"props":636,"children":637},{},[638],{"type":31,"value":639},"=LEFT(D2, VALUE(MID(F1, FIND(\"全角\", F1) + 2, 10)))",{"type":26,"tag":27,"props":641,"children":642},{},[643,645,648,653,656,658,661],{"type":31,"value":644},"かなり近づきましたが、",{"type":26,"tag":54,"props":646,"children":647},{},[],{"type":26,"tag":285,"props":649,"children":650},{},[651],{"type":31,"value":652},"=LEFT(ASC(PHONETIC(D2)),VALUE(MID(E$1,3,2)))",{"type":26,"tag":54,"props":654,"children":655},{},[],{"type":31,"value":657},"\nのように、行を絶対参照しないと式をコピーした時に破綻します。",{"type":26,"tag":54,"props":659,"children":660},{},[],{"type":31,"value":662},"\nまた、VALUE関数は、数字以外の文字が入っているとエラーになるので、2桁と決め打ちする必要があります。",{"type":26,"tag":179,"props":664,"children":666},{"className":665},[243],[667,668,677,682,700],{"type":31,"value":185},{"type":26,"tag":179,"props":669,"children":671},{"className":670},[189],[672,673,676],{"type":31,"value":192},{"type":26,"tag":69,"props":674,"children":675},{"src":498,"alt":499,"width":197},[],{"type":31,"value":192},{"type":26,"tag":27,"props":678,"children":679},{},[680],{"type":31,"value":681},"了解です、あなたの指摘は完全に正しいです。",{"type":26,"tag":34,"props":683,"children":684},{},[685,690,695],{"type":26,"tag":38,"props":686,"children":687},{},[688],{"type":31,"value":689},"行番号は絶対参照（E$1 \u002F F$1）にしないとコピー時に壊れる",{"type":26,"tag":38,"props":691,"children":692},{},[693],{"type":31,"value":694},"VALUE は数字以外が混ざるとエラーになるので、数字部分だけを確実に抽出する必要がある",{"type":26,"tag":38,"props":696,"children":697},{},[698],{"type":31,"value":699},"数字は 2 桁固定（例：14、07）と割り切るのが安全",{"type":26,"tag":27,"props":701,"children":702},{},[703],{"type":31,"value":704},"この条件をすべて満たす 堅牢で壊れない式 を作り直します。",{"type":26,"tag":27,"props":706,"children":707},{},[708],{"type":31,"value":709},"、、、結局、こちらの言う通りになりました。",{"type":26,"tag":27,"props":711,"children":712},{},[713],{"type":31,"value":714},"　マクロの質も良いわけではなく、「いろいろごたくを並べる割に使えないなぁ」といった感じです。使う人がエクセルに精通していないと、おかしな部分に気づかないでしょう。このあたりが、普通の生成AIの限界と思われます。",{"type":26,"tag":54,"props":716,"children":717},{},[],{"type":26,"tag":90,"props":719,"children":721},{"id":720},"ai時代に息を吹き返すエクセルマクロ",[722],{"type":31,"value":723},"AI時代に息を吹き返すエクセルマクロ",{"type":26,"tag":34,"props":725,"children":726},{},[727,738],{"type":26,"tag":38,"props":728,"children":729},{},[730],{"type":26,"tag":42,"props":731,"children":735},{"href":732,"rel":733},"https:\u002F\u002Fnote.com\u002Fe2ruda\u002Fn\u002Fn6f8295b9e0ee",[734],"nofollow",[736],{"type":31,"value":737},"🔗ノーコードの終焉？とVibe Coding：AI時代のEUCを再定義する",{"type":26,"tag":38,"props":739,"children":740},{},[741],{"type":26,"tag":42,"props":742,"children":745},{"href":743,"rel":744},"https:\u002F\u002Fnote.com\u002Fkmds_bpmg\u002Fn\u002Fn042b0454208a",[734],[746],{"type":31,"value":747},"🔗ローコードからAIコーディングへ",{"type":26,"tag":27,"props":749,"children":750},{},[751,753,756],{"type":31,"value":752},"、、、を読むと、いろいろ考えさせられます。",{"type":26,"tag":54,"props":754,"children":755},{},[],{"type":26,"tag":54,"props":757,"children":758},{},[],{"type":26,"tag":97,"props":760,"children":761},{},[762,767,772,777,782,787],{"type":26,"tag":38,"props":763,"children":764},{},[765],{"type":31,"value":766},"マイコン（パソコン）の黎明期は、ソフトはユーザーが作っていた",{"type":26,"tag":38,"props":768,"children":769},{},[770],{"type":31,"value":771},"ソフトの高度化・複雑化に伴い、与えられたものを使うことが中心になった",{"type":26,"tag":38,"props":773,"children":774},{},[775],{"type":31,"value":776},"ユーザーにプログラムさせるマクロ機能を備えたエクセルなどが人気に",{"type":26,"tag":38,"props":778,"children":779},{},[780],{"type":31,"value":781},"ネットワークの発展によって、データ・コードが組織的に管理・共有されるように",{"type":26,"tag":38,"props":783,"children":784},{},[785],{"type":31,"value":786},"ローコード・RPAによって増殖したソフトが組織上の問題を起こすようになった",{"type":26,"tag":38,"props":788,"children":789},{},[790],{"type":31,"value":791},"AIコーディングも同じ問題を起こすのではないか？",{"type":26,"tag":27,"props":793,"children":794},{},[795],{"type":31,"value":796},"、、、という流れを整理していきたいものです。",{"type":26,"tag":69,"props":798,"children":803},{"src":799,"alt":800,"className":801},"\u002Fimg\u002Fbithacker.jpg","ちょっとだけハッカー",[802],"imghr",[],{"type":26,"tag":805,"props":806,"children":808},"h4",{"id":807},"従来のeucローコードrpavba等の課題",[809],{"type":31,"value":810},"従来のEUC（ローコード・RPA・VBA等）の課題",{"type":26,"tag":34,"props":812,"children":813},{},[814,824,834],{"type":26,"tag":38,"props":815,"children":816},{},[817,822],{"type":26,"tag":285,"props":818,"children":819},{},[820],{"type":31,"value":821},"属人化とブラックボックス化",{"type":31,"value":823},": 作成者以外には中身が不明な「秘伝のタレ」となりやすく、異動・退職に伴い「野良アプリ・ロボット」として負債化する。",{"type":26,"tag":38,"props":825,"children":826},{},[827,832],{"type":26,"tag":285,"props":828,"children":829},{},[830],{"type":31,"value":831},"「箱」の制約と部分最適",{"type":31,"value":833},": ツールの機能（箱）の範囲内でしか開発できず、複雑な業務に対応しきれない。また、現場レベルの「安さ・速さ」が優先され、全社的なデータ連携（全体最適）が損なわれる。",{"type":26,"tag":38,"props":835,"children":836},{},[837,842,844,847],{"type":26,"tag":285,"props":838,"children":839},{},[840],{"type":31,"value":841},"ベンダーロックイン",{"type":31,"value":843},": 特定のプラットフォームに依存するため、移行コストやライセンス費が障壁となり、データの主権を失いやすい。",{"type":26,"tag":54,"props":845,"children":846},{},[],{"type":26,"tag":54,"props":848,"children":849},{},[],{"type":26,"tag":805,"props":851,"children":853},{"id":852},"aiコーディングによって改善されること",[854],{"type":31,"value":855},"AIコーディングによって改善されること",{"type":26,"tag":34,"props":857,"children":858},{},[859,869,879],{"type":26,"tag":38,"props":860,"children":861},{},[862,867],{"type":26,"tag":285,"props":863,"children":864},{},[865],{"type":31,"value":866},"開発の自由度と柔軟性（Vibe Coding）",{"type":31,"value":868},": ツール側の制約を超え、対話（Vibe）を通じて標準的なコードを生成できるため、外部API連携などの高度な実装が容易になる。",{"type":26,"tag":38,"props":870,"children":871},{},[872,877],{"type":26,"tag":285,"props":873,"children":874},{},[875],{"type":31,"value":876},"汎用スキル（VBA\u002FGAS等）の再評価",{"type":31,"value":878},": 習得が難しかったプログラミング言語も、AIが解説・デバッグを代行することで再び強力な武器となり、特定のツールに縛られない開発が可能になる。",{"type":26,"tag":38,"props":880,"children":881},{},[882,887,889,892],{"type":26,"tag":285,"props":883,"children":884},{},[885],{"type":31,"value":886},"コストの劇的低下",{"type":31,"value":888},": パズルを組み合わせるようなローコード操作すら不要になり、ビジネスの意図を直接コード化できるため、開発スピードが飛躍的に向上する。",{"type":26,"tag":54,"props":890,"children":891},{},[],{"type":26,"tag":54,"props":893,"children":894},{},[],{"type":26,"tag":805,"props":896,"children":898},{"id":897},"注意しなければならないこと",[899],{"type":31,"value":897},{"type":26,"tag":34,"props":901,"children":902},{},[903,913,923],{"type":26,"tag":38,"props":904,"children":905},{},[906,911],{"type":26,"tag":285,"props":907,"children":908},{},[909],{"type":31,"value":910},"「もっともらしい誤り」の量産",{"type":31,"value":912},": 素人がAIで低品質な成果物を量産し、その不備を専門家が事後処理する「後始末地獄」が生じるリスクがある。",{"type":26,"tag":38,"props":914,"children":915},{},[916,921],{"type":26,"tag":285,"props":917,"children":918},{},[919],{"type":31,"value":920},"管理不能なスパゲッティコード",{"type":31,"value":922},": 構造を理解せずに生成を繰り返すと、修正不可能な「ゴミ」が高速で蓄積される。",{"type":26,"tag":38,"props":924,"children":925},{},[926,931],{"type":26,"tag":285,"props":927,"children":928},{},[929],{"type":31,"value":930},"「設計」と「責任」の重要性",{"type":31,"value":932},": AIはコードを書くが、データの置き場所やガバナンス（データアーキテクチャ）までは管理してくれない。利用者には、ツールを操るスキル以上に「正しく設計し、結果に責任を持つ」マネジメント能力が不可欠となる。",{"type":26,"tag":69,"props":934,"children":938},{"src":935,"alt":936,"className":937},"\u002Fimg\u002Fhellish.jpg","素人がAIで誤りを量産し、プロが後始末する地獄絵図",[802],[],{"type":26,"tag":27,"props":940,"children":941},{},[942],{"type":31,"value":943},"　とりあえず、ローカルな業務効率化には、エクセルマクロ（VBA）はアリだと思います。これまでの膨大な蓄積があるので、AIにコーディング支援をしてもらいやすいと実感しました。",{"type":26,"tag":27,"props":945,"children":946},{},[947],{"type":31,"value":948},"　今回のマクロで特に感心したのは、",{"type":26,"tag":34,"props":950,"children":951},{},[952,957],{"type":26,"tag":38,"props":953,"children":954},{},[955],{"type":31,"value":956},"1行目（見出し）の場合は実行しない",{"type":26,"tag":38,"props":958,"children":959},{},[960],{"type":31,"value":961},"コピー完了をステータスバーで通知",{"type":26,"tag":27,"props":963,"children":964},{},[965],{"type":31,"value":966},"の２つです。",{"type":26,"tag":27,"props":968,"children":969},{},[970],{"type":31,"value":971},"　これに触発されて、「空白入力の場合は実行しない」も追加しました。データ処理の安全・効率を考えた「設計」について勉強になりました。",{"type":26,"tag":27,"props":973,"children":974},{},[975,977,982,984],{"type":31,"value":976},"　",{"type":26,"tag":285,"props":978,"children":979},{},[980],{"type":31,"value":981},"エクセルを壊さないDX",{"type":31,"value":983}," が理想です。　→ ",{"type":26,"tag":42,"props":985,"children":988},{"href":986,"rel":987},"https:\u002F\u002Fqiita.com\u002Fsatoru_higuchi\u002Fitems\u002Fa6aa0300c3a97648c65c",[734],[989],{"type":31,"value":990},"🔗Excel業務を壊さずAPI化する設計入門：現場を敵にしないDXの作り方",{"type":26,"tag":54,"props":992,"children":993},{},[],{"type":26,"tag":90,"props":995,"children":997},{"id":996},"まとめaiエージェントでqr伝票入力支援マクロが作れ効率化できた",[998],{"type":31,"value":999},"（まとめ）AIエージェントで「QR伝票入力支援マクロ」が作れ、効率化できた",{"type":26,"tag":27,"props":1001,"children":1002},{},[1003,1005,1011,1013,1019,1021,1027],{"type":31,"value":1004},"　WindowsタブレットのUSB端子は、Type-C 2つ なので、ふだん使い用として ",{"type":26,"tag":42,"props":1006,"children":1008},{"href":1007},"#lca64uac",[1009],{"type":31,"value":1010},"🔗小型USBメモリ Type-C Type-A 64GB",{"type":31,"value":1012}," を買いました。キャップをなくさぬように、",{"type":26,"tag":42,"props":1014,"children":1016},{"href":1015},"#netsuke",[1017],{"type":31,"value":1018},"🔗根付紐20個セット",{"type":31,"value":1020}," の中の1本を使って、USBメモリのストラップ穴と結びました。非常に小さいので、",{"type":26,"tag":42,"props":1022,"children":1024},{"href":1023},"\u002Farticles\u002Faimanga-10#mcdodo",[1025],{"type":31,"value":1026},"🔗USB-Cスマートケーブル",{"type":31,"value":1028}," と干渉することもなく快適に使えます。",{"type":26,"tag":69,"props":1030,"children":1033},{"src":1031,"alt":1032,"width":472},"\u002Fimg\u002Fusbmemory.jpg","小型USBメモリ",[],{"type":26,"tag":27,"props":1035,"children":1036},{},[1037],{"type":31,"value":1038},"　教頭時代、前任者から引き継いだファイルの手直しにいつも苦労しました。",{"type":26,"tag":34,"props":1040,"children":1041},{},[1042,1047,1052,1057],{"type":26,"tag":38,"props":1043,"children":1044},{},[1045],{"type":31,"value":1046},"一太郎文書 → ワード文書へ変換",{"type":26,"tag":38,"props":1048,"children":1049},{},[1050],{"type":31,"value":1051},"個別に作成された案内文書・宛名 → 差し込み印刷へ",{"type":26,"tag":38,"props":1053,"children":1054},{},[1055],{"type":31,"value":1056},"スペースでレイアウトされた文書 → 配置-中央揃え,インデントなどへ",{"type":26,"tag":38,"props":1058,"children":1059},{},[1060],{"type":31,"value":1061},"手書きで変更だらけの文書 → 校閲機能オンに",{"type":26,"tag":27,"props":1063,"children":1064},{},[1065],{"type":31,"value":1066},"、、、など、数え上げればきりがありません。",{"type":26,"tag":27,"props":1068,"children":1069},{},[1070],{"type":31,"value":1071},"　職員室にPCがはいったとき、ワード・エクセルの職員研修はありましたが、最低限の内容を1回だけ聞いても身に付きません。管理職試験にもPC実技試験はありません。自己流の使い方が氾濫してしまうわけです。",{"type":26,"tag":27,"props":1073,"children":1074},{},[1075,1077,1082,1084,1089],{"type":31,"value":1076},"　「ワードの表の中の文字を追加しても罫線がついてこないなぁ」と思ったら、「図形機能で線を引いてる！？」……なんてこともありました。「",{"type":26,"tag":285,"props":1078,"children":1079},{},[1080],{"type":31,"value":1081},"野良マクロ",{"type":31,"value":1083},"」どころか、「",{"type":26,"tag":285,"props":1085,"children":1086},{},[1087],{"type":31,"value":1088},"不良文書",{"type":31,"value":1090},"」という負の遺産がたまるのです。異動時の引継ぎはせいぜい半日なので、せっかく手直しした文書の扱い方を伝えきれずに「元の木阿弥」となることもあります。",{"type":26,"tag":54,"props":1092,"children":1093},{},[],{"type":26,"tag":27,"props":1095,"children":1096},{},[1097],{"type":31,"value":1098},"　個々のスキルがばらばらなうえに、引継ぎ・共有が不十分な組織では、効率化の前に解決しなければならない問題がいろいろあります。中でも「情報セキュリティ」は、待ったなしです。脅威はすぐそこまで迫っているかもしれません。",{"type":26,"tag":69,"props":1100,"children":1104},{"src":1101,"alt":1102,"className":1103},"\u002Fimg\u002Fpakkun.jpg","迫りくる脅威を必死に防いでいるホワイトハッカー",[74],[],{"type":26,"tag":34,"props":1106,"children":1107},{},[1108],{"type":26,"tag":38,"props":1109,"children":1110},{},[1111],{"type":26,"tag":42,"props":1112,"children":1115},{"href":1113,"rel":1114},"https:\u002F\u002Fjapan.zdnet.com\u002Farticle\u002F35246948\u002F",[734],[1116],{"type":31,"value":1117},"🔗サイバーセキュリティ専門家の約半分が転職を希望--その理由とは",{"type":26,"tag":27,"props":1119,"children":1120},{},[1121],{"type":31,"value":1122},"にあるように、「サイバーセキュリティは、成功は目に見えず、失敗は非常に目立つ」「経営幹部は自社が攻撃を受けていなければ、問題ないと思い込んでいる」ことから、正当な評価を受けていないようです。",{"type":26,"tag":27,"props":1124,"children":1125},{},[1126],{"type":31,"value":1127},"　サイバー攻撃は、大企業だけが標的になるものではありません。警視庁によると、むしろ中小企業の方がターゲットとなっています。",{"type":26,"tag":34,"props":1129,"children":1130},{},[1131],{"type":26,"tag":38,"props":1132,"children":1133},{},[1134],{"type":26,"tag":42,"props":1135,"children":1138},{"href":1136,"rel":1137},"https:\u002F\u002Fbusiness.ntt-east.co.jp\u002Fcolumn\u002Fbizdrive\u002Ftrain-white-hackers-in-house.html",[734],[1139],{"type":31,"value":1140},"🔗頼れる存在「ホワイトハッカー」を社内で育成する方法",{"type":26,"tag":27,"props":1142,"children":1143},{},[1144],{"type":31,"value":1145},"のように、セキュリティ対策の専門家であるホワイトハッカーを組織内に配置して備えたいものです。",{"type":26,"tag":54,"props":1147,"children":1148},{},[],{"type":26,"tag":27,"props":1150,"children":1151},{},[1152],{"type":31,"value":1153},"　目先の損得にとらわれず、長期的視点での人材育成に力を入れることが大切です。",{"type":26,"tag":27,"props":1155,"children":1156},{},[1157,1159,1163],{"type":31,"value":1158},"　AIエージェントで「",{"type":26,"tag":285,"props":1160,"children":1161},{},[1162],{"type":31,"value":800},{"type":31,"value":1164},"」になり、業務改善から始めましょう。",{"type":26,"tag":54,"props":1166,"children":1167},{},[],{"type":26,"tag":805,"props":1169,"children":1171},{"id":1170},"緊急プリンターを買い替え",[1172],{"type":31,"value":1173},"（緊急）プリンターを買い替え！",{"type":26,"tag":27,"props":1175,"children":1176},{},[1177,1179,1185],{"type":31,"value":1178},"　長年愛用してきた ",{"type":26,"tag":42,"props":1180,"children":1182},{"href":1181},"\u002Farticles\u002Fict-4#ep306",[1183],{"type":31,"value":1184},"🔗EP-306",{"type":31,"value":1186}," が、「廃インク吸収パッドエラー」で使えなくなりました。ユーザーがパッド交換できないので、メーカーへ修理に出す必要があります（このビジネスモデルはいかがなものか？）。",{"type":26,"tag":27,"props":1188,"children":1189},{},[1190,1192,1198],{"type":31,"value":1191},"　1万円＆2～3週間かかるというので、あきらめて買い替えることにしました。EP-306 の後継機種 ",{"type":26,"tag":42,"props":1193,"children":1195},{"href":1194},"#ep315",[1196],{"type":31,"value":1197},"🔗EP-315",{"type":31,"value":1199}," は、「廃インク吸収パッドエラー」が出てもフチあり印刷なら実行できるらしいので、迷わず決めました。見た目も使い方もインクも同じなので、即戦力になります。",{"type":26,"tag":54,"props":1201,"children":1203},{"id":1202},"lca64uac",[],{"type":26,"tag":179,"props":1205,"children":1208},{"className":1206},[1207],"kattene",[1209,1211,1227,1228],{"type":31,"value":1210},"\n    ",{"type":26,"tag":179,"props":1212,"children":1215},{"className":1213},[1214],"kattene__imgpart",[1216],{"type":26,"tag":42,"props":1217,"children":1222},{"target":1218,"rel":1219,"href":1221},"_blank",[1220],"noopener","https:\u002F\u002Fhb.afl.rakuten.co.jp\u002Fichiba\u002F53732dca.d9b2508c.53732dcb.df291533\u002F_RTLink57026?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Flogitec%2Flmc-lca64uac%2F&link_type=hybrid_url&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJyaWdodCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MCwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjEsInByb2QiOjAsImFtcCI6ZmFsc2V9",[1223],{"type":26,"tag":69,"props":1224,"children":1226},{"src":1225},"https:\u002F\u002Fthumbnail.image.rakuten.co.jp\u002F@0_mall\u002Flogitec\u002Fcabinet\u002Fmemory\u002Flmc-lcauac\u002Flmc-lca64uac.jpg?_ex=240x240",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":1229,"children":1232},{"className":1230},[1231],"kattene__infopart",[1233,1235,1246,1247,1262,1263,1311],{"type":31,"value":1234},"\n      ",{"type":26,"tag":179,"props":1236,"children":1239},{"className":1237},[1238],"kattene__title",[1240],{"type":26,"tag":42,"props":1241,"children":1243},{"target":1218,"rel":1242,"href":1221},[1220],[1244],{"type":31,"value":1245},"ロジテックLMC-LCA64UAC 小型USBメモリ Type-C Type-A 64GB　挿しっぱなしOK",{"type":31,"value":1234},{"type":26,"tag":179,"props":1248,"children":1251},{"className":1249},[1250],"kattene__description",[1252,1255,1257,1260],{"type":26,"tag":54,"props":1253,"children":1254},{},[],{"type":31,"value":1256},"※ 自治会のデジタル化は、高齢者が多いこともあってなかなか進みません。前任者から引き継いだUSBメモリはType-Aの大きなものでした。",{"type":26,"tag":54,"props":1258,"children":1259},{},[],{"type":31,"value":1261},"このUSBメモリは、Type-AとType-C両用かつコンパクトで、ふだん使いにピッタリです。",{"type":31,"value":1234},{"type":26,"tag":179,"props":1264,"children":1268},{"className":1265},[1266,1267],"kattene__btns","__three",[1269,1271,1283,1285,1297,1298,1310],{"type":31,"value":1270},"\n      \t",{"type":26,"tag":179,"props":1272,"children":1273},{},[1274],{"type":26,"tag":42,"props":1275,"children":1280},{"className":1276,"target":1218,"rel":1279,"href":1221},[1277,1278],"kattene__btn","__red",[1220],[1281],{"type":31,"value":1282},"楽天",{"type":31,"value":1284},"\n        ",{"type":26,"tag":179,"props":1286,"children":1287},{},[1288],{"type":26,"tag":42,"props":1289,"children":1294},{"className":1290,"target":1218,"rel":1292,"href":1293},[1277,1291],"__orange",[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0CXSFFJFT",[1295],{"type":31,"value":1296},"Amazon",{"type":31,"value":1284},{"type":26,"tag":179,"props":1299,"children":1300},{},[1301],{"type":26,"tag":42,"props":1302,"children":1307},{"className":1303,"target":1218,"rel":1305,"href":1306},[1277,1304],"__green",[1220],"https:\u002F\u002Fck.jp.ap.valuecommerce.com\u002Fservlet\u002Freferral?sid=3651993&pid=887947441&vc_url=https%3A%2F%2Fstore.shopping.yahoo.co.jp%2Flogitec%2Flmc-lca64uac.html%3Fsc_i%3Dshopping-pc-web-result-item-rsltlst-img",[1308],{"type":31,"value":1309},"Yahoo!",{"type":31,"value":1234},{"type":31,"value":1210},{"type":26,"tag":54,"props":1313,"children":1315},{"id":1314},"netsuke",[],{"type":26,"tag":179,"props":1317,"children":1319},{"className":1318},[1207],[1320,1321,1334,1335],{"type":31,"value":1210},{"type":26,"tag":179,"props":1322,"children":1324},{"className":1323},[1214],[1325],{"type":26,"tag":42,"props":1326,"children":1329},{"target":1218,"rel":1327,"href":1328},[1220],"https:\u002F\u002Fhb.afl.rakuten.co.jp\u002Fichiba\u002F537628d7.39157b54.537628d9.e3340037\u002F_RTLink57026?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fyakinikuyutaka%2Fy0c584d4q4%2F&link_type=hybrid_url&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJyaWdodCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MCwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjEsInByb2QiOjAsImFtcCI6ZmFsc2V9",[1330],{"type":26,"tag":69,"props":1331,"children":1333},{"src":1332},"https:\u002F\u002Fimage.rakuten.co.jp\u002Fyakinikuyutaka\u002Fcabinet\u002Fgazou002pic\u002Fsystempic085\u002Fy0c584d4q42.jpg?_ex=240x240",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":1336,"children":1338},{"className":1337},[1231],[1339,1340,1350,1351,1370,1371,1398],{"type":31,"value":1234},{"type":26,"tag":179,"props":1341,"children":1343},{"className":1342},[1238],[1344],{"type":26,"tag":42,"props":1345,"children":1347},{"target":1218,"rel":1346,"href":1328},[1220],[1348],{"type":31,"value":1349},"サムコス 20個セット 根付紐 20色 ストラップ ハンドメイド素材",{"type":31,"value":1234},{"type":26,"tag":179,"props":1352,"children":1354},{"className":1353},[1250],[1355,1358,1360,1363,1365,1368],{"type":26,"tag":54,"props":1356,"children":1357},{},[],{"type":31,"value":1359},"※ ハダノは「USBメモリのキャップ紛失問題」に悩まされてきました。",{"type":26,"tag":54,"props":1361,"children":1362},{},[],{"type":31,"value":1364},"余っている携帯ストラップを付けようにも、大きくて大げさになりがちです。",{"type":26,"tag":54,"props":1366,"children":1367},{},[],{"type":31,"value":1369},"その点、この根付紐は金具さえついていないシンプルなもので、いろいろ使えそうです。",{"type":31,"value":1234},{"type":26,"tag":179,"props":1372,"children":1375},{"className":1373},[1266,1374],"__two",[1376,1377,1386,1387,1397],{"type":31,"value":1270},{"type":26,"tag":179,"props":1378,"children":1379},{},[1380],{"type":26,"tag":42,"props":1381,"children":1384},{"className":1382,"target":1218,"rel":1383,"href":1328},[1277,1278],[1220],[1385],{"type":31,"value":1282},{"type":31,"value":1284},{"type":26,"tag":179,"props":1388,"children":1389},{},[1390],{"type":26,"tag":42,"props":1391,"children":1395},{"className":1392,"target":1218,"rel":1393,"href":1394},[1277,1291],[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0D92CR2SD",[1396],{"type":31,"value":1296},{"type":31,"value":1234},{"type":31,"value":1210},{"type":26,"tag":54,"props":1400,"children":1402},{"id":1401},"ep315",[],{"type":26,"tag":179,"props":1404,"children":1406},{"className":1405},[1207],[1407,1408,1421,1422],{"type":31,"value":1210},{"type":26,"tag":179,"props":1409,"children":1411},{"className":1410},[1214],[1412],{"type":26,"tag":42,"props":1413,"children":1416},{"target":1218,"rel":1414,"href":1415},[1220],"https:\u002F\u002Fhb.afl.rakuten.co.jp\u002Fichiba\u002F1c31a7e9.545b2c08.1c31a7ea.d83a8f7a\u002F_RTLink57026?pc=https%3A%2F%2Fproduct.rakuten.co.jp%2Fproduct%2F-%2F7a94b927eb0cdd33d62be5a6cccfaa4a%2F&link_type=hybrid_url&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJyaWdodCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MCwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjEsInByb2QiOjEsImFtcCI6ZmFsc2V9",[1417],{"type":26,"tag":69,"props":1418,"children":1420},{"src":1419},"https:\u002F\u002Fthumbnail.image.rakuten.co.jp\u002F@0_mall\u002Fyamada-denki\u002Fcabinet\u002Fa07000291\u002F4790753016.jpg?_ex=240x240",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":1423,"children":1425},{"className":1424},[1231],[1426,1427,1437,1438,1457,1458,1495],{"type":31,"value":1234},{"type":26,"tag":179,"props":1428,"children":1430},{"className":1429},[1238],[1431],{"type":26,"tag":42,"props":1432,"children":1434},{"target":1218,"rel":1433,"href":1415},[1220],[1435],{"type":31,"value":1436},"EPSON EP-315 インクジェットプリンター 6色独立",{"type":31,"value":1234},{"type":26,"tag":179,"props":1439,"children":1441},{"className":1440},[1250],[1442,1445,1447,1450,1452,1455],{"type":26,"tag":54,"props":1443,"children":1444},{},[],{"type":31,"value":1446},"※ いろんなプリンター新製品が出ますが、6色インクで写真をきれいに印刷できる単機能機は限られています。",{"type":26,"tag":54,"props":1448,"children":1449},{},[],{"type":31,"value":1451},"そういうことで使い続けてきた EP-306 に、やっと後継機が出ました。",{"type":26,"tag":54,"props":1453,"children":1454},{},[],{"type":31,"value":1456},"細かい部分で改良されていると感じ、大満足です。",{"type":31,"value":1234},{"type":26,"tag":179,"props":1459,"children":1461},{"className":1460},[1266,1267],[1462,1463,1472,1473,1483,1484,1494],{"type":31,"value":1270},{"type":26,"tag":179,"props":1464,"children":1465},{},[1466],{"type":26,"tag":42,"props":1467,"children":1470},{"className":1468,"target":1218,"rel":1469,"href":1415},[1277,1278],[1220],[1471],{"type":31,"value":1282},{"type":31,"value":1284},{"type":26,"tag":179,"props":1474,"children":1475},{},[1476],{"type":26,"tag":42,"props":1477,"children":1481},{"className":1478,"target":1218,"rel":1479,"href":1480},[1277,1291],[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0BTNGY4C6",[1482],{"type":31,"value":1296},{"type":31,"value":1284},{"type":26,"tag":179,"props":1485,"children":1486},{},[1487],{"type":26,"tag":42,"props":1488,"children":1492},{"className":1489,"target":1218,"rel":1490,"href":1491},[1277,1304],[1220],"https:\u002F\u002Fck.jp.ap.valuecommerce.com\u002Fservlet\u002Freferral?sid=3651993&pid=887947441&vc_url=https%3A%2F%2Fstore.shopping.yahoo.co.jp%2Fyamada-denki%2F4790753016.html%3Fsc_i%3Dshopping-pc-web-result-item-rsltlst-img",[1493],{"type":31,"value":1309},{"type":31,"value":1234},{"type":31,"value":1210},{"type":26,"tag":54,"props":1497,"children":1498},{},[],{"type":26,"tag":319,"props":1500,"children":1501},{},[],{"type":26,"tag":27,"props":1503,"children":1504},{},[1505],{"type":26,"tag":42,"props":1506,"children":1507},{"href":44},[1508],{"type":31,"value":1509},"←前へ　ちょっとだけハッカー",{"title":8,"searchDepth":324,"depth":324,"links":1511},[1512],{"id":60,"depth":324,"text":10,"children":1513},[1514,1515,1516,1517,1518],{"id":92,"depth":362,"text":95},{"id":174,"depth":362,"text":177},{"id":482,"depth":362,"text":485},{"id":720,"depth":362,"text":723},{"id":996,"depth":362,"text":999},"markdown","content:articles:hacker-2.md","content","articles\u002Fhacker-2.md","articles\u002Fhacker-2","md",{"_path":44,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":800,"description":1526,"category":1527,"tag":1528,"thumbnail":1532,"createdAt":1533,"updatedAt":1534,"body":1535,"_type":1519,"_id":3985,"_source":1521,"_file":3986,"_stem":3987,"_extension":1524},"ソックサーガ版学習アプリの改造にAIエージェントを使ってみた",[12],[14,15,1529,16,1530,1531],"socsaga","web-standards","vue","hacker-1.jpg","2025\u002F10\u002F26","2025\u002F11\u002F22",{"type":23,"children":1536,"toc":3972},[1537,1541,1553,1564,1576,1579,1584,1595,1607,1612,1617,1622,1633,1636,1642,1679,1927,1939,1944,1947,1953,1958,1987,2003,2014,2019,2024,2027,2033,2084,2113,2124,2172,2177,2188,2197,2209,2220,2241,2244,2249,2254,2257,2262,2305,2411,2450,2469,2472,2478,2483,2499,2508,2513,2518,2557,2588,2599,2612,2625,2628,2634,2639,2683,2688,2719,2724,2729,2765,2770,2773,2778,2783,2788,2800,2805,2810,2841,2854,2867,2888,2893,2913,2925,2931,2934,2939,2944,2965,2993,2998,3011,3016,3021,3026,3053,3058,3077,3082,3105,3121,3134,3139,3150,3153,3159,3180,3185,3214,3217,3229,3234,3247,3260,3265,3271,3283,3288,3291,3296,3331,3345,3352,3357,3370,3375,3409,3413,3416,3421,3434,3439,3444,3457,3462,3470,3483,3488,3501,3506,3515,3520,3525,3536,3541,3544,3549,3561,3566,3575,3579,3672,3676,3769,3773,3861,3865,3958,3961,3964],{"type":26,"tag":27,"props":1538,"children":1539},{},[1540],{"type":31,"value":32},{"type":26,"tag":34,"props":1542,"children":1543},{},[1544],{"type":26,"tag":38,"props":1545,"children":1546},{},[1547],{"type":26,"tag":42,"props":1548,"children":1550},{"href":1549},"\u002Farticles\u002Fblog-3",[1551],{"type":31,"value":1552},"🔗AIエージェントはWeb系プログラミングの役に立つか",{"type":26,"tag":27,"props":1554,"children":1555},{},[1556,1558,1562],{"type":31,"value":1557},"で、AIエージェントの支援があれば、「",{"type":26,"tag":285,"props":1559,"children":1560},{},[1561],{"type":31,"value":800},{"type":31,"value":1563},"」になれるかもと思いました。",{"type":26,"tag":27,"props":1565,"children":1567},{"style":1566},"text-align: right;",[1568,1570],{"type":31,"value":1569},"⇒",{"type":26,"tag":42,"props":1571,"children":1573},{"href":1572},"#spellquest",[1574],{"type":31,"value":1575}," お急ぎの方はこちらへ",{"type":26,"tag":54,"props":1577,"children":1578},{},[],{"type":26,"tag":58,"props":1580,"children":1582},{"id":1581},"ソックサーガ版学習アプリの改造にaiエージェントを使ってみた",[1583],{"type":31,"value":1526},{"type":26,"tag":27,"props":1585,"children":1586},{},[1587,1592],{"type":26,"tag":69,"props":1588,"children":1591},{"src":1589,"alt":1590,"width":472},"\u002Fimg\u002Fsocsaga01.jpg","ソックサーガ",[],{"type":26,"tag":54,"props":1593,"children":1594},{},[],{"type":26,"tag":34,"props":1596,"children":1597},{},[1598],{"type":26,"tag":38,"props":1599,"children":1600},{},[1601],{"type":26,"tag":42,"props":1602,"children":1604},{"href":1603},"\u002Ftag\u002Fsocsaga",[1605],{"type":31,"value":1606},"🔗ソックサーガ",{"type":26,"tag":27,"props":1608,"children":1609},{},[1610],{"type":31,"value":1611},"を中心に、中学生のプログラミング教育を後押ししてきたハダノですが、壁にぶつかっていました。",{"type":26,"tag":27,"props":1613,"children":1614},{},[1615],{"type":31,"value":1616},"　一般の中学校教員にとって、プログラミング環境構築はハードルが高いので、クラウド統合開発環境を推奨してきました。GlitchからReplitに乗り換え、自校運用できるように導いてきたつもりです。",{"type":26,"tag":27,"props":1618,"children":1619},{},[1620],{"type":31,"value":1621},"　ところが、2024年からReplitが使いづらくなりました。無料でできる範囲が小さくなってしまったのです。かといって、Glitchに戻る気にもなれません。",{"type":26,"tag":27,"props":1623,"children":1624},{},[1625,1630],{"type":26,"tag":69,"props":1626,"children":1629},{"src":1627,"alt":1628,"width":472},"\u002Fimg\u002Freplsoc.jpg","ReplitによるWebプログラミング",[],{"type":26,"tag":54,"props":1631,"children":1632},{},[],{"type":26,"tag":54,"props":1634,"children":1635},{},[],{"type":26,"tag":90,"props":1637,"children":1639},{"id":1638},"webアプリ開発環境のおすすめは",[1640],{"type":31,"value":1641},"Webアプリ開発環境のおすすめは？",{"type":26,"tag":179,"props":1643,"children":1645},{"className":1644},[182],[1646,1647,1656,1658,1661,1663,1666,1669,1671,1674,1676],{"type":31,"value":185},{"type":26,"tag":179,"props":1648,"children":1650},{"className":1649},[189],[1651,1652,1655],{"type":31,"value":192},{"type":26,"tag":69,"props":1653,"children":1654},{"src":195,"alt":196,"width":197},[],{"type":31,"value":192},{"type":31,"value":1657},"\n2026年以降のことを考えた場合、Replitに代わるクラウド統合開発環境は何がよいでしょうか。",{"type":26,"tag":54,"props":1659,"children":1660},{},[],{"type":31,"value":1662},"\nおすすめの上位3つを理由付きで教えてください。",{"type":26,"tag":54,"props":1664,"children":1665},{},[],{"type":26,"tag":54,"props":1667,"children":1668},{},[],{"type":31,"value":1670},"\nまた、当面は（中学生が）ローカル（LANも含む）でWebアプリのコーディングをし、ローカルサーバーを利用して動作確認後、無料ホスティングサービス（Cloundflareなど）を利用して（教員が）デプロイすることになると思います。",{"type":26,"tag":54,"props":1672,"children":1673},{},[],{"type":31,"value":1675},"\nその際の手段としておすすめの上位3つを理由付きで教えてください。",{"type":26,"tag":54,"props":1677,"children":1678},{},[],{"type":26,"tag":179,"props":1680,"children":1682},{"className":1681},[243],[1683,1684,1693,1695,1698,1701,1709,1714,1813,1816,1824,1829,1922],{"type":31,"value":185},{"type":26,"tag":179,"props":1685,"children":1687},{"className":1686},[189],[1688,1689,1692],{"type":31,"value":192},{"type":26,"tag":69,"props":1690,"children":1691},{"src":253,"alt":254,"width":197},[],{"type":31,"value":192},{"type":31,"value":1694},"\n✦ 中学校での情報教育、特にWebアプリケーション開発の環境構築に関するご経験と課題、拝見いたしました。Replitの仕様変更は、教育現場にとって大きな課題かと存じます。2026年以降を見据えた上で、これまでのご経験と今後の運用形態を踏まえ、クラウドIDEとローカル開発＋ホスティングのそれぞれについて、おすすめの選択肢を提案させていただきます。",{"type":26,"tag":54,"props":1696,"children":1697},{},[],{"type":26,"tag":54,"props":1699,"children":1700},{},[],{"type":26,"tag":27,"props":1702,"children":1703},{},[1704],{"type":26,"tag":285,"props":1705,"children":1706},{},[1707],{"type":31,"value":1708},"Replitに代わるクラウド統合開発環境 おすすめ上位3選",{"type":26,"tag":27,"props":1710,"children":1711},{},[1712],{"type":31,"value":1713},"クラウドIDEは、生徒の環境差異をなくし、教員が管理しやすい点が最大のメリットです。Replitの代替としては、以下の3つが考えられます。",{"type":26,"tag":97,"props":1715,"children":1716},{},[1717,1751,1779],{"type":26,"tag":38,"props":1718,"children":1719},{},[1720,1725],{"type":26,"tag":285,"props":1721,"children":1722},{},[1723],{"type":31,"value":1724},"GitHub Codespaces",{"type":26,"tag":34,"props":1726,"children":1727},{},[1728],{"type":26,"tag":38,"props":1729,"children":1730},{},[1731,1733],{"type":31,"value":1732},"理由:\n",{"type":26,"tag":34,"props":1734,"children":1735},{},[1736,1741,1746],{"type":26,"tag":38,"props":1737,"children":1738},{},[1739],{"type":31,"value":1740},"教育現場への優遇: 「GitHub Education」に登録することで、教員は無料の利用枠を得られる可能性があります。生徒も同様の特典を受けられる場合があり、コスト面の課題を解決できる可能性が最も高いです.",{"type":26,"tag":38,"props":1742,"children":1743},{},[1744],{"type":31,"value":1745},"デファクトスタンダード: 中身は多くのプロが使用する「Visual Studio Code (VS Code)」そのものです。生徒は実践的な開発環境に早期から慣れ親しむことができ、将来的なステップアップにも繋がります。",{"type":26,"tag":38,"props":1747,"children":1748},{},[1749],{"type":31,"value":1750},"GitHub連携: ソースコード管理の学習と開発環境が一体化しており、バージョン管理の概念を自然に学べます。",{"type":26,"tag":38,"props":1752,"children":1753},{},[1754,1759],{"type":26,"tag":285,"props":1755,"children":1756},{},[1757],{"type":31,"value":1758},"CodeSandbox",{"type":26,"tag":34,"props":1760,"children":1761},{},[1762],{"type":26,"tag":38,"props":1763,"children":1764},{},[1765,1766],{"type":31,"value":1732},{"type":26,"tag":34,"props":1767,"children":1768},{},[1769,1774],{"type":26,"tag":38,"props":1770,"children":1771},{},[1772],{"type":31,"value":1773},"手軽さとコラボレーション: Webフロントエンド開発に特化しており、ReactやVue.jsといったモダンな技術のテンプレートが豊富です。ブラウザ上で非常に高速に動作し、複数人でのリアルタイム共同編集機能は、グループ学習に最適です。",{"type":26,"tag":38,"props":1775,"children":1776},{},[1777],{"type":31,"value":1778},"教育向け機能: 教室管理機能（CodeSandbox Classrooms）が提供されており、課題の配布や進捗管理が容易です。",{"type":26,"tag":38,"props":1780,"children":1781},{},[1782,1787],{"type":26,"tag":285,"props":1783,"children":1784},{},[1785],{"type":31,"value":1786},"StackBlitz",{"type":26,"tag":34,"props":1788,"children":1789},{},[1790],{"type":26,"tag":38,"props":1791,"children":1792},{},[1793,1794],{"type":31,"value":1732},{"type":26,"tag":34,"props":1795,"children":1796},{},[1797,1802],{"type":26,"tag":38,"props":1798,"children":1799},{},[1800],{"type":31,"value":1801},"圧倒的な速度: ブラウザ内でNode.js環境を直接実行する独自の「WebContainers」技術により、環境の起動や動作が非常に高速です。生徒を待たせることなく、すぐにコーディングを開始できます。",{"type":26,"tag":38,"props":1803,"children":1804},{},[1805,1807,1810],{"type":31,"value":1806},"オフライン動作: 一度プロジェクトを開けば、オフラインでも動作するPWA（プログレッシブウェブアプリ）として機能します。ネットワーク環境が不安定な場合でも、学習を継続できる可能性があります。",{"type":26,"tag":54,"props":1808,"children":1809},{},[],{"type":26,"tag":54,"props":1811,"children":1812},{},[],{"type":26,"tag":319,"props":1814,"children":1815},{},[],{"type":26,"tag":27,"props":1817,"children":1818},{},[1819],{"type":26,"tag":285,"props":1820,"children":1821},{},[1822],{"type":31,"value":1823},"ローカル開発＋無料ホスティング おすすめ上位3選",{"type":26,"tag":27,"props":1825,"children":1826},{},[1827],{"type":31,"value":1828},"ローカルでの開発は、ツールの仕組みをより深く理解することに繋がります。教員がデプロイを管理する現在の運用に最適な組み合わせは以下の通りです。",{"type":26,"tag":97,"props":1830,"children":1831},{},[1832,1860,1888],{"type":26,"tag":38,"props":1833,"children":1834},{},[1835,1840],{"type":26,"tag":285,"props":1836,"children":1837},{},[1838],{"type":31,"value":1839},"開発: VS Code + Live Server拡張機能 \u002F デプロイ: GitHub Pages",{"type":26,"tag":34,"props":1841,"children":1842},{},[1843],{"type":26,"tag":38,"props":1844,"children":1845},{},[1846,1847],{"type":31,"value":1732},{"type":26,"tag":34,"props":1848,"children":1849},{},[1850,1855],{"type":26,"tag":38,"props":1851,"children":1852},{},[1853],{"type":31,"value":1854},"開発の手軽さ: VS Codeは無料で高機能なエディタです。「Live Server」という拡張機能を追加すれば、HTMLファイルを右クリックするだけでローカルサーバーが起動し、コードの変更が即座にブラウザに反映されるため、生徒でも直感的に扱えます。",{"type":26,"tag":38,"props":1856,"children":1857},{},[1858],{"type":31,"value":1859},"デプロイの簡易性: GitHub\nPagesは、GitHubリポジトリにソースコードをアップロード（プッシュ）するだけでWebサイトとして公開できる、最も手軽なホスティングサービスの一つです。完全に無料で利用でき、バージョン管理と公開作業が一体化しているため、教育的価値も高いです。",{"type":26,"tag":38,"props":1861,"children":1862},{},[1863,1868],{"type":26,"tag":285,"props":1864,"children":1865},{},[1866],{"type":31,"value":1867},"開発: VS Code + Live Server拡張機能 \u002F デプロイ: Cloudflare Pages",{"type":26,"tag":34,"props":1869,"children":1870},{},[1871],{"type":26,"tag":38,"props":1872,"children":1873},{},[1874,1875],{"type":31,"value":1732},{"type":26,"tag":34,"props":1876,"children":1877},{},[1878,1883],{"type":26,"tag":38,"props":1879,"children":1880},{},[1881],{"type":31,"value":1882},"開発の容易さ: 開発環境は1位と同じく、最も手軽な組み合わせです。",{"type":26,"tag":38,"props":1884,"children":1885},{},[1886],{"type":31,"value":1887},"高機能なデプロイ: Cloudflare Pagesは、GitHub Pagesと同様にGitリポジトリと連携して自動でデプロイできます。それに加え、より高速な配信（CDN）、詳細なアクセス解析、共同作業者へのプレビューURL発行など、無料で使える機能が非常に豊富です。教員がデプ\nロイを管理・運用する上で、より柔軟で高度な対応が可能です。",{"type":26,"tag":38,"props":1889,"children":1890},{},[1891,1896],{"type":26,"tag":285,"props":1892,"children":1893},{},[1894],{"type":31,"value":1895},"開発: Node.js + live-server \u002F デプロイ: Vercel",{"type":26,"tag":34,"props":1897,"children":1898},{},[1899],{"type":26,"tag":38,"props":1900,"children":1901},{},[1902,1903],{"type":31,"value":1732},{"type":26,"tag":34,"props":1904,"children":1905},{},[1906,1911],{"type":26,"tag":38,"props":1907,"children":1908},{},[1909],{"type":31,"value":1910},"一歩進んだ開発体験: PCにNode.jsをインストールし、コマンドプロンプト（ターミナル）から npx live-server のようなコマンドでサーバーを起動する方法です。プログラミングのより実践的な側面に触れる良い機会になります。",{"type":26,"tag":38,"props":1912,"children":1913},{},[1914,1916,1919],{"type":31,"value":1915},"最先端のデプロイ先: Vercelは、特にReactなどのモダンなフレームワークを使ったWebアプリのホスティングに最適です。デプロイは非常に簡単かつ高速で、世界中の多くの開発者に利用されています。生徒が将来、より複雑なアプリケーション開発へ興味を持った際\nの、スムーズな移行先となります。",{"type":26,"tag":54,"props":1917,"children":1918},{},[],{"type":26,"tag":54,"props":1920,"children":1921},{},[],{"type":26,"tag":27,"props":1923,"children":1924},{},[1925],{"type":31,"value":1926},"ご自身のスキルや、生徒たちにどこまでの体験をさせたいかに合わせて、これらの選択肢を検討・試してみてはいかがでしょうか。",{"type":26,"tag":27,"props":1928,"children":1929},{},[1930,1932,1937],{"type":31,"value":1931},"　とても的確なアドバイスです。とりあえず、",{"type":26,"tag":285,"props":1933,"children":1934},{},[1935],{"type":31,"value":1936},"ローカル開発の2番",{"type":31,"value":1938},"で行くことにします。",{"type":26,"tag":27,"props":1940,"children":1941},{},[1942],{"type":31,"value":1943},"　しばらくお休みしていた「ソックサーガ」による開発を再開し、「英単語の発音チェックアプリ」をグレードアップしようとしたところで問題が発生しました。",{"type":26,"tag":54,"props":1945,"children":1946},{},[],{"type":26,"tag":90,"props":1948,"children":1950},{"id":1949},"英単語の発音チェックアプリが動かなくなった",[1951],{"type":31,"value":1952},"「英単語の発音チェック」アプリが動かなくなった！？",{"type":26,"tag":69,"props":1954,"children":1957},{"src":1955,"alt":1956,"width":472},"\u002Fimg\u002Fspeechrecognition.png","Web Speech APIによる発音チェック",[],{"type":26,"tag":179,"props":1959,"children":1961},{"className":1960},[182],[1962,1963,1972,1974,1977,1979,1982,1984],{"type":31,"value":185},{"type":26,"tag":179,"props":1964,"children":1966},{"className":1965},[189],[1967,1968,1971],{"type":31,"value":192},{"type":26,"tag":69,"props":1969,"children":1970},{"src":195,"alt":196,"width":197},[],{"type":31,"value":192},{"type":31,"value":1973},"\n以前は正常に作動していた自作のWebアプリで「英単語の発音チェック」ができなくなりました。",{"type":26,"tag":54,"props":1975,"children":1976},{},[],{"type":31,"value":1978},"\n@C:\\nuxt●\\～～\\public\\jisshu\\tango.html",{"type":26,"tag":54,"props":1980,"children":1981},{},[],{"type":31,"value":1983},"\n原因を調査し、解決策を提案してください。",{"type":26,"tag":54,"props":1985,"children":1986},{},[],{"type":26,"tag":179,"props":1988,"children":1990},{"className":1989},[243],[1991,1992,2001],{"type":31,"value":185},{"type":26,"tag":179,"props":1993,"children":1995},{"className":1994},[189],[1996,1997,2000],{"type":31,"value":192},{"type":26,"tag":69,"props":1998,"children":1999},{"src":253,"alt":254,"width":197},[],{"type":31,"value":192},{"type":31,"value":2002},"\n✦ 承知いたしました。C:\\nuxt●\\～～\\jisshu\\tango.html\n  を調査し、英単語の発音チェックが機能しなくなった原因を特定し、解決策を提案します。\n",{"type":26,"tag":375,"props":2004,"children":2009},{"className":2005,"code":2007,"language":2008,"meta":8},[2006],"language-tango1.jps1","✦ ファイル tango.html の内容を確認しました。\n  このアプリはVue.jsを使用し、発音チェック機能は Web Speech API\n  を利用していると推測されます。\n  特に、xhear() という関数がその中核を担っているようです。\n\n  次に、xhear()関数が定義されていると思われる \n  C:\\nuxt●\\～～\\ssscript.js の内容を調査します。\n\n✦ ssscript.js の内容を確認しましたが、\n  xhear 関数の定義が見つかりませんでした。\n  tango.htmlから呼び出されているにもかかわらず、\n  関連ファイル内に見当たらないのは不可解です。\n\n  以前は動作していたという状況から、ssscript.js から\n  xhear 関数が誤って削除された可能性が最も高いと判断します。\n\n  そこで、Web Speech API を使用して音声認識を行う xhear 関数を\n  新たに作成し、ssscript.js のVueインスタンスの  methods \n  に追加することで、機能を復元します。\n\n  この新しい xhear 関数は、tango.html のロジックに合わせて、\n  発音が正しければ次のスライド（正解）に、\n  間違っていれば不正解のスライドに移動するように実装します。\n\n  以下の手順で C:\\nuxt●\\～～\\ssscript.js を修正します。\n","tango1.jps1",[2010],{"type":26,"tag":380,"props":2011,"children":2012},{"__ignoreMap":8},[2013],{"type":31,"value":2007},{"type":26,"tag":27,"props":2015,"children":2016},{},[2017],{"type":31,"value":2018},"　自分で確認したところ、確かにその通りだったので、修正実行を Gemini CLI にお願いしました。",{"type":26,"tag":27,"props":2020,"children":2021},{},[2022],{"type":31,"value":2023},"　ところが、どうも期待した動作をしません。結局、自力で修復しました。",{"type":26,"tag":54,"props":2025,"children":2026},{},[],{"type":26,"tag":90,"props":2028,"children":2030},{"id":2029},"aiエージェントがまちがえたわけ",[2031],{"type":31,"value":2032},"AIエージェントがまちがえたわけ",{"type":26,"tag":179,"props":2034,"children":2036},{"className":2035},[182],[2037,2038,2047,2049,2052,2054,2057,2059,2062,2064,2067,2069,2072,2074,2077,2079,2082],{"type":31,"value":185},{"type":26,"tag":179,"props":2039,"children":2041},{"className":2040},[189],[2042,2043,2046],{"type":31,"value":192},{"type":26,"tag":69,"props":2044,"children":2045},{"src":195,"alt":196,"width":197},[],{"type":31,"value":192},{"type":31,"value":2048},"\n……xhear 関数が誤って削除された可能性が最も高いと判断します。』",{"type":26,"tag":54,"props":2050,"children":2051},{},[],{"type":31,"value":2053},"\nというお答えでした。こちらで確認したところ、その通りでした。",{"type":26,"tag":54,"props":2055,"children":2056},{},[],{"type":31,"value":2058},"\nただ、そのあとに修正していただいた、",{"type":26,"tag":54,"props":2060,"children":2061},{},[],{"type":31,"value":2063},"\n@C:\\nuxt●\\～～\\ssscript_gemini.js",{"type":26,"tag":54,"props":2065,"children":2066},{},[],{"type":31,"value":2068},"\nは、動作しません。",{"type":26,"tag":54,"props":2070,"children":2071},{},[],{"type":31,"value":2073},"\n自力で修復した",{"type":26,"tag":54,"props":2075,"children":2076},{},[],{"type":31,"value":2078},"\n@C:\\nuxt●\\～～\\ssscript_original.js",{"type":26,"tag":54,"props":2080,"children":2081},{},[],{"type":31,"value":2083},"\nは動いたのですが、両者の違いは何だったと考えられますか。\n",{"type":26,"tag":179,"props":2085,"children":2087},{"className":2086},[243],[2088,2089,2098,2100],{"type":31,"value":185},{"type":26,"tag":179,"props":2090,"children":2092},{"className":2091},[189],[2093,2094,2097],{"type":31,"value":192},{"type":26,"tag":69,"props":2095,"children":2096},{"src":253,"alt":254,"width":197},[],{"type":31,"value":192},{"type":31,"value":2099},"\n✦ ファイルの内容を確認し、比較いたしました。ssscript_gemini.jsが動作しなかった原因をご説明します。\n",{"type":26,"tag":27,"props":2101,"children":2102},{},[2103,2105,2111],{"type":31,"value":2104},"結論から言うと、",{"type":26,"tag":380,"props":2106,"children":2108},{"className":2107},[],[2109],{"type":31,"value":2110},"xhear",{"type":31,"value":2112},"関数の引数（パラメータ）と、その後の処理の仕方に違いがありました。",{"type":26,"tag":375,"props":2114,"children":2119},{"className":2115,"code":2117,"language":2118,"meta":8},[2116],"language-ssscript.js","  1. 動作する ssscript_original.js の xhear 関数\n\n  ご自身で修復されたこちらのバージョンでは、\n  xhear関数は以下のように定義されています。\n\n   1 xhear: function(word='', go1=1, go2=2, langn=1) {\n   2   \u002F\u002F ...\n   3   \u002F\u002F ★判定後、引数で受け取った \n            go1 または go2 を使ってページを移動する\n   4   this.xgo(retval);\n   5 }\n\n  この関数は、照合する単語 word に加えて、\n  正解時の移動先 go1、不正解時の移動先 go2、言語 langn\n  を引数として受け取ります。\n  そして、音声認識の結果に応じて、xgo() 関数を呼び出して\n  指定されたページへ移動します。\n  これにより、tango.html側で柔軟に動作を制御できます。\n\n  2. 動作しなかった ssscript_gemini.js の xhear 関数\n\n  一方、私が以前作成したこちらのバージョンでは、\n  関数は以下のように定義されていました。\n\n   1 xhear: function(ans = \"\") {\n   2   \u002F\u002F ...\n   3   if (speechResult.includes(ans.toLowerCase())) {\n   4     this.evax('xgo(1)'); \u002F\u002F ★常に「1」に移動する\n   5   } else {\n   6     this.evax('xgo(2)'); \u002F\u002F ★常に「2」に移動する\n   7   }\n   8 }\n\n  この関数が受け取る引数は、照合する単語 ans のみです。\n  正解・不正解の移動先は、関数の中に xgo(1)、xgo(2)\n  と固定で書かれてしまっています。\n","ssscript.js",[2120],{"type":26,"tag":380,"props":2121,"children":2122},{"__ignoreMap":8},[2123],{"type":31,"value":2117},{"type":26,"tag":179,"props":2125,"children":2127},{"className":2126},[243],[2128,2129,2138,2146,2151,2156,2167],{"type":31,"value":185},{"type":26,"tag":179,"props":2130,"children":2132},{"className":2131},[189],[2133,2134,2137],{"type":31,"value":192},{"type":26,"tag":69,"props":2135,"children":2136},{"src":253,"alt":254,"width":197},[],{"type":31,"value":192},{"type":26,"tag":27,"props":2139,"children":2140},{},[2141],{"type":26,"tag":285,"props":2142,"children":2143},{},[2144],{"type":31,"value":2145},"なぜ動作しなかったか",{"type":26,"tag":27,"props":2147,"children":2148},{},[2149],{"type":31,"value":2150},"tango.htmlでは、xhear('apple', 5, 6)\nのように、正解なら5ページへ、不正解なら6ページへ、といった形でxhear関数を呼び出していたはずです。",{"type":26,"tag":27,"props":2152,"children":2153},{},[2154],{"type":31,"value":2155},"しかし、ssscript_gemini.jsのxhear関数は移動先の引数（5や6）を受け取る作りになっていなかったため、それらの指\n定が無視され、常に1か2へ移動しようとしてしまいました。これが、意図した通りに動作しなかった原因です。",{"type":26,"tag":27,"props":2157,"children":2158},{},[2159,2161,2164],{"type":31,"value":2160},"ご自身で修復されたssscript_original.jsは、tango.htmlからの引数を正しく受け取って処理するようになっていたため\n、正常に動作した、ということになります。",{"type":26,"tag":54,"props":2162,"children":2163},{},[],{"type":26,"tag":54,"props":2165,"children":2166},{},[],{"type":26,"tag":27,"props":2168,"children":2169},{},[2170],{"type":31,"value":2171},"私の修正が不十分で、ご不便をおかけし大変申し訳ありませんでした。",{"type":26,"tag":27,"props":2173,"children":2174},{},[2175],{"type":31,"value":2176},"、、、と、もっともらしい説明をしていますが、「じゃあ、なんで最初からそのように修正しなかったの？」と突っ込みたくなります。",{"type":26,"tag":27,"props":2178,"children":2179},{},[2180,2185],{"type":26,"tag":69,"props":2181,"children":2184},{"src":2182,"alt":2183,"width":472},"\u002Fimg\u002Faifailure.jpg","AIエージェントの失敗",[],{"type":26,"tag":54,"props":2186,"children":2187},{},[],{"type":26,"tag":27,"props":2189,"children":2190},{},[2191,2192],{"type":31,"value":976},{"type":26,"tag":285,"props":2193,"children":2194},{},[2195],{"type":31,"value":2196},"実は、Gemini CLI の説明は完全に間違っています。",{"type":26,"tag":27,"props":2198,"children":2199},{},[2200,2201,2207],{"type":31,"value":976},{"type":26,"tag":380,"props":2202,"children":2204},{"className":2203},[],[2205],{"type":31,"value":2206},"xgo()",{"type":31,"value":2208}," 関数などハダノが定義した関数への理解が足りないのがその原因です。ソックサーガは、「中学生にWebアプリを作らせるためのWebアプリ」なので、JavaScriptの命令も間接的に実行されるようにしています。",{"type":26,"tag":27,"props":2210,"children":2211},{},[2212,2213,2218],{"type":31,"value":976},{"type":26,"tag":380,"props":2214,"children":2216},{"className":2215},[],[2217],{"type":31,"value":2206},{"type":31,"value":2219}," 関数については、絶対ジャンプではなく相対ジャンプにしています。スライドの挿入・削除をしてもそのまま動くからです。",{"type":26,"tag":27,"props":2221,"children":2222},{},[2223,2225,2231,2233,2239],{"type":31,"value":2224},"　そもそもxhear関数を呼び出す側では、単語しか引数として指定していません。移動先や言語は規定値のままなわけですから、『移動先の引数（5や6）を受け取る作りになっていなかったため』というのは、理由になりません。",{"type":26,"tag":380,"props":2226,"children":2228},{"className":2227},[],[2229],{"type":31,"value":2230},"xgo(1)",{"type":31,"value":2232},"や",{"type":26,"tag":380,"props":2234,"children":2236},{"className":2235},[],[2237],{"type":31,"value":2238},"xgo(2)",{"type":31,"value":2240},"の呼び出し方を根本的に間違えていたのです。",{"type":26,"tag":54,"props":2242,"children":2243},{},[],{"type":26,"tag":27,"props":2245,"children":2246},{},[2247],{"type":31,"value":2248},"　やはり、今のAIエージェントは、一般的なプログラムはOKでも特殊なプログラムは苦手なようです。……惜しい！！",{"type":26,"tag":27,"props":2250,"children":2251},{},[2252],{"type":31,"value":2253},"　しかし、AIの助けがあれば、アプリの改造がスピードアップしそうです。",{"type":26,"tag":54,"props":2255,"children":2256},{},[],{"type":26,"tag":90,"props":2258,"children":2260},{"id":2259},"中学生に刺さる英単語ゲームに",[2261],{"type":31,"value":2259},{"type":26,"tag":179,"props":2263,"children":2265},{"className":2264},[182],[2266,2267,2276,2278,2281,2283,2286],{"type":31,"value":185},{"type":26,"tag":179,"props":2268,"children":2270},{"className":2269},[189],[2271,2272,2275],{"type":31,"value":192},{"type":26,"tag":69,"props":2273,"children":2274},{"src":195,"alt":196,"width":197},[],{"type":31,"value":192},{"type":31,"value":2277},"\n中学生用の英単語チェックアプリを作ろうとしています。",{"type":26,"tag":54,"props":2279,"children":2280},{},[],{"type":31,"value":2282},"\n普通の勉強だと敬遠されるのでゲーム感覚で楽しんでもらいたいのです。中学生の好きなゲームタイトルによく出てくる言葉をアプリタイトルに入れるとよいのではないかと思います。",{"type":26,"tag":54,"props":2284,"children":2285},{},[],{"type":26,"tag":27,"props":2287,"children":2288},{},[2289,2291,2300,2302],{"type":31,"value":2290},"中学生が興味を持ちそうなアプリタイトルの案を5つ、",{"type":26,"tag":2292,"props":2293,"children":2294},"em",{},[2295],{"type":26,"tag":285,"props":2296,"children":2297},{},[2298],{"type":31,"value":2299},"その確率とともに生成",{"type":31,"value":2301},"してください。",{"type":26,"tag":54,"props":2303,"children":2304},{},[],{"type":26,"tag":179,"props":2306,"children":2308},{"className":2307},[243],[2309,2310,2319,2327,2338,2351,2364,2377,2390,2403,2406],{"type":31,"value":185},{"type":26,"tag":179,"props":2311,"children":2313},{"className":2312},[189],[2314,2315,2318],{"type":31,"value":192},{"type":26,"tag":69,"props":2316,"children":2317},{"src":498,"alt":499,"width":197},[],{"type":31,"value":192},{"type":26,"tag":27,"props":2320,"children":2321},{},[2322],{"type":26,"tag":285,"props":2323,"children":2324},{},[2325],{"type":31,"value":2326},"おすすめタイトル案｛確率つき｝",{"type":26,"tag":27,"props":2328,"children":2329},{},[2330,2332,2335],{"type":31,"value":2331},"以下は、中学生に人気のゲームタイトル傾向（マインクラフト、ポケモン、スプラトゥーン、フォートナイト、どうぶつの森など）を参考にした、英単語チェックアプリのネーミング案です。｛中学生に刺さる確率｝",{"type":26,"tag":54,"props":2333,"children":2334},{},[],{"type":26,"tag":54,"props":2336,"children":2337},{},[],{"type":26,"tag":27,"props":2339,"children":2340},{},[2341,2346,2348],{"type":26,"tag":285,"props":2342,"children":2343},{},[2344],{"type":31,"value":2345},"Word Quest",{"type":31,"value":2347},"（ワードクエスト）：RPG風。「クエスト」という冒険感が人気ゲームに多く登場。｛ 85% ｝",{"type":26,"tag":54,"props":2349,"children":2350},{},[],{"type":26,"tag":27,"props":2352,"children":2353},{},[2354,2359,2361],{"type":26,"tag":285,"props":2355,"children":2356},{},[2357],{"type":31,"value":2358},"English Royale",{"type":31,"value":2360},"（イングリッシュ・ロワイヤル）：……｛ 80% ｝",{"type":26,"tag":54,"props":2362,"children":2363},{},[],{"type":26,"tag":27,"props":2365,"children":2366},{},[2367,2372,2374],{"type":26,"tag":285,"props":2368,"children":2369},{},[2370],{"type":31,"value":2371},"VocabCraft",{"type":31,"value":2373},"（ボキャブラクラフト）：……｛ 90% ｝",{"type":26,"tag":54,"props":2375,"children":2376},{},[],{"type":26,"tag":27,"props":2378,"children":2379},{},[2380,2385,2387],{"type":26,"tag":285,"props":2381,"children":2382},{},[2383],{"type":31,"value":2384},"Spellmon",{"type":31,"value":2386},"（スペルモン）：……｛ 75% ｝",{"type":26,"tag":54,"props":2388,"children":2389},{},[],{"type":26,"tag":27,"props":2391,"children":2392},{},[2393,2398,2400],{"type":26,"tag":285,"props":2394,"children":2395},{},[2396],{"type":31,"value":2397},"Word Splash",{"type":31,"value":2399},"（ワードスプラッシュ）：……｛ 70% ｝",{"type":26,"tag":54,"props":2401,"children":2402},{},[],{"type":26,"tag":319,"props":2404,"children":2405},{},[],{"type":26,"tag":27,"props":2407,"children":2408},{},[2409],{"type":31,"value":2410},"👉 興味があれば、これらのタイトルに合わせたUI演出やゲームシステムのアイデアも提案できます。見てみますか。",{"type":26,"tag":179,"props":2412,"children":2414},{"className":2413},[182],[2415,2416,2425,2427,2430,2432,2435],{"type":31,"value":185},{"type":26,"tag":179,"props":2417,"children":2419},{"className":2418},[189],[2420,2421,2424],{"type":31,"value":192},{"type":26,"tag":69,"props":2422,"children":2423},{"src":195,"alt":196,"width":197},[],{"type":31,"value":192},{"type":31,"value":2426},"\nありがとうございます。",{"type":26,"tag":54,"props":2428,"children":2429},{},[],{"type":31,"value":2431},"\nプレーヤーである魔法使いが、次々と現れる魔物（日本語訳）に対して呪文（英単語）を発音し、スペルが合っていれば呪いを解除して人間にもどし、報酬（得点）をゲットするというゲームがよさそうです。",{"type":26,"tag":54,"props":2433,"children":2434},{},[],{"type":26,"tag":27,"props":2436,"children":2437},{},[2438,2440,2445,2447],{"type":31,"value":2439},"spellには呪文という意味もあるので、「",{"type":26,"tag":285,"props":2441,"children":2442},{},[2443],{"type":31,"value":2444},"SPELL QUEST",{"type":31,"value":2446},"（スペルクエスト）」というタイトルにします。",{"type":26,"tag":54,"props":2448,"children":2449},{},[],{"type":26,"tag":27,"props":2451,"children":2452},{},[2453,2455,2460,2462],{"type":31,"value":2454},"　最近覚えたのが、「",{"type":26,"tag":285,"props":2456,"children":2457},{},[2458],{"type":31,"value":2459},"確率つき",{"type":31,"value":2461},"」のアイディア出しです。これは簡単なのに効果的でおすすめです。　→ ",{"type":26,"tag":42,"props":2463,"children":2466},{"href":2464,"rel":2465},"https:\u002F\u002Fnazology.kusuguru.co.jp\u002Farchives\u002F187383",[734],[2467],{"type":31,"value":2468},"🔗スタンフォード大学の研究から「その確率も教えて」でAIが覚醒すると判明",{"type":26,"tag":54,"props":2470,"children":2471},{},[],{"type":26,"tag":90,"props":2473,"children":2475},{"id":2474},"spell-quest-への改造開始",[2476],{"type":31,"value":2477},"SPELL QUEST への改造開始",{"type":26,"tag":27,"props":2479,"children":2480},{},[2481],{"type":31,"value":2482},"　何百語もの英単語＆日本語訳を読み込むとなると、HTML内に直書きして変数に代入するのは現実的ではありません。かといってバックエンドの知識が必要なデータベース構築もたいへんです。JSONファイルを読み込むのがよいでしょう。",{"type":26,"tag":179,"props":2484,"children":2486},{"className":2485},[182],[2487,2488,2497],{"type":31,"value":185},{"type":26,"tag":179,"props":2489,"children":2491},{"className":2490},[189],[2492,2493,2496],{"type":31,"value":192},{"type":26,"tag":69,"props":2494,"children":2495},{"src":195,"alt":196,"width":197},[],{"type":31,"value":192},{"type":31,"value":2498},"\n@C:\\nuxt●\\～～\\jisshu\\tango1.csv\nをもとにして、JavaScriptから読み込んで使うためのJSONファイルを作り、同じフォルダに保存してください。\n",{"type":26,"tag":27,"props":2500,"children":2501},{},[2502],{"type":26,"tag":380,"props":2503,"children":2505},{"className":2504},[],[2506],{"type":31,"value":2507},"[   {     \"en\": \"always\",     \"ja\": \"いつも\"   },   {     \"en\": \"breakfast\",     \"ja\": \"朝食\"   },       ：：：：：   {     \"en\": \"junior\",     \"ja\": \"年下の、下級の\"   } ]",{"type":26,"tag":27,"props":2509,"children":2510},{},[2511],{"type":31,"value":2512},"というJSONファイルが作られていましたが、ちょっと冗長で使いづらそうです。",{"type":26,"tag":27,"props":2514,"children":2515},{},[2516],{"type":31,"value":2517},"　やはり、ゴールから逆算してリクエストすべきでした。",{"type":26,"tag":179,"props":2519,"children":2521},{"className":2520},[182],[2522,2523,2532,2534,2537,2539,2542,2544,2547,2549,2552,2555],{"type":31,"value":185},{"type":26,"tag":179,"props":2524,"children":2526},{"className":2525},[189],[2527,2528,2531],{"type":31,"value":192},{"type":26,"tag":69,"props":2529,"children":2530},{"src":195,"alt":196,"width":197},[],{"type":31,"value":192},{"type":31,"value":2533},"\nfetch()でJSONを読み込んだあと、Object.entries()で\n[['always','いつも'],['breakfast','朝食'],…,['junior','年下の、下級の']]",{"type":26,"tag":54,"props":2535,"children":2536},{},[],{"type":31,"value":2538},"\nという二次元配列に変換して使う予定です。",{"type":26,"tag":54,"props":2540,"children":2541},{},[],{"type":31,"value":2543},"\nこのような処理をやりやすくするためのJSONファイルを作り、同じフォルダに保存してください。",{"type":26,"tag":54,"props":2545,"children":2546},{},[],{"type":31,"value":2548},"\nちなみに、英単語は同じものは二度と出てこないので、オブジェクトのキーに使えます。",{"type":26,"tag":54,"props":2550,"children":2551},{},[],{"type":26,"tag":54,"props":2553,"children":2554},{},[],{"type":31,"value":2556},"\nまた、このような処理をするためのJavaScriptコードのサンプルを示してください。\n",{"type":26,"tag":179,"props":2558,"children":2560},{"className":2559},[243],[2561,2562,2571,2573],{"type":31,"value":185},{"type":26,"tag":179,"props":2563,"children":2565},{"className":2564},[189],[2566,2567,2570],{"type":31,"value":192},{"type":26,"tag":69,"props":2568,"children":2569},{"src":253,"alt":254,"width":197},[],{"type":31,"value":192},{"type":31,"value":2572},"\n✦ 承知いたしました。ご要望の形式のJSONファイルを作成し、それを利用するJavaScriptのサンプルコードを提示します。\n",{"type":26,"tag":27,"props":2574,"children":2575},{},[2576,2578,2581,2583,2586],{"type":31,"value":2577},"英単語をキー、日本語訳を値とするオブジェクト形式のJSONファイルを作成し、",{"type":26,"tag":54,"props":2579,"children":2580},{},[],{"type":31,"value":2582},"\nC:\\nuxt●\\～～\\jisshu\\tango1.jsonとして保存します。",{"type":26,"tag":54,"props":2584,"children":2585},{},[],{"type":31,"value":2587},"\nこれにより、Object.entries() を使って効率的に二次元配列へ変換できます。",{"type":26,"tag":375,"props":2589,"children":2594},{"className":2590,"code":2592,"language":2593,"meta":8},[2591],"language-json.ps1","まず、JSONファイルを上書き保存します。\n│     1 {  \n│     2   \"always\": \"いつも\",  \n│     3   \"breakfast\": \"朝食\", \n            ：：：：：\n│    11   \"junior\": \"年下の、下級の\" \n│    12 } \n✦ 新しい形式で tango1.json を保存しました。\n\n  次に、このJSONファイルを読み込んで二次元配列に変換する\n  JavaScriptコードのサンプルを示します。\n\n  1 async function loadAndConvertWords() {\n  2   try {\n  3     \u002F\u002F 1. JSONファイルをfetchで読み込む\n  4     const response = await fetch('tango1.json');\n  5     if (!response.ok) {\n  6       throw new Error(`HTTP error! \n                          status: ${response.status}`);\n  7     }\n  8     const wordObject = await response.json();\n  9\n  10     \u002F\u002F 2. Object.entries()で二次元配列に変換\n  11     const wordPairs = Object.entries(wordObject);\n  12\n  13     \u002F\u002F 3. 結果をコンソールに出力して確認\n  14     console.log(wordPairs);\n  15\n  16     \u002F*\n  17     コンソールへの出力結果：\n  18     [\n  19       [\"always\", \"いつも\"],\n  20       [\"breakfast\", \"朝食\"],\n              ：：：：：\n  28       [\"junior\", \"年下の、下級の\"]\n  29     ]\n  30     *\u002F\n  31\n  32   } catch (error) {\n  33     console.error('データの読み込みまたは\n                          変換に失敗しました:', error);\n  34   }\n  35 }\n  36\n  37 \u002F\u002F 関数を実行\n  38 loadAndConvertWords();\n","json.ps1",[2595],{"type":26,"tag":380,"props":2596,"children":2597},{"__ignoreMap":8},[2598],{"type":31,"value":2592},{"type":26,"tag":27,"props":2600,"children":2601},{},[2602,2604,2610],{"type":31,"value":2603},"これをほとんどそのまま採用し、",{"type":26,"tag":380,"props":2605,"children":2607},{"className":2606},[],[2608],{"type":31,"value":2609},"xjson()",{"type":31,"value":2611}," 関数として組み込んだところ、期待通りに動きました。……感動！！",{"type":26,"tag":27,"props":2613,"children":2614},{},[2615,2617,2623],{"type":31,"value":2616},"　これで、英単語データをCSV形式で作れば、あとの作業（",{"type":26,"tag":380,"props":2618,"children":2620},{"className":2619},[],[2621],{"type":31,"value":2622},"CSV → JSON → 二次元配列",{"type":31,"value":2624},"）はAIに任せられます。",{"type":26,"tag":54,"props":2626,"children":2627},{},[],{"type":26,"tag":90,"props":2629,"children":2631},{"id":2630},"英単語データの作成もaiエージェントで",[2632],{"type":31,"value":2633},"英単語データの作成もAIエージェントで",{"type":26,"tag":27,"props":2635,"children":2636},{},[2637],{"type":31,"value":2638},"　そうなると、英単語データもAIで作れないかと考えてしまいます。",{"type":26,"tag":179,"props":2640,"children":2642},{"className":2641},[182],[2643,2644,2653,2655,2658,2660,2663,2665],{"type":31,"value":185},{"type":26,"tag":179,"props":2645,"children":2647},{"className":2646},[189],[2648,2649,2652],{"type":31,"value":192},{"type":26,"tag":69,"props":2650,"children":2651},{"src":195,"alt":196,"width":197},[],{"type":31,"value":192},{"type":31,"value":2654},"\n高校入試に挑戦する中学生がマスターすべき英単語を",{"type":26,"tag":54,"props":2656,"children":2657},{},[],{"type":31,"value":2659},"\ntango1.csv\nと同じ形式で作成してください。",{"type":26,"tag":54,"props":2661,"children":2662},{},[],{"type":31,"value":2664},"\nただし、以下のものは除外してください。\n",{"type":26,"tag":34,"props":2666,"children":2667},{},[2668,2673,2678],{"type":26,"tag":38,"props":2669,"children":2670},{},[2671],{"type":31,"value":2672},"冠詞、代名詞",{"type":26,"tag":38,"props":2674,"children":2675},{},[2676],{"type":31,"value":2677},"外来語として定着しているもの、固有名詞",{"type":26,"tag":38,"props":2679,"children":2680},{},[2681],{"type":31,"value":2682},"略語、スペースやハイフンが入ったもの（熟語）",{"type":26,"tag":27,"props":2684,"children":2685},{},[2686],{"type":31,"value":2687},"　指示が雑すぎたのか、動詞と形容詞だけで50語作ってくれました。初級・中級・上級のクエストに使えるように指示を追加します。",{"type":26,"tag":179,"props":2689,"children":2691},{"className":2690},[182],[2692,2693,2702,2704,2707,2709,2712,2714,2717],{"type":31,"value":185},{"type":26,"tag":179,"props":2694,"children":2696},{"className":2695},[189],[2697,2698,2701],{"type":31,"value":192},{"type":26,"tag":69,"props":2699,"children":2700},{"src":195,"alt":196,"width":197},[],{"type":31,"value":192},{"type":31,"value":2703},"\n同じような感じで日本の中学生がマスターすべき英単語を",{"type":26,"tag":54,"props":2705,"children":2706},{},[],{"type":31,"value":2708},"\n初級：words1.csv、中級：words2.csv、上級：words3.csv",{"type":26,"tag":54,"props":2710,"children":2711},{},[],{"type":31,"value":2713},"\nそれぞれ100語ずつ重なりなく作成してください。",{"type":26,"tag":54,"props":2715,"children":2716},{},[],{"type":31,"value":2718},"\n品詞については、動詞と形容詞だけでなく、固有名詞以外の名詞、副詞も含めてお願いします。\n",{"type":26,"tag":27,"props":2720,"children":2721},{},[2722],{"type":31,"value":2723},"　「100語ずつ」も勝手に「100語以上」と解釈したのか、級が上がるにつれ雪だるま式に増えています。",{"type":26,"tag":27,"props":2725,"children":2726},{},[2727],{"type":31,"value":2728},"　プロンプトをいじっても限界があると感じたので、作られたCSVファイルに対して操作を加えてもらうことにします。",{"type":26,"tag":179,"props":2730,"children":2732},{"className":2731},[182],[2733,2734,2743,2745,2748,2750,2753,2755,2758,2760,2763],{"type":31,"value":185},{"type":26,"tag":179,"props":2735,"children":2737},{"className":2736},[189],[2738,2739,2742],{"type":31,"value":192},{"type":26,"tag":69,"props":2740,"children":2741},{"src":195,"alt":196,"width":197},[],{"type":31,"value":192},{"type":31,"value":2744},"\nリストアップをありがとうございました。",{"type":26,"tag":54,"props":2746,"children":2747},{},[],{"type":31,"value":2749},"\n上級：words3.csv",{"type":26,"tag":54,"props":2751,"children":2752},{},[],{"type":31,"value":2754},"\nに、初級と中級のものが重なって含まれているので、それらを削除して真に「上級」のリストにし",{"type":26,"tag":54,"props":2756,"children":2757},{},[],{"type":31,"value":2759},"\n@C:\\nuxt●\\～～\\jisshu\\words3.csv",{"type":26,"tag":54,"props":2761,"children":2762},{},[],{"type":31,"value":2764},"\nに上書き保存してください。\n",{"type":26,"tag":27,"props":2766,"children":2767},{},[2768],{"type":31,"value":2769},"、、、どうするのか見ていたら、その場で文字列操作用のPythonプログラムを組んで実行していました。一応、できたようです。",{"type":26,"tag":54,"props":2771,"children":2772},{},[],{"type":26,"tag":90,"props":2774,"children":2776},{"id":2775},"英単語問題作りはけっこうたいへん",[2777],{"type":31,"value":2775},{"type":26,"tag":27,"props":2779,"children":2780},{},[2781],{"type":31,"value":2782},"　英単語と日本語訳が一対一対応していれば簡単なのですが、「多義語」「同義語」「同音異義語」の関係で非常にややこしくなっています。",{"type":26,"tag":27,"props":2784,"children":2785},{},[2786],{"type":31,"value":2787},"　特に、英語は同じ言葉の繰り返しを嫌い、言い換えのための「同義語」をたくさん持っているようです。",{"type":26,"tag":27,"props":2789,"children":2790},{},[2791,2793],{"type":31,"value":2792},"　また、バイ（by,bye,buy）のような「同音異義語」を音声認識させると、特定の一つしか認識されない（この場合はbye）ためゲームが成立しなくなります。　→ ",{"type":26,"tag":42,"props":2794,"children":2797},{"href":2795,"rel":2796},"https:\u002F\u002Fchugakueigo.itgakko.com\u002Fmatome\u002Fdouonigigo.html",[734],[2798],{"type":31,"value":2799},"🔗高校入試対策で覚えておきたい中学英語の同音異義語",{"type":26,"tag":27,"props":2801,"children":2802},{},[2803],{"type":31,"value":2804},"　文脈に依存せず、日本語訳を見て一つの英単語が思い浮かび、発音が認識される、、、そんな「英単語＆日本語訳（複数可）」のペアにしぼりたいものです。",{"type":26,"tag":27,"props":2806,"children":2807},{},[2808],{"type":31,"value":2809},"　もうこうなると今のAIには荷が重いので、手作業となります。CSVファイルはエクセルで読み書きできるので、ソート（並べ替え）を駆使し、Google翻訳で確認しながら、なんとか100語ずつにしぼり込みました。",{"type":26,"tag":179,"props":2811,"children":2813},{"className":2812},[182],[2814,2815,2824,2826,2829,2831,2834,2836,2839],{"type":31,"value":185},{"type":26,"tag":179,"props":2816,"children":2818},{"className":2817},[189],[2819,2820,2823],{"type":31,"value":192},{"type":26,"tag":69,"props":2821,"children":2822},{"src":195,"alt":196,"width":197},[],{"type":31,"value":192},{"type":31,"value":2825},"\nwords1.csv、words2.csv、words3.csvから100語ずつ抜粋して計300語のwordsq.csvを作りました。",{"type":26,"tag":54,"props":2827,"children":2828},{},[],{"type":31,"value":2830},"\nこれをもとにtango1.jsonと同じ形式のJSONファイルを作成し、",{"type":26,"tag":54,"props":2832,"children":2833},{},[],{"type":31,"value":2835},"\n@C:\\nuxt●\\～～\\jisshu\\wordsq.json",{"type":26,"tag":54,"props":2837,"children":2838},{},[],{"type":31,"value":2840},"\nとして保存してください。\n",{"type":26,"tag":27,"props":2842,"children":2843},{},[2844,2846,2852],{"type":31,"value":2845},"　クエストの級を選択したら、100語の中からランダムに10語を選び、アルファベット順に並べて出題する関数を ",{"type":26,"tag":380,"props":2847,"children":2849},{"className":2848},[],[2850],{"type":31,"value":2851},"xquest()",{"type":31,"value":2853}," として追加しました。",{"type":26,"tag":27,"props":2855,"children":2856},{},[2857,2859,2865],{"type":31,"value":2858},"　また、",{"type":26,"tag":380,"props":2860,"children":2862},{"className":2861},[],[2863],{"type":31,"value":2864},"xhear()",{"type":31,"value":2866}," 関数にも次のような改良を加えました。",{"type":26,"tag":34,"props":2868,"children":2869},{},[2870,2883],{"type":26,"tag":38,"props":2871,"children":2872},{},[2873,2875,2881],{"type":31,"value":2874},"発音した通りに認識されなかったら",{"type":26,"tag":380,"props":2876,"children":2878},{"className":2877},[],[2879],{"type":31,"value":2880},"[キャンセル]",{"type":31,"value":2882},"し、すぐに発音をやり直す。",{"type":26,"tag":38,"props":2884,"children":2885},{},[2886],{"type":31,"value":2887},"スペルが正しくないときの判定結果に、「どれくらい惜しいか」という類似度（%）を表示。",{"type":26,"tag":27,"props":2889,"children":2890},{},[2891],{"type":31,"value":2892},"　アルファベット順であることと類似度をヒントに「同義語」「類義語」の中から正解にたどりつきやすくなるでしょう。",{"type":26,"tag":27,"props":2894,"children":2895},{},[2896,2898,2904,2906],{"type":31,"value":2897},"　ちなみに、　類似度の計算手法は何種類もあり、自分で（AIで）JavaScriptで組んでもよかったのですが、公開されているライブラリ ",{"type":26,"tag":380,"props":2899,"children":2901},{"className":2900},[],[2902],{"type":31,"value":2903},"string-similarity",{"type":31,"value":2905}," を使うことにしました。 　→ ",{"type":26,"tag":42,"props":2907,"children":2910},{"href":2908,"rel":2909},"https:\u002F\u002Fqiita.com\u002Fkenny-m\u002Fitems\u002F7131669cd5f6f757dffc",[734],[2911],{"type":31,"value":2912},"🔗【JavaScript】文字列検索の手法",{"type":26,"tag":27,"props":2914,"children":2915},{},[2916,2918],{"type":31,"value":2917},"　プログラミングを料理に例えると、「めんつゆ」「顆粒だし」を使ったら手抜き料理になるからすべて手作りで……と考えるようなもので、現実的ではありません。　→ ",{"type":26,"tag":42,"props":2919,"children":2922},{"href":2920,"rel":2921},"https:\u002F\u002Fmagmix.jp\u002Fpost\u002F325864",[734],[2923],{"type":31,"value":2924},"🔗リアルで「じゃあ、あんたが作ってみろよ」と思った瞬間は？",{"type":26,"tag":69,"props":2926,"children":2930},{"src":2927,"alt":2928,"className":2929},"\u002Fimg\u002Fjatsuku.jpg","じゃあ、あんたが作ってみろよ",[802],[],{"type":26,"tag":54,"props":2932,"children":2933},{},[],{"type":26,"tag":90,"props":2935,"children":2937},{"id":2936},"ゲームっぽいデザインに",[2938],{"type":31,"value":2936},{"type":26,"tag":27,"props":2940,"children":2941},{},[2942],{"type":31,"value":2943},"　ゲームの雰囲気を盛り上げるといえば、美しいグラフィックスやサウンドです。学習用の場合、グラフィックスは低刺激に、サウンドはオフにする必要があります。",{"type":26,"tag":27,"props":2945,"children":2946},{},[2947,2948,2954,2956,2963],{"type":31,"value":976},{"type":26,"tag":42,"props":2949,"children":2951},{"href":2950},"\u002Farticles\u002Ftechnolojiya-10#mapcustom",[2952],{"type":31,"value":2953},"🔗(万博)つじさんマップを自分用にカスタマイズ",{"type":31,"value":2955}," で味をしめた",{"type":26,"tag":42,"props":2957,"children":2960},{"href":2958,"rel":2959},"https:\u002F\u002Flets-emoji.com\u002F",[734],[2961],{"type":31,"value":2962},"🔗絵文字",{"type":31,"value":2964}," を活用することにしました。",{"type":26,"tag":179,"props":2966,"children":2968},{"className":2967},[182],[2969,2970,2979],{"type":31,"value":185},{"type":26,"tag":179,"props":2971,"children":2973},{"className":2972},[189],[2974,2975,2978],{"type":31,"value":192},{"type":26,"tag":69,"props":2976,"children":2977},{"src":195,"alt":196,"width":197},[],{"type":31,"value":192},{"type":26,"tag":27,"props":2980,"children":2981},{},[2982,2984,2988,2990],{"type":31,"value":2983},"「",{"type":26,"tag":285,"props":2985,"children":2986},{},[2987],{"type":31,"value":2444},{"type":31,"value":2989},"（スペルクエスト）」に使えそうな絵文字を探しています。次のもののほかによさそうなもの（魔物・人間・魔法・報酬）があれば、教えてください……",{"type":26,"tag":54,"props":2991,"children":2992},{},[],{"type":26,"tag":27,"props":2994,"children":2995},{},[2996],{"type":31,"value":2997},"　報酬は、銅🥉・銀🥈・金🥇のメダルとし、",{"type":26,"tag":27,"props":2999,"children":3000},{},[3001,3003,3009],{"type":31,"value":3002},"魔物 → 人間 の変化は、",{"type":26,"tag":380,"props":3004,"children":3006},{"className":3005},[],[3007],{"type":31,"value":3008},"xkk=[['🐛','👶'],['🪰','👦'],['🕷️','👧'],……",{"type":31,"value":3010},"　という二次元配列としてクエスト分そろえました。画像ファイルでやるよりはるかに楽です。",{"type":26,"tag":27,"props":3012,"children":3013},{},[3014],{"type":31,"value":3015},"　オープニング画面も絵文字を並べて作りましたが、言いたいことは伝えられそうです。",{"type":26,"tag":27,"props":3017,"children":3018},{},[3019],{"type":31,"value":3020},"　あとは、「動き」がほしいところです。",{"type":26,"tag":27,"props":3022,"children":3023},{},[3024],{"type":31,"value":3025},"　アニメGIF でもよいのですが、調整のしやすさを考えて、",{"type":26,"tag":34,"props":3027,"children":3028},{},[3029,3048],{"type":26,"tag":38,"props":3030,"children":3031},{},[3032,3038,3040,3046],{"type":26,"tag":380,"props":3033,"children":3035},{"className":3034},[],[3036],{"type":31,"value":3037},"anime.js",{"type":31,"value":3039}," を呼び出す ",{"type":26,"tag":380,"props":3041,"children":3043},{"className":3042},[],[3044],{"type":31,"value":3045},"xanim(obj,ループ回数)",{"type":31,"value":3047}," 関数",{"type":26,"tag":38,"props":3049,"children":3050},{},[3051],{"type":31,"value":3052},"SVGアニメーション（SMIL）",{"type":26,"tag":27,"props":3054,"children":3055},{},[3056],{"type":31,"value":3057},"の二つを使いました。",{"type":26,"tag":27,"props":3059,"children":3060},{},[3061,3062,3067,3069,3075],{"type":31,"value":976},{"type":26,"tag":380,"props":3063,"children":3065},{"className":3064},[],[3066],{"type":31,"value":3037},{"type":31,"value":3068}," の ",{"type":26,"tag":380,"props":3070,"children":3072},{"className":3071},[],[3073],{"type":31,"value":3074},"loop",{"type":31,"value":3076}," がうまく機能しないので、ループ回数を受け取るようにしました。",{"type":26,"tag":27,"props":3078,"children":3079},{},[3080],{"type":31,"value":3081},"　SVGは、HTML内に埋め込めるので便利です。中学生曰く、「魔法が放射されている」と見えるようです。",{"type":26,"tag":3083,"props":3084,"children":3088},"svg",{"xmlns":3085,"viewBox":3086,"preserveAspectRatio":3087},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","-11 0 90 7","none",[3089],{"type":26,"tag":3090,"props":3091,"children":3095},"path",{"fill":3092,"id":3093,"d":3094},"#ffff00","wave1","M100,10H0V9C49.83,9,50,2,100,2v8Z",[3096],{"type":26,"tag":3097,"props":3098,"children":3104},"animate",{"attributeType":3099,"attributeName":3100,"dur":3101,"repeatCount":3102,"values":3103},"XML","d","1s","indefinite","\n M100,10H0V9C49.83,9,50,2,100,2v8Z;\n M100,10H0V5.5C50,10,50,10,100,5.5V10Z;\n M100,10H0V2C49.83,2,50,9,100,9v1Z;\n M100,10H0V5.58C50.08,0,50.08,0,100,5.5V10Z;\n M100,10H0V9C49.83,9,50,2,100,2v8Z\n ",[],{"type":26,"tag":27,"props":3106,"children":3107},{},[3108,3110,3115,3117],{"type":31,"value":3109},"　ちなみに、プログラムというのは書いて終わりではありません。「推敲・校正」にあたる ",{"type":26,"tag":285,"props":3111,"children":3112},{},[3113],{"type":31,"value":3114},"デバッグ",{"type":31,"value":3116}," が延々と続くのです。",{"type":26,"tag":54,"props":3118,"children":3120},{"id":3119},"spellquest",[],{"type":26,"tag":34,"props":3122,"children":3123},{},[3124],{"type":26,"tag":38,"props":3125,"children":3126},{},[3127],{"type":26,"tag":42,"props":3128,"children":3131},{"href":3129,"rel":3130},"https:\u002F\u002Fics.media\u002Fentry\u002F190517\u002F",[734],[3132],{"type":31,"value":3133},"🔗ChromeのデベロッパーツールでJavaScriptをデバッグする方法",{"type":26,"tag":27,"props":3135,"children":3136},{},[3137],{"type":31,"value":3138},"にいつも助けられています。",{"type":26,"tag":27,"props":3140,"children":3141},{},[3142,3147],{"type":26,"tag":69,"props":3143,"children":3146},{"src":3144,"alt":3145,"width":472},"\u002Fimg\u002Fspellquestdev1.jpg","スペルクエスト開発中",[],{"type":26,"tag":54,"props":3148,"children":3149},{},[],{"type":26,"tag":54,"props":3151,"children":3152},{},[],{"type":26,"tag":90,"props":3154,"children":3156},{"id":3155},"まとめaiエージェントでちょっとだけハッカーになれアプリを改造できた",[3157],{"type":31,"value":3158},"（まとめ）AIエージェントで「ちょっとだけハッカー」になれ、アプリを改造できた",{"type":26,"tag":34,"props":3160,"children":3161},{},[3162],{"type":26,"tag":38,"props":3163,"children":3164},{},[3165,3167],{"type":31,"value":3166},"→ ",{"type":26,"tag":42,"props":3168,"children":3171},{"href":3169,"rel":3170},"https:\u002F\u002Fkyodx.com\u002Fjisshu\u002Fspellquest.html",[734],[3172,3174,3178],{"type":31,"value":3173},"🔗「英単語ゲーム ",{"type":26,"tag":285,"props":3175,"children":3176},{},[3177],{"type":31,"value":2444},{"type":31,"value":3179},"」",{"type":26,"tag":69,"props":3181,"children":3184},{"src":3182,"alt":3183,"width":472},"\u002Fimg\u002Fspellquest3.jpg","スペルクエストプレイ中",[],{"type":26,"tag":27,"props":3186,"children":3187},{},[3188,3190,3196,3198,3204,3206,3212],{"type":31,"value":3189},"※ 内蔵マイクだと音声認識が弱いときは、",{"type":26,"tag":42,"props":3191,"children":3193},{"href":3192},"#dungzduz",[3194],{"type":31,"value":3195},"🔗小型USBマイク",{"type":31,"value":3197}," ← ",{"type":26,"tag":42,"props":3199,"children":3201},{"href":3200},"#usbcadapter",[3202],{"type":31,"value":3203},"🔗USB-Cアダプター",{"type":31,"value":3205},"　← ",{"type":26,"tag":42,"props":3207,"children":3209},{"href":3208},"#lpoiejun",[3210],{"type":31,"value":3211},"🔗USB-C延長ケーブル",{"type":31,"value":3213}," ← タブレット のように接続",{"type":26,"tag":54,"props":3215,"children":3216},{},[],{"type":26,"tag":27,"props":3218,"children":3219},{},[3220,3222],{"type":31,"value":3221},"　「英単語の学習」については、さまざまな意見があるようです。　→ ",{"type":26,"tag":42,"props":3223,"children":3226},{"href":3224,"rel":3225},"https:\u002F\u002Fwww.asahi.com\u002Farticles\u002FASTC74J0JTC7OXIE002M.html#:~:text=%E5%8D%98%E8%AA%9E%E5%AD%A6%E7%BF%92%E3%82%92%E5%85%88%E8%A1%8C%E3%81%97%E3%81%9F,%E5%8F%AF%E8%83%BD%E6%80%A7%E3%81%8C%E3%81%82%E3%82%8B%E3%81%A8%E3%81%84%E3%81%86%E3%80%82",[734],[3227],{"type":31,"value":3228},"🔗単語か会話か、英語学習どっちから？　富山大教授ら「効果に違い」",{"type":26,"tag":27,"props":3230,"children":3231},{},[3232],{"type":31,"value":3233},"　「このアプリはやさしすぎる」と思われる方も多いでしょう。しかし、ハダノが中学生と接してきた経験からすると、英語が苦手な生徒は高校受験直前であっても「初級クエスト」さえクリアできません。",{"type":26,"tag":27,"props":3235,"children":3236},{},[3237,3238,3245],{"type":31,"value":976},{"type":26,"tag":42,"props":3239,"children":3242},{"href":3240,"rel":3241},"https:\u002F\u002Fwww.uta-net.com\u002Fsong\u002F231967\u002F",[734],[3243],{"type":31,"value":3244},"🔗セカオワのRAIN",{"type":31,"value":3246}," は歌えるのに、「雨」の英単語が出てきません。「雨の日に着るのは、何コートかな？」と聞いてやっと出てきます。",{"type":26,"tag":27,"props":3248,"children":3249},{},[3250,3251,3258],{"type":31,"value":976},{"type":26,"tag":42,"props":3252,"children":3255},{"href":3253,"rel":3254},"https:\u002F\u002Fwww.uta-net.com\u002Fsong\u002F9951\u002F",[734],[3256],{"type":31,"value":3257},"🔗めざせポケモンマスター",{"type":31,"value":3259}," は歌えるのに、「町」の英単語が出てきません。「シティじゃない方だよ」と言ってもなかなか出ません。",{"type":26,"tag":27,"props":3261,"children":3262},{},[3263],{"type":31,"value":3264},"　生活の中に英語が浸透し、アニメやゲームの中でもたくさん使われているのに、まったく結びついていない生徒がいるのが実態です。「詰め込み教育はよくない」などという前に基礎基本について再考すべきかと思います。",{"type":26,"tag":69,"props":3266,"children":3270},{"src":3267,"alt":3268,"className":3269},"\u002Fimg\u002Ftangojhs.jpg","アニメやゲームなどでたくさんの英単語に囲まれている中学生たち",[74],[],{"type":26,"tag":27,"props":3272,"children":3273},{},[3274,3276],{"type":31,"value":3275},"　ハダノ自身は、小学校高学年のときにローマ字習得に苦労しました。当時の教科書が、「文の中で理解させる」方法をとっていたためです。あるとき、五十音表を目にして法則に気づいたら、簡単に読み書きできるようになりました。高校時代も英単語を語源に分解して覚えるようにしたら、たくさん覚えられました。　→ ",{"type":26,"tag":42,"props":3277,"children":3280},{"href":3278,"rel":3279},"https:\u002F\u002Fisseisuzuki.org\u002Fprejudice\u002F",[734],[3281],{"type":31,"value":3282},"🔗prejudiceの意味をわかりやすく説明　一夜漬け英単語記憶術　語源",{"type":26,"tag":27,"props":3284,"children":3285},{},[3286],{"type":31,"value":3287},"　学習者のレベルや学び方に対応した教育でありたいものです。そういう意味では、学習アプリの手作りも有効な手段と言えるでしょう。",{"type":26,"tag":54,"props":3289,"children":3290},{},[],{"type":26,"tag":27,"props":3292,"children":3293},{},[3294],{"type":31,"value":3295},"　「AIエージェントを使ったプログラミング」についても、さまざまな意見があります。",{"type":26,"tag":34,"props":3297,"children":3298},{},[3299,3309,3319],{"type":26,"tag":38,"props":3300,"children":3301},{},[3302],{"type":26,"tag":42,"props":3303,"children":3306},{"href":3304,"rel":3305},"https:\u002F\u002Fqiita.com\u002FmonsoonTropicalBird\u002Fitems\u002F1d5a6257808ff7871bf0",[734],[3307],{"type":31,"value":3308},"🔗AIがプログラマを滅ぼすというのは、幻想やったかもしれん",{"type":26,"tag":38,"props":3310,"children":3311},{},[3312],{"type":26,"tag":42,"props":3313,"children":3316},{"href":3314,"rel":3315},"https:\u002F\u002Fzenn.dev\u002Fsatto_workspace\u002Farticles\u002Fa12faf6131ac4e",[734],[3317],{"type":31,"value":3318},"🔗わいの生成AIがカスコードばっか出してくるんやが",{"type":26,"tag":38,"props":3320,"children":3321},{},[3322,3329],{"type":26,"tag":42,"props":3323,"children":3326},{"href":3324,"rel":3325},"https:\u002F\u002Fatmarkit.itmedia.co.jp\u002Fait\u002Farticles\u002F2510\u002F20\u002Fnews030.html",[734],[3327],{"type":31,"value":3328},"🔗世界の開発者に聞いた「AIに任せられるタスク、任せられないタスク」",{"type":31,"value":3330},"\n、、、要するに、「AIに丸投げはダメ」ということです。",{"type":26,"tag":27,"props":3332,"children":3333},{},[3334,3336,3343],{"type":31,"value":3335},"　さしずめ、Eカプセル を飲んで、",{"type":26,"tag":42,"props":3337,"children":3340},{"href":3338,"rel":3339},"https:\u002F\u002Fwww.tv-asahi.co.jp\u002Fchottodake_esper\u002F",[734],[3341],{"type":31,"value":3342},"🔗「ちょっとだけエスパー」",{"type":31,"value":3344}," になれるようなものです。",{"type":26,"tag":69,"props":3346,"children":3351},{"src":3347,"alt":3348,"className":3349},"\u002Fimg\u002Fbitesper.jpg","ちょっとだけエスパー",[3350],"imghl",[],{"type":26,"tag":27,"props":3353,"children":3354},{},[3355],{"type":31,"value":3356},"　AIエージェント を使って、「ちょっとだけハッカー」になれますが、学習は欠かせません。AIが進化してゆき、",{"type":26,"tag":34,"props":3358,"children":3359},{},[3360],{"type":26,"tag":38,"props":3361,"children":3362},{},[3363],{"type":26,"tag":42,"props":3364,"children":3367},{"href":3365,"rel":3366},"https:\u002F\u002Fnote.com\u002Fihayato\u002Fn\u002Fn7e3cb271f96c",[734],[3368],{"type":31,"value":3369},"🔗【業務命令】今すぐ「Antigravity」をインストールして、バイブコーディングを始めよ！",{"type":26,"tag":27,"props":3371,"children":3372},{},[3373],{"type":31,"value":3374},"　という風に開発スタイルは変わっていくでしょうが、プログラミング知識が完全に不要になることはないでしょう。",{"type":26,"tag":27,"props":3376,"children":3377},{},[3378,3380,3385,3387,3393,3395,3401,3403],{"type":31,"value":3379},"　そもそも、今回の ",{"type":26,"tag":380,"props":3381,"children":3383},{"className":3382},[],[3384],{"type":31,"value":2609},{"type":31,"value":3386}," 関数の『",{"type":26,"tag":380,"props":3388,"children":3390},{"className":3389},[],[3391],{"type":31,"value":3392},"fetch()",{"type":31,"value":3394},"でJSONを読み込んだあと、",{"type":26,"tag":380,"props":3396,"children":3398},{"className":3397},[],[3399],{"type":31,"value":3400},"Object.entries()",{"type":31,"value":3402},"で二次元配列に変換してください』などは、書籍で学んだからこそ出せた指示なのです。　→ ",{"type":26,"tag":42,"props":3404,"children":3406},{"href":3405},"\u002Farticles\u002Fsocsaga-1#js278",[3407],{"type":31,"value":3408},"🔗JavaScriptコードレシピ集 スグに使えるテクニック278",{"type":26,"tag":69,"props":3410,"children":3412},{"src":799,"alt":800,"className":3411},[802],[],{"type":26,"tag":54,"props":3414,"children":3415},{},[],{"type":26,"tag":27,"props":3417,"children":3418},{},[3419],{"type":31,"value":3420},"　また、今回の件で「分断」についても考えさせられました。",{"type":26,"tag":34,"props":3422,"children":3423},{},[3424],{"type":26,"tag":38,"props":3425,"children":3426},{},[3427],{"type":26,"tag":42,"props":3428,"children":3431},{"href":3429,"rel":3430},"https:\u002F\u002Fplay.rakuten.co.jp\u002Farticle\u002F1300",[734],[3432],{"type":31,"value":3433},"🔗話題作「じゃあ、あんたが作ってみろよ」から得た気づき",{"type":26,"tag":27,"props":3435,"children":3436},{},[3437],{"type":31,"value":3438},"で述べられているように、何かを生み出す「作り手」の苦悩と、それを安易に批判する「受け手」の無責任さ……これは、さまざまな分野で見られます。",{"type":26,"tag":27,"props":3440,"children":3441},{},[3442],{"type":31,"value":3443},"　総じて日本では、「現場で手を動かす人」が軽んじられているように感じます。",{"type":26,"tag":34,"props":3445,"children":3446},{},[3447],{"type":26,"tag":38,"props":3448,"children":3449},{},[3450],{"type":26,"tag":42,"props":3451,"children":3454},{"href":3452,"rel":3453},"https:\u002F\u002Fwww.karasawanouki.co.jp\u002Fblog\u002Fkk20251105\u002F",[734],[3455],{"type":31,"value":3456},"🔗アメリカ、ブルーカラービリオネアの時代に。日本企業も大卒者よりも工業高校卒に熱い視線！AI時代に選ぶべき職業とは？",{"type":26,"tag":27,"props":3458,"children":3459},{},[3460],{"type":31,"value":3461},"を読むと、なるほどと思います。しかし、日本独特の雇用スタイル（新卒一括採用・年功序列・配置転換・終身雇用・退職金）が変わらなければ、専門的スキル人材は非正規・下請けで低待遇のままでしょう。熊対策一つ見ても、長期的視点での人材育成ができていないのが日本です。",{"type":26,"tag":27,"props":3463,"children":3464},{},[3465,3467],{"type":31,"value":3466},"　「人事・予算をにぎっている既得権益層が、現場に無理難題を押し付ける」構図を変えるには、",{"type":26,"tag":54,"props":3468,"children":3469},{},[],{"type":26,"tag":179,"props":3471,"children":3473},{"style":3472},"text-align: center; font-size: larger;",[3474],{"type":26,"tag":27,"props":3475,"children":3476},{},[3477,3478,3482],{"type":31,"value":2983},{"type":26,"tag":285,"props":3479,"children":3480},{},[3481],{"type":31,"value":2928},{"type":31,"value":3179},{"type":26,"tag":69,"props":3484,"children":3487},{"src":3485,"alt":2928,"className":3486},"\u002Fimg\u002Fmakeityourself.jpg",[74],[],{"type":26,"tag":34,"props":3489,"children":3490},{},[3491],{"type":26,"tag":38,"props":3492,"children":3493},{},[3494],{"type":26,"tag":42,"props":3495,"children":3498},{"href":3496,"rel":3497},"https:\u002F\u002Fbiz.kddi.com\u002Fcontent\u002Fglossary\u002Fh\u002Fhacker\u002F",[734],[3499],{"type":31,"value":3500},"🔗ハッカーとは？意味・用語説明",{"type":26,"tag":27,"props":3502,"children":3503},{},[3504],{"type":31,"value":3505},"によれば、",{"type":26,"tag":27,"props":3507,"children":3508},{},[3509],{"type":26,"tag":380,"props":3510,"children":3512},{"className":3511},[],[3513],{"type":31,"value":3514},"ハッカーとは、コンピューターシステムやネットワークを探索し、操作する技術者のことを指します。ハッカーは、通常、高度なコンピューティングスキルを持ち、システムの動作を理解し、それを操作する能力を持っています。",{"type":26,"tag":27,"props":3516,"children":3517},{},[3518],{"type":31,"value":3519},"、、、ということですが、正しく理解されていません。",{"type":26,"tag":27,"props":3521,"children":3522},{},[3523],{"type":31,"value":3524},"　「天才ハッカー」を別にすると、「ハッカー＝悪人」と見なされています（本当はクラッカー＝破壊者）。",{"type":26,"tag":27,"props":3526,"children":3527},{},[3528,3530],{"type":31,"value":3529},"　発展形として「ライフハック（日常生活や仕事の効率化を図る工夫）」も広く使われるようになってきたのに残念です。 → ",{"type":26,"tag":42,"props":3531,"children":3533},{"href":3532},"#mindhacks",[3534],{"type":31,"value":3535},"🔗マインドハックス勉強法",{"type":26,"tag":27,"props":3537,"children":3538},{},[3539],{"type":31,"value":3540},"　コンピューターシステムに限らず、ハッキング（しくみを知って工夫すること）は、仕事や生活の質を向上させるのに役立ちます。",{"type":26,"tag":54,"props":3542,"children":3543},{},[],{"type":26,"tag":27,"props":3545,"children":3546},{},[3547],{"type":31,"value":3548},"　AIエージェントがプログラミングのハードルを下げ、システム技術者と利用者との「分断」を解消してゆくことを期待しつつ、",{"type":26,"tag":179,"props":3550,"children":3551},{"style":3472},[3552],{"type":26,"tag":27,"props":3553,"children":3554},{},[3555,3556,3560],{"type":31,"value":2983},{"type":26,"tag":285,"props":3557,"children":3558},{},[3559],{"type":31,"value":800},{"type":31,"value":3179},{"type":26,"tag":27,"props":3562,"children":3563},{},[3564],{"type":31,"value":3565},"になってみようと思います。",{"type":26,"tag":27,"props":3567,"children":3568},{},[3569,3572],{"type":26,"tag":69,"props":3570,"children":3571},{"src":799,"alt":800,"width":472},[],{"type":26,"tag":54,"props":3573,"children":3574},{},[],{"type":26,"tag":54,"props":3576,"children":3578},{"id":3577},"dungzduz",[],{"type":26,"tag":179,"props":3580,"children":3582},{"className":3581},[1207],[3583,3584,3597,3598],{"type":31,"value":1210},{"type":26,"tag":179,"props":3585,"children":3587},{"className":3586},[1214],[3588],{"type":26,"tag":42,"props":3589,"children":3592},{"target":1218,"rel":3590,"href":3591},[1220],"https:\u002F\u002Fhb.afl.rakuten.co.jp\u002Fichiba\u002F4e6e3273.b9466c14.4e6e3274.9cb62d84\u002F_RTLink57026?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fnovolstore%2Fcfki6nxphbvaqxw74ucpw7rolq%2F&link_type=hybrid_url&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJyaWdodCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MSwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjEsInByb2QiOjAsImFtcCI6ZmFsc2V9",[3593],{"type":26,"tag":69,"props":3594,"children":3596},{"src":3595},"https:\u002F\u002Fthumbnail.image.rakuten.co.jp\u002F@0_mall\u002Fnovolstore\u002Fcabinet\u002F11933359\u002F28295605_0.jpg?_ex=240x240",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":3599,"children":3601},{"className":3600},[1231],[3602,3603,3613,3614,3633,3634,3671],{"type":31,"value":1234},{"type":26,"tag":179,"props":3604,"children":3606},{"className":3605},[1238],[3607],{"type":26,"tag":42,"props":3608,"children":3610},{"target":1218,"rel":3609,"href":3591},[1220],[3611],{"type":31,"value":3612},"DUNGZDUZ USB Microphone 高ゲイン、コードレスミニサイズ、仕事や学習に最適",{"type":31,"value":1234},{"type":26,"tag":179,"props":3615,"children":3617},{"className":3616},[1250],[3618,3621,3623,3626,3628,3631],{"type":26,"tag":54,"props":3619,"children":3620},{},[],{"type":31,"value":3622},"※ 一般に内蔵マイクの性能は十分ではありません。",{"type":26,"tag":54,"props":3624,"children":3625},{},[],{"type":31,"value":3627},"ハダノはビデオ会議のときは、イヤホンに付属のマイクを使っていますが、マイクだけ使うときはじゃまです。",{"type":26,"tag":54,"props":3629,"children":3630},{},[],{"type":31,"value":3632},"この製品は、小型・高感度・高コスパで一つ持っておくと役に立ちます。",{"type":31,"value":1234},{"type":26,"tag":179,"props":3635,"children":3637},{"className":3636},[1266,1267],[3638,3639,3648,3649,3659,3660,3670],{"type":31,"value":1270},{"type":26,"tag":179,"props":3640,"children":3641},{},[3642],{"type":26,"tag":42,"props":3643,"children":3646},{"className":3644,"target":1218,"rel":3645,"href":3591},[1277,1278],[1220],[3647],{"type":31,"value":1282},{"type":31,"value":1284},{"type":26,"tag":179,"props":3650,"children":3651},{},[3652],{"type":26,"tag":42,"props":3653,"children":3657},{"className":3654,"target":1218,"rel":3655,"href":3656},[1277,1291],[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0CNVZ27YH",[3658],{"type":31,"value":1296},{"type":31,"value":1284},{"type":26,"tag":179,"props":3661,"children":3662},{},[3663],{"type":26,"tag":42,"props":3664,"children":3668},{"className":3665,"target":1218,"rel":3666,"href":3667},[1277,1304],[1220],"https:\u002F\u002Fck.jp.ap.valuecommerce.com\u002Fservlet\u002Freferral?sid=3651993&pid=887947441&vc_url=https%3A%2F%2Fstore.shopping.yahoo.co.jp%2Fchansuaa%2F49077870589.html%3Fsc_i%3Dshopping-pc-web-result-item-rsltlst-title",[3669],{"type":31,"value":1309},{"type":31,"value":1234},{"type":31,"value":1210},{"type":26,"tag":54,"props":3673,"children":3675},{"id":3674},"usbcadapter",[],{"type":26,"tag":179,"props":3677,"children":3679},{"className":3678},[1207],[3680,3681,3694,3695],{"type":31,"value":1210},{"type":26,"tag":179,"props":3682,"children":3684},{"className":3683},[1214],[3685],{"type":26,"tag":42,"props":3686,"children":3689},{"target":1218,"rel":3687,"href":3688},[1220],"https:\u002F\u002Fhb.afl.rakuten.co.jp\u002Fichiba\u002F1c31a7e9.545b2c08.1c31a7ea.d83a8f7a\u002F_RTLink57026?pc=https%3A%2F%2Fproduct.rakuten.co.jp%2Fproduct%2F-%2Fe7699c2d6f58730632d3edbdfb0706fd%2F&link_type=hybrid_url&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJyaWdodCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MSwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjEsInByb2QiOjEsImFtcCI6ZmFsc2V9",[3690],{"type":26,"tag":69,"props":3691,"children":3693},{"src":3692},"https:\u002F\u002Fthumbnail.image.rakuten.co.jp\u002F@0_mall\u002Fanker\u002Fcabinet\u002Famazon\u002Fb87310a1.jpg?_ex=240x240",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":3696,"children":3698},{"className":3697},[1231],[3699,3700,3710,3711,3730,3731,3768],{"type":31,"value":1234},{"type":26,"tag":179,"props":3701,"children":3703},{"className":3702},[1238],[3704],{"type":26,"tag":42,"props":3705,"children":3707},{"target":1218,"rel":3706,"href":3688},[1220],[3708],{"type":31,"value":3709},"Anker USB-C & USB 3.0 変換アダプタ 2個セット",{"type":31,"value":1234},{"type":26,"tag":179,"props":3712,"children":3714},{"className":3713},[1250],[3715,3718,3720,3723,3725,3728],{"type":26,"tag":54,"props":3716,"children":3717},{},[],{"type":31,"value":3719},"※ USBのType-CをType-Aに変換するアダプタの2個セットです。",{"type":26,"tag":54,"props":3721,"children":3722},{},[],{"type":31,"value":3724},"コネクタ部分は、抜き差しの繰り返しによってこわれやすいものですが、Ankerなら安心です。",{"type":26,"tag":54,"props":3726,"children":3727},{},[],{"type":31,"value":3729},"ランプで動作が確認できるのも気に入っています。",{"type":31,"value":1234},{"type":26,"tag":179,"props":3732,"children":3734},{"className":3733},[1266,1267],[3735,3736,3745,3746,3756,3757,3767],{"type":31,"value":1270},{"type":26,"tag":179,"props":3737,"children":3738},{},[3739],{"type":26,"tag":42,"props":3740,"children":3743},{"className":3741,"target":1218,"rel":3742,"href":3688},[1277,1278],[1220],[3744],{"type":31,"value":1282},{"type":31,"value":1284},{"type":26,"tag":179,"props":3747,"children":3748},{},[3749],{"type":26,"tag":42,"props":3750,"children":3754},{"className":3751,"target":1218,"rel":3752,"href":3753},[1277,1291],[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB08JTMYPNW",[3755],{"type":31,"value":1296},{"type":31,"value":1284},{"type":26,"tag":179,"props":3758,"children":3759},{},[3760],{"type":26,"tag":42,"props":3761,"children":3765},{"className":3762,"target":1218,"rel":3763,"href":3764},[1277,1304],[1220],"https:\u002F\u002Fck.jp.ap.valuecommerce.com\u002Fservlet\u002Freferral?sid=3651993&pid=887947441&vc_url=https%3A%2F%2Fstore.shopping.yahoo.co.jp%2Fankerdirect%2Fb8731.html%3Fsc_i%3Dshopping-pc-web-result-item-brd_off-title",[3766],{"type":31,"value":1309},{"type":31,"value":1234},{"type":31,"value":1210},{"type":26,"tag":54,"props":3770,"children":3772},{"id":3771},"lpoiejun",[],{"type":26,"tag":179,"props":3774,"children":3776},{"className":3775},[1207],[3777,3778,3791,3792],{"type":31,"value":1210},{"type":26,"tag":179,"props":3779,"children":3781},{"className":3780},[1214],[3782],{"type":26,"tag":42,"props":3783,"children":3786},{"target":1218,"rel":3784,"href":3785},[1220],"https:\u002F\u002Fhb.afl.rakuten.co.jp\u002Fichiba\u002F4e6e58ec.dd593a7b.4e6e58ed.e4d95d7c\u002F_RTLink57026?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fplays23%2Fb0c7khm23c%2F&link_type=hybrid_url&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJyaWdodCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MSwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjEsInByb2QiOjAsImFtcCI6ZmFsc2V9",[3787],{"type":26,"tag":69,"props":3788,"children":3790},{"src":3789},"https:\u002F\u002Fthumbnail.image.rakuten.co.jp\u002F@0_mall\u002Fplays23\u002Fcabinet\u002Fraku099_0304\u002Fb0c7khm23c00.jpg?_ex=240x240",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":3793,"children":3795},{"className":3794},[1231],[3796,3797,3807,3808,3822,3823,3860],{"type":31,"value":1234},{"type":26,"tag":179,"props":3798,"children":3800},{"className":3799},[1238],[3801],{"type":26,"tag":42,"props":3802,"children":3804},{"target":1218,"rel":3803,"href":3785},[1220],[3805],{"type":31,"value":3806},"USB type C 延長ケーブル 0.5m LpoieJun USB 3.2 Gen2(20Gbps) 高速データ通信",{"type":31,"value":1234},{"type":26,"tag":179,"props":3809,"children":3811},{"className":3810},[1250],[3812,3815,3817,3820],{"type":26,"tag":54,"props":3813,"children":3814},{},[],{"type":31,"value":3816},"※ Type-C延長ケーブルは、規格がシビアなようで、慎重に選ぶ必要があります。",{"type":26,"tag":54,"props":3818,"children":3819},{},[],{"type":31,"value":3821},"これは、太くてしっかりしているのにやわらかく、とても使いやすそうです。",{"type":31,"value":1234},{"type":26,"tag":179,"props":3824,"children":3826},{"className":3825},[1266,1267],[3827,3828,3837,3838,3848,3849,3859],{"type":31,"value":1270},{"type":26,"tag":179,"props":3829,"children":3830},{},[3831],{"type":26,"tag":42,"props":3832,"children":3835},{"className":3833,"target":1218,"rel":3834,"href":3785},[1277,1278],[1220],[3836],{"type":31,"value":1282},{"type":31,"value":1284},{"type":26,"tag":179,"props":3839,"children":3840},{},[3841],{"type":26,"tag":42,"props":3842,"children":3846},{"className":3843,"target":1218,"rel":3844,"href":3845},[1277,1291],[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0DHSH2DM6",[3847],{"type":31,"value":1296},{"type":31,"value":1284},{"type":26,"tag":179,"props":3850,"children":3851},{},[3852],{"type":26,"tag":42,"props":3853,"children":3857},{"className":3854,"target":1218,"rel":3855,"href":3856},[1277,1304],[1220],"https:\u002F\u002Fck.jp.ap.valuecommerce.com\u002Fservlet\u002Freferral?sid=3651993&pid=887947441&vc_url=https%3A%2F%2Fstore.shopping.yahoo.co.jp%2Fshopeevergreen%2F11520240909200113.html%3Fsc_i%3Dshopping-pc-web-result-item-rsltlst-title",[3858],{"type":31,"value":1309},{"type":31,"value":1234},{"type":31,"value":1210},{"type":26,"tag":54,"props":3862,"children":3864},{"id":3863},"mindhacks",[],{"type":26,"tag":179,"props":3866,"children":3868},{"className":3867},[1207],[3869,3870,3883,3884],{"type":31,"value":1210},{"type":26,"tag":179,"props":3871,"children":3873},{"className":3872},[1214],[3874],{"type":26,"tag":42,"props":3875,"children":3878},{"target":1218,"rel":3876,"href":3877},[1220],"https:\u002F\u002Fhb.afl.rakuten.co.jp\u002Fichiba\u002F273236f4.d5f5314b.273236f5.ec66cf8e\u002F_RTLink50200?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Frakutenkobo-ebooks%2F72f787bd5f0733efad7dbc6691edc4f7%2F&link_type=hybrid_url&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJyaWdodCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MSwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjEsInByb2QiOjAsImFtcCI6ZmFsc2V9",[3879],{"type":26,"tag":69,"props":3880,"children":3882},{"src":3881},"https:\u002F\u002Fthumbnail.image.rakuten.co.jp\u002F@0_mall\u002Frakutenkobo-ebooks\u002Fcabinet\u002F9750\u002F2000006139750.jpg?_ex=240x240",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":3885,"children":3887},{"className":3886},[1231],[3888,3889,3899,3900,3919,3920,3957],{"type":31,"value":1234},{"type":26,"tag":179,"props":3890,"children":3892},{"className":3891},[1238],[3893],{"type":26,"tag":42,"props":3894,"children":3896},{"target":1218,"rel":3895,"href":3877},[1220],[3897],{"type":31,"value":3898},"マインドハックス勉強法 脳と心を味方につける【電子書籍】[ 佐々木正悟 ]",{"type":31,"value":1234},{"type":26,"tag":179,"props":3901,"children":3903},{"className":3902},[1250],[3904,3907,3909,3912,3914,3917],{"type":26,"tag":54,"props":3905,"children":3906},{},[],{"type":31,"value":3908},"※ ハダノは、紙の本を2008年に買いました。",{"type":26,"tag":54,"props":3910,"children":3911},{},[],{"type":31,"value":3913},"機器の進歩に合わせて読み替えるべき点はありますが、基本的な考え方は現在でも通用すると思います。",{"type":26,"tag":54,"props":3915,"children":3916},{},[],{"type":31,"value":3918},"「ハック」という手法をなぜみんな使わないのか不思議です。",{"type":31,"value":1234},{"type":26,"tag":179,"props":3921,"children":3923},{"className":3922},[1266,1267],[3924,3925,3934,3935,3945,3946,3956],{"type":31,"value":1270},{"type":26,"tag":179,"props":3926,"children":3927},{},[3928],{"type":26,"tag":42,"props":3929,"children":3932},{"className":3930,"target":1218,"rel":3931,"href":3877},[1277,1278],[1220],[3933],{"type":31,"value":1282},{"type":31,"value":1284},{"type":26,"tag":179,"props":3936,"children":3937},{},[3938],{"type":26,"tag":42,"props":3939,"children":3943},{"className":3940,"target":1218,"rel":3941,"href":3942},[1277,1291],[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0195VHW64",[3944],{"type":31,"value":1296},{"type":31,"value":1284},{"type":26,"tag":179,"props":3947,"children":3948},{},[3949],{"type":26,"tag":42,"props":3950,"children":3954},{"className":3951,"target":1218,"rel":3952,"href":3953},[1277,1304],[1220],"https:\u002F\u002Fck.jp.ap.valuecommerce.com\u002Fservlet\u002Freferral?sid=3651993&pid=887947441&vc_url=https%3A%2F%2Fstore.shopping.yahoo.co.jp%2Fsoftya%2F9784775924204-pan.html%3Fsc_i%3Dshopping-pc-web-result-item-rsltlst-img",[3955],{"type":31,"value":1309},{"type":31,"value":1234},{"type":31,"value":1210},{"type":26,"tag":54,"props":3959,"children":3960},{},[],{"type":26,"tag":319,"props":3962,"children":3963},{},[],{"type":26,"tag":27,"props":3965,"children":3966},{},[3967],{"type":26,"tag":42,"props":3968,"children":3969},{"href":5},[3970],{"type":31,"value":3971},"次へ→　ちょっとだけハッカー2",{"title":8,"searchDepth":324,"depth":324,"links":3973},[3974],{"id":1581,"depth":324,"text":1526,"children":3975},[3976,3977,3978,3979,3980,3981,3982,3983,3984],{"id":1638,"depth":362,"text":1641},{"id":1949,"depth":362,"text":1952},{"id":2029,"depth":362,"text":2032},{"id":2259,"depth":362,"text":2259},{"id":2474,"depth":362,"text":2477},{"id":2630,"depth":362,"text":2633},{"id":2775,"depth":362,"text":2775},{"id":2936,"depth":362,"text":2936},{"id":3155,"depth":362,"text":3158},"content:articles:hacker-1.md","articles\u002Fhacker-1.md","articles\u002Fhacker-1",{"_path":1549,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":3989,"description":3990,"category":3991,"tag":3992,"thumbnail":3994,"createdAt":3995,"updatedAt":3996,"body":3997,"_type":1519,"_id":5412,"_source":1521,"_file":5413,"_stem":5414,"_extension":1524},"ブログのコード修正","AIエージェントはWeb系プログラミングの役に立つか",[12],[1530,1531,14,3993],"teachers-baton","blog-3.jpg","2025\u002F10\u002F5","2024\u002F10\u002F24",{"type":23,"children":3998,"toc":5402},[3999,4004,4016,4021,4026,4032,4035,4041,4053,4058,4063,4077,4082,4103,4108,4113,4134,4137,4143,4148,4171,4182,4194,4208,4211,4216,4227,4232,4243,4248,4260,4271,4283,4288,4306,4311,4316,4319,4325,4330,4353,4374,4377,4398,4419,4425,4430,4435,4448,4453,4456,4462,4475,4713,4718,4731,4736,4739,4745,4750,5067,5072,5077,5082,5092,5098,5103,5116,5121,5124,5130,5135,5140,5153,5158,5176,5181,5184,5196,5201,5206,5211,5214,5219,5224,5229,5252,5257,5263,5268,5273,5276,5281,5286,5291,5295,5388,5391,5394],{"type":26,"tag":27,"props":4000,"children":4001},{},[4002],{"type":31,"value":4003},"　この記事では、",{"type":26,"tag":34,"props":4005,"children":4006},{},[4007],{"type":26,"tag":38,"props":4008,"children":4009},{},[4010],{"type":26,"tag":42,"props":4011,"children":4013},{"href":4012},"\u002Farticles\u002Fblog-2",[4014],{"type":31,"value":4015},"🔗２年前に作ったブログを Vue3+Nuxt3+NuxtContentV2 に移行してみた",{"type":26,"tag":27,"props":4017,"children":4018},{},[4019],{"type":31,"value":4020},"のその後について述べます。",{"type":26,"tag":58,"props":4022,"children":4024},{"id":4023},"aiエージェントはweb系プログラミングの役に立つか",[4025],{"type":31,"value":3990},{"type":26,"tag":69,"props":4027,"children":4031},{"src":4028,"alt":4029,"className":4030},"\u002Fimg\u002Faicodingagent.jpg","AIコーディングエージェント",[74],[],{"type":26,"tag":54,"props":4033,"children":4034},{},[],{"type":26,"tag":90,"props":4036,"children":4038},{"id":4037},"xに投稿しようとしたら画像が表示されないだと",[4039],{"type":31,"value":4040},"Xに投稿しようとしたら画像が表示されないだと？",{"type":26,"tag":34,"props":4042,"children":4043},{},[4044],{"type":26,"tag":38,"props":4045,"children":4046},{},[4047],{"type":26,"tag":42,"props":4048,"children":4050},{"href":4049},"\u002Farticles\u002Ftechnolojiya-10",[4051],{"type":31,"value":4052},"🔗「いのち輝く未来社会」をめざす万博はSDGs学習に役立つか",{"type":26,"tag":27,"props":4054,"children":4055},{},[4056],{"type":31,"value":4057},"のページを旧TwitterのX「教師のバトンプロジェクト」に投稿しようとしましたが、アイキャッチ画像が表示されません。",{"type":26,"tag":27,"props":4059,"children":4060},{},[4061],{"type":31,"value":4062},"　以前は、公式の Card Validator を使うことでTwitterカードをプレビューできていたのに、プレビュー機能がなくなっています。",{"type":26,"tag":27,"props":4064,"children":4065},{},[4066,4068,4075],{"type":31,"value":4067},"　そこで、",{"type":26,"tag":42,"props":4069,"children":4072},{"href":4070,"rel":4071},"https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Ftwitter-card-validator\u002Fehaanihobfkdbiagofmalaljnkhpajmm?hl=ja",[734],[4073],{"type":31,"value":4074},"🔗Twitter Card Validator というchrome拡張機能 ",{"type":31,"value":4076}," をインストールしました。",{"type":26,"tag":69,"props":4078,"children":4081},{"src":4079,"alt":4080,"width":472},"\u002Fimg\u002Fcardvalidator1.jpg","Twitter Card Validatorでプレビュー１",[],{"type":26,"tag":27,"props":4083,"children":4084},{},[4085,4087,4093,4095,4101],{"type":31,"value":4086},"　確かに、アイキャッチ画像の部分は空白で、",{"type":26,"tag":380,"props":4088,"children":4090},{"className":4089},[],[4091],{"type":31,"value":4092},"Data",{"type":31,"value":4094}," を見ると ",{"type":26,"tag":380,"props":4096,"children":4098},{"className":4097},[],[4099],{"type":31,"value":4100},"undefined",{"type":31,"value":4102}," となっています。",{"type":26,"tag":27,"props":4104,"children":4105},{},[4106],{"type":31,"value":4107},"　その後、プラグインをインストールするもかえって悪化し、開発者ツールでオブジェクトの中身を調べながら試行錯誤し、何とか表示されるようにしました。",{"type":26,"tag":69,"props":4109,"children":4112},{"src":4110,"alt":4111,"width":472},"\u002Fimg\u002Fcardvalidator2.jpg","Twitter Card Validatorでプレビュー２",[],{"type":26,"tag":27,"props":4114,"children":4115},{},[4116,4118,4124,4126,4132],{"type":31,"value":4117},"　実際は、",{"type":26,"tag":380,"props":4119,"children":4121},{"className":4120},[],[4122],{"type":31,"value":4123},"og:image",{"type":31,"value":4125}," だけでなく ",{"type":26,"tag":380,"props":4127,"children":4129},{"className":4128},[],[4130],{"type":31,"value":4131},"twitter:image",{"type":31,"value":4133}," も指定する必要がありました。",{"type":26,"tag":54,"props":4135,"children":4136},{},[],{"type":26,"tag":90,"props":4138,"children":4140},{"id":4139},"aiエージェントgemini-cli-にプログラミングを助けてもらう",[4141],{"type":31,"value":4142},"AIエージェント(Gemini CLI) にプログラミングを助けてもらう",{"type":26,"tag":27,"props":4144,"children":4145},{},[4146],{"type":31,"value":4147},"　「プログラミングできない人は、生成AIにやらせればいい」と言われるようになりました。やってはみたもののまともに動かず、原因さえわからない……という声も寄せられます。「やっぱりたくさんお金をかけないとダメか」とあきらめていたところ、",{"type":26,"tag":34,"props":4149,"children":4150},{},[4151,4161],{"type":26,"tag":38,"props":4152,"children":4153},{},[4154],{"type":26,"tag":42,"props":4155,"children":4158},{"href":4156,"rel":4157},"https:\u002F\u002Fforest.watch.impress.co.jp\u002Fdocs\u002Fserial\u002Faistream\u002F2028156.html",[734],[4159],{"type":31,"value":4160},"🔗開発にも運用にも使える「Gemini CLI」が便利すぎてやばい",{"type":26,"tag":38,"props":4162,"children":4163},{},[4164],{"type":26,"tag":42,"props":4165,"children":4168},{"href":4166,"rel":4167},"https:\u002F\u002Fcloud-ace.jp\u002Fcolumn\u002Fdetail520\u002F",[734],[4169],{"type":31,"value":4170},"🔗Gemini CLIとは？機能や使い方、料金など初心者にもわかる完全ガイド",{"type":26,"tag":27,"props":4172,"children":4173},{},[4174,4176,4180],{"type":31,"value":4175},"など、「",{"type":26,"tag":285,"props":4177,"children":4178},{},[4179],{"type":31,"value":254},{"type":31,"value":4181}," はいいぞ！」という記事をよく目にするようになりました。",{"type":26,"tag":27,"props":4183,"children":4184},{},[4185,4187,4192],{"type":31,"value":4186},"　ターミナル上で対話するだけで、AIがコード生成、定型作業のスクリプト化、複雑なコマンド提案など、いろいろとプログラミングを助けてくれるGoogleの",{"type":26,"tag":285,"props":4188,"children":4189},{},[4190],{"type":31,"value":4191},"AIエージェント",{"type":31,"value":4193},"です。",{"type":26,"tag":27,"props":4195,"children":4196},{},[4197,4199,4206],{"type":31,"value":4198},"　Gemini CLI を使えば、本来有料の ",{"type":26,"tag":42,"props":4200,"children":4203},{"href":4201,"rel":4202},"https:\u002F\u002Faismiley.co.jp\u002Fai_news\u002Fwhat-is-gemini-2-5-pro\u002F",[734],[4204],{"type":31,"value":4205},"🔗Gemini 2.5 Pro",{"type":31,"value":4207}," が1日1,000回まで無料利用可能と、個人利用には十分な機能が提供されます。これは、やってみる価値があります。",{"type":26,"tag":54,"props":4209,"children":4210},{},[],{"type":26,"tag":27,"props":4212,"children":4213},{},[4214],{"type":31,"value":4215},"　さっそく Gemini CLI をインストールし、試してみることにしました。\n　",{"type":26,"tag":375,"props":4217,"children":4222},{"className":4218,"code":4220,"language":4221,"meta":8},[4219],"language-blog1.ps1","……Vue3+Nuxt3+NuxtContentV2 を使って、ブログを運営しています。\n……Xで画像が表示されないという不具合がありました。\n@C:\\nuxt●\\nuxt●●●●●\\pages\\articles\\[slug].vue\nのコードを変更したところ……一応これで解決なのですが、\nもっとスマートなコードがあれば提案してください。\nプラグインの追加インストール不要の方法でお願いします。\n","blog1.ps1",[4223],{"type":26,"tag":380,"props":4224,"children":4225},{"__ignoreMap":8},[4226],{"type":31,"value":4220},{"type":26,"tag":27,"props":4228,"children":4229},{},[4230],{"type":31,"value":4231},"と投げかけると、",{"type":26,"tag":375,"props":4233,"children":4238},{"className":4234,"code":4236,"language":4237,"meta":8},[4235],"language-blog2.ps1","✦ 現在のコードは動作しているとのことですが、\nより安全で推奨される方法を提案します。\nまず、C:\\nuxt●\\nuxt●●●●●\\pages\\articles\\[slug].vue\nのコードを拝見し、……最適なコードを提案します。\n……\n✦ コードを拝見しました。ありがとうございます。\nご指摘の問題は、NuxtのuseAsyncDataから取得したデータが\nVueのrefオブジェクトでラップされているために発生します。\n……より安全で「スマート」なコードは、\ncontent.valueを使ってデータにアクセスする方法です。\n……これにより、コードの可読性が向上し、\n将来のVue\u002FNuxtのバージョンアップにも対応しやすくなります。\nこれから、この修正を適用するためのツールを実行します。\n","blog2.ps1",[4239],{"type":26,"tag":380,"props":4240,"children":4241},{"__ignoreMap":8},[4242],{"type":31,"value":4236},{"type":26,"tag":69,"props":4244,"children":4247},{"src":4245,"alt":4246,"width":472},"\u002Fimg\u002Fgeminiclislug.jpg","Gemini CLI による[slug].vue修正",[],{"type":26,"tag":27,"props":4249,"children":4250},{},[4251,4253,4258],{"type":31,"value":4252},"と、コードの修正を提案してくれました。提案を参考にするだけで終わることも選べますが、今回はそのまま",{"type":26,"tag":285,"props":4254,"children":4255},{},[4256],{"type":31,"value":4257},"修正を実行",{"type":31,"value":4259},"してもらいました。",{"type":26,"tag":375,"props":4261,"children":4266},{"className":4262,"code":4264,"language":4265,"meta":8},[4263],"language-blog3.ps1","✦ コードを……より安全で推奨される方法に更新しました。\ncontent.valueを使用して記事のデータにアクセスすることで、\n……安定して動作するコードになりました。\n\n他に何かお手伝いできることはありますか？\n","blog3.ps1",[4267],{"type":26,"tag":380,"props":4268,"children":4269},{"__ignoreMap":8},[4270],{"type":31,"value":4264},{"type":26,"tag":27,"props":4272,"children":4273},{},[4274,4276,4281],{"type":31,"value":4275},"　「",{"type":26,"tag":285,"props":4277,"children":4278},{},[4279],{"type":31,"value":4280},"こいつ、動くぞ！",{"type":31,"value":4282},"」と思わずつぶやいていました。実に見事です。",{"type":26,"tag":27,"props":4284,"children":4285},{},[4286],{"type":31,"value":4287},"　聞きかじった知識で適当にお茶をにごすのではなく、",{"type":26,"tag":34,"props":4289,"children":4290},{},[4291,4296,4301],{"type":26,"tag":38,"props":4292,"children":4293},{},[4294],{"type":31,"value":4295},"＠で指定したファイルを読んでコードを分析し、",{"type":26,"tag":38,"props":4297,"children":4298},{},[4299],{"type":31,"value":4300},"要求に沿ったコード修正案を理由付きで提案し、",{"type":26,"tag":38,"props":4302,"children":4303},{},[4304],{"type":31,"value":4305},"修正を適用してファイルを上書き保存する。",{"type":26,"tag":27,"props":4307,"children":4308},{},[4309],{"type":31,"value":4310},"までやってくれるのです。「AIエージェント ＝ 有能な秘書」と実感しました。",{"type":26,"tag":27,"props":4312,"children":4313},{},[4314],{"type":31,"value":4315},"　一定の制限・リスクはありますが、これからもっと Gemini CLI を使っていけたらと思います。",{"type":26,"tag":54,"props":4317,"children":4318},{},[],{"type":26,"tag":90,"props":4320,"children":4322},{"id":4321},"ファイルサーバーを入れ替えたら掲示板が動かなくなっただと",[4323],{"type":31,"value":4324},"ファイルサーバーを入れ替えたら掲示板が動かなくなっただと？",{"type":26,"tag":27,"props":4326,"children":4327},{},[4328],{"type":31,"value":4329},"　そんな矢先、市内の小学校教頭のN先生から電話がかかってきました。",{"type":26,"tag":179,"props":4331,"children":4333},{"className":4332},[243],[4334,4335,4346,4348,4351],{"type":31,"value":185},{"type":26,"tag":179,"props":4336,"children":4338},{"className":4337},[189],[4339,4340,4345],{"type":31,"value":192},{"type":26,"tag":69,"props":4341,"children":4344},{"src":4342,"alt":4343,"width":197},"\u002Fimg\u002Fnobu.png","小学校教頭",[],{"type":31,"value":192},{"type":31,"value":4347},"\n  校内のファイルサーバーが不調で入れ替えたら、掲示板が動かなくなってしまったんです。データは戻しているのですが、何か設定が必要なようです。\n  ",{"type":26,"tag":54,"props":4349,"children":4350},{},[],{"type":31,"value":4352},"ハダノ先生にお聞きすれば何とかなるのではと……\n",{"type":26,"tag":179,"props":4354,"children":4356},{"className":4355},[182],[4357,4358,4367,4369,4372],{"type":31,"value":185},{"type":26,"tag":179,"props":4359,"children":4361},{"className":4360},[189],[4362,4363,4366],{"type":31,"value":192},{"type":26,"tag":69,"props":4364,"children":4365},{"src":195,"alt":196,"width":197},[],{"type":31,"value":192},{"type":31,"value":4368},"\n  市教委のSさんがバッファローのNASに設置した校内ポータルですね。\n  ",{"type":26,"tag":54,"props":4370,"children":4371},{},[],{"type":31,"value":4373},"中学校はあまり設置を希望しなかったので、私は実物をさわっていません。Sさんが突然去られ、少しして私も定年だったので……\n",{"type":26,"tag":54,"props":4375,"children":4376},{},[],{"type":26,"tag":179,"props":4378,"children":4380},{"className":4379},[243],[4381,4382,4391,4393,4396],{"type":31,"value":185},{"type":26,"tag":179,"props":4383,"children":4385},{"className":4384},[189],[4386,4387,4390],{"type":31,"value":192},{"type":26,"tag":69,"props":4388,"children":4389},{"src":4342,"alt":4343,"width":197},[],{"type":31,"value":192},{"type":31,"value":4392},"\n  市教委に聞いても、「Sさんがどう設定したかわからない」「グループウエアを活用せよ」というばかりです。\n  ",{"type":26,"tag":54,"props":4394,"children":4395},{},[],{"type":31,"value":4397},"でも、みんな掲示板に慣れていて……グループウエアは自分から情報を取りにいかないと……\n",{"type":26,"tag":179,"props":4399,"children":4401},{"className":4400},[182],[4402,4403,4412,4414,4417],{"type":31,"value":185},{"type":26,"tag":179,"props":4404,"children":4406},{"className":4405},[189],[4407,4408,4411],{"type":31,"value":192},{"type":26,"tag":69,"props":4409,"children":4410},{"src":195,"alt":196,"width":197},[],{"type":31,"value":192},{"type":31,"value":4413},"\n  「プログラミングの達人」だと思って頼ってくれたのはうれしいのですが……\n  ",{"type":26,"tag":54,"props":4415,"children":4416},{},[],{"type":31,"value":4418},"Sさんと私は、守備範囲が違います。バックエンドとフロントエンドは、OS・プログラミング言語・ツールなどが異なる別世界なのです。彼の設定を再現するのは不可能だし、代わりの措置も困難です。\n",{"type":26,"tag":69,"props":4420,"children":4424},{"src":4421,"alt":4422,"className":4423},"\u002Fimg\u002Fwebdev.svg","ウェブ開発の違い",[74],[],{"type":26,"tag":27,"props":4426,"children":4427},{},[4428],{"type":31,"value":4429},"、、、ということで、電話を切りました。",{"type":26,"tag":27,"props":4431,"children":4432},{},[4433],{"type":31,"value":4434},"　根本的な問題は、「日本の経営層がソフトウエアの価値を理解していない」という点です。Sさんの高度なスキルを理解していたなら、決して手放すことはなかったのにと悔やまれます。",{"type":26,"tag":34,"props":4436,"children":4437},{},[4438],{"type":26,"tag":38,"props":4439,"children":4440},{},[4441,4442,4447],{"type":31,"value":2983},{"type":26,"tag":285,"props":4443,"children":4444},{},[4445],{"type":31,"value":4446},"パソコンは、ソフトが無ければ、ただの箱です。偉い人にはそれが解らんのですよ",{"type":31,"value":3179},{"type":26,"tag":27,"props":4449,"children":4450},{},[4451],{"type":31,"value":4452},"と愚痴っていても始まりません。AIを駆使してもがいてみます。",{"type":26,"tag":54,"props":4454,"children":4455},{},[],{"type":26,"tag":90,"props":4457,"children":4459},{"id":4458},"掲示板復活が可能か-copilot-に聞いてみた",[4460],{"type":31,"value":4461},"掲示板復活が可能か Copilot に聞いてみた",{"type":26,"tag":27,"props":4463,"children":4464},{},[4465,4467,4473],{"type":31,"value":4466},"　まずは、ふだん使っている ",{"type":26,"tag":42,"props":4468,"children":4470},{"href":4469},"\u002Farticles\u002Ftechnolojiya-4#copilot",[4471],{"type":31,"value":4472},"🔗Copilot(クイック応答)",{"type":31,"value":4474}," に聞いてみます。",{"type":26,"tag":179,"props":4476,"children":4478},{"className":4477},[243],[4479,4480,4489,4491,4494,4497,4499,4502,4504,4507,4509,4512,4533,4536,4538,4541,4543,4546,4614,4617,4619,4622,4624,4627,4640,4648,4661,4669,4677,4680,4682,4685,4708,4711],{"type":31,"value":185},{"type":26,"tag":179,"props":4481,"children":4483},{"className":4482},[189],[4484,4485,4488],{"type":31,"value":192},{"type":26,"tag":69,"props":4486,"children":4487},{"src":498,"alt":499,"width":197},[],{"type":31,"value":192},{"type":31,"value":4490},"\n掲示板の復活は「限定的に可能」ですが、教頭先生のスキルと校内ネットワークの制約を考えると、代替手段の検討も現実的です。",{"type":26,"tag":54,"props":4492,"children":4493},{},[],{"type":26,"tag":319,"props":4495,"children":4496},{},[],{"type":31,"value":4498},"\n🛠 掲示板復活は可能か？",{"type":26,"tag":54,"props":4500,"children":4501},{},[],{"type":31,"value":4503},"\n条件付きで可能です。",{"type":26,"tag":54,"props":4505,"children":4506},{},[],{"type":31,"value":4508},"\nWordPressベースの掲示板であれば、NAS（LinkStation）上にWordPress環境を再構築し、プラグインを再導入すれば復旧できます。ただし、以下の条件が揃っている必要があります：",{"type":26,"tag":54,"props":4510,"children":4511},{},[],{"type":26,"tag":34,"props":4513,"children":4514},{},[4515,4520,4525],{"type":26,"tag":38,"props":4516,"children":4517},{},[4518],{"type":31,"value":4519},"NASにPHP・MySQL・Apache（またはLighttpd）が動作している",{"type":26,"tag":38,"props":4521,"children":4522},{},[4523],{"type":31,"value":4524},"WordPressのインストールファイルと旧掲示板のデータ（MySQLのdumpやWordPressのwp-contentフォルダ）が残っている",{"type":26,"tag":38,"props":4526,"children":4527},{},[4528,4530],{"type":31,"value":4529},"インターネット接続可能なPCが一時的に校務ネットワークに接続できる（USBテザリングなど）",{"type":26,"tag":54,"props":4531,"children":4532},{},[],{"type":26,"tag":54,"props":4534,"children":4535},{},[],{"type":31,"value":4537},"\n📋 自力で復旧する手順（教頭先生向け）",{"type":26,"tag":54,"props":4539,"children":4540},{},[],{"type":31,"value":4542},"\n以下は、ICTスキルが中程度の方でも可能な手順です：",{"type":26,"tag":54,"props":4544,"children":4545},{},[],{"type":26,"tag":34,"props":4547,"children":4548},{},[4549,4554,4559,4564,4569,4574,4579,4584,4589,4594,4599,4604,4609],{"type":26,"tag":38,"props":4550,"children":4551},{},[4552],{"type":31,"value":4553},"WordPressの再インストール",{"type":26,"tag":38,"props":4555,"children":4556},{},[4557],{"type":31,"value":4558},"インターネット接続可能なPCでWordPress最新版をダウンロード",{"type":26,"tag":38,"props":4560,"children":4561},{},[4562],{"type":31,"value":4563},"USBメモリでNASに転送",{"type":26,"tag":38,"props":4565,"children":4566},{},[4567],{"type":31,"value":4568},"NASの共有フォルダに展開し、ブラウザでインストール画面にアクセス",{"type":26,"tag":38,"props":4570,"children":4571},{},[4572],{"type":31,"value":4573},"MySQLの設定",{"type":26,"tag":38,"props":4575,"children":4576},{},[4577],{"type":31,"value":4578},"NASにMySQLが動いていれば、phpMyAdminなどでデータベースを作成",{"type":26,"tag":38,"props":4580,"children":4581},{},[4582],{"type":31,"value":4583},"旧掲示板のデータ（.sqlファイル）があればインポート",{"type":26,"tag":38,"props":4585,"children":4586},{},[4587],{"type":31,"value":4588},"掲示板プラグインの導入",{"type":26,"tag":38,"props":4590,"children":4591},{},[4592],{"type":31,"value":4593},"WordPress管理画面から「bbPress」などの掲示板プラグインをインストール",{"type":26,"tag":38,"props":4595,"children":4596},{},[4597],{"type":31,"value":4598},"プラグインのzipファイルをUSB経由でNASに転送し、手動インストールも可能",{"type":26,"tag":38,"props":4600,"children":4601},{},[4602],{"type":31,"value":4603},"動作確認とURLの周知",{"type":26,"tag":38,"props":4605,"children":4606},{},[4607],{"type":31,"value":4608},"校内ポータルのURLを教職員に再通知",{"type":26,"tag":38,"props":4610,"children":4611},{},[4612],{"type":31,"value":4613},"掲示板の使い方を簡単に説明（投稿・返信・通知など）",{"type":26,"tag":54,"props":4615,"children":4616},{},[],{"type":31,"value":4618},"\n🚧 復旧が難しい場合の代替案",{"type":26,"tag":54,"props":4620,"children":4621},{},[],{"type":31,"value":4623},"\n✅ 代替案1：ローカル掲示板アプリ（インターネット不要）",{"type":26,"tag":54,"props":4625,"children":4626},{},[],{"type":26,"tag":34,"props":4628,"children":4629},{},[4630,4635],{"type":26,"tag":38,"props":4631,"children":4632},{},[4633],{"type":31,"value":4634},"例：Kibela（ローカル運用可能なWiki型）、Redmine（タスク管理＋掲示板機能）",{"type":26,"tag":38,"props":4636,"children":4637},{},[4638],{"type":31,"value":4639},"Windows PCにインストールし、NAS上で共有",{"type":26,"tag":27,"props":4641,"children":4642},{},[4643,4645],{"type":31,"value":4644},"✅ 代替案2：Excelベースの掲示板風シート",{"type":26,"tag":54,"props":4646,"children":4647},{},[],{"type":26,"tag":34,"props":4649,"children":4650},{},[4651,4656],{"type":26,"tag":38,"props":4652,"children":4653},{},[4654],{"type":31,"value":4655},"教頭先生が得意なExcelを使い、共有フォルダで運用",{"type":26,"tag":38,"props":4657,"children":4658},{},[4659],{"type":31,"value":4660},"シート保護＋コメント機能で簡易掲示板として活用",{"type":26,"tag":27,"props":4662,"children":4663},{},[4664,4666],{"type":31,"value":4665},"✅ 代替案3：市教委推奨のグループウェアの「掲示板機能」だけ使う",{"type":26,"tag":54,"props":4667,"children":4668},{},[],{"type":26,"tag":34,"props":4670,"children":4671},{},[4672],{"type":26,"tag":38,"props":4673,"children":4674},{},[4675],{"type":31,"value":4676},"教員が慣れるまで、旧掲示板風のUIを模したマニュアルを作成",{"type":26,"tag":54,"props":4678,"children":4679},{},[],{"type":31,"value":4681},"\n🧭 教頭先生へのアドバイスまとめ",{"type":26,"tag":54,"props":4683,"children":4684},{},[],{"type":26,"tag":34,"props":4686,"children":4687},{},[4688,4693,4698,4703],{"type":26,"tag":38,"props":4689,"children":4690},{},[4691],{"type":31,"value":4692},"まずはNASのWordPress環境が生きているか確認（PHP・MySQL・Apache）",{"type":26,"tag":38,"props":4694,"children":4695},{},[4696],{"type":31,"value":4697},"旧掲示板のデータがあるか確認（wp-contentやSQLファイル）",{"type":26,"tag":38,"props":4699,"children":4700},{},[4701],{"type":31,"value":4702},"インターネット接続手段が一時的に確保できるか検討",{"type":26,"tag":38,"props":4704,"children":4705},{},[4706],{"type":31,"value":4707},"復旧が難しい場合は、ExcelやRedmineなどの代替案を提案",{"type":26,"tag":54,"props":4709,"children":4710},{},[],{"type":31,"value":4712},"\nハダノさんのような「テクノロじいや」的支援があれば、教頭先生も安心して取り組めるはずです。必要なら、掲示板のUI再現やマニュアル作成もお手伝いできますよ。どの方向で支援するか、もう少し絞り込みましょうか？\n",{"type":26,"tag":27,"props":4714,"children":4715},{},[4716],{"type":31,"value":4717},"、、、ハダノ元教頭と小学校のN教頭を混同しており、ハルシネーションだらけの非現実的なアドバイスとなっています。こんなのハダノにだってできません。これが普通の生成AIの限界でしょうか。",{"type":26,"tag":34,"props":4719,"children":4720},{},[4721],{"type":26,"tag":38,"props":4722,"children":4723},{},[4724,4725,4730],{"type":31,"value":2983},{"type":26,"tag":285,"props":4726,"children":4727},{},[4728],{"type":31,"value":4729},"生成AIなんてただのペテン師です。偉い人にはそれが解らんのですよ",{"type":31,"value":3179},{"type":26,"tag":27,"props":4732,"children":4733},{},[4734],{"type":31,"value":4735},"と、つぶやきたくなります。",{"type":26,"tag":54,"props":4737,"children":4738},{},[],{"type":26,"tag":90,"props":4740,"children":4742},{"id":4741},"掲示板復活が可能か-gemini-cli-に聞いてみた",[4743],{"type":31,"value":4744},"掲示板復活が可能か Gemini CLI に聞いてみた",{"type":26,"tag":27,"props":4746,"children":4747},{},[4748],{"type":31,"value":4749},"　同じ質問をAIエージェント(Gemini CLI) にぶつけると、、、",{"type":26,"tag":179,"props":4751,"children":4753},{"className":4752},[243],[4754,4755,4764,4766,4774,4779,4784,4802,4805,4810,4815,4880,4885,4888,4893,4898,4906,4911,4955,4963,4968,5047,5052,5057,5062],{"type":31,"value":185},{"type":26,"tag":179,"props":4756,"children":4758},{"className":4757},[189],[4759,4760,4763],{"type":31,"value":192},{"type":26,"tag":69,"props":4761,"children":4762},{"src":253,"alt":254,"width":197},[],{"type":31,"value":192},{"type":31,"value":4765},"\n✦ ご相談いただいた内容について、私の見解を以下にまとめました。\n",{"type":26,"tag":27,"props":4767,"children":4768},{},[4769],{"type":26,"tag":285,"props":4770,"children":4771},{},[4772],{"type":31,"value":4773},"結論：自力での完全な復活は「極めて困難」であり、推奨しません",{"type":26,"tag":27,"props":4775,"children":4776},{},[4777],{"type":31,"value":4778},"プログラミング経験のない教頭先生が、現在の情報だけで元の掲示板を完全に復活させる\nのは、残念ながら極めて困難です。下手に作業を行うと、残っているデータさえも破損させてしまう危険性があります。",{"type":26,"tag":27,"props":4780,"children":4781},{},[4782],{"type":31,"value":4783},"【困難な理由】",{"type":26,"tag":97,"props":4785,"children":4786},{},[4787,4792,4797],{"type":26,"tag":38,"props":4788,"children":4789},{},[4790],{"type":31,"value":4791},"専門知識の壁: ご推察の通り、この種のシステムはLinux、PHP、MySQL、WordPressといった複数の技術で構成されてい\nます。これらは、VBAやクライアントサイドJavaScriptとは全く異なる知識体系を必要とします。エラーが出た際の対処\nは、専門家でなければほぼ不可能です。",{"type":26,"tag":38,"props":4793,"children":4794},{},[4795],{"type":31,"value":4796},"設定情報の欠如:\n最大の問題は、元の設定情報が一切ないことです。特に、WordPressがデータベース（MySQL）に接続するための「ユー\nザー名」や「パスワード」が記録された設定ファイル（wp-config.php）の内容が不明なのは致命的です。",{"type":26,"tag":38,"props":4798,"children":4799},{},[4800],{"type":31,"value":4801},"オフラインという制約: インターネットに接続できない校務用ネットワークでは、必要なソフトウェアのダウンロード\nや、問題解決のための情報検索ができません。これは、復旧作業を行う上で非常に大きな足かせとなります。",{"type":26,"tag":319,"props":4803,"children":4804},{},[],{"type":26,"tag":27,"props":4806,"children":4807},{},[4808],{"type":31,"value":4809},"復旧に必要な作業（参考）",{"type":26,"tag":27,"props":4811,"children":4812},{},[4813],{"type":31,"value":4814},"もし仮に復旧作業を行う場合、最低でも以下のような手順が必要になります。これを見ていただくだけでも、作業の複雑さ\nがお分かりいただけるかと思います。",{"type":26,"tag":97,"props":4816,"children":4817},{},[4818,4836,4849,4867],{"type":26,"tag":38,"props":4819,"children":4820},{},[4821,4823],{"type":31,"value":4822},"現状分析:\n",{"type":26,"tag":34,"props":4824,"children":4825},{},[4826,4831],{"type":26,"tag":38,"props":4827,"children":4828},{},[4829],{"type":31,"value":4830},"NASにログインし、PHPやMySQLが動作しているか確認する。",{"type":26,"tag":38,"props":4832,"children":4833},{},[4834],{"type":31,"value":4835},"バックアップされたデータの中に、WordPressの全ファイルと、データベースのバックアップファイル（拡張子が\n.sql や .dump のファイル）が存在するか確認する。",{"type":26,"tag":38,"props":4837,"children":4838},{},[4839,4841],{"type":31,"value":4840},"環境構築:\n",{"type":26,"tag":34,"props":4842,"children":4843},{},[4844],{"type":26,"tag":38,"props":4845,"children":4846},{},[4847],{"type":31,"value":4848},"NASの管理画面から、Webサーバー機能、PHP、MySQLを有効化・インストールする。",{"type":26,"tag":38,"props":4850,"children":4851},{},[4852,4854],{"type":31,"value":4853},"データ復元:\n",{"type":26,"tag":34,"props":4855,"children":4856},{},[4857,4862],{"type":26,"tag":38,"props":4858,"children":4859},{},[4860],{"type":31,"value":4861},"WordPressのファイルを所定のWeb公開フォルダにコピーする。",{"type":26,"tag":38,"props":4863,"children":4864},{},[4865],{"type":31,"value":4866},"MySQLにデータベースを作成し、バックアップファイルをインポート（読み込み）させる。",{"type":26,"tag":38,"props":4868,"children":4869},{},[4870,4872],{"type":31,"value":4871},"設定接続:\n",{"type":26,"tag":34,"props":4873,"children":4874},{},[4875],{"type":26,"tag":38,"props":4876,"children":4877},{},[4878],{"type":31,"value":4879},"WordPressの設定ファイル（wp-config.php）を見つけ出し、手順3で設定したデータベース名、ユーザー名、パスワ\nードを正確に書き換える。",{"type":26,"tag":27,"props":4881,"children":4882},{},[4883],{"type":31,"value":4884},"これらの作業には、専門的なコマンド操作が必要になる場面が多く、一つでも間違うとシステムは全く動作しません。",{"type":26,"tag":319,"props":4886,"children":4887},{},[],{"type":26,"tag":27,"props":4889,"children":4890},{},[4891],{"type":31,"value":4892},"提案すべき代替手段",{"type":26,"tag":27,"props":4894,"children":4895},{},[4896],{"type":31,"value":4897},"以上のことから、復旧を目指すよりも、以下の現実的な代替案を教頭先生とご相談されることを強くお勧めします。",{"type":26,"tag":27,"props":4899,"children":4900},{},[4901],{"type":26,"tag":285,"props":4902,"children":4903},{},[4904],{"type":31,"value":4905},"案1：市教委推奨のグループウェアへ移行する（最も推奨）",{"type":26,"tag":27,"props":4907,"children":4908},{},[4909],{"type":31,"value":4910},"これが最も正攻法であり、長期的に見て学校のためになる選択肢です。",{"type":26,"tag":34,"props":4912,"children":4913},{},[4914,4937],{"type":26,"tag":38,"props":4915,"children":4916},{},[4917,4919],{"type":31,"value":4918},"メリット:\n",{"type":26,"tag":34,"props":4920,"children":4921},{},[4922,4927,4932],{"type":26,"tag":38,"props":4923,"children":4924},{},[4925],{"type":31,"value":4926},"持続可能性: 市教委のサポートが受けられるため、今後問題が起きても安心です。",{"type":26,"tag":38,"props":4928,"children":4929},{},[4930],{"type":31,"value":4931},"セキュリティ: 自作システムよりもセキュリティが担保されています。",{"type":26,"tag":38,"props":4933,"children":4934},{},[4935],{"type":31,"value":4936},"機能拡張: 掲示板以外の機能（スケジュール共有など）も使える可能性があります。",{"type":26,"tag":38,"props":4938,"children":4939},{},[4940,4942],{"type":31,"value":4941},"進め方の助言:\n",{"type":26,"tag":34,"props":4943,"children":4944},{},[4945,4950],{"type":26,"tag":38,"props":4946,"children":4947},{},[4948],{"type":31,"value":4949},"現場の先生方が「使い慣れたもの」を好む気持ちはよく分かります。まずは、新しいグループウェアの操作研修会\nを開いてもらうよう市教委に働きかけるのが良いでしょう。",{"type":26,"tag":38,"props":4951,"children":4952},{},[4953],{"type":31,"value":4954},"簡単な操作マニュアルを配布する、移行のメリットを丁寧に説明するなど、現場の\n不安を取り除くための支援方法が必要と思われます。",{"type":26,"tag":27,"props":4956,"children":4957},{},[4958],{"type":26,"tag":285,"props":4959,"children":4960},{},[4961],{"type":31,"value":4962},"案2：あなたの技術を活かした「新しい簡易掲示板」を構築する（次善策）",{"type":26,"tag":27,"props":4964,"children":4965},{},[4966],{"type":31,"value":4967},"もし、どうしても現場の抵抗が強く、代替システムが必要な場合の「次善の策」です。これは、あなたの得意なJavaScri\npt（Nuxt.js）の技術を活かす方法です。",{"type":26,"tag":34,"props":4969,"children":4970},{},[4971,4999,5021],{"type":26,"tag":38,"props":4972,"children":4973},{},[4974,4976],{"type":31,"value":4975},"コンセプト:\n",{"type":26,"tag":34,"props":4977,"children":4978},{},[4979,4984,4989,4994],{"type":26,"tag":38,"props":4980,"children":4981},{},[4982],{"type":31,"value":4983},"データベースを使わない「静的サイトジェネレーター（SSG）」の仕組みを利用します。",{"type":26,"tag":38,"props":4985,"children":4986},{},[4987],{"type":31,"value":4988},"先生方は、PCで書いた「お知らせ」のテキストファイル（Markdown形式など）を、NASの特定の共有フォルダに保存\nします。",{"type":26,"tag":38,"props":4990,"children":4991},{},[4992],{"type":31,"value":4993},"教頭先生が、あなたの用意したツール（バッチファイル等）をPCで実行すると、それらのテキストファイルから自\n動で掲示板のWebページ（HTMLファイル群）が生成されます。",{"type":26,"tag":38,"props":4995,"children":4996},{},[4997],{"type":31,"value":4998},"生成されたWebページ群を、NASのWeb公開フォルダにコピーすれば、全員が閲覧できます。",{"type":26,"tag":38,"props":5000,"children":5001},{},[5002,5003],{"type":31,"value":4918},{"type":26,"tag":34,"props":5004,"children":5005},{},[5006,5011,5016],{"type":26,"tag":38,"props":5007,"children":5008},{},[5009],{"type":31,"value":5010},"PHPやMySQLが不要で、あなたの得意技術で開発・メンテナンスが可能です。",{"type":26,"tag":38,"props":5012,"children":5013},{},[5014],{"type":31,"value":5015},"データはただのテキストファイルなので、管理やバックアップが非常に簡単です。",{"type":26,"tag":38,"props":5017,"children":5018},{},[5019],{"type":31,"value":5020},"オフライン環境でも運用できます（Webページ生成PCとNASの間はUSBメモリ等でデータを移動）。",{"type":26,"tag":38,"props":5022,"children":5023},{},[5024,5026,5039],{"type":31,"value":5025},"教頭先生の作業:\n",{"type":26,"tag":97,"props":5027,"children":5028},{},[5029,5034],{"type":26,"tag":38,"props":5030,"children":5031},{},[5032],{"type":31,"value":5033},"お知らせのテキストファイルが共有フォルダに溜まってきたら、PCでツールを実行する。",{"type":26,"tag":38,"props":5035,"children":5036},{},[5037],{"type":31,"value":5038},"出来上がったWebページ群をNASにコピーする。",{"type":26,"tag":34,"props":5040,"children":5041},{},[5042],{"type":26,"tag":38,"props":5043,"children":5044},{},[5045],{"type":31,"value":5046},"この手順なら、プログラミング知識は不要で、ファイルのコピー程度の操作で完結します。",{"type":26,"tag":27,"props":5048,"children":5049},{},[5050],{"type":31,"value":5051},"まとめ",{"type":26,"tag":27,"props":5053,"children":5054},{},[5055],{"type":31,"value":5056},"まずは教頭先生に、自力での復旧はリスクが高すぎること、そして学校組織の継続性を考えれば「案1：グループウェア\nへの移行」が最も望ましい選択であることを、専門家の立場から冷静に伝えてあげてください。",{"type":26,"tag":27,"props":5058,"children":5059},{},[5060],{"type":31,"value":5061},"その上で、どうしても現場の合意形成が難しい場合の「奥の手」として、あなたのスキルを活かせる「案2：新しい簡易\n掲示板の構築」の可能性を示唆し、もし興味があるようならば、その設計について相談に乗る、というスタンスで臨まれ\nるのがよろしいかと存じます。",{"type":26,"tag":27,"props":5063,"children":5064},{},[5065],{"type":31,"value":5066},"長年のご経験と知識を持つあなたからのアドバイスは、きっと教頭先生の助けになるはずです。",{"type":26,"tag":27,"props":5068,"children":5069},{},[5070],{"type":31,"value":5071},"　さすが、Gemini CLI です。的確な応答です。",{"type":26,"tag":27,"props":5073,"children":5074},{},[5075],{"type":31,"value":5076},"　Web系プログラミングの大変さをよく理解してくれていて、涙が出そうになります。",{"type":26,"tag":27,"props":5078,"children":5079},{},[5080],{"type":31,"value":5081},"　代替案2は、ふだんハダノが自分のブログシステムでやっていることです。ネックになるのは、「Markdownを覚えなければならない」「リアルタイムの更新が難しい」「継続的サポートが必須」という点です。こんな面倒なことをするぐらいなら、グループウエアを使った方がよいでしょう。",{"type":26,"tag":27,"props":5083,"children":5084},{},[5085,5087],{"type":31,"value":5086},"　今どきのソフトウエアのやっかいな点は、しょっちゅうバージョンアップがあり、それぞれのバージョンがずれると不具合が起きることです。今動いていてもメンテナンスし続ける必要があるのです。　→ ",{"type":26,"tag":42,"props":5088,"children":5089},{"href":4012},[5090],{"type":31,"value":5091},"🔗技術の急速な進歩で、ブログの引っ越しがたいへんなことに！",{"type":26,"tag":69,"props":5093,"children":5097},{"src":5094,"alt":5095,"className":5096},"\u002Fimg\u002Ferrorstorm.jpg","エラーの嵐",[802],[],{"type":26,"tag":27,"props":5099,"children":5100},{},[5101],{"type":31,"value":5102},"　それにしても、AIエージェント(Gemini CLI) は、普通の生成AIよりもはるかに頼りになります。",{"type":26,"tag":34,"props":5104,"children":5105},{},[5106],{"type":26,"tag":38,"props":5107,"children":5108},{},[5109,5110,5115],{"type":31,"value":2983},{"type":26,"tag":285,"props":5111,"children":5112},{},[5113],{"type":31,"value":5114},"生成AIとは違うのだよ、生成AIとは！",{"type":31,"value":3179},{"type":26,"tag":27,"props":5117,"children":5118},{},[5119],{"type":31,"value":5120},"と、言いたいかもしれません。",{"type":26,"tag":54,"props":5122,"children":5123},{},[],{"type":26,"tag":90,"props":5125,"children":5127},{"id":5126},"まとめaiエージェントgemini-cli-はweb系プログラミングの役に立つ",[5128],{"type":31,"value":5129},"【まとめ】AIエージェント(Gemini CLI) はWeb系プログラミングの役に立つ",{"type":26,"tag":27,"props":5131,"children":5132},{},[5133],{"type":31,"value":5134},"　「今動いているシステムをバージョンアップするだけだから、一から作るより楽だろう」という考えは甘すぎました、、、と前回の振り返りで述べました。",{"type":26,"tag":27,"props":5136,"children":5137},{},[5138],{"type":31,"value":5139},"　これと似たことが、生成AI界隈で起きているようです。",{"type":26,"tag":34,"props":5141,"children":5142},{},[5143],{"type":26,"tag":38,"props":5144,"children":5145},{},[5146],{"type":26,"tag":42,"props":5147,"children":5150},{"href":5148,"rel":5149},"https:\u002F\u002Fnote.com\u002Frk611\u002Fn\u002Fnf22e638593aa",[734],[5151],{"type":31,"value":5152},"🔗素人がAIで誤りを量産し、プロが後始末する地獄絵図",{"type":26,"tag":27,"props":5154,"children":5155},{},[5156],{"type":31,"value":5157},"を読むと、背筋がゾッとします。素人が生成AIを安直に使うと、",{"type":26,"tag":97,"props":5159,"children":5160},{},[5161,5166,5171],{"type":26,"tag":38,"props":5162,"children":5163},{},[5164],{"type":31,"value":5165},"大量生産 → チェック・修正で疲弊",{"type":26,"tag":38,"props":5167,"children":5168},{},[5169],{"type":31,"value":5170},"AIで計画・設計の検討 → 内容の確認とだめな理由の説明で疲弊",{"type":26,"tag":38,"props":5172,"children":5173},{},[5174],{"type":31,"value":5175},"AIで途中までやったのであとは簡単 → 簡単じゃない理由の説明で疲弊",{"type":26,"tag":27,"props":5177,"children":5178},{},[5179],{"type":31,"value":5180},"、、、という、プロにとっての地獄が待っているというのです。",{"type":26,"tag":69,"props":5182,"children":5183},{"src":935,"alt":936,"width":472},[],{"type":26,"tag":34,"props":5185,"children":5186},{},[5187],{"type":26,"tag":38,"props":5188,"children":5189},{},[5190],{"type":26,"tag":42,"props":5191,"children":5193},{"href":5192},"\u002Farticles\u002Faimanga-3",[5194],{"type":31,"value":5195},"🔗生成AIとパワポで４コマ漫画「モチはモチや」を作ってみた",{"type":26,"tag":27,"props":5197,"children":5198},{},[5199],{"type":31,"value":5200},"の中で、「専門家へのリスペクトが足りない！」「無理解と同調圧力が専門家を苦しめる」と述べましたが、生成AIの普及がこれに拍車をかけるかもしれません。SNSで主流となった考え方を「集合知」と勘違いする傾向もこわいと思います。",{"type":26,"tag":27,"props":5202,"children":5203},{},[5204],{"type":31,"value":5205},"　これを防ぐには、生成AIに作らせっぱなしではなく、検証が必要です。",{"type":26,"tag":27,"props":5207,"children":5208},{},[5209],{"type":31,"value":5210},"　プログラミングに関しては、作らせたコードを実行させて検証するとよいでしょう。そういう意味では、Gemini CLI のようなAIエージェントは従来の生成AIより優れています。「実行」によって、責任が生まれる感じです。プロの足を引っ張るのではなく、プロの片腕となるAIエージェントの発展を期待します。",{"type":26,"tag":54,"props":5212,"children":5213},{},[],{"type":26,"tag":27,"props":5215,"children":5216},{},[5217],{"type":31,"value":5218},"※ ちなみに、、、",{"type":26,"tag":27,"props":5220,"children":5221},{},[5222],{"type":31,"value":5223},"　医師の診察に納得できないとき、セカンドオピニオンを求めます。",{"type":26,"tag":27,"props":5225,"children":5226},{},[5227],{"type":31,"value":5228},"　Copilot でも医師を選べます。今回の質問に対する応答の印象は、",{"type":26,"tag":34,"props":5230,"children":5231},{},[5232,5237,5242,5247],{"type":26,"tag":38,"props":5233,"children":5234},{},[5235],{"type":31,"value":5236},"クイック応答：望む答えを引き出すにはプロンプトの工夫が必要 → 研修医",{"type":26,"tag":38,"props":5238,"children":5239},{},[5240],{"type":31,"value":5241},"Think Deeper：クイック応答をより現実に即して詳しくした感じ → 中堅医師",{"type":26,"tag":38,"props":5243,"children":5244},{},[5245],{"type":31,"value":5246},"GPT-5(新規)：現実を踏まえながらも新発想の代替手段を多数提示 → 研究熱心な若手医師",{"type":26,"tag":38,"props":5248,"children":5249},{},[5250],{"type":31,"value":5251},"Deep Research：応答に時間がかかるが根拠ある詳細な現実解提示 → 大学病院の専門医",{"type":26,"tag":27,"props":5253,"children":5254},{},[5255],{"type":31,"value":5256},"、、、という感じです。",{"type":26,"tag":69,"props":5258,"children":5262},{"src":5259,"alt":5260,"className":5261},"\u002Fimg\u002Fsecondopinion.jpg","セカンドオピニオンを求める患者",[802],[],{"type":26,"tag":27,"props":5264,"children":5265},{},[5266],{"type":31,"value":5267},"　成功には「人を見る力」「コミュニケーション能力」が欠かせませんが、これからは生成AIに対してもこれらの能力が必要になりそうです。",{"type":26,"tag":27,"props":5269,"children":5270},{},[5271],{"type":31,"value":5272},"　AIエージェントは、外部ツールや他のAIとコミュニケーションする能力を磨きつつあります。今回の Gemini CLI は、さしずめ「専門医と連携して親身になって診てくれる若手医師」といったところでしょうか。今後、主治医になる可能性もあります。",{"type":26,"tag":54,"props":5274,"children":5275},{},[],{"type":26,"tag":805,"props":5277,"children":5279},{"id":5278},"これからも改良を",[5280],{"type":31,"value":5278},{"type":26,"tag":27,"props":5282,"children":5283},{},[5284],{"type":31,"value":5285},"　自前のブログシステムなので、使っていきながら改良していきます。中身が全部わかっているというのは、安心です。AIエージェントの力も借りながら、さらに理解を深めたいと思います。",{"type":26,"tag":27,"props":5287,"children":5288},{},[5289],{"type":31,"value":5290},"　これからも応援よろしくお願いします。",{"type":26,"tag":54,"props":5292,"children":5294},{"id":5293},"nikkeisoft",[],{"type":26,"tag":179,"props":5296,"children":5298},{"className":5297},[1207],[5299,5300,5313,5314],{"type":31,"value":1210},{"type":26,"tag":179,"props":5301,"children":5303},{"className":5302},[1214],[5304],{"type":26,"tag":42,"props":5305,"children":5308},{"target":1218,"rel":5306,"href":5307},[1220],"https:\u002F\u002Fhb.afl.rakuten.co.jp\u002Fichiba\u002F1c31a7e9.545b2c08.1c31a7ea.d83a8f7a\u002F_RTLink57027?pc=https%3A%2F%2Fproduct.rakuten.co.jp%2Fproduct%2F-%2F5e9e4f14a0ca6b7bafbe30bbde4a93b6%2F&link_type=hybrid_url&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJyaWdodCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MSwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjEsInByb2QiOjEsImFtcCI6ZmFsc2V9",[5309],{"type":26,"tag":69,"props":5310,"children":5312},{"src":5311},"https:\u002F\u002Fthumbnail.image.rakuten.co.jp\u002F@0_mall\u002Fbook\u002Fcabinet\u002F1154\u002F4910071891154_1_2.jpg?_ex=240x240",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":5315,"children":5317},{"className":5316},[1231],[5318,5319,5329,5330,5349,5350,5387],{"type":31,"value":1234},{"type":26,"tag":179,"props":5320,"children":5322},{"className":5321},[1238],[5323],{"type":26,"tag":42,"props":5324,"children":5326},{"target":1218,"rel":5325,"href":5307},[1220],[5327],{"type":31,"value":5328},"日経ソフトウエア 2025年 11月号 [雑誌]",{"type":31,"value":1234},{"type":26,"tag":179,"props":5331,"children":5333},{"className":5332},[1250],[5334,5337,5339,5342,5344,5347],{"type":26,"tag":54,"props":5335,"children":5336},{},[],{"type":31,"value":5338},"※ ハダノがずっと購読している隔月刊のプログラミング雑誌です。",{"type":26,"tag":54,"props":5340,"children":5341},{},[],{"type":31,"value":5343},"流行をおさえているので、最近はAI関連の記事が多めです。",{"type":26,"tag":54,"props":5345,"children":5346},{},[],{"type":31,"value":5348},"特集2「AIエージェント時代到来！ MCPとは何か？」が特に興味深かったと思います。",{"type":31,"value":1234},{"type":26,"tag":179,"props":5351,"children":5353},{"className":5352},[1266,1267],[5354,5355,5364,5365,5375,5376,5386],{"type":31,"value":1270},{"type":26,"tag":179,"props":5356,"children":5357},{},[5358],{"type":26,"tag":42,"props":5359,"children":5362},{"className":5360,"target":1218,"rel":5361,"href":5307},[1277,1278],[1220],[5363],{"type":31,"value":1282},{"type":31,"value":1284},{"type":26,"tag":179,"props":5366,"children":5367},{},[5368],{"type":26,"tag":42,"props":5369,"children":5373},{"className":5370,"target":1218,"rel":5371,"href":5372},[1277,1291],[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0F196QW8D",[5374],{"type":31,"value":1296},{"type":31,"value":1284},{"type":26,"tag":179,"props":5377,"children":5378},{},[5379],{"type":26,"tag":42,"props":5380,"children":5384},{"className":5381,"target":1218,"rel":5382,"href":5383},[1277,1304],[1220],"https:\u002F\u002Fck.jp.ap.valuecommerce.com\u002Fservlet\u002Freferral?sid=3651993&pid=887947441&vc_url=https%3A%2F%2Fstore.shopping.yahoo.co.jp%2Fbookfan%2Fmt-4910071891154.html%3Fsc_i%3Dshopping-pc-web-result-item-rsltlst-img",[5385],{"type":31,"value":1309},{"type":31,"value":1234},{"type":31,"value":1210},{"type":26,"tag":54,"props":5389,"children":5390},{},[],{"type":26,"tag":319,"props":5392,"children":5393},{},[],{"type":26,"tag":27,"props":5395,"children":5396},{},[5397],{"type":26,"tag":42,"props":5398,"children":5399},{"href":4012},[5400],{"type":31,"value":5401},"←前へ　持続可能なブログ作り",{"title":8,"searchDepth":324,"depth":324,"links":5403},[5404],{"id":4023,"depth":324,"text":3990,"children":5405},[5406,5407,5408,5409,5410,5411],{"id":4037,"depth":362,"text":4040},{"id":4139,"depth":362,"text":4142},{"id":4321,"depth":362,"text":4324},{"id":4458,"depth":362,"text":4461},{"id":4741,"depth":362,"text":4744},{"id":5126,"depth":362,"text":5129},"content:articles:blog-3.md","articles\u002Fblog-3.md","articles\u002Fblog-3",{"_path":4012,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":5416,"description":5417,"category":5418,"tag":5419,"thumbnail":5420,"createdAt":5421,"updatedAt":5422,"body":5423,"_type":1519,"_id":6622,"_source":1521,"_file":6623,"_stem":6624,"_extension":1524},"持続可能なブログ作り","２年前に作ったブログを Vue3+Nuxt3+NuxtContentV2 に移行してみた",[12],[1530,1531],"blog-2.jpg","2024\u002F3\u002F25","2024\u002F5\u002F24",{"type":23,"children":5424,"toc":6611},[5425,5429,5441,5445,5450,5456,5459,5465,5477,5490,5495,5498,5519,5524,5528,5533,5551,5556,5559,5565,5570,5583,5588,5624,5629,5657,5662,5668,5671,5677,5682,5694,5699,5710,5730,5742,5745,5750,5755,5766,5771,5799,5804,5817,5822,5833,5869,5879,5891,5894,5899,5904,5909,5914,5920,5925,5953,5959,5964,5977,6006,6036,6047,6052,6063,6068,6096,6108,6119,6132,6135,6141,6152,6157,6170,6175,6188,6193,6197,6203,6208,6213,6218,6224,6229,6262,6267,6272,6277,6282,6385,6390,6395,6398,6402,6414,6418,6422,6494,6497,6589,6592,6595,6603],{"type":26,"tag":27,"props":5426,"children":5427},{},[5428],{"type":31,"value":4003},{"type":26,"tag":34,"props":5430,"children":5431},{},[5432],{"type":26,"tag":38,"props":5433,"children":5434},{},[5435],{"type":26,"tag":42,"props":5436,"children":5438},{"href":5437},"\u002Farticles\u002Fblog-1",[5439],{"type":31,"value":5440},"🔗Nuxt+Content+Cloudflareで無料でブログを作ってみた",{"type":26,"tag":27,"props":5442,"children":5443},{},[5444],{"type":31,"value":4020},{"type":26,"tag":58,"props":5446,"children":5448},{"id":5447},"２年前に作ったブログを-vue3nuxt3nuxtcontentv2-に移行してみた",[5449],{"type":31,"value":5417},{"type":26,"tag":69,"props":5451,"children":5455},{"src":5452,"alt":5453,"className":5454},"\u002Fimg\u002Fadvancedit.jpg","高度情報技術",[74],[],{"type":26,"tag":54,"props":5457,"children":5458},{},[],{"type":26,"tag":90,"props":5460,"children":5462},{"id":5461},"技術の急速な進歩でブログの引っ越しがたいへんなことに",[5463],{"type":31,"value":5464},"技術の急速な進歩で、ブログの引っ越しがたいへんなことに！",{"type":26,"tag":27,"props":5466,"children":5467},{},[5468,5469,5475],{"type":31,"value":976},{"type":26,"tag":42,"props":5470,"children":5472},{"href":5471},"\u002Farticles\u002Faipc-2",[5473],{"type":31,"value":5474},"🔗「生成AI用にデスクトップPCを追加購入した件」",{"type":31,"value":5476}," で述べたように、ノートPCでやっていたことをデスクトップPCでもできるように頑張りました。",{"type":26,"tag":27,"props":5478,"children":5479},{},[5480,5482,5488],{"type":31,"value":5481},"　データは ",{"type":26,"tag":42,"props":5483,"children":5485},{"href":5484},"\u002Farticles\u002Fict-2#personalcloud",[5486],{"type":31,"value":5487},"🔗パーソナルクラウド",{"type":31,"value":5489}," にバックアップしていました。",{"type":26,"tag":27,"props":5491,"children":5492},{},[5493],{"type":31,"value":5494},"　プログラムは、重要なものから順にインストールしていきました。ブログも早く引っ越したかったのですが、子ども食堂タブレット教室への影響を考え、春休みを「ブログメンテナンス期間」としました。",{"type":26,"tag":54,"props":5496,"children":5497},{},[],{"type":26,"tag":27,"props":5499,"children":5500},{},[5501,5503,5509,5511,5517],{"type":31,"value":5502},"　ブログシステムは、記事データをデスクトップPCに移しただけでは動きません。",{"type":26,"tag":380,"props":5504,"children":5506},{"className":5505},[],[5507],{"type":31,"value":5508},"Vue.js",{"type":31,"value":5510}," や ",{"type":26,"tag":380,"props":5512,"children":5514},{"className":5513},[],[5515],{"type":31,"value":5516},"Nuxt.js",{"type":31,"value":5518}," などのプログラムをインストールする必要があります。",{"type":26,"tag":27,"props":5520,"children":5521},{},[5522],{"type":31,"value":5523},"　２年前と同じ要領でやってみましたが、エラーの嵐に打ちのめされました。",{"type":26,"tag":69,"props":5525,"children":5527},{"src":5094,"alt":5095,"className":5526},[802],[],{"type":26,"tag":27,"props":5529,"children":5530},{},[5531],{"type":31,"value":5532},"　どうやら、この２年間で開発環境が様変わりしていたようです。",{"type":26,"tag":34,"props":5534,"children":5535},{},[5536,5541,5546],{"type":26,"tag":38,"props":5537,"children":5538},{},[5539],{"type":31,"value":5540},"Vue2　→　Vue3",{"type":26,"tag":38,"props":5542,"children":5543},{},[5544],{"type":31,"value":5545},"Nuxt2　→　Nuxt3",{"type":26,"tag":38,"props":5547,"children":5548},{},[5549],{"type":31,"value":5550},"Nuxt Content　→　Nuxt Content V2",{"type":26,"tag":27,"props":5552,"children":5553},{},[5554],{"type":31,"value":5555},"　おまけに、インストールコマンドまで変わっていました。たった２年間で浦島太郎です。",{"type":26,"tag":54,"props":5557,"children":5558},{},[],{"type":26,"tag":90,"props":5560,"children":5562},{"id":5561},"vue-はオワコンなのか",[5563],{"type":31,"value":5564},"Vue はオワコンなのか？",{"type":26,"tag":27,"props":5566,"children":5567},{},[5568],{"type":31,"value":5569},"　そのままインストールすると最新バージョンになって動かないのなら、古いバージョンを指定してインストールすれば動くかもしれません。ただ、これは持続可能ではありません。Vue2 の公式サポートが2023年で終了したからです。",{"type":26,"tag":34,"props":5571,"children":5572},{},[5573],{"type":26,"tag":38,"props":5574,"children":5575},{},[5576],{"type":26,"tag":42,"props":5577,"children":5580},{"href":5578,"rel":5579},"https:\u002F\u002Frealengineer.link\u002Fnuxt3-upgrade",[734],[5581],{"type":31,"value":5582},"🔗Vue.jsはオワコンになり、Vue3は衰退する。Nuxt2からNuxt3へのアップデートは破壊的変更が多すぎて移行できないからだ",{"type":26,"tag":27,"props":5584,"children":5585},{},[5586],{"type":31,"value":5587},"を読むと、お先真っ暗な感じです。",{"type":26,"tag":27,"props":5589,"children":5590},{},[5591,5593,5599,5601,5607,5609,5615,5616,5622],{"type":31,"value":5592},"　それでも、",{"type":26,"tag":380,"props":5594,"children":5596},{"className":5595},[],[5597],{"type":31,"value":5598},"Vue",{"type":31,"value":5600}," + ",{"type":26,"tag":380,"props":5602,"children":5604},{"className":5603},[],[5605],{"type":31,"value":5606},"Nuxt",{"type":31,"value":5608}," を捨てて、",{"type":26,"tag":380,"props":5610,"children":5612},{"className":5611},[],[5613],{"type":31,"value":5614},"React",{"type":31,"value":5600},{"type":26,"tag":380,"props":5617,"children":5619},{"className":5618},[],[5620],{"type":31,"value":5621},"Next",{"type":31,"value":5623}," へ鞍替えしようとは思いません。乗り換えは最後の手段です。",{"type":26,"tag":27,"props":5625,"children":5626},{},[5627],{"type":31,"value":5628},"　冷静になると、",{"type":26,"tag":97,"props":5630,"children":5631},{},[5632,5637,5642,5647,5652],{"type":26,"tag":38,"props":5633,"children":5634},{},[5635],{"type":31,"value":5636},"Vue3,Nuxt3 を新しいフレームワークだと思って学ぶ。",{"type":26,"tag":38,"props":5638,"children":5639},{},[5640],{"type":31,"value":5641},"Vue2,Nuxt2 と似ている部分は、慣れている分だけラッキーと考える。",{"type":26,"tag":38,"props":5643,"children":5644},{},[5645],{"type":31,"value":5646},"現行システムのロジックをベースに Vue3,Nuxt3 で書き直す。",{"type":26,"tag":38,"props":5648,"children":5649},{},[5650],{"type":31,"value":5651},"モジュール対応が遅れていれば、代替手段を模索する。",{"type":26,"tag":38,"props":5653,"children":5654},{},[5655],{"type":31,"value":5656},"それでもだめなら、旧バージョンでしのぎつつ、React等への移行を検討。",{"type":26,"tag":27,"props":5658,"children":5659},{},[5660],{"type":31,"value":5661},"、、、と方針が固まってきました。",{"type":26,"tag":69,"props":5663,"children":5667},{"src":5664,"alt":5665,"className":5666},"\u002Fimg\u002Fvuenuxt.jpg","Vue3,Nuxt3",[3350],[],{"type":26,"tag":54,"props":5669,"children":5670},{},[],{"type":26,"tag":90,"props":5672,"children":5674},{"id":5673},"vue3nuxt3-を学び現行システムを書き直してみる",[5675],{"type":31,"value":5676},"Vue3,Nuxt3 を学び、現行システムを書き直してみる",{"type":26,"tag":27,"props":5678,"children":5679},{},[5680],{"type":31,"value":5681},"　新・旧の書き方が混在した解説資料が多い中、",{"type":26,"tag":34,"props":5683,"children":5684},{},[5685],{"type":26,"tag":38,"props":5686,"children":5687},{},[5688],{"type":26,"tag":42,"props":5689,"children":5691},{"href":5690},"#nuxtsite",[5692],{"type":31,"value":5693},"🔗はじめてつくるNuxtサイト: 最新Nuxtの基礎と使い方をしっかりマスターできる！",{"type":26,"tag":27,"props":5695,"children":5696},{},[5697],{"type":31,"value":5698},"ならば、Nuxtバージョンv3.5.2、全編Composition API + script setupを使用……とあるので大丈夫そうです。",{"type":26,"tag":375,"props":5700,"children":5705},{"className":5701,"code":5703,"language":5704,"meta":8},[5702],"language-_slug.vue","\u002F\u002F pages\u002Farticles\u002F_slug.vue　【 旧バージョン 】\n\u003Cscript>\n  export default {\n    async asyncData ({ $content, params, redirect, store }) {\n      const content = await $content('articles').where({ path: '\u002Farticles\u002F' + params.slug }).fetch()\n      if (content.length > 0) {\n        return {\n          content: content[0],\n          contenturl: store.state.baseurl + content[0].path,\n          imgurl: store.state.baseurl + '\u002Fimg\u002F' + content[0].thumbnail\n        }\n      } else {\n        redirect('\u002Farticles')\n      }\n    },\n    head () {\n  ・・・・・・\n      ↓\n\n\u002F\u002F pages\u002Farticles\u002F[slug].vue　【 新バージョン 】\n\u003Cscript setup>\n  const route = useRoute()\n  const path = route.path\n  const { data: content } = await useAsyncData(path,() => queryContent(path).findOne())\n  const h1title = content.title\n  const formatDate = (date) => new Date(date).toLocaleDateString()\n  const contenturl = useBaseurl() + content._path\n  const imgurl = useBaseurl() + '\u002Fimg\u002F' + content.thumbnail\n\n  useHead({\n  ・・・・・・\n","_slug.vue",[5706],{"type":26,"tag":380,"props":5707,"children":5708},{"__ignoreMap":8},[5709],{"type":31,"value":5703},{"type":26,"tag":27,"props":5711,"children":5712},{},[5713,5715,5720,5722,5728],{"type":31,"value":5714},"、、、比べてみると、ずいぶん書き方が違います。ファイル名も ",{"type":26,"tag":380,"props":5716,"children":5718},{"className":5717},[],[5719],{"type":31,"value":5704},{"type":31,"value":5721}," → ",{"type":26,"tag":380,"props":5723,"children":5725},{"className":5724},[],[5726],{"type":31,"value":5727},"[slug].vue",{"type":31,"value":5729}," と変わりました。",{"type":26,"tag":27,"props":5731,"children":5732},{},[5733,5735],{"type":31,"value":5734},"　use で始まる Composables関数 は、Nuxt3 側が用意してくれたものが大幅に増えたうえに、簡単に自作してどこでも使えるようになりました。 → ",{"type":26,"tag":42,"props":5736,"children":5739},{"href":5737,"rel":5738},"https:\u002F\u002Fzenn.dev\u002Fperaichi_blog\u002Farticles\u002F1504fb916d9d88",[734],[5740],{"type":31,"value":5741},"🔗Nuxt3の本気を見た～Composablesの可能性～",{"type":26,"tag":54,"props":5743,"children":5744},{},[],{"type":26,"tag":90,"props":5746,"children":5748},{"id":5747},"ページの構成をすっきりさせてみる",[5749],{"type":31,"value":5747},{"type":26,"tag":27,"props":5751,"children":5752},{},[5753],{"type":31,"value":5754},"　これまでは、次のようになっていました。",{"type":26,"tag":375,"props":5756,"children":5761},{"className":5757,"code":5759,"language":5760,"meta":8},[5758],"language-page.txt","pages\n ├ articles\n ｜  ├ page\n ｜  ｜  └ _id.vue\n ｜  ├ index.vue\n ｜  └ _slug.vue  ⇒　各記事表示用ページ\n ├ category\n ｜  └ _slug\n ｜      ├ page\n ｜      ｜  └ _id.vue\n ｜      └ index.vue\n ├ tag\n ｜  └ _slug\n ｜      ├ page\n ｜      ｜  └ _id.vue\n ｜      └ index.vue\n └ index.vue\n","page.txt",[5762],{"type":26,"tag":380,"props":5763,"children":5764},{"__ignoreMap":8},[5765],{"type":31,"value":5759},{"type":26,"tag":27,"props":5767,"children":5768},{},[5769],{"type":31,"value":5770},"　_slug.vue 以外の7つのvueファイルは、記事一覧表示用なので基本的なつくりは同じです。",{"type":26,"tag":27,"props":5772,"children":5773},{},[5774,5775,5781,5782,5788,5790,5797],{"type":31,"value":5592},{"type":26,"tag":380,"props":5776,"children":5778},{"className":5777},[],[5779],{"type":31,"value":5780},"category",{"type":31,"value":5510},{"type":26,"tag":380,"props":5783,"children":5785},{"className":5784},[],[5786],{"type":31,"value":5787},"tag",{"type":31,"value":5789}," など ",{"type":26,"tag":42,"props":5791,"children":5794},{"href":5792,"rel":5793},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fja\u002Fdocs\u002FGlossary\u002FLiteral",[734],[5795],{"type":31,"value":5796},"🔗リテラル",{"type":31,"value":5798},"　を打って各動作を指定する必要があったため、別々に作っていました。前回、「layout は、うまく使えず、原因不明のままです。……」となっていましたが、今回は何とかしたいものです。",{"type":26,"tag":27,"props":5800,"children":5801},{},[5802],{"type":31,"value":5803},"　処理を分ける際のネックとなっていたのが、オブジェクトのキーの指定です。",{"type":26,"tag":34,"props":5805,"children":5806},{},[5807],{"type":26,"tag":38,"props":5808,"children":5809},{},[5810],{"type":26,"tag":42,"props":5811,"children":5814},{"href":5812,"rel":5813},"https:\u002F\u002Fzenn.dev\u002Fry_km\u002Farticles\u002Fuse-variables-with-object-key-in-js",[734],[5815],{"type":31,"value":5816},"🔗JavaScriptでObjectのKeyに変数展開する",{"type":26,"tag":27,"props":5818,"children":5819},{},[5820],{"type":31,"value":5821},"　を読んでやってみたら、リテラル を打たなくてよくなりました。",{"type":26,"tag":375,"props":5823,"children":5828},{"className":5824,"code":5826,"language":5827,"meta":8},[5825],"language-_id.vue","\u002F\u002F pages\u002Fcategory\u002F_slug\u002Fpage\u002F_id.vue\n  async asyncData ({ store, $content, params, redirect }) {\n    const ipp = store.state.indexPerPage\n    const h1title = store.getters.getCategoryTextBySlug(params.slug)\n                                  \u002F\u002F Categoryテキスト取得専用メソッド\n    ............\n    const content = await $content({ deep: true })\n      .where({ category: { $contains: params.slug } })\n                    \u002F\u002F リテラル【 category 】をObjectのKeyに指定\n      .sortBy('createdAt', 'desc')\n      .skip(pfrom).limit(ipp)\n      .fetch()\n　　・・・・・・\n        ↓\n\n\u002F\u002F pages\u002Fcategory\u002F[slug]\u002Fpage\u002F[id].vue\n　......\n  const ipp = useIndexPerPage()\n  ......\n  \u002F\u002F コンテンツの種類による場合分け\n  if (route.params.slug) {\n    if (mapCat.get(route.params.slug)) {\n      parent = 'category'\n      child = route.params.slug\n      h1title = mapCat.get(child)   \u002F\u002F 連想配列からCategoryテキスト取得\n    } else {\n      if (mapTag.get(route.params.slug)) {\n        parent = 'tag'\n        child = route.params.slug\n        h1title = mapTag.get(child) \u002F\u002F 連想配列からTagテキスト取得\n      }\n  ............\n  const { data: contents } = await useAsyncData(rpath,() => queryContent('articles')\n      .where({[parent]:{$contains:child}})\n                   \u002F\u002F 【 [変数] 】でObjectのKeyに変数展開\n      .sort({createdAt:-1, $numeric:true})    \u002F\u002F 日付を数値順でソート\n      .skip(pfrom).limit(ipp) \n      .find()\n　　・・・・・・\n","_id.vue",[5829],{"type":26,"tag":380,"props":5830,"children":5831},{"__ignoreMap":8},[5832],{"type":31,"value":5826},{"type":26,"tag":27,"props":5834,"children":5835},{},[5836,5838,5844,5846,5852,5854,5860,5861,5867],{"type":31,"value":5837},"　これで、7つのVueファイルのコードを共通化できます。",{"type":26,"tag":380,"props":5839,"children":5841},{"className":5840},[],[5842],{"type":31,"value":5843},"layouts",{"type":31,"value":5845}," フォルダに ",{"type":26,"tag":380,"props":5847,"children":5849},{"className":5848},[],[5850],{"type":31,"value":5851},"listing.vue",{"type":31,"value":5853}," として保存し、",{"type":26,"tag":380,"props":5855,"children":5857},{"className":5856},[],[5858],{"type":31,"value":5859},"index.vue",{"type":31,"value":5510},{"type":26,"tag":380,"props":5862,"children":5864},{"className":5863},[],[5865],{"type":31,"value":5866},"[id].vue",{"type":31,"value":5868}," は次のように書いておけばよいのです。",{"type":26,"tag":375,"props":5870,"children":5874},{"className":5871,"code":5873,"language":5859,"meta":8},[5872],"language-index.vue","\u003Ctemplate>\n  \u003CNuxtLayout name=\"listing\"> \n    \n    ※ listing.vue の \u003Cslot \u002F> に差し込む中身があれば書く\n\n  \u003C\u002FNuxtLayout>\n\u003C\u002Ftemplate>\n",[5875],{"type":26,"tag":380,"props":5876,"children":5877},{"__ignoreMap":8},[5878],{"type":31,"value":5873},{"type":26,"tag":27,"props":5880,"children":5881},{},[5882,5884,5889],{"type":31,"value":5883},"　結果的に、7つのVueファイルは同じものになりました。コードを修正するときは、",{"type":26,"tag":380,"props":5885,"children":5887},{"className":5886},[],[5888],{"type":31,"value":5851},{"type":31,"value":5890}," だけをいじればよく、保守性がアップしました。",{"type":26,"tag":54,"props":5892,"children":5893},{},[],{"type":26,"tag":90,"props":5895,"children":5897},{"id":5896},"デプロイに四苦八苦",[5898],{"type":31,"value":5896},{"type":26,"tag":27,"props":5900,"children":5901},{},[5902],{"type":31,"value":5903},"　ブログシステムがだいたい動くようになったので、デプロイ（ネットにアップ）してみることにしました。",{"type":26,"tag":27,"props":5905,"children":5906},{},[5907],{"type":31,"value":5908},"　「 GitHubのリモートリポジトリにプッシュ → Cloudflare Pages に自動デプロイ 」という設定にしていたので、更新は楽でした。",{"type":26,"tag":27,"props":5910,"children":5911},{},[5912],{"type":31,"value":5913},"　ところが、「Cloudflare PagesとGitHubのリポジトリを連携させ、接続するGitリポジトリを選んで……」という手順で、今回の新しいリポジトリを選択しようとしましたがうまくいきません。どうやら、いったんプロジェクトを削除してやり直すしかないようです。削除を試みましたが、エラーでそれもできません。『最初が肝心』と思い知らされました。",{"type":26,"tag":69,"props":5915,"children":5919},{"src":5916,"alt":5917,"className":5918},"\u002Fimg\u002Fuploadfailed.jpg","アップロード失敗",[74],[],{"type":26,"tag":27,"props":5921,"children":5922},{},[5923],{"type":31,"value":5924},"　次の手として、「前のGitHubリモートリポジトリをクローンしてローカルリポジトリを作り、そこに新しいブログシステムを移す」ことにしました。",{"type":26,"tag":34,"props":5926,"children":5927},{},[5928,5933,5938,5943,5948],{"type":26,"tag":38,"props":5929,"children":5930},{},[5931],{"type":31,"value":5932},"「ローカルリポジトリに前のデータがあるけど、新しいプログラムをインストールするときに邪魔になるかな？」",{"type":26,"tag":38,"props":5934,"children":5935},{},[5936],{"type":31,"value":5937},"「マークダウンファイルや画像ファイルは邪魔にならないはずだから、残しておいていいのでは？」",{"type":26,"tag":38,"props":5939,"children":5940},{},[5941],{"type":31,"value":5942},"「あれれ？！　インストールしようとしたら、'空っぽのフォルダじゃないとダメ'って怒られた！」",{"type":26,"tag":38,"props":5944,"children":5945},{},[5946],{"type":31,"value":5947},"「でも、空っぽにしたら、リモートリポジトリにプッシュできなくなるのでは？」",{"type":26,"tag":38,"props":5949,"children":5950},{},[5951],{"type":31,"value":5952},"「あーー　詰んだ、、、、」",{"type":26,"tag":69,"props":5954,"children":5958},{"src":5955,"alt":5956,"className":5957},"\u002Fimg\u002Fclogged.jpg","詰んだ",[802],[],{"type":26,"tag":27,"props":5960,"children":5961},{},[5962],{"type":31,"value":5963},"　あきらめの悪いハダノは、",{"type":26,"tag":34,"props":5965,"children":5966},{},[5967],{"type":26,"tag":38,"props":5968,"children":5969},{},[5970],{"type":26,"tag":42,"props":5971,"children":5974},{"href":5972,"rel":5973},"https:\u002F\u002Fzenn.dev\u002Futa_mory\u002Farticles\u002Ff8bad2ffa86d99",[734],[5975],{"type":31,"value":5976},"🔗create-nuxt-appで既存のディレクトリを上書きできるようになった",{"type":26,"tag":27,"props":5978,"children":5979},{},[5980,5982,5988,5990,5996,5998,6004],{"type":31,"value":5981},"という記事を見つけ前を向こうとしますが、",{"type":26,"tag":380,"props":5983,"children":5985},{"className":5984},[],[5986],{"type":31,"value":5987},"--overwrite-dir",{"type":31,"value":5989},"フラグが廃止されたと知ってガックリ。そもそも ",{"type":26,"tag":380,"props":5991,"children":5993},{"className":5992},[],[5994],{"type":31,"value":5995},"create-nuxt-app",{"type":31,"value":5997}," は、",{"type":26,"tag":380,"props":5999,"children":6001},{"className":6000},[],[6002],{"type":31,"value":6003},"Nuxt2",{"type":31,"value":6005}," 時代のものでした。",{"type":26,"tag":27,"props":6007,"children":6008},{},[6009,6011,6017,6019,6025,6027,6034],{"type":31,"value":6010},"　「もしや、",{"type":26,"tag":380,"props":6012,"children":6014},{"className":6013},[],[6015],{"type":31,"value":6016},"Nuxt3",{"type":31,"value":6018}," のインストールコマンド ",{"type":26,"tag":380,"props":6020,"children":6022},{"className":6021},[],[6023],{"type":31,"value":6024},"npx nuxi init",{"type":31,"value":6026}," に何かないか？」と思って ",{"type":26,"tag":42,"props":6028,"children":6031},{"href":6029,"rel":6030},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fapi\u002Fcommands\u002Finit",[734],[6032],{"type":31,"value":6033},"🔗Nuxt公式ページ",{"type":31,"value":6035}," を見ると、",{"type":26,"tag":27,"props":6037,"children":6038},{},[6039,6045],{"type":26,"tag":380,"props":6040,"children":6042},{"className":6041},[],[6043],{"type":31,"value":6044},"--force 〔Force clone to any existing directory.〕",{"type":31,"value":6046}," というオプションがあるではありませんか。",{"type":26,"tag":27,"props":6048,"children":6049},{},[6050],{"type":31,"value":6051},"　最終的に、",{"type":26,"tag":375,"props":6053,"children":6058},{"className":6054,"code":6056,"language":6057,"meta":8},[6055],"language-nuxt3blog.txt","1. GitHubのリモートリポジトリをクローンし、.gitフォルダ 以外を削除。\n2. 親フォルダへ移動し、Nuxtプロジェクトを上書き作成（content も同時に）。\n  > npx nuxi init プロジェクト名 --force -t content\n  ☑npm\n3. gitリポジトリは初期化せず、既存のものを使う。\n  > Initialize git repository?\n  □Yes \u002F ☑No\n4. モジュール（@nuxtjs\u002Fgoogle-adsense, @nuxtjs\u002Fseo）をインストール。\n5. だいたい動くプロジェクトからファイルをコピー（.nuxt, node_modules以外 ）。\n6. nuxt.config.ts等を修正し、npm run dev で動作確認。\n7. GitHubへコミット・プッシュ。\n8．Cloudflare Pages デプロイの詳細-ビルドログを確認。\n","nuxt3blog.txt",[6059],{"type":26,"tag":380,"props":6060,"children":6061},{"__ignoreMap":8},[6062],{"type":31,"value":6056},{"type":26,"tag":27,"props":6064,"children":6065},{},[6066],{"type":31,"value":6067},"という流れで、やっとデプロイにこぎつけました。",{"type":26,"tag":27,"props":6069,"children":6070},{},[6071,6073,6079,6080,6086,6088,6094],{"type":31,"value":6072},"　ビルド コマンド：",{"type":26,"tag":380,"props":6074,"children":6076},{"className":6075},[],[6077],{"type":31,"value":6078},"npx nuxt generate",{"type":31,"value":5510},{"type":26,"tag":380,"props":6081,"children":6083},{"className":6082},[],[6084],{"type":31,"value":6085},"NODE_VERSION",{"type":31,"value":6087},"：",{"type":26,"tag":380,"props":6089,"children":6091},{"className":6090},[],[6092],{"type":31,"value":6093},"20.11.0",{"type":31,"value":6095},"　などの変更をし、",{"type":26,"tag":27,"props":6097,"children":6098},{},[6099,6106],{"type":26,"tag":42,"props":6100,"children":6103},{"href":6101,"rel":6102},"https:\u002F\u002Fqiita.com\u002Fnegitoro001\u002Fitems\u002F37ce4b4e7ef34bbcd920",[734],[6104],{"type":31,"value":6105},"🔗ビルドエラー回避のため、nuxt.config.ts に",{"type":31,"value":6107}," 以下を加えました。",{"type":26,"tag":375,"props":6109,"children":6114},{"className":6110,"code":6112,"language":6113,"meta":8},[6111],"language-nuxt.config.ts","  nitro:{\n    prerender: {\n        failOnError: false,\n        },\n  },\n","nuxt.config.ts",[6115],{"type":26,"tag":380,"props":6116,"children":6117},{"__ignoreMap":8},[6118],{"type":31,"value":6112},{"type":26,"tag":27,"props":6120,"children":6121},{},[6122,6124,6130],{"type":31,"value":6123},"　開発環境では動いたのに、本番環境では動かず（リロードが必要）、",{"type":26,"tag":380,"props":6125,"children":6127},{"className":6126},[],[6128],{"type":31,"value":6129},"useAsyncData",{"type":31,"value":6131}," のキャッシュ制御を見直す一幕もありましたが、何とか予定したものができあがりました。",{"type":26,"tag":54,"props":6133,"children":6134},{},[],{"type":26,"tag":90,"props":6136,"children":6138},{"id":6137},"_2024524追記pre-transform-error",[6139],{"type":31,"value":6140},"【2024\u002F5\u002F24追記】Pre-transform error",{"type":26,"tag":375,"props":6142,"children":6147},{"className":6143,"code":6145,"language":6146,"meta":8},[6144],"language-rundev.bat","cd c:\\nuxth\\nuxthblog\nnpm run dev\ncmd \u002Fk\n","rundev.bat",[6148],{"type":26,"tag":380,"props":6149,"children":6150},{"__ignoreMap":8},[6151],{"type":31,"value":6145},{"type":26,"tag":27,"props":6153,"children":6154},{},[6155],{"type":31,"value":6156},"　いつものバッチファイル（rundev.bat）でエラーが出たので調べると、",{"type":26,"tag":34,"props":6158,"children":6159},{},[6160],{"type":26,"tag":38,"props":6161,"children":6162},{},[6163],{"type":26,"tag":42,"props":6164,"children":6167},{"href":6165,"rel":6166},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fissues\u002F25941",[734],[6168],{"type":31,"value":6169},"🔗ERROR Pre-transform error: path should be a path.relative()d string, but got \"c:\u002Fproject\u002Ftest\u002Fplugin-vue:export-helper\" #25941",{"type":26,"tag":27,"props":6171,"children":6172},{},[6173],{"type":31,"value":6174},"という報告があがっていました。",{"type":26,"tag":34,"props":6176,"children":6177},{},[6178,6183],{"type":26,"tag":38,"props":6179,"children":6180},{},[6181],{"type":31,"value":6182},"nuxt.config.ts の modules に '@nuxt\u002Fdevtools',　を追加",{"type":26,"tag":38,"props":6184,"children":6185},{},[6186],{"type":31,"value":6187},"ターミナル（管理者）つまり PowerShell を 起動して実行",{"type":26,"tag":27,"props":6189,"children":6190},{},[6191],{"type":31,"value":6192},"で、とりあえずエラーは消えました。",{"type":26,"tag":54,"props":6194,"children":6196},{"id":6195},"pyramidcycle",[],{"type":26,"tag":90,"props":6198,"children":6200},{"id":6199},"振り返り持続可能なブログ作り-のため-学び作り続けよう",[6201],{"type":31,"value":6202},"【振り返り】持続可能なブログ作り のため 学び・作り続けよう",{"type":26,"tag":27,"props":6204,"children":6205},{},[6206],{"type":31,"value":6207},"　「今動いているシステムをバージョンアップするだけだから、一から作るより楽だろう」という考えは甘すぎました。",{"type":26,"tag":27,"props":6209,"children":6210},{},[6211],{"type":31,"value":6212},"　持続可能なシステムとは、「ピラミッドのように堅固なもの」ではなく、「自転車のように動いているもの」だと知りました。",{"type":26,"tag":27,"props":6214,"children":6215},{},[6216],{"type":31,"value":6217},"　世界は常に変化しています。完璧に見えるピラミッドも風化していきます。状況に対応しながら走り続ける自転車でありたいものです。そのためには、「学ぶ」「作る」というペダルをこぎ続けるしかありません。",{"type":26,"tag":69,"props":6219,"children":6223},{"src":6220,"alt":6221,"className":6222},"\u002Fimg\u002Fpyramidcycle.jpg","ピラミッドと自転車",[74],[],{"type":26,"tag":27,"props":6225,"children":6226},{},[6227],{"type":31,"value":6228},"　今回、さまざまなエラーに苦しみながら実感したことは、「問題の切り分け」の大切さです。",{"type":26,"tag":34,"props":6230,"children":6231},{},[6232,6237,6242,6247,6252,6257],{"type":26,"tag":38,"props":6233,"children":6234},{},[6235],{"type":31,"value":6236},"JavaScript(Node.js) の仕様の問題",{"type":26,"tag":38,"props":6238,"children":6239},{},[6240],{"type":31,"value":6241},"Vue3 の仕様の問題",{"type":26,"tag":38,"props":6243,"children":6244},{},[6245],{"type":31,"value":6246},"Nuxt3 の仕様の問題",{"type":26,"tag":38,"props":6248,"children":6249},{},[6250],{"type":31,"value":6251},"NuxtContentV2 の仕様の問題",{"type":26,"tag":38,"props":6253,"children":6254},{},[6255],{"type":31,"value":6256},"GitHub, Cloudflare Pages の仕様の問題",{"type":26,"tag":38,"props":6258,"children":6259},{},[6260],{"type":31,"value":6261},"その他の問題",{"type":26,"tag":27,"props":6263,"children":6264},{},[6265],{"type":31,"value":6266},"、、、それぞれのレベルごとにバージョン間の互換性はあるので、新しいものが出たからといってすぐに移行しなくてもよさそうです。ただし、年代ごとに想定している環境があるので、ある程度そろえる必要があります。",{"type":26,"tag":27,"props":6268,"children":6269},{},[6270],{"type":31,"value":6271},"　例えば、JavaScriptの関数を定義する方法として、「function宣言」のほかに「アロー関数」が出てきました。現在、どちらも使用可能ですが、Vue2：function宣言 ⇒ Vue3：アロー関数 と移り変わっています。参考資料に出てくるコードを理解して利用するためには、古いやり方に固執してはいけません。逆に、新しい書き方を有効にするために、Node.js のバージョンを上げる必要も出てきます。",{"type":26,"tag":69,"props":6273,"children":6276},{"src":6274,"alt":6275,"width":472},"\u002Fimg\u002Fnuxt3dev.jpg","Nuxt3による開発",[],{"type":26,"tag":805,"props":6278,"children":6280},{"id":6279},"ブログシステム移行で参考にした記事",[6281],{"type":31,"value":6279},{"type":26,"tag":34,"props":6283,"children":6284},{},[6285,6295,6305,6315,6325,6335,6345,6355,6365,6375],{"type":26,"tag":38,"props":6286,"children":6287},{},[6288],{"type":26,"tag":42,"props":6289,"children":6292},{"href":6290,"rel":6291},"https:\u002F\u002Fqiita.com\u002Ffruitriin\u002Fitems\u002F81691ce68cf3678f3bda",[734],[6293],{"type":31,"value":6294},"🔗Vue3の衰退を招いたのは＜script setup＞とCompositionAPIかもしれない という考察",{"type":26,"tag":38,"props":6296,"children":6297},{},[6298],{"type":26,"tag":42,"props":6299,"children":6302},{"href":6300,"rel":6301},"https:\u002F\u002Fzenn.dev\u002Fkata_n\u002Farticles\u002F6e5d57a15e96f5",[734],[6303],{"type":31,"value":6304},"🔗Vue2からVue3への変化と慣れていくためのTips",{"type":26,"tag":38,"props":6306,"children":6307},{},[6308],{"type":26,"tag":42,"props":6309,"children":6312},{"href":6310,"rel":6311},"https:\u002F\u002Freffect.co.jp\u002Fvue\u002Fnuxt3",[734],[6313],{"type":31,"value":6314},"🔗Nuxt 3を使いこなすために基礎から徹底解説",{"type":26,"tag":38,"props":6316,"children":6317},{},[6318],{"type":26,"tag":42,"props":6319,"children":6322},{"href":6320,"rel":6321},"https:\u002F\u002Fb1san-blog.com\u002Fpost\u002Fnuxt3\u002Fnuxt3-start\u002F",[734],[6323],{"type":31,"value":6324},"🔗【Nuxt 3】Nuxt 2と比較しながらはじめるNuxt 3",{"type":26,"tag":38,"props":6326,"children":6327},{},[6328],{"type":26,"tag":42,"props":6329,"children":6332},{"href":6330,"rel":6331},"https:\u002F\u002Fb1san-blog.com\u002Fpost\u002Fnuxt3\u002Fnuxt3-blog\u002F",[734],[6333],{"type":31,"value":6334},"🔗Nuxt 3 + Nuxt Content v2 による静的サイトの作成",{"type":26,"tag":38,"props":6336,"children":6337},{},[6338],{"type":26,"tag":42,"props":6339,"children":6342},{"href":6340,"rel":6341},"https:\u002F\u002Fwww.sejuku.net\u002Fblog\u002F21812",[734],[6343],{"type":31,"value":6344},"🔗【JavaScript入門】配列処理をするmap()の使い方とMapオブジェクトの解説！",{"type":26,"tag":38,"props":6346,"children":6347},{},[6348],{"type":26,"tag":42,"props":6349,"children":6352},{"href":6350,"rel":6351},"https:\u002F\u002Fqiita.com\u002Fazukiazusa\u002Fitems\u002Fb91046e9f1d618c67d7f",[734],[6353],{"type":31,"value":6354},"🔗【JavaScript】Null合体演算子と(??)とオプショナルチェイニング演算子(?.)",{"type":26,"tag":38,"props":6356,"children":6357},{},[6358],{"type":26,"tag":42,"props":6359,"children":6362},{"href":6360,"rel":6361},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fja\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FOperators\u002FDestructuring_assignment",[734],[6363],{"type":31,"value":6364},"🔗分割代入 - JavaScript | MDN",{"type":26,"tag":38,"props":6366,"children":6367},{},[6368],{"type":26,"tag":42,"props":6369,"children":6372},{"href":6370,"rel":6371},"https:\u002F\u002Fzenn.dev\u002Frivine\u002Farticles\u002F2023-06-23-deploy-hugo-to-cloudflare-pages",[734],[6373],{"type":31,"value":6374},"🔗【Cloudflare Pages】ブログを公開したい？...5分もあれば十分だ",{"type":26,"tag":38,"props":6376,"children":6377},{},[6378],{"type":26,"tag":42,"props":6379,"children":6382},{"href":6380,"rel":6381},"https:\u002F\u002Fwp-kyoto.net\u002Fdownload-cloudflare-pages-config-to-wrangler-toml\u002F",[734],[6383],{"type":31,"value":6384},"🔗Cloudflare Pagesの設定をwrangler.tomlに出力する",{"type":26,"tag":27,"props":6386,"children":6387},{},[6388],{"type":31,"value":6389},"、、、実際にやってみて、記事の時点とは状況が変わっていたものも多かったのですが、基本的な考え方は身につきました。",{"type":26,"tag":27,"props":6391,"children":6392},{},[6393],{"type":31,"value":6394},"　Vue2,Nuxt2 に慣れた人からすると「破壊的変更」かもしれませんが、Vue3,Nuxt3 になって「素のJavaScript」に近づいた感じがします。ネストが浅くすっきり書けるので、言われるほど悪くありません。それどころか、もっと新しい書き方を試してみたくなります。",{"type":26,"tag":54,"props":6396,"children":6397},{},[],{"type":26,"tag":805,"props":6399,"children":6400},{"id":5278},[6401],{"type":31,"value":5278},{"type":26,"tag":27,"props":6403,"children":6404},{},[6405,6407,6412],{"type":31,"value":6406},"　自前のブログシステムなので、使っていきながら改良していきます（",{"type":26,"tag":285,"props":6408,"children":6409},{},[6410],{"type":31,"value":6411},"自転車操業",{"type":31,"value":6413},"になるかも？）。中身が全部わかっているというのは、安心です。",{"type":26,"tag":27,"props":6415,"children":6416},{},[6417],{"type":31,"value":5290},{"type":26,"tag":54,"props":6419,"children":6421},{"id":6420},"nuxtsite",[],{"type":26,"tag":179,"props":6423,"children":6425},{"className":6424},[1207],[6426,6427,6440,6441],{"type":31,"value":1210},{"type":26,"tag":179,"props":6428,"children":6430},{"className":6429},[1214],[6431],{"type":26,"tag":42,"props":6432,"children":6435},{"target":1218,"rel":6433,"href":6434},[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0B5N8QJ2Y",[6436],{"type":26,"tag":69,"props":6437,"children":6439},{"src":6438},"https:\u002F\u002Fimages-fe.ssl-images-amazon.com\u002Fimages\u002FI\u002F418GAr5ISQL._SL160_.jpg",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":6442,"children":6444},{"className":6443},[1231],[6445,6446,6456,6457,6476,6477,6493],{"type":31,"value":1234},{"type":26,"tag":179,"props":6447,"children":6449},{"className":6448},[1238],[6450],{"type":26,"tag":42,"props":6451,"children":6453},{"target":1218,"rel":6452,"href":6434},[1220],[6454],{"type":31,"value":6455},"はじめてつくるNuxtサイト: 最新Nuxtの基礎と使い方をしっかりマスターできる！",{"type":31,"value":1234},{"type":26,"tag":179,"props":6458,"children":6460},{"className":6459},[1250],[6461,6464,6466,6469,6471,6474],{"type":26,"tag":54,"props":6462,"children":6463},{},[],{"type":31,"value":6465},"※ タイトルと価格だけ見ると、Nuxt2の運用経験のあるハダノには不要な本なのかと思いました。",{"type":26,"tag":54,"props":6467,"children":6468},{},[],{"type":31,"value":6470},"実際に購入してみると、Nuxt3ブログの具体的な作り方が過不足なく載っていて、非常に参考になりました。",{"type":26,"tag":54,"props":6472,"children":6473},{},[],{"type":31,"value":6475},"Nuxt3の本は多くないので、貴重な存在です。",{"type":31,"value":1234},{"type":26,"tag":179,"props":6478,"children":6481},{"className":6479},[1266,6480],"__one",[6482,6483,6492],{"type":31,"value":1284},{"type":26,"tag":179,"props":6484,"children":6485},{},[6486],{"type":26,"tag":42,"props":6487,"children":6490},{"className":6488,"target":1218,"rel":6489,"href":6434},[1277,1291],[1220],[6491],{"type":31,"value":1296},{"type":31,"value":1234},{"type":31,"value":1210},{"type":26,"tag":54,"props":6495,"children":6496},{"id":5293},[],{"type":26,"tag":179,"props":6498,"children":6500},{"className":6499},[1207],[6501,6502,6515,6516],{"type":31,"value":1210},{"type":26,"tag":179,"props":6503,"children":6505},{"className":6504},[1214],[6506],{"type":26,"tag":42,"props":6507,"children":6510},{"target":1218,"rel":6508,"href":6509},[1220],"https:\u002F\u002Fhb.afl.rakuten.co.jp\u002Fichiba\u002F26ba9fc2.c2fdf85a.26ba9fc3.8edde063\u002F_RTLink57027?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17815167%2F&link_type=hybrid_url&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJyaWdodCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MSwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjAsInByb2QiOjAsImFtcCI6ZmFsc2V9",[6511],{"type":26,"tag":69,"props":6512,"children":6514},{"src":6513},"https:\u002F\u002Fthumbnail.image.rakuten.co.jp\u002F@0_mall\u002Fbook\u002Fcabinet\u002F0546\u002F4910071890546_1_2.jpg?_ex=240x240",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":6517,"children":6519},{"className":6518},[1231],[6520,6521,6531,6532,6550,6551,6588],{"type":31,"value":1234},{"type":26,"tag":179,"props":6522,"children":6524},{"className":6523},[1238],[6525],{"type":26,"tag":42,"props":6526,"children":6528},{"target":1218,"rel":6527,"href":6509},[1220],[6529],{"type":31,"value":6530},"日経ソフトウエア 2024年 5月号 [雑誌]",{"type":31,"value":1234},{"type":26,"tag":179,"props":6533,"children":6535},{"className":6534},[1250],[6536,6539,6540,6543,6545,6548],{"type":26,"tag":54,"props":6537,"children":6538},{},[],{"type":31,"value":5338},{"type":26,"tag":54,"props":6541,"children":6542},{},[],{"type":31,"value":6544},"流行をおさえているので、最近はPythonの記事が多めですが、3月号と5月号にはJavaScriptの特集がありました。",{"type":26,"tag":54,"props":6546,"children":6547},{},[],{"type":31,"value":6549},"アロー関数・Mapオブジェクト・スプレッド構文などの解説には目を開かされました。",{"type":31,"value":1234},{"type":26,"tag":179,"props":6552,"children":6554},{"className":6553},[1266,1267],[6555,6556,6565,6566,6576,6577,6587],{"type":31,"value":1270},{"type":26,"tag":179,"props":6557,"children":6558},{},[6559],{"type":26,"tag":42,"props":6560,"children":6563},{"className":6561,"target":1218,"rel":6562,"href":6509},[1277,1278],[1220],[6564],{"type":31,"value":1282},{"type":31,"value":1284},{"type":26,"tag":179,"props":6567,"children":6568},{},[6569],{"type":26,"tag":42,"props":6570,"children":6574},{"className":6571,"target":1218,"rel":6572,"href":6573},[1277,1291],[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0CX5BD7TT",[6575],{"type":31,"value":1296},{"type":31,"value":1284},{"type":26,"tag":179,"props":6578,"children":6579},{},[6580],{"type":26,"tag":42,"props":6581,"children":6585},{"className":6582,"target":1218,"rel":6583,"href":6584},[1277,1304],[1220],"https:\u002F\u002Fck.jp.ap.valuecommerce.com\u002Fservlet\u002Freferral?sid=3651993&pid=887947441&vc_url=https%3A%2F%2Fstore.shopping.yahoo.co.jp%2Fneowing%2Fneobk-2957123.html%3Fsc_i%3Dshopping-pc-web-result-item-rsltlst-title",[6586],{"type":31,"value":1309},{"type":31,"value":1234},{"type":31,"value":1210},{"type":26,"tag":54,"props":6590,"children":6591},{},[],{"type":26,"tag":319,"props":6593,"children":6594},{},[],{"type":26,"tag":27,"props":6596,"children":6597},{},[6598],{"type":26,"tag":42,"props":6599,"children":6600},{"href":5437},[6601],{"type":31,"value":6602},"←前へ　Nuxt+Content+Cloudflareで無料でブログを作ってみた",{"type":26,"tag":27,"props":6604,"children":6605},{},[6606],{"type":26,"tag":42,"props":6607,"children":6608},{"href":1549},[6609],{"type":31,"value":6610},"次へ→　ブログのコード修正",{"title":8,"searchDepth":324,"depth":324,"links":6612},[6613],{"id":5447,"depth":324,"text":5417,"children":6614},[6615,6616,6617,6618,6619,6620,6621],{"id":5461,"depth":362,"text":5464},{"id":5561,"depth":362,"text":5564},{"id":5673,"depth":362,"text":5676},{"id":5747,"depth":362,"text":5747},{"id":5896,"depth":362,"text":5896},{"id":6137,"depth":362,"text":6140},{"id":6199,"depth":362,"text":6202},"content:articles:blog-2.md","articles\u002Fblog-2.md","articles\u002Fblog-2",{"_path":6626,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":6627,"description":6628,"category":6629,"tag":6630,"thumbnail":6631,"createdAt":6632,"updatedAt":6633,"body":6634,"_type":1519,"_id":7122,"_source":1521,"_file":7123,"_stem":7124,"_extension":1524},"\u002Farticles\u002Fsocsaga-2","ソックサーガの始め方【自校運用】","コンテンツプログラミングシステム「ソックサーガ」のReplitによる自校運用法",[12],[1529,16,15,1530,1531],"socsaga01.jpg","2022\u002F6\u002F23","2022\u002F7\u002F2",{"type":23,"children":6635,"toc":7117},[6636,6641,6644,6650,6670,6686,6713,6718,6721,6724,6729,6732,6738,6755,6768,6809,6814,6817,6820,6833,6836,6841,6844,6849,6862,6871,6876,6879,6887,6895,6903,6911,6919,6927,6943,6951,7005,7009,7102,7105,7108],{"type":26,"tag":27,"props":6637,"children":6638},{},[6639],{"type":31,"value":6640},"　この記事では、コンテンツプログラミングシステム「ソックサーガ」の始め方を解説します。クラウド統合開発環境Replit（リプリット）による自校運用の方法です。プログラミング実習では、生徒が打ったコードを管理する必要があります。コードを評価や指導に十分役立てるには、自校運用が必須です。",{"type":26,"tag":54,"props":6642,"children":6643},{},[],{"type":26,"tag":58,"props":6645,"children":6647},{"id":6646},"ソックサーガの始め方指導者の方へ",[6648],{"type":31,"value":6649},"ソックサーガの始め方（指導者の方へ）",{"type":26,"tag":97,"props":6651,"children":6652},{},[6653,6658],{"type":26,"tag":38,"props":6654,"children":6655},{},[6656],{"type":31,"value":6657},"Googleアカウント取得。校務用とは別に授業用のアカウントがあると便利。",{"type":26,"tag":38,"props":6659,"children":6660},{},[6661,6668],{"type":26,"tag":42,"props":6662,"children":6665},{"href":6663,"rel":6664},"https:\u002F\u002Freplit.com\u002F~",[734],[6666],{"type":31,"value":6667},"🔗Replit",{"type":31,"value":6669}," に[Continue with Google]で[Sign up]し、アカウントを設定。左上の ≡ - [+Create]をクリック、Titleにプロジェクト名（socsaga1 等）、Languageは[HTML,CSS,JS]を選択し、[+Create Repl]をクリック。プロジェクトはクラス数分作るとよい。",{"type":26,"tag":27,"props":6671,"children":6672},{},[6673,6680],{"type":26,"tag":69,"props":6674,"children":6679},{"src":6675,"alt":6676,"className":6677},"\u002Fimg\u002Freplitlogin.jpg","replitlogin",[6678],"imgh",[],{"type":26,"tag":69,"props":6681,"children":6685},{"src":6682,"alt":6683,"className":6684},"\u002Fimg\u002Fcreaterepl.jpg","createrepl",[6678],[],{"type":26,"tag":97,"props":6687,"children":6688},{"start":362},[6689,6694,6708],{"type":26,"tag":38,"props":6690,"children":6691},{},[6692],{"type":31,"value":6693},"JavaScriptプログラムは、基本的にhtmlファイルに組み込んで動作させる。ローカルファイルをFiles欄にドラッグ＆ドロップするか、コードエディタで直接書くかする。",{"type":26,"tag":38,"props":6695,"children":6696},{},[6697,6699,6706],{"type":31,"value":6698},"SocSagaを利用するには、",{"type":26,"tag":42,"props":6700,"children":6703},{"href":6701,"rel":6702},"https:\u002F\u002Fkyodx.com\u002Fsrc\u002Fsocsagaset.zip",[734],[6704],{"type":31,"value":6705},"🔗socsagaset.zipをダウンロード",{"type":31,"value":6707},"・解凍しておく。sagaフォルダの中のものをすべてFiles欄にドラッグ＆ドロップする。",{"type":26,"tag":38,"props":6709,"children":6710},{},[6711],{"type":31,"value":6712},"jisshu00.html をひな形ファイルとし、ファイル名右の ≡ をクリック-Duplicate、≡ をクリック-Rename で jisshu01.html，jisshu02.html，…とクラスの生徒数分の実習htmlファイルを用意。指導者の方へ.txt の指示に従ってhtmlリストと画像リストを更新しておく。実習開始時には、右上の[👤+Invite]をクリックし、メールで生徒に知らせる。",{"type":26,"tag":69,"props":6714,"children":6717},{"src":6715,"alt":6716,"width":472},"\u002Fimg\u002Freplsaga1.jpg","replsaga1",[],{"type":26,"tag":54,"props":6719,"children":6720},{},[],{"type":26,"tag":54,"props":6722,"children":6723},{},[],{"type":26,"tag":27,"props":6725,"children":6726},{},[6727],{"type":31,"value":6728},"※ 生徒には、次の手順で操作をさせてください。",{"type":26,"tag":54,"props":6730,"children":6731},{},[],{"type":26,"tag":58,"props":6733,"children":6735},{"id":6734},"ソックサーガの始め方生徒へ",[6736],{"type":31,"value":6737},"ソックサーガの始め方（生徒へ）",{"type":26,"tag":97,"props":6739,"children":6741},{"start":6740},6,[6742],{"type":26,"tag":38,"props":6743,"children":6744},{},[6745,6747,6753],{"type":31,"value":6746},"メールが届いたら、",{"type":26,"tag":380,"props":6748,"children":6750},{"className":6749},[],[6751],{"type":31,"value":6752},"https:\u002F\u002Freplit.com\u002Fjoin\u002F**********-*******",{"type":31,"value":6754}," をクリックし、[Continue with Google]で[Sign up]して、プロジェクトに参加する。「Replit needs ……」に対しては、[Allow notifications]を選ぶ。",{"type":26,"tag":27,"props":6756,"children":6757},{},[6758,6762],{"type":26,"tag":69,"props":6759,"children":6761},{"src":6675,"alt":6676,"className":6760},[6678],[],{"type":26,"tag":69,"props":6763,"children":6767},{"src":6764,"alt":6765,"className":6766},"\u002Fimg\u002Freplitnotif.jpg","replitnotif",[6678],[],{"type":26,"tag":97,"props":6769,"children":6771},{"start":6770},7,[6772,6777,6788],{"type":26,"tag":38,"props":6773,"children":6774},{},[6775],{"type":31,"value":6776},"コード編集欄の右の Output欄の右上の ↗ (Open in a new tab) をクリックして新しいウィンドウを開く。少し待つと「ソックサーガへようこそ」から「ソックサーガで実習」に自動的に切り替わる。コード編集欄の右の仕切り線を右にずらして、広くしておくとよい。",{"type":26,"tag":38,"props":6778,"children":6779},{},[6780,6786],{"type":26,"tag":380,"props":6781,"children":6783},{"className":6782},[],[6784],{"type":31,"value":6785},"jisshu\u002Fsocsaga.html（ソックサーガの説明_編集用）へ",{"type":31,"value":6787},"をクリックし、実行エリアが表示されるようにし、[コンテンツ作り へ]、[　→　]、[　→　]、…とボタンをクリックして、SocSagaの説明を読み進める。",{"type":26,"tag":38,"props":6789,"children":6790},{},[6791,6793,6799,6801,6807],{"type":31,"value":6792},"SocSagaについて理解できたら、jisshu フォルダ内のhtml一覧で ",{"type":26,"tag":380,"props":6794,"children":6796},{"className":6795},[],[6797],{"type":31,"value":6798},"jisshu**.html",{"type":31,"value":6800},"（**は出席番号）をクリックして自分のページを表示する。Files欄で ",{"type":26,"tag":380,"props":6802,"children":6804},{"className":6803},[],[6805],{"type":31,"value":6806},"jisshu\u002Fjisshu**.html",{"type":31,"value":6808}," を選び、コード編集欄と自分のページとを行ったり来たりしてSocSagaの練習をする。編集するスライド番号 を入力し、自分のページの ↻ ボタンで更新。スライド編集エリアで編集後、[ソース]ボタンでコピーしたソースをコード編集欄のsectionタグ内に貼り付ける。自分のページの ↻ ボタンで更新。正しく表示されているか、実行エリアのボタンが作動するか確認。",{"type":26,"tag":69,"props":6810,"children":6813},{"src":6811,"alt":6812,"width":472},"\u002Fimg\u002Freplsaji.jpg","replsaji",[],{"type":26,"tag":54,"props":6815,"children":6816},{},[],{"type":26,"tag":54,"props":6818,"children":6819},{},[],{"type":26,"tag":27,"props":6821,"children":6822},{},[6823,6825,6831],{"type":31,"value":6824},"※ socsagaの練習で生徒がある程度使いこなせるようになったら、あとは「授業のねらい」に応じてどんどんコンテンツプログラミングをさせてください。コンテンツ作成では、「内容よりも見た目に凝りすぎる」ことのないよう注意してください。生徒はむやみに色を使いたがります。伝わるデザインにするには、「ポジティブな強調は青、ネガティブな強調は赤」など統一した色使いでシンプルに仕上げることが大切です（→",{"type":26,"tag":42,"props":6826,"children":6828},{"href":6827},"#presen",[6829],{"type":31,"value":6830},"🔗プレゼン資料のデザイン図鑑",{"type":31,"value":6832},"）。ソフトウェアは著作物だということも教えましょう。",{"type":26,"tag":54,"props":6834,"children":6835},{},[],{"type":26,"tag":27,"props":6837,"children":6838},{},[6839],{"type":31,"value":6840},"※ 以下は、おまけです。しくみを知りたい方はどうぞ……",{"type":26,"tag":54,"props":6842,"children":6843},{},[],{"type":26,"tag":58,"props":6845,"children":6847},{"id":6846},"ソックサーガ自校運用の技術的な話",[6848],{"type":31,"value":6846},{"type":26,"tag":27,"props":6850,"children":6851},{},[6852,6853,6860],{"type":31,"value":976},{"type":26,"tag":42,"props":6854,"children":6857},{"href":6855,"rel":6856},"https:\u002F\u002Fkyodx.com\u002Farticles\u002Fcloudide-1",[734],[6858],{"type":31,"value":6859},"🔗クラウド統合開発環境でWebアプリの自校運用を",{"type":31,"value":6861}," の最後に",{"type":26,"tag":27,"props":6863,"children":6864},{},[6865],{"type":26,"tag":380,"props":6866,"children":6868},{"className":6867},[],[6869],{"type":31,"value":6870},"　「画像の一覧」の問題が残っていますが、これは何とかなりそうです。画像やクリップボードの扱いが独特な iPad に対応したコードを書くついでに解決します。",{"type":26,"tag":27,"props":6872,"children":6873},{},[6874],{"type":31,"value":6875},"と書いた件ですが、次のように対応しました。",{"type":26,"tag":54,"props":6877,"children":6878},{},[],{"type":26,"tag":34,"props":6880,"children":6881},{},[6882],{"type":26,"tag":38,"props":6883,"children":6884},{},[6885],{"type":31,"value":6886},"ルートのindex.htmlファイル「ソックサーガへようこそ」に以下のコードを入れ、新しいウィンドウを開いたら自動的にjisshuフォルダのindex.html「ソックサーガで実習」に移動するようにする。",{"type":26,"tag":375,"props":6888,"children":6890},{"code":6889},"    if (location.hostname.indexOf('.id.repl.co') \u003C 0) {\n      location.href = '\u002Fjisshu\u002F';\n    }\n",[6891],{"type":26,"tag":380,"props":6892,"children":6893},{"__ignoreMap":8},[6894],{"type":31,"value":6889},{"type":26,"tag":34,"props":6896,"children":6897},{},[6898],{"type":26,"tag":38,"props":6899,"children":6900},{},[6901],{"type":31,"value":6902},"jisshu\u002Findex.htmlに以下のコードを入れ、画像一覧を表示させる。urliから画像ファイル名を取得して配列にし、insertAdjacentHTMLでimgタグを挿入してゆく。ファイル名はfigcaptionタグを使って表示。ファイル名をクリックすると画像を開くようにしている。",{"type":26,"tag":375,"props":6904,"children":6906},{"code":6905},"      fetch(urli, {cache: \"no-store\"}).then(function(response) {\n        return response.text()\n      }).then(function(text) {\n        jlisti = text.split(\u002F\\n\u002F).filter((value) => value !== ''); \n        for (let item of jlisti) {\n        jisshui.insertAdjacentHTML('beforeend',`\u003Cfigure>\u003Cimg src=\"img\u002F${item}\">\u003Cfigcaption>\u003Ca href=\"img\u002F${item}\" onclick=\"return confirm('画像を開きますか？');\">${item}\u003C\u002Fa>\u003C\u002Ffigcaption>\u003C\u002Ffigure>`);          \n        }        \n      });      \n",[6907],{"type":26,"tag":380,"props":6908,"children":6909},{"__ignoreMap":8},[6910],{"type":31,"value":6905},{"type":26,"tag":34,"props":6912,"children":6913},{},[6914],{"type":26,"tag":38,"props":6915,"children":6916},{},[6917],{"type":31,"value":6918},"同じ要領で、jisshu\u002Findex.htmlに以下のコードを入れ、html一覧を表示させる。",{"type":26,"tag":375,"props":6920,"children":6922},{"code":6921},"      fetch(urlh,{cache: \"no-store\"}).then(function(response) {\n        return response.text()\n      }).then(function(text) {\n        jlisth = text.split(\u002F\\n\u002F).filter((value) => value !== '');\n        for (let item of jlisth) {\n        jisshuh.insertAdjacentHTML('beforeend',`　\u003Ca href=\"${item}\" target=\"_blank\">${item}\u003C\u002Fa>　`);          \n        }\n      });\n",[6923],{"type":26,"tag":380,"props":6924,"children":6925},{"__ignoreMap":8},[6926],{"type":31,"value":6921},{"type":26,"tag":34,"props":6928,"children":6929},{},[6930],{"type":26,"tag":38,"props":6931,"children":6932},{},[6933,6935,6941],{"type":31,"value":6934},"画像ファイル名一覧・htmlファイル名一覧の取得は、通常はサーバサイドプログラミングの出番。今回は、「指導者の方へ」で以下のShellコマンドを実行してもらう形にした。",{"type":26,"tag":380,"props":6936,"children":6938},{"className":6937},[],[6939],{"type":31,"value":6940},"{cache: \"no-store\"}",{"type":31,"value":6942}," でfetchし、キャッシュを読まないようにしているが、「リストを最新の状態にしたのに一覧が古いまま」ということがたまにあったので、対策を追記した。",{"type":26,"tag":375,"props":6944,"children":6946},{"code":6945},"cd jisshu\nls *.html > yourhtml.txt\nls img\u002F > yourimg.txt\n",[6947],{"type":26,"tag":380,"props":6948,"children":6949},{"__ignoreMap":8},[6950],{"type":31,"value":6945},{"type":26,"tag":34,"props":6952,"children":6953},{},[6954,6959,6980,7000],{"type":26,"tag":38,"props":6955,"children":6956},{},[6957],{"type":31,"value":6958},"iPadなどのモバイルOSの場合、画像やクリップボードの扱いがPCとは異なるので注意が必要。JavaScriptの命令がうまく働かないことが多々ある。",{"type":26,"tag":38,"props":6960,"children":6961},{},[6962,6964,6970,6972,6978],{"type":31,"value":6963},"iPadで画像をロングタップして",{"type":26,"tag":380,"props":6965,"children":6967},{"className":6966},[],[6968],{"type":31,"value":6969},"コピー",{"type":31,"value":6971},"し、SocPadに",{"type":26,"tag":380,"props":6973,"children":6975},{"className":6974},[],[6976],{"type":31,"value":6977},"貼り付け",{"type":31,"value":6979}," をしても何も貼り付けられない。仕方ないので、ckeditor5-34.1.0へアップデイトしたうえでAutoImage pluginを有効にした。これで、画像URLを貼り付ければ画像が挿入される。",{"type":26,"tag":38,"props":6981,"children":6982},{},[6983,6985,6991,6993,6998],{"type":31,"value":6984},"ところが、画像をロングタップしても",{"type":26,"tag":380,"props":6986,"children":6988},{"className":6987},[],[6989],{"type":31,"value":6990},"画像のアドレスをコピー",{"type":31,"value":6992},"が出ない。ファイル名をクリックすると画像を開くようにしたのはこのためで、アドレス欄をロングタップ-",{"type":26,"tag":380,"props":6994,"children":6996},{"className":6995},[],[6997],{"type":31,"value":6969},{"type":31,"value":6999}," でようやく画像URLがコピーされる。",{"type":26,"tag":38,"props":7001,"children":7002},{},[7003],{"type":31,"value":7004},"他にも方法は考えられるが、Appleが年々クリップボードのセキュリティを厳しくしているので、ユーザーに意識的操作をさせた方がよいと判断した。",{"type":26,"tag":54,"props":7006,"children":7008},{"id":7007},"presen",[],{"type":26,"tag":179,"props":7010,"children":7012},{"className":7011},[1207],[7013,7014,7027,7028],{"type":31,"value":1210},{"type":26,"tag":179,"props":7015,"children":7017},{"className":7016},[1214],[7018],{"type":26,"tag":42,"props":7019,"children":7022},{"target":1218,"rel":7020,"href":7021},[1220],"https:\u002F\u002Fhb.afl.rakuten.co.jp\u002Fichiba\u002F26ba9fc2.c2fdf85a.26ba9fc3.8edde063\u002F_RTLink57021?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15832001%2F&link_type=hybrid_url&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJ1cCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MSwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjAsInByb2QiOjAsImFtcCI6ZmFsc2V9",[7023],{"type":26,"tag":69,"props":7024,"children":7026},{"src":7025},"https:\u002F\u002Fthumbnail.image.rakuten.co.jp\u002F@0_mall\u002Fbook\u002Fcabinet\u002F5870\u002F9784478105870.jpg?_ex=240x240",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":7029,"children":7031},{"className":7030},[1231],[7032,7033,7043,7044,7063,7064,7101],{"type":31,"value":1234},{"type":26,"tag":179,"props":7034,"children":7036},{"className":7035},[1238],[7037],{"type":26,"tag":42,"props":7038,"children":7040},{"target":1218,"rel":7039,"href":7021},[1220],[7041],{"type":31,"value":7042},"プレゼン資料のデザイン図鑑 [ 前田 鎌利 ]",{"type":31,"value":1234},{"type":26,"tag":179,"props":7045,"children":7047},{"className":7046},[1250],[7048,7051,7053,7056,7058,7061],{"type":26,"tag":54,"props":7049,"children":7050},{},[],{"type":31,"value":7052},"※ コンテンツ作成では、伝わるデザインが大切です。",{"type":26,"tag":54,"props":7054,"children":7055},{},[],{"type":31,"value":7057},"ハダノは、今の学校教育にはプレゼン指導が欠けていると思います。",{"type":26,"tag":54,"props":7059,"children":7060},{},[],{"type":31,"value":7062},"この本は、豊富な実例をもとにプレゼンの極意が述べられていて、目からうろこでした。",{"type":31,"value":1234},{"type":26,"tag":179,"props":7065,"children":7067},{"className":7066},[1266,1267],[7068,7069,7078,7079,7089,7090,7100],{"type":31,"value":1270},{"type":26,"tag":179,"props":7070,"children":7071},{},[7072],{"type":26,"tag":42,"props":7073,"children":7076},{"className":7074,"target":1218,"rel":7075,"href":7021},[1277,1278],[1220],[7077],{"type":31,"value":1282},{"type":31,"value":1284},{"type":26,"tag":179,"props":7080,"children":7081},{},[7082],{"type":26,"tag":42,"props":7083,"children":7087},{"className":7084,"target":1218,"rel":7085,"href":7086},[1277,1291],[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4478105871",[7088],{"type":31,"value":1296},{"type":31,"value":1284},{"type":26,"tag":179,"props":7091,"children":7092},{},[7093],{"type":26,"tag":42,"props":7094,"children":7098},{"className":7095,"target":1218,"rel":7096,"href":7097},[1277,1304],[1220],"https:\u002F\u002Fck.jp.ap.valuecommerce.com\u002Fservlet\u002Freferral?sid=3651993&pid=887947441&vc_url=https%3A%2F%2Fstore.shopping.yahoo.co.jp%2Fbookfan%2Fbk-4478105871.html%3Fsc_i%3Dshp_pc_search_itemlist_shsrg_title",[7099],{"type":31,"value":1309},{"type":31,"value":1234},{"type":31,"value":1210},{"type":26,"tag":54,"props":7103,"children":7104},{},[],{"type":26,"tag":319,"props":7106,"children":7107},{},[],{"type":26,"tag":27,"props":7109,"children":7110},{},[7111],{"type":26,"tag":42,"props":7112,"children":7114},{"href":7113},"\u002Farticles\u002Fsocsaga-1",[7115],{"type":31,"value":7116},"←前へ　プログラミングシステム「ソックサーガ」を作ってみた",{"title":8,"searchDepth":324,"depth":324,"links":7118},[7119,7120,7121],{"id":6646,"depth":324,"text":6649},{"id":6734,"depth":324,"text":6737},{"id":6846,"depth":324,"text":6846},"content:articles:socsaga-2.md","articles\u002Fsocsaga-2.md","articles\u002Fsocsaga-2",{"_path":7126,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":7127,"description":7128,"category":7129,"tag":7130,"thumbnail":7132,"createdAt":7133,"updatedAt":7134,"body":7135,"_type":1519,"_id":7507,"_source":1521,"_file":7508,"_stem":7509,"_extension":1524},"\u002Farticles\u002Fcloudide-1","クラウド統合開発環境でWebアプリの自校運用を","Webアプリの自校運用に最適なクラウド統合開発環境を探し求め、GlitchからReplitに乗り換えた話",[12],[16,15,1529,7131,1530],"soclicker","replsaga1.jpg","2022\u002F6\u002F21","2022\u002F7\u002F1",{"type":23,"children":7136,"toc":7497},[7137,7142,7145,7151,7156,7162,7175,7178,7183,7186,7192,7197,7211,7217,7229,7234,7239,7245,7330,7333,7338,7341,7347,7352,7356,7377,7381,7474,7477,7480,7488],{"type":26,"tag":27,"props":7138,"children":7139},{},[7140],{"type":31,"value":7141},"　この記事では、「Webアプリの自校運用に最適なクラウド統合開発環境を探し求め、Glitch（グリッチ）から Replit（リプリット）に乗り換えた話」を紹介します。",{"type":26,"tag":54,"props":7143,"children":7144},{},[],{"type":26,"tag":58,"props":7146,"children":7148},{"id":7147},"学校教育にふさわしいのはwebアプリ",[7149],{"type":31,"value":7150},"学校教育にふさわしいのは、Webアプリ",{"type":26,"tag":27,"props":7152,"children":7153},{},[7154],{"type":31,"value":7155},"　「コンピュータ、ソフトなければただの箱」です。各校とも自校の機種用のアプリを導入します。教員や教育委員会担当者がソフトウェアにくわしくなければ、業者のいいなりです。多くの場合、ネイティブアプリを有料で導入することになります。アプリ自体は無料であってもインストール手数料を取られます。",{"type":26,"tag":90,"props":7157,"children":7159},{"id":7158},"ネイティブアプリとwebアプリの違い",[7160],{"type":31,"value":7161},"ネイティブアプリとWebアプリの違い",{"type":26,"tag":34,"props":7163,"children":7164},{},[7165,7170],{"type":26,"tag":38,"props":7166,"children":7167},{},[7168],{"type":31,"value":7169},"ネイティブアプリは各OS用に作られたアプリなので、機能・性能をとことん追求できる。OSごとに別々のアプリが必要。開発・登録にお金がかかり、インストールが必要。",{"type":26,"tag":38,"props":7171,"children":7172},{},[7173],{"type":31,"value":7174},"Webアプリはブラウザ上で動くので、ネットさえあればOK。一つのアプリで汎用的に使えるが、機能・性能はほどほど。お金をかけずに開発でき、インストールは不要。",{"type":26,"tag":54,"props":7176,"children":7177},{},[],{"type":26,"tag":27,"props":7179,"children":7180},{},[7181],{"type":31,"value":7182},"　このような違いを考えると、予算の乏しい学校ではWebアプリを中心にした方がよいことになります。業者はWebアプリからは利益が得られないので、いい顔はしないと思います。WebアプリはWeb上に配置され、そのアドレスを知っていればだれでも使うことができます。ほとんどの場合、無料です。",{"type":26,"tag":54,"props":7184,"children":7185},{},[],{"type":26,"tag":58,"props":7187,"children":7189},{"id":7188},"webアプリを自校運用するには",[7190],{"type":31,"value":7191},"Webアプリを自校運用するには",{"type":26,"tag":27,"props":7193,"children":7194},{},[7195],{"type":31,"value":7196},"　Webアプリの中には、データを蓄積するタイプもあります。すでにWeb上に配置されているWebアプリの場合、データ領域も無料で使わせてくれることがあります。ただし、容量に制限があったり、保存期間が決まっていたり、秘密が守られなかったり、突然サービスが終了したりします。「容量を気にせず、自在にデータを扱いたい」場合、一般的には自力でサーバーを立てて運用する必要があります。サーバーサイドプログラミングをはじめとする専門知識や費用が必要となり、手が出ません。",{"type":26,"tag":27,"props":7198,"children":7199},{},[7200,7202,7209],{"type":31,"value":7201},"　それを解決するのが、",{"type":26,"tag":42,"props":7203,"children":7206},{"href":7204,"rel":7205},"https:\u002F\u002Fvitalify.jp\u002Fapp-lab\u002Fvietnam-offshore\u002F20181128-saaspaas\u002F#2-1_BaasmBaas",[734],[7207],{"type":31,"value":7208},"🔗Paas(Platform as a Service)やBaas(Backend as a Service)などのクラウドサービス",{"type":31,"value":7210},"です。無料でもけっこう使えるものがあります。ハダノは、プログラミングにはクラウド統合開発環境、データベースにはFirebaseを使います。これらを使えば、Webアプリを自校運用することができます。大切な教育データを自校で管理できて、安心・便利です。生徒の作品やコードの管理はもちろん、ソックリッカーの先生名の削除も自分でできるのです。",{"type":26,"tag":90,"props":7212,"children":7214},{"id":7213},"クラウド統合開発環境のおすすめは",[7215],{"type":31,"value":7216},"クラウド統合開発環境のおすすめは？",{"type":26,"tag":27,"props":7218,"children":7219},{},[7220,7221,7227],{"type":31,"value":976},{"type":26,"tag":42,"props":7222,"children":7224},{"href":7223},"#masatolan",[7225],{"type":31,"value":7226},"🔗JavaScriptでいきなり機械学習を遊び倒す本",{"type":31,"value":7228}," では、２つのおすすめが紹介されていました。",{"type":26,"tag":27,"props":7230,"children":7231},{},[7232],{"type":31,"value":7233},"　Glitch（グリッチ） と Replit（リプリット） です。どちらも似た特徴を持っています。GlitchはJavaScriptに特化、Replitは50以上のプログラミング言語対応です。ハダノはJavaScript主体なので、はじめはGlitchを使っていました。ボタン一つでFirebaseにデプロイできるのもGlitchの魅力でした。",{"type":26,"tag":27,"props":7235,"children":7236},{},[7237],{"type":31,"value":7238},"　2022年になって状況が変わってきたので、自分なりにGlitchとReplitの特徴を整理してみました。",{"type":26,"tag":90,"props":7240,"children":7242},{"id":7241},"glitchとreplitの比較gとr",[7243],{"type":31,"value":7244},"GlitchとReplitの比較【GとR】",{"type":26,"tag":34,"props":7246,"children":7247},{},[7248,7261,7274,7287,7302,7317],{"type":26,"tag":38,"props":7249,"children":7250},{},[7251,7253],{"type":31,"value":7252},"プロジェクト名は、Gは自動でつき、Rは自分で設定する。",{"type":26,"tag":2292,"props":7254,"children":7255},{},[7256],{"type":26,"tag":285,"props":7257,"children":7258},{},[7259],{"type":31,"value":7260},"Rの方がわかりやすい。",{"type":26,"tag":38,"props":7262,"children":7263},{},[7264,7266],{"type":31,"value":7265},"どちらもしばらくアクセスしないとスリープする。Rは10秒程度で復帰するが、Gは時間がかかることが多い。エラーでリロードすることもしばしば。",{"type":26,"tag":2292,"props":7267,"children":7268},{},[7269],{"type":26,"tag":285,"props":7270,"children":7271},{},[7272],{"type":31,"value":7273},"Rの方がストレスが少ない。",{"type":26,"tag":38,"props":7275,"children":7276},{},[7277,7279],{"type":31,"value":7278},"Firebase Hostingにデプロイすればスリープしなくなる。Gは以前はボタン一つでデプロイできるのを売りにしていたが、2022年になって画面デザインが変わってボタンが表示されなくなった。GlitchとFirebaseに報告したが、返答なし。TERMINAL欄にShellコマンドを打ち込めばデプロイできるが、きわめて煩雑。同じようにすれば ",{"type":26,"tag":2292,"props":7280,"children":7281},{},[7282],{"type":26,"tag":285,"props":7283,"children":7284},{},[7285],{"type":31,"value":7286},"Rでもデプロイできるが、そこまでの必要性を感じない。",{"type":26,"tag":38,"props":7288,"children":7289},{},[7290,7292,7300],{"type":31,"value":7291},"ファイルやフォルダの扱いは両者で異なる。Gは一つずつしかアップロードできないし、圧縮ファイルや画像ファイルはassetsフォルダにはいる。カレントディレクトリに入れたり、解凍したりするためには、TERMINAL欄に複雑なコマンドを打ち込む必要がある。Rは、ローカルファイルをごそっとドラッグ＆ドロップするだけで、フォルダ階層を保ったままアップロードできる。",{"type":26,"tag":2292,"props":7293,"children":7294},{},[7295],{"type":26,"tag":285,"props":7296,"children":7297},{},[7298],{"type":31,"value":7299},"Rの方がファイルの扱いが簡単。",{"type":31,"value":7301}," ただ、簡単すぎて生徒が違う階層に移動させてしまうおそれはある。",{"type":26,"tag":38,"props":7303,"children":7304},{},[7305,7307,7315],{"type":31,"value":7306},"画像の一覧を見たい場合、",{"type":26,"tag":2292,"props":7308,"children":7309},{},[7310],{"type":26,"tag":285,"props":7311,"children":7312},{},[7313],{"type":31,"value":7314},"Gは、assetsフォルダの一覧表示があって便利。",{"type":31,"value":7316}," Rは、画像をimgフォルダなどに入れ、プログラムで一覧表示させるしかない。",{"type":26,"tag":38,"props":7318,"children":7319},{},[7320,7322],{"type":31,"value":7321},"PREVIEW欄（Output欄）は、両者ともルートのindex.htmlが表示され、コード編集欄とは連動しない。Gはルート以下のパスを打ち込めるが、Rは固定なので新しいウィンドウで開く必要がある。タブレットでの操作などを考えると、",{"type":26,"tag":2292,"props":7323,"children":7324},{},[7325],{"type":26,"tag":285,"props":7326,"children":7327},{},[7328],{"type":31,"value":7329},"別ウィンドウでプレビューする方が現実的なので、GもRも差はない。",{"type":26,"tag":54,"props":7331,"children":7332},{},[],{"type":26,"tag":27,"props":7334,"children":7335},{},[7336],{"type":31,"value":7337},"……ということで、おおむねReplitの方が使いやすそうです。",{"type":26,"tag":54,"props":7339,"children":7340},{},[],{"type":26,"tag":58,"props":7342,"children":7344},{"id":7343},"replitに乗り換えよう",[7345],{"type":31,"value":7346},"Replitに乗り換えよう",{"type":26,"tag":27,"props":7348,"children":7349},{},[7350],{"type":31,"value":7351},"　Glitchは、アップデートのたびに使いにくくなり、方向性も微妙にずれてきていると感じます。1年以上使って慣れているという利点を捨ててでも、Replitに乗り換えようと決めました。",{"type":26,"tag":27,"props":7353,"children":7354},{},[7355],{"type":31,"value":6870},{"type":26,"tag":27,"props":7357,"children":7358},{},[7359,7360,7366,7368,7375],{"type":31,"value":976},{"type":26,"tag":42,"props":7361,"children":7364},{"href":7362,"rel":7363},"https:\u002F\u002Fkyodx.com\u002Ftag\u002Fsocsaga",[734],[7365],{"type":31,"value":1606},{"type":31,"value":7367}," と ",{"type":26,"tag":42,"props":7369,"children":7372},{"href":7370,"rel":7371},"https:\u002F\u002Fkyodx.com\u002Ftag\u002Fsoclicker",[734],[7373],{"type":31,"value":7374},"🔗ソックリッカー",{"type":31,"value":7376}," のReplitによる自校運用も提案していきます。",{"type":26,"tag":54,"props":7378,"children":7380},{"id":7379},"masatolan",[],{"type":26,"tag":179,"props":7382,"children":7384},{"className":7383},[1207],[7385,7386,7399,7400],{"type":31,"value":1210},{"type":26,"tag":179,"props":7387,"children":7389},{"className":7388},[1214],[7390],{"type":26,"tag":42,"props":7391,"children":7394},{"target":1218,"rel":7392,"href":7393},[1220],"https:\u002F\u002Fhb.afl.rakuten.co.jp\u002Fichiba\u002F26ba9fc2.c2fdf85a.26ba9fc3.8edde063\u002F_RTLink57019?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F16500601%2F&link_type=hybrid_url&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJ1cCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MSwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjAsInByb2QiOjAsImFtcCI6ZmFsc2V9",[7395],{"type":26,"tag":69,"props":7396,"children":7398},{"src":7397},"https:\u002F\u002Fthumbnail.image.rakuten.co.jp\u002F@0_mall\u002Fbook\u002Fcabinet\u002F9041\u002F9784844379041.jpg?_ex=240x240",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":7401,"children":7403},{"className":7402},[1231],[7404,7405,7415,7416,7435,7436,7473],{"type":31,"value":1234},{"type":26,"tag":179,"props":7406,"children":7408},{"className":7407},[1238],[7409],{"type":26,"tag":42,"props":7410,"children":7412},{"target":1218,"rel":7411,"href":7393},[1220],[7413],{"type":31,"value":7414},"JavaScriptでいきなり機械学習を遊び倒す本 （技術の泉シリーズ（NextPublishing）） [ まさとらん ]",{"type":31,"value":1234},{"type":26,"tag":179,"props":7417,"children":7419},{"className":7418},[1250],[7420,7423,7425,7428,7430,7433],{"type":26,"tag":54,"props":7421,"children":7422},{},[],{"type":31,"value":7424},"※ 最新WebサービスとJavaScript関連の情報を提供してくれる「まさとらん」さんの記事に、ハダノはいつも助けられています。",{"type":26,"tag":54,"props":7426,"children":7427},{},[],{"type":31,"value":7429},"この本も入口の部分をていねいに教えてくれます。",{"type":26,"tag":54,"props":7431,"children":7432},{},[],{"type":31,"value":7434},"GlitchとReplitに出会えてよかったと思います。",{"type":31,"value":1234},{"type":26,"tag":179,"props":7437,"children":7439},{"className":7438},[1266,1267],[7440,7441,7450,7451,7461,7462,7472],{"type":31,"value":1270},{"type":26,"tag":179,"props":7442,"children":7443},{},[7444],{"type":26,"tag":42,"props":7445,"children":7448},{"className":7446,"target":1218,"rel":7447,"href":7393},[1277,1278],[1220],[7449],{"type":31,"value":1282},{"type":31,"value":1284},{"type":26,"tag":179,"props":7452,"children":7453},{},[7454],{"type":26,"tag":42,"props":7455,"children":7459},{"className":7456,"target":1218,"rel":7457,"href":7458},[1277,1291],[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB08L7LXNDC",[7460],{"type":31,"value":1296},{"type":31,"value":1284},{"type":26,"tag":179,"props":7463,"children":7464},{},[7465],{"type":26,"tag":42,"props":7466,"children":7470},{"className":7467,"target":1218,"rel":7468,"href":7469},[1277,1304],[1220],"https:\u002F\u002Fck.jp.ap.valuecommerce.com\u002Fservlet\u002Freferral?sid=3651993&pid=887949559&vc_url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Ffirst%3D1%26ss_first%3D1%26ts%3D1662382850%26mcr%3D06c8cb50c083cad35f8b6072fe936496%26tab_ex%3Dcommerce%26sretry%3D0%26area%3D13%26astk%3D%26aq%3D%26oq%3D%26p%3DJavaScript%25E3%2581%25A7%25E3%2581%2584%25E3%2581%258D%25E3%2581%25AA%25E3%2582%258A%25E6%25A9%259F%25E6%25A2%25B0%25E5%25AD%25A6%25E7%25BF%2592%25E3%2582%2592%25E9%2581%258A%25E3%2581%25B3%25E5%2580%2592%25E3%2581%2599%25E6%259C%25AC%2B%25EF%25BC%2588%25E6%258A%2580%25E8%25A1%2593%25E3%2581%25AE%25E6%25B3%2589%25E3%2582%25B7%25E3%2583%25AA%25E3%2583%25BC%25E3%2582%25BA%25EF%25BC%2588NextPublishing%25EF%25BC%2589%25EF%25BC%2589%2B%255B%2B%25E3%2581%25BE%25E3%2581%2595%25E3%2581%25A8%25E3%2582%2589%25E3%2582%2593%2B%255D%26sc_i%3Dshp_pc_search_searchBox_2",[7471],{"type":31,"value":1309},{"type":31,"value":1234},{"type":31,"value":1210},{"type":26,"tag":54,"props":7475,"children":7476},{},[],{"type":26,"tag":319,"props":7478,"children":7479},{},[],{"type":26,"tag":27,"props":7481,"children":7482},{},[7483],{"type":26,"tag":42,"props":7484,"children":7485},{"href":6626},[7486],{"type":31,"value":7487},"→　ソックサーガの始め方【自校運用】",{"type":26,"tag":27,"props":7489,"children":7490},{},[7491],{"type":26,"tag":42,"props":7492,"children":7494},{"href":7493},"\u002Farticles\u002Fsoclicker-3",[7495],{"type":31,"value":7496},"→　ソックリッカーの始め方【自校運用】",{"title":8,"searchDepth":324,"depth":324,"links":7498},[7499,7502,7506],{"id":7147,"depth":324,"text":7150,"children":7500},[7501],{"id":7158,"depth":362,"text":7161},{"id":7188,"depth":324,"text":7191,"children":7503},[7504,7505],{"id":7213,"depth":362,"text":7216},{"id":7241,"depth":362,"text":7244},{"id":7343,"depth":324,"text":7346},"content:articles:cloudide-1.md","articles\u002Fcloudide-1.md","articles\u002Fcloudide-1",{"_path":7113,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":7511,"description":7512,"category":7513,"tag":7514,"thumbnail":6631,"createdAt":7515,"updatedAt":7516,"body":7517,"_type":1519,"_id":8698,"_source":1521,"_file":8699,"_stem":8700,"_extension":1524},"プログラミングシステム「ソックサーガ」を作ってみた","ローコードで専門知識不要、個性が出せるので評価しやすく、共同制作もできるコンテンツプログラミングシステム",[12],[1529,16,15,1530,1531],"2022\u002F5\u002F5","2022\u002F6\u002F29",{"type":23,"children":7518,"toc":8685},[7519,7524,7533,7536,7542,7557,7562,7573,7578,7581,7587,7592,7597,7600,7605,7610,7613,7644,7649,7654,7665,7668,7674,7680,7694,7699,7704,7707,7713,7716,7725,7730,7735,7738,7799,7802,7807,7812,7817,7820,7825,7828,7833,7836,7842,7845,7855,7860,7875,7878,7886,7895,7900,7912,7925,7962,7965,7970,7973,7986,7989,7995,8001,8019,8028,8034,8290,8296,8324,8330,8394,8400,8462,8467,8472,8476,8482,8496,8499,8504,8507,8512,8517,8574,8578,8671,8674,8677],{"type":26,"tag":27,"props":7520,"children":7521},{},[7522],{"type":31,"value":7523},"　この記事では、新しい中学校プログラミング教育に対応するシステム「ソックサーガ」を紹介します。ソックリッカー制作の経験を活かし、最新技術をふんだんに取りいれて作りました。ローコードで専門知識不要、個性が出せるので評価しやすく、共同制作もできるコンテンツプログラミングシステムをめざしました。未履修問題の解決に役立つかどうか、お確かめください。",{"type":26,"tag":27,"props":7525,"children":7526},{"style":1566},[7527,7528],{"type":31,"value":1569},{"type":26,"tag":42,"props":7529,"children":7531},{"href":7530},"#socsagademo",[7532],{"type":31,"value":1575},{"type":26,"tag":54,"props":7534,"children":7535},{},[],{"type":26,"tag":58,"props":7537,"children":7539},{"id":7538},"中学校プログラミング教育は未履修問題が心配",[7540],{"type":31,"value":7541},"中学校プログラミング教育は未履修問題が心配！？",{"type":26,"tag":27,"props":7543,"children":7544},{},[7545,7547,7555],{"type":31,"value":7546},"　2021年度から中学校プログラミング教育が大きく変わりました。従来の「ディジタル作品づくり」から、「",{"type":26,"tag":2292,"props":7548,"children":7549},{},[7550],{"type":26,"tag":285,"props":7551,"children":7552},{},[7553],{"type":31,"value":7554},"ネットワークを利用した双方向性のあるコンテンツのプログラミング",{"type":31,"value":7556},"による問題の解決」となったのです。",{"type":26,"tag":27,"props":7558,"children":7559},{},[7560],{"type":31,"value":7561},"　ネットワークがらみのプログラミングは、環境構築の困難さに加え、通信の遅れを考慮した非同期処理・競合解決、セキュリティ対策、OS・ブラウザ・言語の多様性への対応も必要となり、かなりハードルが高くなります。一般的にPHPなどの専用言語を用いたサーバーサイドプログラミングも必要になります。",{"type":26,"tag":27,"props":7563,"children":7564},{},[7565,7566],{"type":31,"value":3166},{"type":26,"tag":42,"props":7567,"children":7570},{"href":7568,"rel":7569},"https:\u002F\u002Fwww.watch.impress.co.jp\u002Fkodomo_it\u002Fnews\u002F1159054.html",[734],[7571],{"type":31,"value":7572},"🔗 「ネットワーク」に「双方向」!?　倍増するプログラミングの学習内容に中学校の現場はどう対応するのか",{"type":26,"tag":27,"props":7574,"children":7575},{},[7576],{"type":31,"value":7577},"　これに対応する教材はたいへん少ないのが現状です。",{"type":26,"tag":54,"props":7579,"children":7580},{},[],{"type":26,"tag":90,"props":7582,"children":7584},{"id":7583},"双方向性のあるコンテンツとは",[7585],{"type":31,"value":7586},"双方向性のあるコンテンツとは？",{"type":26,"tag":27,"props":7588,"children":7589},{},[7590],{"type":31,"value":7591},"　双方向性のあるコンテンツとは、「入力に応答する、人間にとって意味のある情報の内容」です。ロボットを動かす情報はコンテンツではないし、プレゼンや動画などは双方向性のないコンテンツです。さらにコンテンツには、「デジタル化された文字，音声，静止画，動画などのデータを複合化」することが求められています。",{"type":26,"tag":27,"props":7593,"children":7594},{},[7595],{"type":31,"value":7596},"　現代、作品・製品の多くがクリエーターとエンジニアの協力によって生まれています。どちらかといえば、双方向性はエンジニアの比重が、コンテンツはクリエーターの比重が大きいと言えます。もし両者の敷居を低くすることができれば、作品の質は飛躍的に向上するはずです。",{"type":26,"tag":54,"props":7598,"children":7599},{},[],{"type":26,"tag":90,"props":7601,"children":7603},{"id":7602},"技術の教科書が抱える深刻な問題",[7604],{"type":31,"value":7602},{"type":26,"tag":27,"props":7606,"children":7607},{},[7608],{"type":31,"value":7609},"　技術の教科書には５つの実習例が出ていますが、どれも深刻な問題を抱えています。",{"type":26,"tag":54,"props":7611,"children":7612},{},[],{"type":26,"tag":34,"props":7614,"children":7615},{},[7616,7621,7636],{"type":26,"tag":38,"props":7617,"children":7618},{},[7619],{"type":31,"value":7620},"『チャット』・『タイピング練習』は、コンテンツが利用者まかせで貧弱であり、作り手から提供される情報がない。",{"type":26,"tag":38,"props":7622,"children":7623},{},[7624,7626,7634],{"type":31,"value":7625},"『ルート検索』・『英単語の発音チェック』は、魅力的なコンテンツではあるが、外部プログラムを呼び出して使っているだけであり、ほぼ何もプログラミングしていない。つまり、問題解決にプログラムを使っているが",{"type":26,"tag":2292,"props":7627,"children":7628},{},[7629],{"type":26,"tag":285,"props":7630,"children":7631},{},[7632],{"type":31,"value":7633},"作ってはいない",{"type":31,"value":7635},"。",{"type":26,"tag":38,"props":7637,"children":7638},{},[7639,7641],{"type":31,"value":7640},"『防災地図』は、魅力的なコンテンツを双方向的に操作できる可能性があるという点ですばらしい。ただ、望む動作をさせようとした場合、直接 scriptタグ内を正確に書き換える必要がある。数時間の実習で理解して完成させるのは、生徒も教師も不可能に近い。\n",{"type":26,"tag":54,"props":7642,"children":7643},{},[],{"type":26,"tag":27,"props":7645,"children":7646},{},[7647],{"type":31,"value":7648},"　『防災地図』以外の4つのアプリは、Scratch の利用を前提としています。小学生のプログラミング体験にはよくても、本格的な問題解決には向きません。本命は、高速・柔軟で共有・再利用できるテキストプログラミングです。いずれにせよ、「アイディアを形にするプロセス」が難しすぎたり、簡単でも制約が多すぎたりすれば、どの生徒の作品も同じようなものになり、評価が困難になるでしょう。",{"type":26,"tag":27,"props":7650,"children":7651},{},[7652],{"type":31,"value":7653},"　このように、技術の教科書にある5つの実習例は、どれも深刻な問題を抱え、実施も評価も困難です。高い理想に現実が追い付かず、このままでは、ほとんどの中学校で「未履修問題」が発生してしまいます。ITエンジニアからも「教えられる先生はいるのか？という課題」が指摘されました。",{"type":26,"tag":27,"props":7655,"children":7656},{},[7657,7658],{"type":31,"value":3166},{"type":26,"tag":42,"props":7659,"children":7662},{"href":7660,"rel":7661},"https:\u002F\u002Fqiita.com\u002FeXpresser\u002Fitems\u002F1764c2801a1e036f2c50?utm_source=Qiita%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&utm_campaign=fd989cefdb-Qiita_newsletter_469_07_07_2021&utm_medium=email&utm_term=0_e44feaa081-fd989cefdb-34321993",[734],[7663],{"type":31,"value":7664},"🔗 中学校の技術科の教科書(情報分野)が進歩していた件",{"type":26,"tag":54,"props":7666,"children":7667},{},[],{"type":26,"tag":58,"props":7669,"children":7671},{"id":7670},"プログラミングシステムソックサーガで解決",[7672],{"type":31,"value":7673},"プログラミングシステム「ソックサーガ」で解決",{"type":26,"tag":90,"props":7675,"children":7677},{"id":7676},"ネットワークプログラミングはクラウド統合開発環境で解決",[7678],{"type":31,"value":7679},"ネットワークプログラミングは、クラウド統合開発環境で解決",{"type":26,"tag":27,"props":7681,"children":7682},{},[7683,7685,7692],{"type":31,"value":7684},"　ネットワークを利用したプログラミングをしようとすると、テキストエディタで編集→ローカルファイルとして保存→アップロード→ブラウザで確認という手順が必要となり、セキュリティの問題もからみ、煩雑でした。それを解決するのが ",{"type":26,"tag":42,"props":7686,"children":7689},{"href":7687,"rel":7688},"https:\u002F\u002Fwww.naka-sys.okinawa\u002Freplit-used\u002F",[734],[7690],{"type":31,"value":7691},"🔗Replit（リプリット）",{"type":31,"value":7693}," などの「クラウド統合開発環境」です。",{"type":26,"tag":27,"props":7695,"children":7696},{},[7697],{"type":31,"value":7698},"　Replit の上でWebアプリを動かすことで、ビジュアルに複合コンテンツを作り、最小限のコードで双方向性を持たせるシステムを作ってみました。それが SocSaga です。即、サーガ（冒険物語）にいざなう…との願いをこめました。",{"type":26,"tag":27,"props":7700,"children":7701},{},[7702],{"type":31,"value":7703},"　SocSaga を使えば、ローカルファイルを管理する必要がなく、環境構築の手間なしに直接Web上のファイルを編集でき、作品の中身と動作のロジックに集中することができます。　",{"type":26,"tag":54,"props":7705,"children":7706},{},[],{"type":26,"tag":90,"props":7708,"children":7710},{"id":7709},"コンテンツ作りはビジュアルhtmlエディタで解決",[7711],{"type":31,"value":7712},"コンテンツ作りは、ビジュアルHTMLエディタで解決",{"type":26,"tag":54,"props":7714,"children":7715},{},[],{"type":26,"tag":27,"props":7717,"children":7718},{},[7719,7724],{"type":26,"tag":69,"props":7720,"children":7723},{"src":7721,"alt":7722,"width":472},"\u002Fimg\u002Fsocsaga02.svg","socpad",[],{"type":31,"value":976},{"type":26,"tag":27,"props":7726,"children":7727},{},[7728],{"type":31,"value":7729},"　HTMLの文法をマスターするには、相当の時間がかかります。ビジュアルHTMLエディタSocPadの出番です。",{"type":26,"tag":27,"props":7731,"children":7732},{},[7733],{"type":31,"value":7734},"　ソックサーガ用SocPadは、ソックリッカー用SocPadを流用したものです。簡易ワープロ「ワードパッド」に似た操作で簡単です。見たとおりにHTML編集ができます。画像をReplitにアップロードして挿入したり、リンクを挿入したりできるので、メディアを複合化したホームページとして使えます。",{"type":26,"tag":54,"props":7736,"children":7737},{},[],{"type":26,"tag":34,"props":7739,"children":7740},{},[7741,7746,7757,7778],{"type":26,"tag":38,"props":7742,"children":7743},{},[7744],{"type":31,"value":7745},"[保存] ボタンでFirebaseのデータベースに保存するかわりに、[ソース] ボタンを使い、指示に従って直接HTMLファイル内に貼り付ける。HTMLの文法を知らなくても、見たとおりにHTML編集ができる。",{"type":26,"tag":38,"props":7747,"children":7748},{},[7749,7755],{"type":26,"tag":380,"props":7750,"children":7752},{"className":7751},[],[7753],{"type":31,"value":7754},"\u003Csection>\u003C\u002Fsection>",{"type":31,"value":7756}," を追加すれば、新規スライドが追加される。",{"type":26,"tag":38,"props":7758,"children":7759},{},[7760,7762,7768,7770,7776],{"type":31,"value":7761},"sectionタグ内（",{"type":26,"tag":380,"props":7763,"children":7765},{"className":7764},[],[7766],{"type":31,"value":7767},"\u003Csection> ",{"type":31,"value":7769},"と",{"type":26,"tag":380,"props":7771,"children":7773},{"className":7772},[],[7774],{"type":31,"value":7775}," \u003C\u002Fsection>",{"type":31,"value":7777}," の間の部分）にソースを貼り付けると、スライドが保存される。",{"type":26,"tag":38,"props":7779,"children":7780},{},[7781,7783,7789,7791,7797],{"type":31,"value":7782},"別のスライドを編集したいときは、 ",{"type":26,"tag":380,"props":7784,"children":7786},{"className":7785},[],[7787],{"type":31,"value":7788},"～id=\"henshu\">",{"type":31,"value":7790},"（番号）",{"type":26,"tag":380,"props":7792,"children":7794},{"className":7793},[],[7795],{"type":31,"value":7796},"\u003C\u002Fspan>\u003C!--　編集するスライド番号を入れる　-->",{"type":31,"value":7798},"　の番号部分を書き換え、スライド編集エリアの上の ↻ ボタンで更新する。更新すると、編集中のものは消えるので、ソースを貼り付けたか必ず確認すること。心配であれば、メモ帳などにもソースを貼り付けておくとよい。",{"type":26,"tag":54,"props":7800,"children":7801},{},[],{"type":26,"tag":27,"props":7803,"children":7804},{},[7805],{"type":31,"value":7806},"…以上を繰り返して、スライドを１枚１枚作ってゆきます。",{"type":26,"tag":27,"props":7808,"children":7809},{},[7810],{"type":31,"value":7811},"　スライドを作ったら、「編集エリア」の下の「実行エリア」でボタンを押してスライドを切り換えてみます。切り換え動作の設定は、次の『双方向性は、4色ボタン操作で解決』を見てください。",{"type":26,"tag":27,"props":7813,"children":7814},{},[7815],{"type":31,"value":7816},"　すべてのスライドの内容・動作が完成したら、スライド番号部分に ０ を入れます。「実行エリア」だけが表示されるようになるので、URLを公開して人に見せることができます。",{"type":26,"tag":54,"props":7818,"children":7819},{},[],{"type":26,"tag":27,"props":7821,"children":7822},{},[7823],{"type":31,"value":7824},"※ ソックリッカーでは、Firebase の Realtime Database にHTMLを保存し、Storage に画像をアップロードしました。ソックサーガでは、Firebase は使いません。授業配信アプリでは、ユーザーにソースコードや画像素材等を見せる必要はありません。しかし、プログラミング学習では、Replit上ではっきり見える形で取り扱わせる方がよいと考えました。sectionタグ内にソースをはりつけさせるのは、そのためなのです。",{"type":26,"tag":54,"props":7826,"children":7827},{},[],{"type":26,"tag":27,"props":7829,"children":7830},{},[7831],{"type":31,"value":7832},"※ ソックサーガは、「生徒にWebアプリを作らせる」Webアプリです。コンテンツ編集・アプリ実行のためのJavaScriptは、ルートのssscript.jsにまとめて、生徒にさわらせないようにしています。編集モードから実行モードへの切り替えを「スライド番号部分に 0 を入れる」方法にしたのは、評価や指導をやりやすくするためです。",{"type":26,"tag":54,"props":7834,"children":7835},{},[],{"type":26,"tag":90,"props":7837,"children":7839},{"id":7838},"双方向性は4色ボタン操作で解決",[7840],{"type":31,"value":7841},"双方向性は、4色ボタン操作で解決",{"type":26,"tag":54,"props":7843,"children":7844},{},[],{"type":26,"tag":27,"props":7846,"children":7847},{},[7848,7853],{"type":26,"tag":69,"props":7849,"children":7852},{"src":7850,"alt":7851,"width":472},"\u002Fimg\u002Fsocsaga04.svg","socsaga04",[],{"type":31,"value":7854},"　　",{"type":26,"tag":27,"props":7856,"children":7857},{},[7858],{"type":31,"value":7859},"　ソックリッカーでは、TVのリモコンと同じ4色ボタンで投票します。ソックサーガも4色ボタンで操作することにしました。",{"type":26,"tag":27,"props":7861,"children":7862},{},[7863,7865,7873],{"type":31,"value":7864},"　①動作は4色のボタンに割り当て、②飛び先は class属性で指定し、③必要に応じて動作を拡張する という ",{"type":26,"tag":2292,"props":7866,"children":7867},{},[7868],{"type":26,"tag":285,"props":7869,"children":7870},{},[7871],{"type":31,"value":7872},"ローコードプログラミング",{"type":31,"value":7874}," の手法で行います。 「順\n次・分岐・反復」のスライド移動の基本命令は、 xgo(数); という関数で、数によって動作を変えるようにしています。",{"type":26,"tag":54,"props":7876,"children":7877},{},[],{"type":26,"tag":34,"props":7879,"children":7880},{},[7881],{"type":26,"tag":38,"props":7882,"children":7883},{},[7884],{"type":31,"value":7885},"sectionタグには、デフォルト(規定値)で、",{"type":26,"tag":27,"props":7887,"children":7888},{},[7889],{"type":26,"tag":380,"props":7890,"children":7892},{"className":7891},[],[7893],{"type":31,"value":7894},"data-nav=\"nav0:xp+'／'+xpsum; nav1:↑;xgo(-8); nav2:←;xgo(-1); nav3:→;xgo(1);nav4:↓;xgo(8);\"",{"type":26,"tag":27,"props":7896,"children":7897},{},[7898],{"type":31,"value":7899},"というカスタムデータ属性が設定されている。",{"type":26,"tag":34,"props":7901,"children":7902},{},[7903],{"type":26,"tag":38,"props":7904,"children":7905},{},[7906],{"type":26,"tag":380,"props":7907,"children":7909},{"className":7908},[],[7910],{"type":31,"value":7911},"\u003Csection data-nav=\"nav1:先頭へ;xgo(-9);\">",{"type":26,"tag":27,"props":7913,"children":7914},{},[7915,7917,7923],{"type":31,"value":7916},"とすれば、青色のボタン1 だけ、先頭スライドへ移動するよう変更され、他のボタンはデフォルトのままとなる。nav数 のあとに コロン(:)、ボタン文字 のあとセミコロン(;)、そのあとは 命令1;命令2;命令3;…のように各命令のあとにセミコロンを付ける。二重引用符の中で引用符を使うときは、",{"type":26,"tag":380,"props":7918,"children":7920},{"className":7919},[],[7921],{"type":31,"value":7922},"\"nav0:xp+'／'+～\"",{"type":31,"value":7924}," のように単一引用符を使うこと。",{"type":26,"tag":34,"props":7926,"children":7927},{},[7928,7949],{"type":26,"tag":38,"props":7929,"children":7930},{},[7931,7933,7939,7941,7947],{"type":31,"value":7932},"各章の始まりのスライドのsectionタグに ",{"type":26,"tag":380,"props":7934,"children":7936},{"className":7935},[],[7937],{"type":31,"value":7938},"class=\"hp\"",{"type":31,"value":7940}," を入れておけば、デフォルトのままでも「プレゼンテーション」は十分可能。class属性を複数指定する場合は、",{"type":26,"tag":380,"props":7942,"children":7944},{"className":7943},[],[7945],{"type":31,"value":7946},"class=\"hp bk3\"",{"type":31,"value":7948}," のように半角スペースをはさむこと。",{"type":26,"tag":38,"props":7950,"children":7951},{},[7952,7954,7960],{"type":31,"value":7953},"Replitのコードエディタは、行番号の右の ▼ をクリックすることで折りたたむことができる。",{"type":26,"tag":380,"props":7955,"children":7957},{"className":7956},[],[7958],{"type":31,"value":7959},"\u003Csection",{"type":31,"value":7961}," の行を折りたたんでスライドの中身を隠すと、属性の指定がやりやすい。",{"type":26,"tag":54,"props":7963,"children":7964},{},[],{"type":26,"tag":27,"props":7966,"children":7967},{},[7968],{"type":31,"value":7969},"　ソックサーガは、Web標準技術に基づいたテキストプログラミングで主要な機能をラップすることで、入口が広く奥が深い学習を実現しました。将来にわたり役立つ情報活用能力が培われるでしょう。",{"type":26,"tag":54,"props":7971,"children":7972},{},[],{"type":26,"tag":27,"props":7974,"children":7975},{},[7976,7978,7984],{"type":31,"value":7977},"※ ソックサーガは、プロトタイプを jQuery + Firebase Storage + Mery マクロ で作りました。2年間実際に授業してみて、問題点を洗い出し、Vue.js で書き直しました。「可能な限りWeb標準に従う」ことが大切と痛感しました。そのため、Vueのコンポーネントのかわりに「カスタムデータ属性」を使っています。",{"type":26,"tag":380,"props":7979,"children":7981},{"className":7980},[],[7982],{"type":31,"value":7983},"data-***=\"\"",{"type":31,"value":7985},"のような形式で、制作者が自由に指定できる属性です。独自のデータを入力したり、JavaScriptで処理したりできます。HTMLで定義されているグローバル属性なので、将来的に無駄になりません。",{"type":26,"tag":54,"props":7987,"children":7988},{},[],{"type":26,"tag":90,"props":7990,"children":7992},{"id":7991},"発展的な-ソックサーガ-の使い方-余裕ができたら",[7993],{"type":31,"value":7994},"発展的な ソックサーガ の使い方（※ 余裕ができたら……）",{"type":26,"tag":805,"props":7996,"children":7998},{"id":7997},"スライドの背景を指定する",[7999],{"type":31,"value":8000},"① スライドの背景を指定する",{"type":26,"tag":34,"props":8002,"children":8003},{},[8004],{"type":26,"tag":38,"props":8005,"children":8006},{},[8007,8009,8017],{"type":31,"value":8008},"sectionタグのカスタムデータ属性に画像ファイルURLを指定。URLは、",{"type":26,"tag":2292,"props":8010,"children":8011},{},[8012],{"type":26,"tag":285,"props":8013,"children":8014},{},[8015],{"type":31,"value":8016},"jisshu\u002Fimg フォルダ内の画像一覧",{"type":31,"value":8018},"の画像を右クリックし、[画像アドレスをコピー]で。",{"type":26,"tag":27,"props":8020,"children":8021},{},[8022],{"type":26,"tag":380,"props":8023,"children":8025},{"className":8024},[],[8026],{"type":31,"value":8027},"data-bg=\"https:\u002F\u002Fsocsaga.hadano3.repl.co\u002Fjisshu\u002Fimg\u002Fvenndiag.svg\"",{"type":26,"tag":805,"props":8029,"children":8031},{"id":8030},"x関数x変数でボタン動作を拡張する",[8032],{"type":31,"value":8033},"② x関数・x変数でボタン動作を拡張する",{"type":26,"tag":34,"props":8035,"children":8036},{},[8037,8090,8111,8124,8272,8277],{"type":26,"tag":38,"props":8038,"children":8039},{},[8040,8042,8048,8050,8056,8058,8064,8066,8072,8074,8080,8082,8088],{"type":31,"value":8041},"メッセージ表示：",{"type":26,"tag":380,"props":8043,"children":8045},{"className":8044},[],[8046],{"type":31,"value":8047},"xmsg('メッセージ','入力文');",{"type":31,"value":8049}," 入力文を省略したら ",{"type":26,"tag":380,"props":8051,"children":8053},{"className":8052},[],[8054],{"type":31,"value":8055},"alert",{"type":31,"value":8057}," 、",{"type":26,"tag":380,"props":8059,"children":8061},{"className":8060},[],[8062],{"type":31,"value":8063},"'OK'",{"type":31,"value":8065},"なら ",{"type":26,"tag":380,"props":8067,"children":8069},{"className":8068},[],[8070],{"type":31,"value":8071},"confirm",{"type":31,"value":8073}," 、それ以外は ",{"type":26,"tag":380,"props":8075,"children":8077},{"className":8076},[],[8078],{"type":31,"value":8079},"prompt",{"type":31,"value":8081}," と同じ動作をする。戻り値は",{"type":26,"tag":380,"props":8083,"children":8085},{"className":8084},[],[8086],{"type":31,"value":8087},"xm",{"type":31,"value":8089},"に代入される。",{"type":26,"tag":38,"props":8091,"children":8092},{},[8093,8095,8101,8103,8109],{"type":31,"value":8094},"乱数：",{"type":26,"tag":380,"props":8096,"children":8098},{"className":8097},[],[8099],{"type":31,"value":8100},"xran(数);",{"type":31,"value":8102}," 1～数 までのランダムな自然数を作る。数を省略したら 6 がはいりサイコロに使える。戻り値は、",{"type":26,"tag":380,"props":8104,"children":8106},{"className":8105},[],[8107],{"type":31,"value":8108},"xr",{"type":31,"value":8110}," に。",{"type":26,"tag":38,"props":8112,"children":8113},{},[8114,8116,8122],{"type":31,"value":8115},"待機：",{"type":26,"tag":380,"props":8117,"children":8119},{"className":8118},[],[8120],{"type":31,"value":8121},"xwait(数);",{"type":31,"value":8123}," 数秒間待機してから次の命令を実行する。",{"type":26,"tag":38,"props":8125,"children":8126},{},[8127,8129,8135,8137,8143,8145,8151,8153,8159,8161,8167,8169,8175,8177,8183,8185,8191,8193,8199,8201,8207,8209,8215,8217,8223,8225,8231,8233,8239,8241,8247,8249,8255,8256,8262,8264,8270],{"type":31,"value":8128},"x変数：",{"type":26,"tag":380,"props":8130,"children":8132},{"className":8131},[],[8133],{"type":31,"value":8134},"xc",{"type":31,"value":8136},"【クリックしたボタン番号】、",{"type":26,"tag":380,"props":8138,"children":8140},{"className":8139},[],[8141],{"type":31,"value":8142},"xe",{"type":31,"value":8144},"【エネルギー】、",{"type":26,"tag":380,"props":8146,"children":8148},{"className":8147},[],[8149],{"type":31,"value":8150},"xf",{"type":31,"value":8152},"【ファイル名】、",{"type":26,"tag":380,"props":8154,"children":8156},{"className":8155},[],[8157],{"type":31,"value":8158},"xg",{"type":31,"value":8160},"【移動後のスライドナンバー】、",{"type":26,"tag":380,"props":8162,"children":8164},{"className":8163},[],[8165],{"type":31,"value":8166},"xp",{"type":31,"value":8168},"【現在のスライドナンバー】、\n",{"type":26,"tag":380,"props":8170,"children":8172},{"className":8171},[],[8173],{"type":31,"value":8174},"xpsum",{"type":31,"value":8176},"【スライド総数】、",{"type":26,"tag":380,"props":8178,"children":8180},{"className":8179},[],[8181],{"type":31,"value":8182},"xs",{"type":31,"value":8184},"【スコア】、",{"type":26,"tag":380,"props":8186,"children":8188},{"className":8187},[],[8189],{"type":31,"value":8190},"xt",{"type":31,"value":8192},"【ターン数】、",{"type":26,"tag":380,"props":8194,"children":8196},{"className":8195},[],[8197],{"type":31,"value":8198},"xu",{"type":31,"value":8200},"【ユーザーデータ】、",{"type":26,"tag":380,"props":8202,"children":8204},{"className":8203},[],[8205],{"type":31,"value":8206},"xuu[数]",{"type":31,"value":8208},"【ユーザーデータ配列】…状態フラグとして使うのに便利な関数がある｛",{"type":26,"tag":380,"props":8210,"children":8212},{"className":8211},[],[8213],{"type":31,"value":8214},"xuuon(数);",{"type":31,"value":8216}," フラグオン、",{"type":26,"tag":380,"props":8218,"children":8220},{"className":8219},[],[8221],{"type":31,"value":8222},"xuuoff(数);",{"type":31,"value":8224}," フラグオフ、",{"type":26,"tag":380,"props":8226,"children":8228},{"className":8227},[],[8229],{"type":31,"value":8230},"xuutog(数);",{"type":31,"value":8232}," フラグ反転｝、",{"type":26,"tag":380,"props":8234,"children":8236},{"className":8235},[],[8237],{"type":31,"value":8238},"xcc[数]",{"type":31,"value":8240},"【ボタン無効化配列】…",{"type":26,"tag":380,"props":8242,"children":8244},{"className":8243},[],[8245],{"type":31,"value":8246},"xuu",{"type":31,"value":8248},"と同様な関数で",{"type":26,"tag":380,"props":8250,"children":8252},{"className":8251},[],[8253],{"type":31,"value":8254},"xcc[0]",{"type":31,"value":7769},{"type":26,"tag":380,"props":8257,"children":8259},{"className":8258},[],[8260],{"type":31,"value":8261},"xcc[番]",{"type":31,"value":8263},"をオンでボタン無効化、",{"type":26,"tag":380,"props":8265,"children":8267},{"className":8266},[],[8268],{"type":31,"value":8269},"xccreset();",{"type":31,"value":8271}," ですべて有効化。",{"type":26,"tag":38,"props":8273,"children":8274},{},[8275],{"type":31,"value":8276},"JavaScriptの命令がほぼ使えるが、コード量節約のため、ショートハンドを使うとよい。 if文のかわりに→三項演算子…など。",{"type":26,"tag":38,"props":8278,"children":8279},{},[8280,8282,8288],{"type":31,"value":8281},"テストボタンの ",{"type":26,"tag":380,"props":8283,"children":8285},{"className":8284},[],[8286],{"type":31,"value":8287},"data-test = “命令文”",{"type":31,"value":8289}," を書き換えて、ボタン動作のテストができる。",{"type":26,"tag":805,"props":8291,"children":8293},{"id":8292},"アニメーションで画面に躍動感を与える",[8294],{"type":31,"value":8295},"③ アニメーションで画面に躍動感を与える",{"type":26,"tag":34,"props":8297,"children":8298},{},[8299,8319],{"type":26,"tag":38,"props":8300,"children":8301},{},[8302,8304,8310,8312,8318],{"type":31,"value":8303},"x関数の ",{"type":26,"tag":380,"props":8305,"children":8307},{"className":8306},[],[8308],{"type":31,"value":8309},"xanim(オブジェクト);",{"type":31,"value":8311}," でスライドの中の要素を時間を追って変化させることができる。アニメーションオブジェクトの書式は、anime.js に従う。戻り値は、",{"type":26,"tag":380,"props":8313,"children":8315},{"className":8314},[],[8316],{"type":31,"value":8317},"xa",{"type":31,"value":8110},{"type":26,"tag":38,"props":8320,"children":8321},{},[8322],{"type":31,"value":8323},"Wick Editor というフリーのWebアプリで手軽に Gifアニメ を作ることができる。軽量化して使うとよい。",{"type":26,"tag":805,"props":8325,"children":8327},{"id":8326},"同じフォルダのsocsagaファイルを-x関数で呼び出しクラス全員で共同制作する",[8328],{"type":31,"value":8329},"④ 同じフォルダのSocSagaファイルを x関数で呼び出し、クラス全員で共同制作する",{"type":26,"tag":34,"props":8331,"children":8332},{},[8333,8362],{"type":26,"tag":38,"props":8334,"children":8335},{},[8336,8338,8344,8346,8352,8354,8360],{"type":31,"value":8337},"game03.html のスライド10番で ",{"type":26,"tag":380,"props":8339,"children":8341},{"className":8340},[],[8342],{"type":31,"value":8343},"xborrow(game05);",{"type":31,"value":8345}," を実行すると、game05.htmlが呼び出され、",{"type":26,"tag":380,"props":8347,"children":8349},{"className":8348},[],[8350],{"type":31,"value":8351},"xback();",{"type":31,"value":8353}," で game03.html のスライド11番に戻る。",{"type":26,"tag":380,"props":8355,"children":8357},{"className":8356},[],[8358],{"type":31,"value":8359},"xbuy(game07);",{"type":31,"value":8361}," を実行すると、game07.htmlに接続する（戻ってこない）。",{"type":26,"tag":38,"props":8363,"children":8364},{},[8365,8371,8373,8379,8380,8386,8388],{"type":26,"tag":380,"props":8366,"children":8368},{"className":8367},[],[8369],{"type":31,"value":8370},"xborrow",{"type":31,"value":8372},"、",{"type":26,"tag":380,"props":8374,"children":8376},{"className":8375},[],[8377],{"type":31,"value":8378},"xback",{"type":31,"value":8372},{"type":26,"tag":380,"props":8381,"children":8383},{"className":8382},[],[8384],{"type":31,"value":8385},"xbuy",{"type":31,"value":8387}," で他のファイルを呼び出すとき、次の x変数の値は引き継がれる。→ ",{"type":26,"tag":380,"props":8389,"children":8391},{"className":8390},[],[8392],{"type":31,"value":8393},"xs　xe　xt　xu　xuu[]",{"type":26,"tag":805,"props":8395,"children":8397},{"id":8396},"htmlファイル本体をカスタマイズhtmlcssjavascript-を書き換えする",[8398],{"type":31,"value":8399},"⑤ HTMLファイル本体をカスタマイズ（html・css・JavaScript を書き換え）する",{"type":26,"tag":34,"props":8401,"children":8402},{},[8403,8424,8437,8457],{"type":26,"tag":38,"props":8404,"children":8405},{},[8406,8408,8414,8416,8422],{"type":31,"value":8407},"文字の大きさ→ ",{"type":26,"tag":380,"props":8409,"children":8411},{"className":8410},[],[8412],{"type":31,"value":8413},"--fontvw: 1.5vw;",{"type":31,"value":8415},"　、",{"type":26,"tag":380,"props":8417,"children":8419},{"className":8418},[],[8420],{"type":31,"value":8421},"methods:",{"type":31,"value":8423}," に新しい x関数 を追加…など。",{"type":26,"tag":38,"props":8425,"children":8426},{},[8427,8429,8435],{"type":31,"value":8428},"スライド内容の一時的な変更は、x関数の ",{"type":26,"tag":380,"props":8430,"children":8432},{"className":8431},[],[8433],{"type":31,"value":8434},"xdisp(元の語,置換語,回数);",{"type":31,"value":8436}," で可能。",{"type":26,"tag":38,"props":8438,"children":8439},{},[8440,8442,8448,8449,8455],{"type":31,"value":8441},"SocPad以外で作ったHTMLは、原則SocPadでの編集はできないが、sectionタグ内に貼り付けることは可能。セキュリティ上の問題がなければ、iframeタグを使って他サイトのコンテンツを埋め込むことができる。",{"type":26,"tag":380,"props":8443,"children":8445},{"className":8444},[],[8446],{"type":31,"value":8447},"--framewidth",{"type":31,"value":7769},{"type":26,"tag":380,"props":8450,"children":8452},{"className":8451},[],[8453],{"type":31,"value":8454},"--frameheight",{"type":31,"value":8456},"で幅と高さを指定できる。",{"type":26,"tag":38,"props":8458,"children":8459},{},[8460],{"type":31,"value":8461},"無料ソフトでもCG作成ができる。Blender で3Dモデルを、Effekseer でビジュアルエフェクトを、Unity でアニメやゲームを作ることができる。Sketchfab などの CGコンテンツ共有サイトを利用することで、登録・公開ができる。",{"type":26,"tag":805,"props":8463,"children":8465},{"id":8464},"このような発展的な使い方により",[8466],{"type":31,"value":8464},{"type":26,"tag":27,"props":8468,"children":8469},{},[8470],{"type":31,"value":8471},"　プレゼンだけでなく、クイズ・アドベンチャーゲーム・脱出ゲーム・すごろくなども作れます。",{"type":26,"tag":54,"props":8473,"children":8475},{"id":8474},"socsagademo",[],{"type":26,"tag":90,"props":8477,"children":8479},{"id":8478},"まとめ-ソックサーガ-で-双方向性のあるコンテンツのプログラミング-はバッチリ",[8480],{"type":31,"value":8481},"【まとめ】 ソックサーガ で 双方向性のあるコンテンツのプログラミング はバッチリ！",{"type":26,"tag":27,"props":8483,"children":8484},{},[8485,8487,8494],{"type":31,"value":8486},"　ソックリッカー制作の経験を活かし、最新技術をふんだんに取りいれて作ったのが ",{"type":26,"tag":2292,"props":8488,"children":8489},{},[8490],{"type":26,"tag":285,"props":8491,"children":8492},{},[8493],{"type":31,"value":1590},{"type":31,"value":8495},"です。ローコードなので専門知識不要、「ディジタル作品づくり」＋α で取り組めます。５つの実習例とは違い、個性が出せるので評価しやすく、共同制作もできます。",{"type":26,"tag":54,"props":8497,"children":8498},{},[],{"type":26,"tag":27,"props":8500,"children":8501},{},[8502],{"type":31,"value":8503},"　他教科や行事のまとめ・発表を兼ねたテーマにすれば、時間数不足も解消されます。無料で、自校運用できて安心で、かゆいところに手が届くシステムは、そうそうないと自負しています。",{"type":26,"tag":54,"props":8505,"children":8506},{},[],{"type":26,"tag":27,"props":8508,"children":8509},{},[8510],{"type":31,"value":8511},"※ ページが表示されなければ、リロード（↻更新）してください。",{"type":26,"tag":27,"props":8513,"children":8514},{},[8515],{"type":31,"value":8516},"※【注意】Internet Explorer 以外のモダンブラウザー（Chrome,Firefox,Safari,…）で、横置き画面で見ること！",{"type":26,"tag":34,"props":8518,"children":8519},{},[8520,8531,8542,8553,8564],{"type":26,"tag":38,"props":8521,"children":8522},{},[8523,8524],{"type":31,"value":3166},{"type":26,"tag":42,"props":8525,"children":8528},{"href":8526,"rel":8527},"https:\u002F\u002Fkyodx.com\u002Fsshelp.html",[734],[8529],{"type":31,"value":8530},"🔗 ソックサーガで作った、「ソックサーガの紹介Webアプリ」",{"type":26,"tag":38,"props":8532,"children":8533},{},[8534,8535],{"type":31,"value":3166},{"type":26,"tag":42,"props":8536,"children":8539},{"href":8537,"rel":8538},"https:\u002F\u002Fkyodx.com\u002Fimg\u002Fsocsaga.pdf",[734],[8540],{"type":31,"value":8541},"🔗 ソックサーガの紹介（印刷用）",{"type":26,"tag":38,"props":8543,"children":8544},{},[8545,8546],{"type":31,"value":3166},{"type":26,"tag":42,"props":8547,"children":8550},{"href":8548,"rel":8549},"https:\u002F\u002Fkyodx.com\u002Fjisshu\u002Ftango.html",[734],[8551],{"type":31,"value":8552},"🔗 「英単語の発音チェックアプリ+AI作曲」",{"type":26,"tag":38,"props":8554,"children":8555},{},[8556,8557],{"type":31,"value":3166},{"type":26,"tag":42,"props":8558,"children":8561},{"href":8559,"rel":8560},"https:\u002F\u002Fkyodx.com\u002Fjisshu\u002Ftango2.html",[734],[8562],{"type":31,"value":8563},"🔗 「英単語の発音チェックアプリ+AI作曲」Ver2",{"type":26,"tag":38,"props":8565,"children":8566},{},[8567,8568],{"type":31,"value":3166},{"type":26,"tag":42,"props":8569,"children":8571},{"href":3169,"rel":8570},[734],[8572],{"type":31,"value":8573},"🔗 「英単語ゲーム SPELL QUEST」",{"type":26,"tag":54,"props":8575,"children":8577},{"id":8576},"js278",[],{"type":26,"tag":179,"props":8579,"children":8581},{"className":8580},[1207],[8582,8583,8596,8597],{"type":31,"value":1210},{"type":26,"tag":179,"props":8584,"children":8586},{"className":8585},[1214],[8587],{"type":26,"tag":42,"props":8588,"children":8591},{"target":1218,"rel":8589,"href":8590},[1220],"https:\u002F\u002Fhb.afl.rakuten.co.jp\u002Fichiba\u002F26ba9fc2.c2fdf85a.26ba9fc3.8edde063\u002F_RTLink57027?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15761369%2F&link_type=hybrid_url&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJ1cCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MCwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjAsInByb2QiOjAsImFtcCI6ZmFsc2V9",[8592],{"type":26,"tag":69,"props":8593,"children":8595},{"src":8594},"https:\u002F\u002Fthumbnail.image.rakuten.co.jp\u002F@0_mall\u002Fbook\u002Fcabinet\u002F3682\u002F9784297103682.jpg?_ex=240x240",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":8598,"children":8600},{"className":8599},[1231],[8601,8602,8612,8613,8632,8633,8670],{"type":31,"value":1234},{"type":26,"tag":179,"props":8603,"children":8605},{"className":8604},[1238],[8606],{"type":26,"tag":42,"props":8607,"children":8609},{"target":1218,"rel":8608,"href":8590},[1220],[8610],{"type":31,"value":8611},"JavaScriptコードレシピ集 スグに使えるテクニック278　[ 池田泰延 ]",{"type":31,"value":1234},{"type":26,"tag":179,"props":8614,"children":8616},{"className":8615},[1250],[8617,8620,8622,8625,8627,8630],{"type":26,"tag":54,"props":8618,"children":8619},{},[],{"type":31,"value":8621},"※ Web標準技術は時代とともに進歩しています。",{"type":26,"tag":54,"props":8623,"children":8624},{},[],{"type":31,"value":8626},"ハダノは、jQueryからVue.jsに移行したとき、「イマドキのJavaScriptはこう書くんだ！」とカルチャーショックを受けました。",{"type":26,"tag":54,"props":8628,"children":8629},{},[],{"type":31,"value":8631},"この本は、実践的な最新テクニックを網羅的に学ぶのに役立ちます。",{"type":31,"value":1234},{"type":26,"tag":179,"props":8634,"children":8636},{"className":8635},[1266,1267],[8637,8638,8647,8648,8658,8659,8669],{"type":31,"value":1270},{"type":26,"tag":179,"props":8639,"children":8640},{},[8641],{"type":26,"tag":42,"props":8642,"children":8645},{"className":8643,"target":1218,"rel":8644,"href":8590},[1277,1278],[1220],[8646],{"type":31,"value":1282},{"type":31,"value":1284},{"type":26,"tag":179,"props":8649,"children":8650},{},[8651],{"type":26,"tag":42,"props":8652,"children":8656},{"className":8653,"target":1218,"rel":8654,"href":8655},[1277,1291],[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4297103680",[8657],{"type":31,"value":1296},{"type":31,"value":1284},{"type":26,"tag":179,"props":8660,"children":8661},{},[8662],{"type":26,"tag":42,"props":8663,"children":8667},{"className":8664,"target":1218,"rel":8665,"href":8666},[1277,1304],[1220],"https:\u002F\u002Fck.jp.ap.valuecommerce.com\u002Fservlet\u002Freferral?sid=3651993&pid=887947441&vc_url=https%3A%2F%2Fpaypaymall.yahoo.co.jp%2Fstore%2Fboox%2Fitem%2Fbk-4297103680%2F%3Fsc_i%3Dshp_pc_search_itemlist_shsrg_title",[8668],{"type":31,"value":1309},{"type":31,"value":1234},{"type":31,"value":1210},{"type":26,"tag":54,"props":8672,"children":8673},{},[],{"type":26,"tag":319,"props":8675,"children":8676},{},[],{"type":26,"tag":27,"props":8678,"children":8679},{},[8680],{"type":26,"tag":42,"props":8681,"children":8682},{"href":6626},[8683],{"type":31,"value":8684},"次へ→　ソックサーガの始め方【自校運用】",{"title":8,"searchDepth":324,"depth":324,"links":8686},[8687,8691],{"id":7538,"depth":324,"text":7541,"children":8688},[8689,8690],{"id":7583,"depth":362,"text":7586},{"id":7602,"depth":362,"text":7602},{"id":7670,"depth":324,"text":7673,"children":8692},[8693,8694,8695,8696,8697],{"id":7676,"depth":362,"text":7679},{"id":7709,"depth":362,"text":7712},{"id":7838,"depth":362,"text":7841},{"id":7991,"depth":362,"text":7994},{"id":8478,"depth":362,"text":8481},"content:articles:socsaga-1.md","articles\u002Fsocsaga-1.md","articles\u002Fsocsaga-1",{"_path":8702,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":8703,"description":8704,"category":8705,"tag":8706,"thumbnail":8710,"createdAt":8711,"updatedAt":8712,"body":8713,"_type":1519,"_id":9202,"_source":1521,"_file":9203,"_stem":9204,"_extension":1524},"\u002Farticles\u002Fhadano","ハダノのプログラミング遍歴","ハダノがプログラミングに出会ってから教育に活用するようになるまでの過程をざっと振り返り",[12],[15,8707,8708,7131,1529,1530,8709],"rpa","nurpa","sf","vscodesoc.jpg","2022\u002F4\u002F28","2022\u002F6\u002F1",{"type":23,"children":8714,"toc":9179},[8715,8720,8723,8729,8734,8739,8745,8750,8756,8761,8766,8771,8774,8779,8782,8788,8793,8798,8804,8818,8831,8834,8840,8845,8850,8855,8860,8865,8870,8884,8889,8894,8899,8904,8908,8914,8919,8932,8937,8940,8946,8951,8974,8987,8992,8998,9003,9008,9013,9018,9023,9026,9032,9038,9043,9048,9053,9056,9062,9065,9071,9074,9080,9083,9086],{"type":26,"tag":27,"props":8716,"children":8717},{},[8718],{"type":31,"value":8719},"　この記事では、サンデープログラマとしてのハダノについて、（記憶をたどりながらぼちぼち）紹介していきます。",{"type":26,"tag":54,"props":8721,"children":8722},{},[],{"type":26,"tag":58,"props":8724,"children":8726},{"id":8725},"コンピューティング-プログラミング-の時代",[8727],{"type":31,"value":8728},"コンピューティング ＝ プログラミング の時代",{"type":26,"tag":90,"props":8730,"children":8732},{"id":8731},"プログラマブル関数電卓から",[8733],{"type":31,"value":8731},{"type":26,"tag":27,"props":8735,"children":8736},{},[8737],{"type":31,"value":8738},"　大学生協の新入生向けフェアで、「理系学部生の必需品」として紹介されていた関数電卓を購入しました。ポケットコンピュータという愛称で、ビープ音で「エリーゼのために」を演奏するプログラムを打ち込んだり、宇宙戦艦ゲームを作ったりしました。プログラミングの楽しさにはじめて触れました。",{"type":26,"tag":90,"props":8740,"children":8742},{"id":8741},"メインフレームはfortranで",[8743],{"type":31,"value":8744},"メインフレームはFortranで",{"type":26,"tag":27,"props":8746,"children":8747},{},[8748],{"type":31,"value":8749},"　1年半の教養課程を終え、専門課程に移ると、実験・実習で夜遅くなることが多くなりました。データ解析に大学のメインフレームを使わせてもらうこともありました。Fortranという科学技術計算用の言語でプログラムを組み、カードの束を読み込ませて処理していました。4年生になると、TSS端末で画面を見ながらキーボードで入力できるようになるのでした。",{"type":26,"tag":90,"props":8751,"children":8753},{"id":8752},"_8ビットのマイコンピュータ",[8754],{"type":31,"value":8755},"8ビットのマイコンピュータ",{"type":26,"tag":27,"props":8757,"children":8758},{},[8759],{"type":31,"value":8760},"　個人用の小型コンピュータが「マイコン」と呼ばれていたころ、NEC PC-6001 というお手頃価格のマシンを購入しました。中古のTVをつなぎ、カセットテープにデータを保存しました。時間制限なくコンピュータが使えて興奮したのを覚えています。",{"type":26,"tag":27,"props":8762,"children":8763},{},[8764],{"type":31,"value":8765},"　当時は、ソフトウェア販売は普及していなかったので、コンピュータを使うためには、プログラムを打ち込む必要がありました。マイコン雑誌のプログラムリストを打ち込んだり、改造したりしてゲームなどを楽しむのが一般的でした。",{"type":26,"tag":27,"props":8767,"children":8768},{},[8769],{"type":31,"value":8770},"　ハダノは、そのほかに数理生物学で使うFortranプログラムをBASICに移植したり、簡単な音楽ソフトやお絵描きソフトを作ったりしました。3次スプライン関数をBASICで組んだら遅すぎ、Z80機械語で高速化したこともありました。",{"type":26,"tag":54,"props":8772,"children":8773},{},[],{"type":26,"tag":27,"props":8775,"children":8776},{},[8777],{"type":31,"value":8778},"　教員採用試験の面接で「プラネタリウムなどコンピュータを活用した授業をしたい」と答えたハダノでしたが、8ビットの時代は学級通信の印刷に少し使う程度でした。漢字フォントがなかったので、方眼紙に点を打って必要な分を自作していました。成績処理以外の実務では、ハンディワープロに負けていました。",{"type":26,"tag":54,"props":8780,"children":8781},{},[],{"type":26,"tag":58,"props":8783,"children":8785},{"id":8784},"ms-dos-windows-の時代",[8786],{"type":31,"value":8787},"MS-DOS ～ Windows の時代",{"type":26,"tag":90,"props":8789,"children":8791},{"id":8790},"国産16ビットコンピュータ",[8792],{"type":31,"value":8790},{"type":26,"tag":27,"props":8794,"children":8795},{},[8796],{"type":31,"value":8797},"　2校目のとき（1980年代後半）、16ビットコンピュータを手に入れました。内蔵BASICでOS機能も開発もこなすのではなく、OS機能はMS-DOS、開発はC言語と役割分担したのです。国産機は漢字ROMを内蔵しており、ワープロや表計算などのソフトウェア販売も広がり始めました。",{"type":26,"tag":90,"props":8799,"children":8801},{"id":8800},"ms-dos時代はプログラミング冬の時代",[8802],{"type":31,"value":8803},"MS-DOS時代は、プログラミング冬の時代",{"type":26,"tag":27,"props":8805,"children":8806},{},[8807,8809,8816],{"type":31,"value":8808},"　このころ、サンデープログラマの多くは壁に直面していました。これまで通りBASICでプログラミングすることはできましたが、主流はC言語でした。難解なうえに開発環境も整備されておらず、趣味としてのプログラミングは衰退の危機にありました。せいぜい、バッチ（または",{"type":26,"tag":42,"props":8810,"children":8813},{"href":8811,"rel":8812},"https:\u002F\u002Fponzmild.hatenablog.com\u002Fentry\u002F2017\u002F10\u002F29\u002F004625",[734],[8814],{"type":31,"value":8815},"sed,awk",{"type":31,"value":8817},"）を組んで市販ソフトを順番に動かすか、表計算ソフトのマクロ機能でプログラミング気分を味わうか、ぐらいでした。",{"type":26,"tag":27,"props":8819,"children":8820},{},[8821,8823,8829],{"type":31,"value":8822},"　そんなときに、生徒用コンピュータが導入されました。MS-DOSマシンの世界は、漢字ROM搭載で独自規格の国産機と汎用的なDOS\u002FV機が争い、混とんとしていました。",{"type":26,"tag":42,"props":8824,"children":8826},{"href":8825},"nurpa-2#hekiga",[8827],{"type":31,"value":8828},"「巨大ドット壁画」",{"type":31,"value":8830},"を作った1993年もそんな状態でした。ソフトウェア的には、7つほどの処理を組み合わせる必要があったのです。",{"type":26,"tag":54,"props":8832,"children":8833},{},[],{"type":26,"tag":90,"props":8835,"children":8837},{"id":8836},"windowsのradツールでビジュアルプログラミング",[8838],{"type":31,"value":8839},"WindowsのRADツールでビジュアルプログラミング",{"type":26,"tag":27,"props":8841,"children":8842},{},[8843],{"type":31,"value":8844},"　Windows3.1、windows95が現われ、キーボードからコマンドを打つ代わりにマウスで視覚的にソフトウェアを操作するようになりました。",{"type":26,"tag":27,"props":8846,"children":8847},{},[8848],{"type":31,"value":8849},"　Windowsでのプログラミングも、視覚的にできるようになりました。RAD（ラピッド・アプリケーション・デベロップメント）ツールの登場です。GUI部品をペタペタと貼り付け、ユーザーの操作に応じたコードを書くだけなので簡単でした。Visual Basic というビジュアルプログラミング向けのBASICがすっかり気に入りました。メインルーチンのない、イベントドリブンのプログラミングスタイルにもやがて慣れました。",{"type":26,"tag":90,"props":8851,"children":8853},{"id":8852},"西日本の理科教員研修会の講師に",[8854],{"type":31,"value":8852},{"type":26,"tag":27,"props":8856,"children":8857},{},[8858],{"type":31,"value":8859},"　「ハダノ先生はコンピュータが得意らしい」という噂が広まり、教員研修や公民館講座の講師として呼ばれるようになりました。そこで強調したのは、「コンピュータが得意になりたければ、プログラミングをしなさい」ということです。「料理の歴史、テーブルマナーやおいしい料理店」をいくら知っていても、調理ができなければ「料理が得意」とは言えないはずです。",{"type":26,"tag":27,"props":8861,"children":8862},{},[8863],{"type":31,"value":8864},"　西日本の理科教員研修会の講師に指名されたときも、マジックナース「レイアウト」というSF仕立ての人体内アドベンチャーゲームを参加者に作らせることにしました。Visual Basic でアドベンチャー用の簡易言語を作っておき、サンプルゲームをもとに参加者に続きのシナリオを作成させるというものです。画像の連続表示でアニメーションもでき、大きな手ごたえを得ました。\n　",{"type":26,"tag":90,"props":8866,"children":8868},{"id":8867},"インターネット部顧問に",[8869],{"type":31,"value":8867},{"type":26,"tag":27,"props":8871,"children":8872},{},[8873,8875,8882],{"type":31,"value":8874},"　公務災害で左腕に障害を負い、「人生終わった」と落ち込んでいたハダノは、ハダノ校長の勧めでインターネット部を作りました。",{"type":26,"tag":42,"props":8876,"children":8879},{"href":8877,"rel":8878},"https:\u002F\u002Fjiten.com\u002Fdicmi\u002Fdocs\u002Fk10\u002F16367s.htm",[734],[8880],{"type":31,"value":8881},"こねっとプラン",{"type":31,"value":8883},"参加校になり、ホームページを作ったり、他の学校と交流したりしました。1997年6月19日の「こねっと・特別セミナー」では、全国4校の質問校に選ばれました。講師のビル・ゲイツ氏に、NTTのマルチメディア会議システムで次の質問をぶつけました。",{"type":26,"tag":27,"props":8885,"children":8886},{},[8887],{"type":31,"value":8888},"Q: 「インターネットはからっぽの洞窟」という本に書いてあることは本当ですか？",{"type":26,"tag":27,"props":8890,"children":8891},{},[8892],{"type":31,"value":8893},"　それに対して、ゲイツ氏は",{"type":26,"tag":27,"props":8895,"children":8896},{},[8897],{"type":31,"value":8898},"A: いつの時代にも新しいメディアに対して否定的な人はいます。道具はその特性を理解して使うことが大切です。インターネットを中身の豊かな百科事典にするために、力を合わせていきましょう。",{"type":26,"tag":27,"props":8900,"children":8901},{},[8902],{"type":31,"value":8903},"と、丁寧に答えてくれました。",{"type":26,"tag":54,"props":8905,"children":8907},{"id":8906},"multimedia",[],{"type":26,"tag":90,"props":8909,"children":8911},{"id":8910},"マルチメディア作品コンテストで",[8912],{"type":31,"value":8913},"マルチメディア作品コンテストで🏆！！",{"type":26,"tag":27,"props":8915,"children":8916},{},[8917],{"type":31,"value":8918},"　国民文化祭のマルチメディア部門で作品コンテストが開催され、インターネット部も一般の参加者にまじって、プレ・本番それぞれに出品しました。プレ国民文化祭では、かぐや姫のパロディ紙芝居で第2位を獲得しました。",{"type":26,"tag":27,"props":8920,"children":8921},{},[8922,8924,8930],{"type":31,"value":8923},"　「今度こそ優勝を」という思いで部員一丸となって臨んだ国民文化祭には、「クローン戦隊ドリーマーズ」を出品しました。マジックナース「レイアウト」のときに作った簡易言語をJavaに移植し、最新生物学の知見を盛り込んだSFアドベンチャーゲームに仕上げました。「容量１MB以内かつWeb上で見られるもの」という条件をクリアするのに苦労しましたが、見事グランプリを獲得しました。ごほうびは、PC1台とマルチメディアフェスティバルへの招待でした。インターネット部全員で、",{"type":26,"tag":42,"props":8925,"children":8927},{"href":8926},"\u002Farticles\u002Fpopculture-gamemusic#oshii",[8928],{"type":31,"value":8929},"🔗押井守監督の記念講演",{"type":31,"value":8931}," を聞きました。",{"type":26,"tag":69,"props":8933,"children":8936},{"src":8934,"alt":8935,"width":472},"\u002Fimg\u002Fdolly.svg","クローン戦隊ドリーマーズ",[],{"type":26,"tag":54,"props":8938,"children":8939},{},[],{"type":26,"tag":90,"props":8941,"children":8943},{"id":8942},"wsh-で-rpa-をめざしたタイアップ",[8944],{"type":31,"value":8945},"WSH で RPA をめざした「タイアップ」",{"type":26,"tag":27,"props":8947,"children":8948},{},[8949],{"type":31,"value":8950},"　Windowsは視覚的な操作ができて便利な反面、定型的な操作では弱点を抱えていました。何をするにもいちいちマウスを動かす必要があったのです。マクロやショートカットキーで、ある程度スピードアップできますが、ソフトを組み合わせて動かすのは困難でした。",{"type":26,"tag":27,"props":8952,"children":8953},{},[8954,8956,8963,8965,8972],{"type":31,"value":8955},"　IE（インターネット エクスプローラ）用のスクリプトをWindows上で実行できるようにした ",{"type":26,"tag":42,"props":8957,"children":8960},{"href":8958,"rel":8959},"https:\u002F\u002Fe-words.jp\u002Fw\u002FWSH.html",[734],[8961],{"type":31,"value":8962},"WSH（ウィンドウズ スクリプト ホスト）",{"type":31,"value":8964},"が、Windows98から使えるようになりました。これをうまく使えば、人がへばりついてなくても自動実行できる",{"type":26,"tag":42,"props":8966,"children":8969},{"href":8967,"rel":8968},"https:\u002F\u002Fwww.nri.com\u002Fjp\u002Fknowledge\u002Fglossary\u002Flst\u002Falphabet\u002Frpa",[734],[8970],{"type":31,"value":8971},"RPA（ロボティック プロセス オートメーション）",{"type":31,"value":8973},"が実現できるはずです。",{"type":26,"tag":27,"props":8975,"children":8976},{},[8977,8978,8985],{"type":31,"value":976},{"type":26,"tag":42,"props":8979,"children":8982},{"href":8980,"rel":8981},"https:\u002F\u002Fwww.vector.co.jp\u002Fsoft\u002Fwin95\u002Futil\u002Fse099345.html",[734],[8983],{"type":31,"value":8984},"TieUp（あらゆるアプリとタイアップし、全自動処理を実現）",{"type":31,"value":8986},"というWSH強化用のフリーソフトをVectorで公開しました。Visual Basic で作った ActiveX DLLで、いろんなPC雑誌に紹介され、ユーザーは1万5千人に達しました。",{"type":26,"tag":27,"props":8988,"children":8989},{},[8990],{"type":31,"value":8991},"　しばらくは、VB系言語（Visual Basic,VBScript,VBA）による幸せなプログラミングライフが続きました。",{"type":26,"tag":90,"props":8993,"children":8995},{"id":8994},"猫の目のように変わるweb開発",[8996],{"type":31,"value":8997},"猫の目のように変わるWeb開発",{"type":26,"tag":27,"props":8999,"children":9000},{},[9001],{"type":31,"value":9002},"　国民文化祭'98のときは、Webでしっかりしたインタラクティブなコンテンツを作るには、Java Applet か Director くらいしか選択肢がありませんでした。クローン戦隊ドリーマーズを Java Applet で作ったのは、そういう理由があったのです。「オブジェクト指向」はなかなか手ごわかったと思います。※ Java Applet は2015年以降、ブラウザサポートが打ち切られて廃れました。",{"type":26,"tag":27,"props":9004,"children":9005},{},[9006],{"type":31,"value":9007},"　やがて Internet Explorer4 と Netscape Navigator4 によるブラウザ戦争が勃発しました。HTMLとCSSにJavaScriptを組み合わせてインタラクティブなコンテンツを作る「ダイナミックHTML」という技術が登場しましたが、ブラウザ間の互換性が乏しく、面倒くさいものでした。",{"type":26,"tag":27,"props":9009,"children":9010},{},[9011],{"type":31,"value":9012},"　2000年からの10年間は、Flash がWeb表現の中心でした。動画編集のようにタイムライン編集ができ、クリエイターたちの支持を集めていました。2005年ごろになると、Googleの Gmail や GoogleMap でも使われているAjaxを活用した軽量のサービスが注目されましたが、リッチな表現分野ではあいかわらずFlashでした。",{"type":26,"tag":27,"props":9014,"children":9015},{},[9016],{"type":31,"value":9017},"　このころのハダノは、Webでリッチなコンテンツを作る必要がなく、Flashは無視していました。「Webは、IE＋VBScriptで十分」「ローカルは、VB があるさ」と思っていました。ところが、インターネット対応で出遅れたマイクロソフトが、2002年に Visual Basic の大幅な仕様変更をしたのです。VB.NET 7.0 は、従来のVB 6.0 とは全くの別物でした。ローカルだけでなくWebでも動く、本格的なオブジェクト志向、Java や C＃ のような言語仕様……。Visual Basic Magazine などの雑誌は、「早くVB.NETへ乗り換えよう！」という記事のオンパレードです。VB 6.0 や エクセルVBA のノウハウが役に立たず、気軽さが失われたように感じ、ドットネット環境へ移行することをためらいました。ドットネット言語のうち、 C# と C++ は成功しましたが、 VB.NET は失敗だったのではないでしょうか。VB 6.0 は、2008年にサポート打ち切りになりました。",{"type":26,"tag":27,"props":9019,"children":9020},{},[9021],{"type":31,"value":9022},"　ちなみにハダノは2006年から、ローカル環境でのプログラミングに　Python も使うようになっていました。",{"type":26,"tag":54,"props":9024,"children":9025},{},[],{"type":26,"tag":58,"props":9027,"children":9029},{"id":9028},"html5-の時代",[9030],{"type":31,"value":9031},"HTML5 の時代",{"type":26,"tag":90,"props":9033,"children":9035},{"id":9034},"スマホが登場しflashが退場",[9036],{"type":31,"value":9037},"スマホが登場し、Flashが退場",{"type":26,"tag":27,"props":9039,"children":9040},{},[9041],{"type":31,"value":9042},"　2010年ごろから、Flashの人気が低下してきました。AppleがiPhoneでFlash Playerをサポートしないと宣言したのです。スマホが急速に普及したため、PCと共通のWebページづくりが求められるようになりました。「HTML5ならどのブラウザでもリッチな表現ができる」「もうFlashはいらない」と宣伝されました。HTML5+CSS3+JavaScript（ECMAScript5）という新しいWeb標準技術が今後のWeb開発の中心になるというのです。",{"type":26,"tag":27,"props":9044,"children":9045},{},[9046],{"type":31,"value":9047},"　AdobeはFlashの後継製品として、Edge Animate を出しましたが、3年ほどで積極的な開発を終了しました。※ Flash Player も2020年末にすべてサポート打ち切りになりました。",{"type":26,"tag":27,"props":9049,"children":9050},{},[9051],{"type":31,"value":9052},"　「Adobeに支配されたくない」Appleの目論見通りになったわけですが、スマホのHTML5対応は一足飛びには進みません。ハードウェアを最大限生かしたスマホゲームがはやり、ネイティブアプリが主役となりました。Web標準技術ではなく、機種に依存した開発になってしまったのです。Web技術で作られたOS（Firefox OSなど）のスマホに期待をかけていたハダノは、あきらめて2015年にペン入力のAndroidスマホを購入しました。「Webアプリがネイティブアプリを駆逐する日がいつか来る」と信じて……。",{"type":26,"tag":54,"props":9054,"children":9055},{},[],{"type":26,"tag":90,"props":9057,"children":9059},{"id":9058},"授業配信アプリソックリッカー",[9060],{"type":31,"value":9061},"授業配信アプリ「ソックリッカー」",{"type":26,"tag":54,"props":9063,"children":9064},{},[],{"type":26,"tag":90,"props":9066,"children":9068},{"id":9067},"プログラミングシステムソックサーガ",[9069],{"type":31,"value":9070},"プログラミングシステム「ソックサーガ」",{"type":26,"tag":54,"props":9072,"children":9073},{},[],{"type":26,"tag":90,"props":9075,"children":9077},{"id":9076},"全校ぬりえ自動化システムヌルパ",[9078],{"type":31,"value":9079},"全校ぬりえ自動化システム「ヌルパ」",{"type":26,"tag":54,"props":9081,"children":9082},{},[],{"type":26,"tag":54,"props":9084,"children":9085},{},[],{"type":26,"tag":179,"props":9087,"children":9089},{"className":9088},[1207],[9090,9091,9104,9105],{"type":31,"value":1210},{"type":26,"tag":179,"props":9092,"children":9094},{"className":9093},[1214],[9095],{"type":26,"tag":42,"props":9096,"children":9099},{"target":1218,"rel":9097,"href":9098},[1220],"https:\u002F\u002Fhb.afl.rakuten.co.jp\u002Fichiba\u002F26ba9fc2.c2fdf85a.26ba9fc3.8edde063\u002F_RTLink57027?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F13307159%2F&link_type=hybrid_url&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJ1cCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MCwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjAsInByb2QiOjAsImFtcCI6ZmFsc2V9",[9100],{"type":26,"tag":69,"props":9101,"children":9103},{"src":9102},"https:\u002F\u002Fthumbnail.image.rakuten.co.jp\u002F@0_mall\u002Fbook\u002Fcabinet\u002F4220\u002F9784844374220.jpg?_ex=240x240",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":9106,"children":9108},{"className":9107},[1231],[9109,9110,9120,9121,9140,9141,9178],{"type":31,"value":1234},{"type":26,"tag":179,"props":9111,"children":9113},{"className":9112},[1238],[9114],{"type":26,"tag":42,"props":9115,"children":9117},{"target":1218,"rel":9116,"href":9098},[1220],[9118],{"type":31,"value":9119},"最速の仕事術はプログラマーが知っている [ 清水亮 ]",{"type":31,"value":1234},{"type":26,"tag":179,"props":9122,"children":9124},{"className":9123},[1250],[9125,9128,9130,9133,9135,9138],{"type":26,"tag":54,"props":9126,"children":9127},{},[],{"type":31,"value":9129},"※ 世界的なビジネスリーダーにプログラマーあがりの人が多い理由がわかる本です。",{"type":26,"tag":54,"props":9131,"children":9132},{},[],{"type":31,"value":9134},"「プログラミングにこだわりすぎ」と批判されるハダノに清水亮さんはいつも勇気をくれます。",{"type":26,"tag":54,"props":9136,"children":9137},{},[],{"type":31,"value":9139},"プログラミング的思考は、働き方改革にも効きます。",{"type":31,"value":1234},{"type":26,"tag":179,"props":9142,"children":9144},{"className":9143},[1266,1267],[9145,9146,9155,9156,9166,9167,9177],{"type":31,"value":1270},{"type":26,"tag":179,"props":9147,"children":9148},{},[9149],{"type":26,"tag":42,"props":9150,"children":9153},{"className":9151,"target":1218,"rel":9152,"href":9098},[1277,1278],[1220],[9154],{"type":31,"value":1282},{"type":31,"value":1284},{"type":26,"tag":179,"props":9157,"children":9158},{},[9159],{"type":26,"tag":42,"props":9160,"children":9164},{"className":9161,"target":1218,"rel":9162,"href":9163},[1277,1291],[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB011UFDIZM",[9165],{"type":31,"value":1296},{"type":31,"value":1284},{"type":26,"tag":179,"props":9168,"children":9169},{},[9170],{"type":26,"tag":42,"props":9171,"children":9175},{"className":9172,"target":1218,"rel":9173,"href":9174},[1277,1304],[1220],"https:\u002F\u002Fck.jp.ap.valuecommerce.com\u002Fservlet\u002Freferral?sid=3651993&pid=887947441&vc_url=https%3A%2F%2Fpaypaymall.yahoo.co.jp%2Fstore%2Fboox%2Fitem%2Fbk-4844374222%2F%3Fsc_i%3Dshp_pc_search_itemlist_shsrg_title",[9176],{"type":31,"value":1309},{"type":31,"value":1234},{"type":31,"value":1210},{"title":8,"searchDepth":324,"depth":324,"links":9180},[9181,9186,9196],{"id":8725,"depth":324,"text":8728,"children":9182},[9183,9184,9185],{"id":8731,"depth":362,"text":8731},{"id":8741,"depth":362,"text":8744},{"id":8752,"depth":362,"text":8755},{"id":8784,"depth":324,"text":8787,"children":9187},[9188,9189,9190,9191,9192,9193,9194,9195],{"id":8790,"depth":362,"text":8790},{"id":8800,"depth":362,"text":8803},{"id":8836,"depth":362,"text":8839},{"id":8852,"depth":362,"text":8852},{"id":8867,"depth":362,"text":8867},{"id":8910,"depth":362,"text":8913},{"id":8942,"depth":362,"text":8945},{"id":8994,"depth":362,"text":8997},{"id":9028,"depth":324,"text":9031,"children":9197},[9198,9199,9200,9201],{"id":9034,"depth":362,"text":9037},{"id":9058,"depth":362,"text":9061},{"id":9067,"depth":362,"text":9070},{"id":9076,"depth":362,"text":9079},"content:articles:hadano.md","articles\u002Fhadano.md","articles\u002Fhadano",{"_path":5437,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9206,"description":9207,"category":9208,"tag":9209,"thumbnail":9210,"createdAt":9211,"updatedAt":9212,"body":9213,"_type":1519,"_id":9870,"_source":1521,"_file":9871,"_stem":9872,"_extension":1524},"Nuxt+Content+Cloudflareで無料でブログを作ってみた","エンジニアでもない素人でブログ初心者が1カ月で自前のブログ立ち上げに挑戦",[12],[1530,1531],"nuxt-blog.jpg","2022\u002F4\u002F25","2023\u002F2\u002F15",{"type":23,"children":9214,"toc":9851},[9215,9220,9223,9229,9234,9239,9244,9249,9254,9259,9265,9270,9275,9278,9284,9289,9294,9299,9302,9308,9331,9336,9341,9352,9357,9362,9365,9370,9375,9380,9385,9396,9401,9407,9410,9416,9425,9430,9438,9443,9446,9451,9456,9461,9466,9469,9475,9488,9493,9496,9502,9507,9510,9516,9521,9526,9539,9544,9549,9562,9565,9571,9576,9589,9594,9599,9604,9607,9613,9618,9623,9628,9633,9638,9661,9666,9681,9684,9690,9708,9713,9720,9725,9730,9733,9737,9742,9746,9749,9837,9840,9843],{"type":26,"tag":27,"props":9216,"children":9217},{},[9218],{"type":31,"value":9219},"　この記事では、ブログ初心者が1カ月で自前のブログを立ち上げるようすを紹介します。エンジニアでもない素人にそんなことができるのでしょうか？",{"type":26,"tag":54,"props":9221,"children":9222},{},[],{"type":26,"tag":58,"props":9224,"children":9226},{"id":9225},"そうだブログを始めよう",[9227],{"type":31,"value":9228},"そうだ、ブログを始めよう！",{"type":26,"tag":27,"props":9230,"children":9231},{},[9232],{"type":31,"value":9233},"　ハダノは中学校教頭として定年退職して1年間、勤めに出ずにインプット中心の生活をしてきました。",{"type":26,"tag":27,"props":9235,"children":9236},{},[9237],{"type":31,"value":9238},"　これからは、アウトプットに力を入れていきたい　→　そうだ、ブログを始めよう！　と考えました。しかし、そこには大きなハードルがあったのです。",{"type":26,"tag":90,"props":9240,"children":9242},{"id":9241},"記事を管理するシステムが必要",[9243],{"type":31,"value":9241},{"type":26,"tag":27,"props":9245,"children":9246},{},[9247],{"type":31,"value":9248},"　シングルページとは違い、記事の数が増えてくるとリンク構造が複雑になります。記事を管理する何らかのシステムが必要です。手入力ではやっていられません。",{"type":26,"tag":90,"props":9250,"children":9252},{"id":9251},"無料ブログシステムの闇",[9253],{"type":31,"value":9251},{"type":26,"tag":27,"props":9255,"children":9256},{},[9257],{"type":31,"value":9258},"　そこで、はてなブログなどの無料ブログシステムを使おうと考えます。運営会社の都合に合わせる生活が始まります。予告なく仕様が変更されたり、突然サービスが終了されたりします。無料だから仕方ないとはいえ、使い捨てにされる気分です。",{"type":26,"tag":90,"props":9260,"children":9262},{"id":9261},"ブログなら-wordpress-一択",[9263],{"type":31,"value":9264},"ブログなら WordPress 一択",{"type":26,"tag":27,"props":9266,"children":9267},{},[9268],{"type":31,"value":9269},"　有名なブロガーは、口をそろえてそう言います。実際に全ウェブサイト中 43% のシェアがあり、2位の 4% を大きく引き離しています。日本国内CMSでは、 84% と独走状態です。",{"type":26,"tag":27,"props":9271,"children":9272},{},[9273],{"type":31,"value":9274},"　PHPの動くレンタルサーバーを借りればすむ話ですが、月千円程度必要です。ブログで稼ぐことを考えていない者にとっては、けっこうな負担です。教員には勧められません。",{"type":26,"tag":54,"props":9276,"children":9277},{},[],{"type":26,"tag":58,"props":9279,"children":9281},{"id":9280},"jamstackで動的サイトと静的サイトのいいとこ取りを",[9282],{"type":31,"value":9283},"Jamstackで動的サイトと静的サイトのいいとこ取りを",{"type":26,"tag":27,"props":9285,"children":9286},{},[9287],{"type":31,"value":9288},"　Jamstackの冒頭3文字はJavaScriptの”J”、APIの”A”、Markupの”M”を並べたものです。Jamstackとはこれらの3つの技術を利用し、Webをより速く、より安全に、そしてより簡単に拡張できるように設計されたしくみです。",{"type":26,"tag":27,"props":9290,"children":9291},{},[9292],{"type":31,"value":9293},"　ブログの場合でいうと、WordPressはサーバーサイドでPHPによって動的にページを作ります。JamstackはJavaScriptによって事前に作っておいた静的なページを配信するのです。無料のホスティングサービスを使えばお金は一切かかりません。しかも、Web標準技術（HTML,CSS,JavaScript）の知識さえあれば、自分好みにカスタマイズできます。PHPプログラミングを覚える必要はありません。",{"type":26,"tag":27,"props":9295,"children":9296},{},[9297],{"type":31,"value":9298},"　Jamstackにはいろんなシステムがあります。Webアプリを作るのにVue.jsというJavaScriptフレームワークを使ったことのあるハダノは、Vue.jsを拡張するNuxt.jsに挑戦することにしました。",{"type":26,"tag":54,"props":9300,"children":9301},{},[],{"type":26,"tag":90,"props":9303,"children":9305},{"id":9304},"nuxtcontntでブログシステムを構築",[9306],{"type":31,"value":9307},"nuxt\u002Fcontntでブログシステムを構築",{"type":26,"tag":34,"props":9309,"children":9310},{},[9311,9321],{"type":26,"tag":38,"props":9312,"children":9313},{},[9314],{"type":26,"tag":42,"props":9315,"children":9318},{"href":9316,"rel":9317},"https:\u002F\u002F0115765.com\u002Farchives\u002F6348",[734],[9319],{"type":31,"value":9320},"Nuxt+Content+Cloudflareで無料でブログを作ろう！【初心者向け】",{"type":26,"tag":38,"props":9322,"children":9323},{},[9324],{"type":26,"tag":42,"props":9325,"children":9328},{"href":9326,"rel":9327},"https:\u002F\u002Fjun-app.com\u002Fseries\u002Fnuxt-content-blog\u002F1",[734],[9329],{"type":31,"value":9330},"Nuxt Content × SSG で作る静的ブログ",{"type":26,"tag":27,"props":9332,"children":9333},{},[9334],{"type":31,"value":9335},"などのサイトを参考にブログを作っていきました。",{"type":26,"tag":27,"props":9337,"children":9338},{},[9339],{"type":31,"value":9340},"　最初につまづいたのは、ESlintです。JavaScriptのコードが正しいかをチェックするツールで、とても助かるのですが、いちいち細かいことまで指摘してきます。注意だけならともかく警告が出て止まってしまうこともありました。",{"type":26,"tag":375,"props":9342,"children":9347},{"code":9343,"language":9344,"meta":8,"className":9345},"  \u002F\u002F add your custom rules here\n  rules: {\n    'vue\u002Fmulti-word-component-names': 'off'\n  }\n",".eslintrc.js",[9346],"language-.eslintrc.js",[9348],{"type":26,"tag":380,"props":9349,"children":9350},{"__ignoreMap":8},[9351],{"type":31,"value":9343},{"type":26,"tag":27,"props":9353,"children":9354},{},[9355],{"type":31,"value":9356},"Vueのコンポーネント名として一つの単語を使っても止まらないようにするため、このルールを .eslintrc.js に追加しました。",{"type":26,"tag":27,"props":9358,"children":9359},{},[9360],{"type":31,"value":9361},"　次に困ったのはデバッグです。VScodeでのデバッグ方法がよくわからず、結局 Google Chrome で右クリック-検証 とやってデバッグしました。ほとんど単純ミスでした。layout は、うまく使えず、原因不明のままです。ヘッダーなどの共通部品をコンポーネント化したので、さほど困ってはいません。",{"type":26,"tag":54,"props":9363,"children":9364},{},[],{"type":26,"tag":27,"props":9366,"children":9367},{},[9368],{"type":31,"value":9369},"　いちばん困ったのが、date-fnsという日付処理用のプラグインをインストールしようとしたときです。何やらエラーメッセージが出て、そこで何かまずい操作をしたらしく、システムが停止しました。そのあと、Gitで復旧を試みましたが、何かのバージョン違いで復旧作業自体がストップしてしまいました。結局、nuxtのインストールからやり直すはめになりました。「おかしいと思ったら早めに引き返すこと」が教訓となりました。",{"type":26,"tag":27,"props":9371,"children":9372},{},[9373],{"type":31,"value":9374},"　作成日付と更新日付は、markdownファイルから自動取得していました。Cloudflare Pagesにデプロイすると、なぜかリセットされてしまいます。nuxt-content-gitというモジュールをインストールすれば解決するらしいと試みるもまたエラー　→　今度は深入りせず、自動取得をあきらめてcreatedAtとupdatedAtを手動で入力することにしました。",{"type":26,"tag":27,"props":9376,"children":9377},{},[9378],{"type":31,"value":9379},"　このあとも npm install ではエラーに悩まされました。firebase-tools のインストールで試しに yarn を使ってみたところ、あっさり成功しました。これは使えるかもしれません。",{"type":26,"tag":27,"props":9381,"children":9382},{},[9383],{"type":31,"value":9384},"　サイトの看板となるアイコン（favicon.ico）がうまく表示されない問題については、nuxt.config.jsを",{"type":26,"tag":375,"props":9386,"children":9391},{"code":9387,"language":9388,"meta":8,"className":9389},"  pwa: {\n    manifest: {\n      lang: 'en'\n    },\n    icon: false \u002F\u002F ←PWAのバグに対応\n  },\n","nuxt.config.js",[9390],"language-nuxt.config.js",[9392],{"type":26,"tag":380,"props":9393,"children":9394},{"__ignoreMap":8},[9395],{"type":31,"value":9387},{"type":26,"tag":27,"props":9397,"children":9398},{},[9399],{"type":31,"value":9400},"としてみたところ、ちゃんと favicon が表示されるようになりました。",{"type":26,"tag":69,"props":9402,"children":9406},{"src":9403,"alt":9404,"className":9405},"\u002Fimg\u002Ffavicon.gif","favicon",[802],[],{"type":26,"tag":54,"props":9408,"children":9409},{},[],{"type":26,"tag":90,"props":9411,"children":9413},{"id":9412},"cloudflare-pages-にカスタムドメインを設定",[9414],{"type":31,"value":9415},"Cloudflare Pages にカスタムドメインを設定",{"type":26,"tag":27,"props":9417,"children":9418},{},[9419],{"type":26,"tag":42,"props":9420,"children":9423},{"href":9421,"rel":9422},"https:\u002F\u002Fqiita.com\u002Fakitkat\u002Fitems\u002F8aeaee639ba5f2bda141",[734],[9424],{"type":31,"value":9421},{"type":26,"tag":27,"props":9426,"children":9427},{},[9428],{"type":31,"value":9429},"を参考に、kyodx.com に設定しました。「24時間かかる」との説明でしたが、数分でつながりました。",{"type":26,"tag":375,"props":9431,"children":9433},{"code":9432},"https:\u002F\u002F●●●blog.pages.dev\u002F*\n  X-Robots-Tag: noindex\n",[9434],{"type":26,"tag":380,"props":9435,"children":9436},{"__ignoreMap":8},[9437],{"type":31,"value":9432},{"type":26,"tag":27,"props":9439,"children":9440},{},[9441],{"type":31,"value":9442},"と書いた _headers ファイルをルートに置き、Cloudflare Pages の pages.dev ドメインを無効にして、独自ドメインだけを有効にするようにしました。",{"type":26,"tag":54,"props":9444,"children":9445},{},[],{"type":26,"tag":90,"props":9447,"children":9449},{"id":9448},"とても簡単なブログ更新作業",[9450],{"type":31,"value":9448},{"type":26,"tag":27,"props":9452,"children":9453},{},[9454],{"type":31,"value":9455},"　content\u002Farticles フォルダに ●●●.md という記事ファイルを作ります。マークダウンの書き方に慣れていなくても、HTMLを貼り付ければ大丈夫です。",{"type":26,"tag":27,"props":9457,"children":9458},{},[9459],{"type":31,"value":9460},"　GitHub Desktop で 「commit to master」ボタンをクリックし、「Push origin」ボタンをクリックして、数分間待つだけで勝手に更新されます。",{"type":26,"tag":27,"props":9462,"children":9463},{},[9464],{"type":31,"value":9465},"　これまで Git はあまり使っていなかったのですが、変更履歴がきちんと残るので便利です。",{"type":26,"tag":54,"props":9467,"children":9468},{},[],{"type":26,"tag":90,"props":9470,"children":9472},{"id":9471},"title-タグや-meta-タグを動的に設定",[9473],{"type":31,"value":9474},"title タグや meta タグを動的に設定",{"type":26,"tag":34,"props":9476,"children":9477},{},[9478],{"type":26,"tag":38,"props":9479,"children":9480},{},[9481],{"type":26,"tag":42,"props":9482,"children":9485},{"href":9483,"rel":9484},"https:\u002F\u002Fqiita.com\u002Famishiro\u002Fitems\u002Fb7260116b282d2cf2756",[734],[9486],{"type":31,"value":9487},"nuxt.js(v2)でSEOに必要なmeta(OGP)を入れたい",{"type":26,"tag":27,"props":9489,"children":9490},{},[9491],{"type":31,"value":9492},"を参考に、title タグや meta タグを設定しました。トップページ・記事一覧ページ以外のページでは、title,description,url,imageなどが動的に設定されるようにしました。",{"type":26,"tag":54,"props":9494,"children":9495},{},[],{"type":26,"tag":90,"props":9497,"children":9499},{"id":9498},"トップページに教育dxの概要説明を",[9500],{"type":31,"value":9501},"トップページに「教育DX」の概要説明を",{"type":26,"tag":27,"props":9503,"children":9504},{},[9505],{"type":31,"value":9506},"　教育DXとは何かを簡単に説明しました。知っている部分は読まなくていいように、details タグ　summary タグ を使いました。それぞれの「カテゴリー」や「タグ」への道案内になればよいと思います。",{"type":26,"tag":54,"props":9508,"children":9509},{},[],{"type":26,"tag":90,"props":9511,"children":9513},{"id":9512},"e-a-t-を意識した自己紹介を",[9514],{"type":31,"value":9515},"E-A-T を意識した自己紹介を",{"type":26,"tag":27,"props":9517,"children":9518},{},[9519],{"type":31,"value":9520},"　自作ソフト（ソックリッカー、ソックサーガ、ヌルパ）の紹介記事を書きました。",{"type":26,"tag":27,"props":9522,"children":9523},{},[9524],{"type":31,"value":9525},"　プロフィールのコンポーネントを作って、各記事の末尾に表示するようにしました。",{"type":26,"tag":34,"props":9527,"children":9528},{},[9529],{"type":26,"tag":38,"props":9530,"children":9531},{},[9532],{"type":26,"tag":42,"props":9533,"children":9536},{"href":9534,"rel":9535},"https:\u002F\u002Fwww.suzu6.net\u002Fposts\u002F266-nuxt-content-sitemap\u002F",[734],[9537],{"type":31,"value":9538},"nuxt\u002Fcontentでサイトマップを作る",{"type":26,"tag":27,"props":9540,"children":9541},{},[9542],{"type":31,"value":9543},"を参考に、ビルドしたらサイトマップが sitemap.xml に書き出されるようにしました。Google Search Console への登録に使います。",{"type":26,"tag":27,"props":9545,"children":9546},{},[9547],{"type":31,"value":9548},"　Cloudflare Pages でデプロイエラー → 環境変数の設定（NODE_VERSION,YARN_VERSION）で解決しました。Glitchもデフォルトのバージョンが低すぎて、似たようなことがありました。依存ライブラリのバージョン問題には悩まされます。",{"type":26,"tag":34,"props":9550,"children":9551},{},[9552],{"type":26,"tag":38,"props":9553,"children":9554},{},[9555],{"type":26,"tag":42,"props":9556,"children":9559},{"href":9557,"rel":9558},"https:\u002F\u002Fwww.saoyagi2.net\u002Fdiary\u002Fpost_175.html",[734],[9560],{"type":31,"value":9561},"DLLヘルが去ってパッケージヘルがやってきた",{"type":26,"tag":54,"props":9563,"children":9564},{},[],{"type":26,"tag":90,"props":9566,"children":9568},{"id":9567},"google-search-console-へ登録",[9569],{"type":31,"value":9570},"Google Search Console へ登録",{"type":26,"tag":27,"props":9572,"children":9573},{},[9574],{"type":31,"value":9575},"　Google Search Console のドメインプロパティで、1日待っても「所有権が証明できない」エラーが消えません。本に書いているのとやり方が違って戸惑ったので、",{"type":26,"tag":34,"props":9577,"children":9578},{},[9579],{"type":26,"tag":38,"props":9580,"children":9581},{},[9582],{"type":26,"tag":42,"props":9583,"children":9586},{"href":9584,"rel":9585},"https:\u002F\u002Fkoichi-tsujino.com\u002Fsetting_google_search_console_to_gcp",[734],[9587],{"type":31,"value":9588},"GCP + CloudFlareな環境に移行してGoogle SearchConsoleの設定をした話",{"type":26,"tag":27,"props":9590,"children":9591},{},[9592],{"type":31,"value":9593},"を参考に、DNSレコードを「ドメイン登録サービス」ではなく、Cloudflare のDNS設定で追加すると、すぐに解決しました。",{"type":26,"tag":27,"props":9595,"children":9596},{},[9597],{"type":31,"value":9598},"　URL検査で「このページはモバイルフレンドリーです」 が出て、一安心です。",{"type":26,"tag":27,"props":9600,"children":9601},{},[9602],{"type":31,"value":9603},"　Cloudflare の Web Analytics も始めました。",{"type":26,"tag":54,"props":9605,"children":9606},{},[],{"type":26,"tag":90,"props":9608,"children":9610},{"id":9609},"google-adsense-審査通過",[9611],{"type":31,"value":9612},"Google AdSense 審査通過",{"type":26,"tag":27,"props":9614,"children":9615},{},[9616],{"type":31,"value":9617},"　2022\u002F7\u002F22、記事数が20に達したので Google AdSense の利用にとりかかりました。",{"type":26,"tag":27,"props":9619,"children":9620},{},[9621],{"type":31,"value":9622},"　プライバシーポリシーにGoogle AdSenseについての記述を追加します。",{"type":26,"tag":27,"props":9624,"children":9625},{},[9626],{"type":31,"value":9627},"　@nuxtjs\u002Fgoogle-adsense をインストールし、nuxt.config.jsを編集、adsbygoogleコンポーネントをセットします。",{"type":26,"tag":27,"props":9629,"children":9630},{},[9631],{"type":31,"value":9632},"　「審査をリクエスト」をクリックして待ちます。審査完了まで平均1～2週間かかるようです。",{"type":26,"tag":27,"props":9634,"children":9635},{},[9636],{"type":31,"value":9637},"　審査は年々厳しくなっていく傾向にあり、信頼性の高いWebサイトに求められる",{"type":26,"tag":97,"props":9639,"children":9640},{},[9641,9646,9651,9656],{"type":26,"tag":38,"props":9642,"children":9643},{},[9644],{"type":31,"value":9645},"ユーザーが抱える悩みや疑問を解決できるか",{"type":26,"tag":38,"props":9647,"children":9648},{},[9649],{"type":31,"value":9650},"独自性のあるコンテンツか",{"type":26,"tag":38,"props":9652,"children":9653},{},[9654],{"type":31,"value":9655},"コンテンツの量や質が適切であるか",{"type":26,"tag":38,"props":9657,"children":9658},{},[9659],{"type":31,"value":9660},"お問い合わせ・プライバシーポリシーがあるか",{"type":26,"tag":27,"props":9662,"children":9663},{},[9664],{"type":31,"value":9665},"という4つの基準が重視されるようです。",{"type":26,"tag":27,"props":9667,"children":9668},{},[9669,9671,9679],{"type":31,"value":9670},"　ドキドキしながら待っていると、1日半で「AdSense アカウントの有効化おめでとうございます！」のメールが届いてホッとしました。「",{"type":26,"tag":2292,"props":9672,"children":9673},{},[9674],{"type":26,"tag":285,"props":9675,"children":9676},{},[9677],{"type":31,"value":9678},"教育DXブログがGoogleに認められたんだ！",{"type":31,"value":9680},"」とうれしくなりました。",{"type":26,"tag":54,"props":9682,"children":9683},{},[],{"type":26,"tag":90,"props":9685,"children":9687},{"id":9686},"staticフォルダ内のページが表示されない",[9688],{"type":31,"value":9689},"staticフォルダ内のページが表示されない！",{"type":26,"tag":27,"props":9691,"children":9692},{},[9693,9695,9700,9701,9706],{"type":31,"value":9694},"　マークダウンは書きやすく便利ですが、たまに、マークダウン以外で書かれたページが必要になります。自作のWebアプリ（",{"type":26,"tag":42,"props":9696,"children":9698},{"href":7370,"rel":9697},[734],[9699],{"type":31,"value":7374},{"type":31,"value":8372},{"type":26,"tag":42,"props":9702,"children":9704},{"href":7362,"rel":9703},[734],[9705],{"type":31,"value":1606},{"type":31,"value":9707},"）やPDF形式の文書などです。",{"type":26,"tag":27,"props":9709,"children":9710},{},[9711],{"type":31,"value":9712},"　そんなファイルは、static フォルダに入れておけばルートフォルダに置かれるので、\u002F（スラッシュ）から始まる相対URLでアクセスできます。",{"type":26,"tag":69,"props":9714,"children":9719},{"src":9715,"alt":9716,"width":9717,"style":9718},"\u002Fimg\u002Fpagenotfound.png","ページ表示エラー","50%","float:right",[],{"type":26,"tag":27,"props":9721,"children":9722},{},[9723],{"type":31,"value":9724},"　ところが実際は、すんなりと表示されないようです。リロードすれば表示されるので、アドレス指定は間違っていません。",{"type":26,"tag":27,"props":9726,"children":9727},{},[9728],{"type":31,"value":9729},"　いろいろ調べますが、今のところ原因がわかっていません。名前解決の問題かもと思いながら、とりあえず絶対URL指定に変えることにしました。",{"type":26,"tag":54,"props":9731,"children":9732},{},[],{"type":26,"tag":58,"props":9734,"children":9735},{"id":5278},[9736],{"type":31,"value":5278},{"type":26,"tag":27,"props":9738,"children":9739},{},[9740],{"type":31,"value":9741},"　自前のブログシステムなので、使っていきながら改良していきます。中身が全部わかっているというのは、安心です。",{"type":26,"tag":27,"props":9743,"children":9744},{},[9745],{"type":31,"value":5290},{"type":26,"tag":54,"props":9747,"children":9748},{},[],{"type":26,"tag":179,"props":9750,"children":9752},{"className":9751},[1207],[9753,9754,9767,9768],{"type":31,"value":1210},{"type":26,"tag":179,"props":9755,"children":9757},{"className":9756},[1214],[9758],{"type":26,"tag":42,"props":9759,"children":9762},{"target":1218,"rel":9760,"href":9761},[1220],"https:\u002F\u002Fhb.afl.rakuten.co.jp\u002Fichiba\u002F273236f4.d5f5314b.273236f5.ec66cf8e\u002F_RTLink57027?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Frakutenkobo-ebooks%2F6641aa3ba3f53a0caa7fa51d5f20f36f%2F&link_type=hybrid_url&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJ1cCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MCwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjAsInByb2QiOjAsImFtcCI6ZmFsc2V9",[9763],{"type":26,"tag":69,"props":9764,"children":9766},{"src":9765},"https:\u002F\u002Fthumbnail.image.rakuten.co.jp\u002F@0_mall\u002Frakutenkobo-ebooks\u002Fcabinet\u002F5585\u002F2000007695585.jpg?_ex=240x240",[],{"type":31,"value":1210},{"type":26,"tag":179,"props":9769,"children":9771},{"className":9770},[1231],[9772,9773,9783,9784,9798,9799,9836],{"type":31,"value":1234},{"type":26,"tag":179,"props":9774,"children":9776},{"className":9775},[1238],[9777],{"type":26,"tag":42,"props":9778,"children":9780},{"target":1218,"rel":9779,"href":9761},[1220],[9781],{"type":31,"value":9782},"Vue.js&Nuxt.js超入門 [ 掌田津耶乃 ]",{"type":31,"value":1234},{"type":26,"tag":179,"props":9785,"children":9787},{"className":9786},[1250],[9788,9791,9793,9796],{"type":26,"tag":54,"props":9789,"children":9790},{},[],{"type":31,"value":9792},"※ ネットの情報には、間違いも含まれています。",{"type":26,"tag":54,"props":9794,"children":9795},{},[],{"type":31,"value":9797},"ハダノは掌田さんの本のおかげで、Vue.jsの全体像とNuxt.jsの基本を一通り理解することができました。",{"type":31,"value":1234},{"type":26,"tag":179,"props":9800,"children":9802},{"className":9801},[1266,1267],[9803,9804,9813,9814,9824,9825,9835],{"type":31,"value":1270},{"type":26,"tag":179,"props":9805,"children":9806},{},[9807],{"type":26,"tag":42,"props":9808,"children":9811},{"className":9809,"target":1218,"rel":9810,"href":9761},[1277,1278],[1220],[9812],{"type":31,"value":1282},{"type":31,"value":1284},{"type":26,"tag":179,"props":9815,"children":9816},{},[9817],{"type":26,"tag":42,"props":9818,"children":9822},{"className":9819,"target":1218,"rel":9820,"href":9821},[1277,1291],[1220],"https:\u002F\u002Faf.moshimo.com\u002Faf\u002Fc\u002Fclick?a_id=3539938&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB07X6F1C2P",[9823],{"type":31,"value":1296},{"type":31,"value":1284},{"type":26,"tag":179,"props":9826,"children":9827},{},[9828],{"type":26,"tag":42,"props":9829,"children":9833},{"className":9830,"target":1218,"rel":9831,"href":9832},[1277,1304],[1220],"https:\u002F\u002Fck.jp.ap.valuecommerce.com\u002Fservlet\u002Freferral?sid=3651993&pid=887947441&vc_url=https%3A%2F%2Fstore.shopping.yahoo.co.jp%2Fvaboo%2Fva6596805479u30.html%3Fsc_i%3Dshp_pc_search_itemlist_shsrg_title",[9834],{"type":31,"value":1309},{"type":31,"value":1234},{"type":31,"value":1210},{"type":26,"tag":54,"props":9838,"children":9839},{},[],{"type":26,"tag":319,"props":9841,"children":9842},{},[],{"type":26,"tag":27,"props":9844,"children":9845},{},[9846],{"type":26,"tag":42,"props":9847,"children":9848},{"href":4012},[9849],{"type":31,"value":9850},"次へ→　持続可能なブログ作り",{"title":8,"searchDepth":324,"depth":324,"links":9852},[9853,9858,9869],{"id":9225,"depth":324,"text":9228,"children":9854},[9855,9856,9857],{"id":9241,"depth":362,"text":9241},{"id":9251,"depth":362,"text":9251},{"id":9261,"depth":362,"text":9264},{"id":9280,"depth":324,"text":9283,"children":9859},[9860,9861,9862,9863,9864,9865,9866,9867,9868],{"id":9304,"depth":362,"text":9307},{"id":9412,"depth":362,"text":9415},{"id":9448,"depth":362,"text":9448},{"id":9471,"depth":362,"text":9474},{"id":9498,"depth":362,"text":9501},{"id":9512,"depth":362,"text":9515},{"id":9567,"depth":362,"text":9570},{"id":9609,"depth":362,"text":9612},{"id":9686,"depth":362,"text":9689},{"id":5278,"depth":324,"text":5278},"content:articles:blog-1.md","articles\u002Fblog-1.md","articles\u002Fblog-1",{"_path":9874,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9875,"description":9876,"category":9877,"tag":9878,"thumbnail":9879,"createdAt":9880,"updatedAt":9881,"body":9882,"_type":1519,"_id":10031,"_source":1521,"_file":10032,"_stem":10033,"_extension":1524},"\u002Farticles\u002Fprivacy-policy","プライバシーポリシー","教育DXブログのプライバシーポリシー・免責事項等",[12],[16],"keyhuman.png","2022\u002F4\u002F24","2022\u002F7\u002F20",{"type":23,"children":9883,"toc":10022},[9884,9888,9893,9898,9903,9908,9913,9918,9923,9937,9940,9945,9950,9955,9960,9963,9968,9973,9978,9983,9986,9991,9996,10019],{"type":26,"tag":58,"props":9885,"children":9886},{"id":9875},[9887],{"type":31,"value":9875},{"type":26,"tag":90,"props":9889,"children":9891},{"id":9890},"個人情報の利用目的",[9892],{"type":31,"value":9890},{"type":26,"tag":27,"props":9894,"children":9895},{},[9896],{"type":31,"value":9897},"　当ブログでは、お問い合わせや記事へのコメントの際、名前やメールアドレス等の個人情報を入力いただく場合があります。",{"type":26,"tag":27,"props":9899,"children":9900},{},[9901],{"type":31,"value":9902},"　取得した個人情報は、お問い合わせに対する回答や必要な情報を電子メールなどでご連絡する場合に利用させていただくものであり、これらの目的以外では利用いたしません。",{"type":26,"tag":27,"props":9904,"children":9905},{},[9906],{"type":31,"value":9907},"　ブログ内の記事での引用については、許可された範囲を超えて行うことはありません。",{"type":26,"tag":90,"props":9909,"children":9911},{"id":9910},"広告について",[9912],{"type":31,"value":9910},{"type":26,"tag":27,"props":9914,"children":9915},{},[9916],{"type":31,"value":9917},"　当ブログでは、第三者配信の広告サービス（Googleアドセンス）を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、クッキー（Cookie）を使用しております。",{"type":26,"tag":27,"props":9919,"children":9920},{},[9921],{"type":31,"value":9922},"　クッキーを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。",{"type":26,"tag":27,"props":9924,"children":9925},{},[9926,9928,9935],{"type":31,"value":9927},"　Cookieを無効にする方法やGoogleアドセンスに関する詳細は ",{"type":26,"tag":42,"props":9929,"children":9932},{"href":9930,"rel":9931},"https:\u002F\u002Fpolicies.google.com\u002Ftechnologies\u002Fads?gl=jp",[734],[9933],{"type":31,"value":9934},"🔗「広告 – ポリシーと規約 – Google」",{"type":31,"value":9936}," をご確認ください。",{"type":26,"tag":54,"props":9938,"children":9939},{},[],{"type":26,"tag":58,"props":9941,"children":9943},{"id":9942},"免責事項",[9944],{"type":31,"value":9942},{"type":26,"tag":27,"props":9946,"children":9947},{},[9948],{"type":31,"value":9949},"　当ブログからのリンクやバナーなどで移動したサイトで提供される情報、サービス等について一切の責任を負いません。",{"type":26,"tag":27,"props":9951,"children":9952},{},[9953],{"type":31,"value":9954},"　また当ブログのコンテンツ・情報について、できる限り正確な情報を提供するように努めておりますが、正確性や安全性を保証するものではありません。情報が古くなっていることもあります。",{"type":26,"tag":27,"props":9956,"children":9957},{},[9958],{"type":31,"value":9959},"　当ブログに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。",{"type":26,"tag":54,"props":9961,"children":9962},{},[],{"type":26,"tag":58,"props":9964,"children":9966},{"id":9965},"著作権について",[9967],{"type":31,"value":9965},{"type":26,"tag":27,"props":9969,"children":9970},{},[9971],{"type":31,"value":9972},"　当ブログで掲載している文章や画像などにつきましては、著作権の対象となっています。",{"type":26,"tag":27,"props":9974,"children":9975},{},[9976],{"type":31,"value":9977},"　「私的使用のための複製」や「引用」など著作権法上認められた場合を除き、無断で複製・転用することはできません。",{"type":26,"tag":27,"props":9979,"children":9980},{},[9981],{"type":31,"value":9982},"　当ブログは著作権や肖像権の侵害を目的としたものではありません。著作権や肖像権に関して問題がありましたら、お問い合わせフォームよりご連絡ください。迅速に対応いたします。",{"type":26,"tag":54,"props":9984,"children":9985},{},[],{"type":26,"tag":58,"props":9987,"children":9989},{"id":9988},"リンクについて",[9990],{"type":31,"value":9988},{"type":26,"tag":27,"props":9992,"children":9993},{},[9994],{"type":31,"value":9995},"　当ブログへのリンクは、営利、非営利を問わず原則自由です。但し、以下のいずれかに該当する或いはそのおそれがあるリンクはご遠慮ください。",{"type":26,"tag":34,"props":9997,"children":9998},{},[9999,10004,10009,10014],{"type":26,"tag":38,"props":10000,"children":10001},{},[10002],{"type":31,"value":10003},"誹謗中傷、信用失墜、当ブログの運営を妨害する場合",{"type":26,"tag":38,"props":10005,"children":10006},{},[10007],{"type":31,"value":10008},"財産、プライバシー、肖像権その他の権利を侵害する場合",{"type":26,"tag":38,"props":10010,"children":10011},{},[10012],{"type":31,"value":10013},"法令又は公序良俗に反する場合",{"type":26,"tag":38,"props":10015,"children":10016},{},[10017],{"type":31,"value":10018},"情報発信元を誤認させるような形でリンクを張る場合",{"type":26,"tag":54,"props":10020,"children":10021},{},[],{"title":8,"searchDepth":324,"depth":324,"links":10023},[10024,10028,10029,10030],{"id":9875,"depth":324,"text":9875,"children":10025},[10026,10027],{"id":9890,"depth":362,"text":9890},{"id":9910,"depth":362,"text":9910},{"id":9942,"depth":324,"text":9942},{"id":9965,"depth":324,"text":9965},{"id":9988,"depth":324,"text":9988},"content:articles:privacy-policy.md","articles\u002Fprivacy-policy.md","articles\u002Fprivacy-policy",1791852908852]