こんにちは、ねこです。

自称プログラマのおばちゃんのブログです。いろいろあるよねぇ~。

Microsoft MCSA SQL Server 2016 (70-761)むぼーな挑戦13/問題は注意深く読むこと。

2019-11-14 15:25:52 | プログラム 勉強

もう30分しかないからどうしようかと迷ったのですが、自責の念からアップするここにしました。

覚えてますか?

Microsoft MCSA SQL Server 2016 (70-761) むぼーな挑戦 3

知識とは違って、テストを受ける姿勢の問題ですな。

【間違いの理由別考察】

1.読み落とし

2.忘れている

3.ケアレスミス

4.ふたを開けたらわかってなかった

5.もう諦めなきゃならんレベル

そうです、この「1.読み落とし」がありました。

You plan to run the following query to update tasks that are not yet started:

下記のクエリを実行すると、

UPDATE Task SET StartTime = GETDATE() WHERE StartTime IS NULL

You need to return the total count of tasks that are impacted by this UPDATE operation, but are not associated
with a project.

このUPDATEからインパクトを受けるtasksのカウント数を出しなさい。しかし、それらはprojectとは関連付けられてません。

A.

B.

C.

D.

<答え>B

最後の行を読めばよいのです。答えがあるか、ないかの二つに一つです。

『WHERE TaskId IS NOT NULL』

『WHERE ProjectId IS NULL』

『しかし、それらはprojectとは関連付けられてません。』なので答えはたった一つしか選択肢のない

『WHERE ProjectId IS NULL』

 となります。
 
とほほ。。。

 


Microsoft MCSA SQL Server 2016 (70-761)むぼーな挑戦12/CTEの問題

2019-11-14 11:50:03 | プログラム 勉強

 これはもうあかん。この問題は本当によーわからん。なので検証します。

【問題】

DRAG DROP
You query a database that includes two tablesこの二つのテーブルを含むデータベースのクエリを作ります: ProjectとTask.
The Project table includes the following columns: Projectテーブルは以下のコラムを含みます。

Task level is defined using the following rules: Taskのレベルわけは以下のようなルールで行います。

Task.ProjectIdは、もし『NULL』だったらTaskにProjectがアサインされていないということらしい。そして、『ParentTaskId』とあるのが、それぞれのTaskにParentTaskがあるかないかだそうだ。

『Task』に『ParentTask』がない場合は、『TaskLevel』=0、あれば『TaskLevel』=『ParentTaskLevel』+1

You need to determine the task level for each task in the hierarchy. それぞれの『TaskLevel』を階級順にはっきりさせてください。←これが問題の主旨です。

Which five Transact-SQL segments should you use to develop the solution? 全部で7つのうち、5つ選んでステートメントを作ってもらいます。


【推測】

恐ろしい。。。ここに『Projectテーブル』が使われている形跡がない。。。そんなこと言っても始まらない。

まず、『With』とついているんで、これはCTEにせいということですね。

① With TaskWithLevel(ParentTaskId, TaskId, TaskName,TaskLevel) AS (

そしてこれを必ず完結させるためには、もうひとつ『)』終わるカッコが必要で、チョイスはこれだけ。

② ) 

Select * from TaskWithLevel

さあて、次が勝負。

CTEの意味がはっきりと分からなくても、このCTEの名前である『TaskWithLevel』を使っているものはCTEの中に挿入できない。CTEの『AS()』に入るステートメントを必要としているので、

③ SELECT CAST(NULL AS int) AS ParentTaskId, T.TaskId, T.TaskName, 0 AS TaskLevel
FROM Task T
WHERE T.ParentTaskId IS NULL


④ SELECT T.TaskId AS ParentTaskId, CAST(null AS int) AS TaskId, T.TaskName, 0 AS TaskLEvel
FROM Task T
WHERE T.ParentTaskId IS NULL

 のふたつとなる。けど、④の「WHERE T.ParentTaskId IS NULL」でTaskIdまで「CAST(null AS int) AS TaskId」されてNULLじゃ、Taskが存在しないことになるよね。だからないな。

とりあえず、②の『) Select * from TaskWithLevel』の後がもし必要だとしたら、唯一実際にこのCTEの『TaskWithLevel』を使っている部分です。だから、

⑤ SELECT R.TaskId AS ParentTaskId, T.TaskId, T.TaskName,R.TaskLevel+1 AS TaskLevel
FROM Task T INNER JOIN TaskWithLevel R ON T.ParentTaskId = R.TaskId

「全部で5つつかう」ということなので、数的にはこれが必要になるでしょうね。

 残りは⑥UNION, ⑦UNION ALLとなります。

では、①と②のCTEの受け皿がはっきりとしているので、中身を検証しましょう。

「『ParentTask』がない場合は『TaskLevel』=0、『ParentTask』がある場合は『TaskLevel』=『ParentTaskLevel』+1」とあるので、

③ SELECT CAST(NULL AS int) AS ParentTaskId, T.TaskId, T.TaskName, 0 AS TaskLevel
FROM Task T
WHERE T.ParentTaskId IS NULL

➞『TaskLevel』=0ParentTaskなしなので、『UNION/UNION ALL』は『NULL』もカウントしてくれるので、ParentTaskIdが『NULL』としてCASTされてよいじゃないか。

 

 

【シナリオ構築】

①With TaskWithLevel(ParentTaskId, TaskId, TaskName,TaskLevel) AS (

②SELECT CAST(NULL AS int) AS ParentTaskId, T.TaskId, T.TaskName, 0 AS TaskLevel
FROM Task T
WHERE T.ParentTaskId IS NULL

③) 

Select * from TaskWithLevel

④UNION

⑤SELECT R.TaskId AS ParentTaskId, T.TaskId, T.TaskName,R.TaskLevel+1 AS TaskLevel
FROM Task T INNER JOIN TaskWithLevel R ON T.ParentTaskId = R.TaskId

1.まずはUNIONはコラムのデータタイプ、数が同じで、初めてユニークデータを両テーブルからとれるので、これをチェック。

CTE: Select * from TaskWithLevel

ParentTaskId=NULL

TaskId=Task.TaskId

TaskName=Task.TaskName

TaskLevel=Task.TaskLevel

 

INNER JOIN TaskWithLevel:

TaskId=ParentTaskId

TaskId=Task.TaskId

TaskName=Task.TaskName

TaskLevel=TaskLevel+1

良い感じですね。

2.ルールをあてはめてみる。

A.「ひとつはProjectテーブル用のユニークID、もう一つはもし『NULL』だったら、TaskにProjectがアサインされていないということらしい。』

『ProjectId』完全に避けてSELECT文どころが、どこにも見当たらないので、これは無視します。このテスト(70-761)、難ありデータ構造をわざと使ってることが結構あります。。。

B.「『ParentTask』なければ『TaskLevel』=0、あれば『TaskLevel』=『ParentTaskLevel』+1」

「CTE:」が『ParentTask』なければ『TaskLevel』=0にあたいする。

「INNER JOIN TaskWithLevel:」が『ParentTask』があれば『TaskLevel』=『ParentTaskLevel』+1あたいする。

ってことかな?

3.『UNION』?『UNION ALL』?

これはわからん。。。

 

【ググった結果】

(Peterさん、毎度ありがとうございます。勉強になります。)

https://www.briefmenow.org/microsoft/which-five-transact-sql-segments-should-you-use-to-deve-2/

 

ねこの答え ググった中で大多数の答え
WITH TaskWithLevel (TaskID, TaskName, ParentTaskID, TaskLevel)

AS
(

SELECT
T.TaskID,T.TaskName,CAST(NULL AS INT) AS ParentTaskID,0 AS TaskLevel
FROM dbo.Task AS T WHERE ParentTaskID IS NULL

)
SELECT * FROM TaskWithLevel
ORDER BY TaskName

UNION

SELECT
T.TaskID,T.TaskName,R.TaskID AS ParentTaskID,(R.TaskLevel + 1) AS TaskLevel
FROM dbo.Task AS T
INNER JOIN TaskWithLevel AS R
ON T.ParentTaskID = R.TaskID 

WITH TaskWithLevel (TaskID, TaskName, ParentTaskID, TaskLevel)

AS
(

SELECT
T.TaskID,T.TaskName,CAST(NULL AS INT) AS ParentTaskID,0 AS TaskLevel
FROM dbo.Task AS T WHERE ParentTaskID IS NULL

UNION ALL

SELECT
T.TaskID,T.TaskName,R.TaskID AS ParentTaskID,(R.TaskLevel + 1) AS TaskLevel
FROM dbo.Task AS T
INNER JOIN TaskWithLevel AS R
ON T.ParentTaskID = R.TaskID

)
SELECT * FROM TaskWithLevel
ORDER BY TaskName

どなたか、どっちが正しいか教えてください。。。

でももうすぐで『Exam4Training』合計168問終わるからね。あと48問!!!今日中におわらせるぞ!!!

*注意、結構間違っている答えがたくさんあります。気をつけてください。


Microsoft MCSA SQL Server 2016 (70-761)むぼーな挑戦11/RAISERRORわからん。

2019-11-13 11:21:25 | プログラム 勉強

RAISERRORわからんちん。

大切なのは、『RAISERROR』はエラーなので、『CATCH』されます。

そして、『The first paragraph in General Remarks says,”When nesting transactions, this same statement rolls back all inner transactions to the outermost BEGIN TRANSACTION statement.”』ってあるように、「一般的な解説の最初の段落では、トランザクションをネストすると、この同じステートメントはすべての内部トランザクションを最も外側のBEGIN TRANSACTIONステートメントにロールバックします。」ってかいてある。

https://www.briefmenow.org/microsoft/what-is-the-result-of-each-transact-sql-statement/

You run the following Transact-SQL statements:下記の二つを実行してください。

What is the result of each Transact-SQL statement? To answer, select the appropriate options in the answer
area.どんな結果がえられますか?
Hot Area:

<答え>両方とも「All transactions are rolled back.」

【検証と結果】Peterさんのから。以下のステートメントを実行してみたら<答え>両方とも「All transactions are rolled back.」だったそうです。

IF EXISTS (SELECT TOP(1) 42 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘dbo’ and TABLE_NAME = ‘Log1’)
BEGIN
DROP TABLE dbo.Log1;
END;
IF EXISTS (SELECT TOP(1) 42 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘dbo’ and TABLE_NAME = ‘Log2’)
BEGIN
DROP TABLE dbo.Log2;
END;
IF EXISTS (SELECT TOP(1) 42 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘dbo’ and TABLE_NAME = ‘Log3’)
BEGIN
DROP TABLE dbo.Log3;
END;
IF EXISTS (SELECT TOP(1) 42 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘dbo’ and TABLE_NAME = ‘Log4’)
BEGIN
DROP TABLE dbo.Log4;
END;

CREATE TABLE Log1 (Code CHAR(5), ApplcationId INT, Info VARCHAR(1000));
CREATE TABLE Log2 (Code CHAR(5), ApplcationId INT, Info VARCHAR(1000));
CREATE TABLE Log3 (Code CHAR(5), ApplcationId INT, Info VARCHAR(1000));
CREATE TABLE Log4 (Code CHAR(5), ApplcationId INT, Info VARCHAR(1000));
GO

CREATE PROC dbo.UpdateLogs @Code CHAR(5), @ApplicationId INT, @Info VARCHAR(1000)
AS
BEGIN
BEGIN TRY
BEGIN TRAN
INSERT INTO dbo.Log1 VALUES (@Code, @ApplicationId, @Info)

IF (@Code = ‘C2323’ AND @ApplicationId = 1)
RAISERROR(‘C2323 code from HR application!’, 16, 1)
ELSE
INSERT INTO dbo.Log2 VALUES (@Code, @ApplicationId, @Info)
INSERT INTO dbo.Log3 VALUES (@Code, @ApplicationId, @Info)

BEGIN TRAN
IF @Code = ‘C2323’
BEGIN
SELECT ‘Rolling back’;
ROLLBACK TRAN
END
ELSE
INSERT INTO dbo.Log4 VALUES (@Code, @ApplicationId, @Info)

IF @@TRANCOUNT > 0
COMMIT TRAN
END TRY
BEGIN CATCH
IF XACT_STATE() != 0
ROLLBACK TRAN
END CATCH
END
GO

EXEC dbo.UpdateLogs ‘C2323’, 1, ‘Employee records are updated.’

SELECT ‘First Execution’;
SELECT * FROM dbo.Log1;
SELECT * FROM dbo.Log2;
SELECT * FROM dbo.Log3;
SELECT * FROM dbo.Log4;

DELETE FROM dbo.Log1;
DELETE FROM dbo.Log2;
DELETE FROM dbo.Log3;
DELETE FROM dbo.Log4;

EXEC dbo.UpdateLogs ‘C2323’, 10, ‘Sales process started.’

SELECT ‘Second Execution’;
SELECT * FROM dbo.Log1;
SELECT * FROM dbo.Log2;
SELECT * FROM dbo.Log3;
SELECT * FROM dbo.Log4;

DROP PROCEDURE dbo.UpdateLogs;

 


Microsoft MCSA SQL Server 2016 (70-761)むぼーな挑戦10/PIVOT・ UNPIVOT どうしてもわからない。。。

2019-11-12 18:18:39 | プログラム 勉強

はい、ねこです。

動画やったりして、結構満足してました。。。

PIVOTの超簡単説明

UNPIVOTの超簡単説明

。。。あんだけわかった気になってたのに、やっぱり全然わからんPIVOT・UNPIVOTです。

ここに過去問があります。

【PIVOT・UNPIVOT】

You have a table named Cities that has the following two columns: City ID and CityName.

Citiesというテーブルがあり、City IDとCityNameからできてます。ふむふむ。リファレンステーブルやな。

The CityID column uses the int data type, and CityName uses nvarchar(max).

City IDがintで、CityNameがnvarchar(max)。よくある系ですな。

You have a table named RawSurvey. Each row includes an identifier for a question and the number of persons that responded to that question from each of four cities.

RawSurveyテーブルというのがあり、それぞれの行に『question質問の種類』と『number of persons回答者数』が『city4つ』ごとにあります。

The table contains the following representative data:下記の通り

A reporting table named SurveyReport has the following columns: CityID, QuestionID, and RawCount, where RawCount is the value from the RawSurvey table.
SurveyReportというテーブルがあり、CityIDとQuestionIDとRawCount(RawSurveyテーブルから値を持ってくる)とあります。うぅ~ん、全部で三つのコラム。

You need to write a Transact-SQL query to meet the following requirements:下記の条件に合うT-SQLを書きなさい。

– Retrieve data from the RawSurvey table in the format of the Survey Report table. SurveyReportの形式に変更してRawSurveyテーブルから値を持ってきなさい。すると、元データのRawSurveyテーブルには『question』『number of persons』『city4つ』あって、CityIDとQuestionID、そしてRawCount(RawSurveyテーブルから値を持ってくる)のSurveyReportテーブルに直さなければならない。

 

– The City ID must contain the City ID of the city that was surveyed. CityIDはRawSurveyテーブルのCityのCityIDからもってくるように。

– The order of cities in all SELECT queries must match the order in the RawSurvey table. RawSurveyテーブルのCityの順番通りにもってくること。

– The order of cities in all IN statements must match the order in the RawSurvey table. 全ての『IN』文にはRawSurveyテーブルのCityが順番通りであること。

。。。もうわからん。。。なきたいなぁ。

。。。ちょっと休憩。Dr.コトーの島、第六巻、和田さん結婚できてよかった。何回読んでもいい漫画だにゃぁーっ!さてと。

SELECT CityId, QuestionID, RawCount 

FROM SurveyReport t1

UNPIVOT

(RawCount FOR CityID IN (Tokyo,Boston,London,New York)) t1

LEFT JOIN Cities t2 on t1.CityID = t2.CityID

 

いかん、なにやってんのか全然わからん。。。

答え見ます。負け犬、いや、負け猫です。

<答えその一>

SELECT CityId, QuestionId, RawCount
FROM (SELECT QuestionId, Tokyo, Boston, London, NewYork FROM RawSurvey) AS t1
UNPIVOT (RawCount FOR CityName IN (Tokyo, Boston, London, NewYork)) AS t2
JOIN Cities ON t2.CityName = Cities.CityName;

<答えその二>エリアス名だけの違いか。。。どっちが正しいのかな。。。

SELECT CityId, QuestionId, RawCount
FROM (SELECT QuestionId, Tokyo, Boston, London, NewYork FROM RawSurvey) t2
UNPIVOT (RawCount FOR CityName IN (Tokyo, Boston, London, NewYork)AS t2
JOIN Cities t1 ON t2.CityName = t1.CityName;

<答えその三>これまた、思い切ってますな。“New York” はコラム名だとスペースがあって均一じゃないからか?

SELECT CityID, QuestionID, RawCount FROM Cities AS t1
(SELECT Tokyo, Boston, London, “New York” FROM Rawsurvey) p
UNPIVOT
(Rawcount FOR CityName IN (‘Tokyo’,’Boston’,’London’,’New York’) AS t2
JOIN t2 ON t1.CityName = t2.cityName

<ねこの答え>もう、救いようがねーな。LEFT JOINって。。。

SELECT CityID, QuestionID, RawCount FROM SurveyReport t1
UNPIVOT
(RawCount FOR CityID IN (Tokyo,Boston,London,New York)) t1
LEFT JOIN Cities t2 on t1.CityID = t2.CityID

...これは検証するしかねーな。

【検証!】

CREATE TABLE Cities (
CityId INT NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,
CityName NVARCHAR(MAX) NOT NULL
);

INSERT INTO Cities VALUES
(‘Tokyo’), (‘Boston’), (‘London’), (‘NewYork’);

CREATE TABLE RawSurvey (
QuestionId NCHAR(2) NOT NULL PRIMARY KEY CLUSTERED,
Tokyo INT NOT NULL,
Boston INT NOT NULL,
London INT NOT NULL,
NewYork INT NOT NULL
);

INSERT INTO RawSurvey VALUES
(‘Q1’, 1, 42, 48, 51),
(‘Q2’, 22, 39, 58, 42),
(‘Q3’, 29, 41, 61, 33),
(‘Q4’, 62, 70, 60, 50),
(‘Q5’, 63, 31, 41, 21),
(‘Q6’, 32, 1, 16, 34);

とにかく、形にしようと、『CityID』抜きでやってみた。

Derived tableでUNPIVOTに必要なテーブルを整えてやります。

*derived table is a table expression that appears in the FROM clause of a query. You can apply derived tables when the use of column aliases is not possible because another clause is processed by the SQL translator before the alias name is known.

derived tableは、クエリのFROM句に表示されるテーブル式です。 エイリアス名がわかる前に別の句がSQLトランスレータによって処理されるため、列エイリアスを使用できない場合は、derived tableテーブルを適用できます。

Select QuestionID, RawCount
From (Select QustionID, Tokyo, Boston, London, NewYork From RawSurvey) as t1
UNPIVOT
RawCount FOR CityName IN (Tokyo, Boston, London, NewYork) as t1

『RawCount』と『CityName』は今のところ、ただの入れ物に過ぎない。『RawCount1111』や『CityXXXName』であってもかまわないということ。まだ何も紐づいてないからね 違うぞ!これはUNPIVOTのために暫定的につけているなまえだから、あとで cities.CityName = t2.CityxxxNameとしてもcitiesテーブルのCityNameと比較できるんだよね。だからオッケー。

【検証結果!!!】

どうやら、これでいけそうでした。derived table必要なかったのか?!まぁ、整える必要はなかったようですね。

SELECT CityID, QuestionID, RawCount
FROM RawSurvey as t1
UNPIVOT (RawCount FOR CityName IN (Tokyo, Boston, London, NewYork)) as t1
JOIN cities on t1.CityName = Cities.CityName

もう、茶しばいて寝ます。ねこは早寝早起きのママねこです。

おやちゅみ~。


Netlify, Gatsbyのお勉強4➡LMこんどはGatsbyCMSにチャレンジだ。

2019-11-08 09:05:38 | 空手

今朝の9:00です。息子も学校に送ってお茶も沸いたし、旦那さんは会議中。今から一時間、みっちりと勉強します。

目標は、自宅で今のフリーランス以外にもお仕事できるようになること。

では本日のお題【LMこんどはGatsbyCMSにチャレンジだ。】です。

1.今回はCMShttps://nekonya.netlify.com/にLMを使ったイメージファイルを挿入します。

まずはこちらを確認して。。。https://blog.goo.ne.jp/beerneko/e/62a9cd078af31daebaa3142c61e1e170

$ netlify login

Already logged in via netlify config on your machine

Run netlify status for account details

あれ?すでにログインしてるって出てきた。前回はウェブサイトまでいってAuthorizeをクリックしてNetlify CLIでつなげてやらなければならなかたのに。。。

へんだ。。。

前回と同じようにアップデートしろってかいてあったので、そうします。

Update available 2.20.1 → 2.20.2
Run npm i -g netlify-cli to update

Success! Netlify CLI has been installed!

Your device is now configured to use Netlify CLI to deploy and manage your Netlify sites.

Next steps:

netlify init Connect or create a Netlify site from current directory
netlify deploy Deploy the latest changes to your Netlify site

と出てきました。

 

2.netlify init

$ netlify init
? What would you like to do? ⇄ Connect this directory to an existing Netlify site

(すでにNetlifyにGitと連携してるサイトがありますから。)

netlify link will connect this folder to a site on Netlify

? How do you want to link this folder to a site? Use current git remote origin (https://github.com/beerneko/nekonya)

(Gitのnekonyaに全部ありますね。前回よりGitのLFSにあげたものは勝手にNetlifyのLMにアップロードされることに感激したことを思い出した。)

Looking for sites connected to 'https://github.com/beerneko/nekonya'...


Directory Linked

Admin url: https://app.netlify.com/sites/nekonya

Site url: https://nekonya.netlify.com

Site id saved to D:\webcms5\nekonya\.netlify\state.json

(ローカルとつながって成功してますね。)

 You can now run other `netlify` cli commands in this directory

Success
This site "nekonya" is configured to automatically deploy via https://github.com/beerneko/nekonya

 

3.ではGitLFSを確認します。

git lfs

High Level commandとLow Level commandの両方がでてきました。なんだか一度もつかわれてないっぽい。

そして、exampleとしてこんな感じに出てきました。

Examples
--------

To get started with Git LFS, the following commands can be used.

1. Setup Git LFS on your system. You only have to do this once per
repository per machine:

git lfs install

2. Choose the type of files you want to track, for examples all ISO
images, with git lfs track:

git lfs track "*.iso"

3. The above stores this information in gitattributes(5) files, so
that file need to be added to the repository:

git add .gitattributes

3. Commit, push and work with the files normally:

git add file.iso
git commit -m "Add disk image"
git push

でもなぁ、一度確認してみます。

git lfs track

...うんともすんとも言わねぇ。。。

4..lfsconfig fileをチェックします。

[lfs]
url = https://xxxx-xxxxxx-xxxxxxx.netlify.com/.netlify/large-media

なんか入ってますね。おっ、そうか。

まだトラックしてやってなかった。

その前にNetlifyのコンソールサイトからLMのサイトを確認して何も入ってないか確認しなきゃね。前回失敗してたから、一応ね。

。。。おぅ?

入ってる。。。


img/blackkimono.jpgがきちんとはいってたぞぉーっ!

ってことはこれも時間差なのか???時間がかかってたことをねこは勘違いして失敗ときめつけていたのか???

早速トラックしてつかってみるぞ。

5.CMSのコンパイルエラーについて。

gatsby develop

でローカルをブラウズして確認しながらblackkimono.jpgをつかってみる。

。。。どこにイメージファイルがあるんだろう。。。「home-jumbotron.jpg」をサーチしてみよう。

src/pages/index.mdにあった。なんかイメージファイル全部ここで宣言してるっぽいですね。おぅ?全ページのコンテンツ内容はここかぁっ!

イメージファイルを変えてやって。。。保存と。

あれ?!

TypeError: Cannot read property 'childImageSharp' of null
IndexPageTemplate
> 1 | import React from 'react'  2 | import PropTypes from 'prop-types'  3 | import { Link, graphql } from 'gatsby'  4 | 
 
では、もう一度元に戻してやるために、CTL+Zで元に戻して、保存と。
あれっ!?
まだエラーがでる@O@;
gitには変更が何もない状態で元に戻ってるはずなのに!!!あれぇ~っ!
まだgatsby developは走ってるよね。。。
では、消してみてgatsby buildやってみよう。
To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.

なんやそれ!

じゃ、gatsby clean そしてもう一度gatsby build.

$ gatsby clean
info Deleting .cache, public
info Successfully deleted directories

あれっ?エラー消えてる。なんか、かってにキャッシュためてたんだね。だからgitに残らんのか。なんやそれ!

。。。そしてなんか消されてる。CSS???じゃぁ、変更なしのgitはいったい?

gatsby-plugin-purgecss:
Previous CSS Size: 190.75 KB
New CSS Size: 19.86 KB (-89.59%)
Removed ~170.90 KB of CSS

では、gatsby developでローカルブラウズして。

パッパカパーンっ!

元に戻った。でもわからん。

とにかく、変更後のエラー解除で元の状態に戻す手順は以下の通り。

① gitを変更前の状態に戻す

② CTL+Cでgatsby developを解除

③ gatsby cleanでキャッシュなどなど掃除

④ gatsby buildでコンパイルしなおす

⑤ gatsby developでサイト確認

 

6.CMSイメージファイルの変更

では、今回きちんと調べてからCMSのイメージファイルを変更したいと思います。

 ...
 
なるほど。
わかりました。
きちんと全てチュートリアルをやればわかることなんですが、どのチュートリアルも大事や基本的なことがすべて同じ熱量でかかれてるんで見落としたり、辛抱が足りなかったりと、意外なほど基本的なことで行詰まるものですね。
 
『WordPressなどと同様、ADMINへ行かずとも内容は変えられるし、ランディングページなんかもかえれます。』
ただし、react.jsかgatsbyが関係しているのかは勉強不足でわかりませんが、変更後には必ず『gatsby clean/gatsby build』してやる必要があるということです。ねこはこれらの全てを『gatsby develop』がやってくれると思ってました。
 
なので、イメージを直す場合、たとえばNetlifyのLMへ紐づけてやりたい場合は、ADMINからはアップロードできないのでこの方法でしてやらんとあかんわけですな。
 
では、最初から新しいイメージファイルをつかってやってみましょう。

7.新しい画像をLFSで組み込んでLMへ格納する。

$ git lfs track "beerneko.jpg"

$ git lfs track
Listing tracked patterns
beerneko.jpg (.gitattributes)
Listing excluded patterns

いかん、もっとよい写真をさがさな。

$ git lfs track "gysen.jpg"

さぁ、そろそろアップロードしましょか。
$ git add .
$ git commit -m "Added new img files for learning CMS for LM"
$ git status
NetlifyのLMサイトをチェックしてと。
 
$ git push
 
。。。LMが変わってない。。。
githubはきちんと

version https://git-lfs.github.com/spec/v1
oid sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
size 345609

ってなってる。これは正しい。

なんでサイトに反映されないのかなあ。。。

これも時間差なんだろうか。

今からググります。もうすでに、お昼食べたら1時前になってます。

$ netlify login
Already logged in via netlify config on your machine

Run netlify status for account details

To see all available commands run: netlify help


yurik@DESKTOP-159BVP1 MINGW64 /d/webcms5/nekonya (master)
$ netlify status
──────────────────────┐
Current Netlify User 
──────────────────────┘
Email: beerneko@yahoo.com
Github: beerneko
Teams:
beerneko's team: Collaborator
────────────────────┐
Netlify Site Info 
────────────────────┘
Current site: nekonya
Netlify TOML: X:\webcms5\nekonya\netlify.toml
Admin URL: https://app.netlify.com/sites/nekonya
Site URL: https://nekonya.netlify.com
Site Id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

一度ログアウトして、適当に変更箇所作ってもう一度ログイン、そしてgit pushしてみます。

そして忘れてはならないのは、Netlifyのサイトをブラウズしていたら消すことです。

netlify logout

netlify login

おや?今度はきちんとサイトへ連れて行ってくれました。AuthorizeをクリックしてNetlify CLIでつなげてと。

やっぱりいかん。。。そうかっ!Netlifyのサイトでログあるかな?前回で「git pushしたらそのままデプロイしてくれます」を学んだよね。

...ログありました。

そして、エラーはっきりしました。問題児はgatsbyでした。

1:35:02 PM: error Input file contains unsupported image format
1:35:02 PM: Failed to process image /opt/build/repo/static/img/gysen.jpg Input file contains unsupported image format
1:35:02 PM: See our docs page for more info on this error: https://gatsby.dev/issue-how-to
1:35:02 PM:
1:35:02 PM: Error:Input file contains unsupported image format
1:35:02 PM:
1:35:02 PM: npm
1:35:02 PM: ERR! code ELIFECYCLE
1:35:02 PM: npm ERR!
1:35:02 PM: errno 1
1:35:02 PM: npm ERR!
1:35:02 PM: gatsby-starter-netlify-cms@1.1.3 build:app: `npm run clean && gatsby build`
1:35:02 PM: npm ERR! Exit status 1

https://github.com/gatsbyjs/gatsby/issues/12438

はよゆうてんか。

Hi folks! I work at Netlify and while I didn't create this feature I do know the answer here: large media images are ONLY available at serve time, not build time. Even fetching them with a git lfs pull will be super challenging since we drop git access permissions before you can run that command as part of your build pipeline. There are no plans at this time to provide those assets for use during build.

サーバタイムではLMがつかえるけど、ビルドタイムではつかえない?じゃぁ、どうやってイメージファイルをLMへあげるのさ!?

わからん。。。

wakaran...

https://docs.netlify.com/large-media/requirements-and-limitations/#limitations

Files tracked with Large Media are uploaded directly to the Netlify Large Media storage service on push, completely bypassing the site build. This saves build time, but also means that the files are not available to tools that process asset files during the build, such as Hugo's image processing or the gatsby-image plugin. Depending on your needs, you may be able to replace this functionality with Netlify's image transformation service.

ということは、先にトラックしてLFSでプッシュしてやってから、またIMGタグをプッシュしろってことかな?

 

よし、もう3時だ。金曜日だ。。。いまから必死のパッチでやったるど。

①.gitattributesからトラックを全部消す。

②コードをもとの状態に戻す。マスターで直でやってたから、もう大変。

③gatsby clean/gatsby buildで元に戻ったか確認

④新しく入れたイメージ全部消す

⑤もう一度名前変えてイメージ(gyosen.jpg)をstatic/imgに挿入

⑥git lfs track "gyosen.jpg"

⑦netlify login

git add .

git commit -m "the last commit for LFS for today"

git lfs push origin master

git push

⑨netlifyサイトビルドログ確認

こえぇ。。。

うんともすんとも言いやがらねぇ。。

ぉおっ????

3:20:37 PM: gatsby-plugin-purgecss: Only processing /opt/build/repo/src/components/all.sass
3:20:55 PM: success Building production JavaScript and CSS bundles — 117.881
3:20:55 PM: success Rewriting compilation hashes — 0.095
3:20:57 PM: success run page queries — 1.359 — 20/20 15.29 queries/second
3:20:58 PM: success Generating image thumbnails — 38/38 - 2.987 s
3:20:58 PM:
3:20:58 PM: gatsby-plugin-purgecss:
3:20:58 PM: Previous CSS Size: 190.75 KB
3:20:58 PM: New CSS Size: 19.86 KB (-89.59%)
3:20:58 PM: Removed ~170.90 KB of CSS

 

LMに入ったぁ~っ!!!!

⑩では調子のって、使ってみませう。。。

(src/pages/index.md)

image/img/gyosen.jpg

⑪ローカルチェックOK

git add .

git commit -m "Successfully added LFS image file into LM"

git push

 

ほんと、もう少しわかりやすくしておくれよ。。。

その1.LMにファイルを入れるときにはnetlify loginがローカルからなされていること

その2.Git pushは新しいファイルを先にトラックしてやり、netlifyのLMサーバに先にアップロードしておいてから使うこと

その3.(本当はここに「ほらね、怖くない。できた。うふっ💛」と書きたかったが、やっぱりデプロイで同じエラー。。。やっぱり、Netlifyのせいじゃなくって、Gatsbyですな。)

 

結論

本日の成果は、CMSのgitリポでもLMへイメージファイルをアップロードできることが分かった。

次回はこれを無事にgatsbyに組んでデプロイできるようにすること。

とりあえず、今だれかにきいてます。

https://github.com/gatsbyjs/gatsby/issues/19384

 

今日は全然T-SQLの勉強できてないから、30分だけでも必死でやるぞ。

その前に、キッチンあらわな。結局9時から4までこれしかしてない。。。かなしい。。。