<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: tackme</title>
    <description>The latest articles on DEV Community by tackme (@tackme31).</description>
    <link>https://dev.to/tackme31</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F219647%2F8a0b5ebc-d397-4c40-8bfc-56127012b0a7.png</url>
      <title>DEV Community: tackme</title>
      <link>https://dev.to/tackme31</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tackme31"/>
    <language>en</language>
    <item>
      <title>Integrate Current Changes into a Specific Commit without Opening the Editor</title>
      <dc:creator>tackme</dc:creator>
      <pubDate>Mon, 22 Jan 2024 03:12:52 +0000</pubDate>
      <link>https://dev.to/tackme31/integrate-current-changes-into-a-specific-commit-without-opening-the-editor-3b5a</link>
      <guid>https://dev.to/tackme31/integrate-current-changes-into-a-specific-commit-without-opening-the-editor-3b5a</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Set up the following alias in your Git configuration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[alias]
    cmfr = "!f() { git commit --fixup \"$1\"; GIT_SEQUENCE_EDITOR=: git rebase -i --autosquash \"$1\"^; }; f"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can execute &lt;code&gt;git cmfr HASH&lt;/code&gt; to apply the changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;When integrating current changes into the most recent commit, we typically use the &lt;code&gt;commit --amend&lt;/code&gt; command. Adding &lt;code&gt;--no-edit&lt;/code&gt; lets us do this without opening the editor. But what if we need to alter not the latest commit, but an earlier one?&lt;/p&gt;

&lt;p&gt;The usual steps for this are somewhat cumbersome:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Temporarily commit the current changes.&lt;/li&gt;
&lt;li&gt;Perform an interactive rebase.&lt;/li&gt;
&lt;li&gt;Shift the temp commit right below the target commit.&lt;/li&gt;
&lt;li&gt;Change the temp commit's command to 'fixup'.&lt;/li&gt;
&lt;li&gt;Save and exit the editor.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This process involves more steps than necessary. Using &lt;code&gt;--fixup&lt;/code&gt; and &lt;code&gt;--autosquash&lt;/code&gt; can simplify it. The commands below bring you directly to step 4 of the aforementioned process:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; git commit &lt;span class="nt"&gt;--fixup&lt;/span&gt; HASH
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; git rebase &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;--autosquash&lt;/span&gt; HASH^
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then just close the editor and you are done. Since we've simplified the process considerably, we'd also like to bypass the editor-closing step.&lt;/p&gt;

&lt;p&gt;In Git, the rebase editor can be changed by setting the &lt;code&gt;GIT_SEQUENCE_EDITOR&lt;/code&gt; environment variable. This variable can be set to vi, emacs, vscode, sed, etc. Interestingly, using the bash built-in command &lt;code&gt;:&lt;/code&gt; (a no-operation command) for this variable simulates an immediate exit without performing any action. Using this feature, the following commands can execute all steps in just two commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; git commit &lt;span class="nt"&gt;--fixup&lt;/span&gt; HASH
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;GIT_SEQUENCE_EDITOR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;: git rebase &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;--autosquash&lt;/span&gt; HASH^
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The final step is to save this sequence as an alias:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[alias]
    cmfr = "!f() { git commit --fixup \"$1\"; GIT_SEQUENCE_EDITOR=: git rebase -i --autosquash \"$1\"^; }; f"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, whenever you need to tweak a past commit, simply run &lt;code&gt;git cmfr HASH&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Happy coding! 🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/29094595/git-interactive-rebase-without-opening-the-editor"&gt;Git interactive rebase without opening the editor - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>git</category>
    </item>
    <item>
      <title>コントローラでDictionary型のGETパラメータを受け取る</title>
      <dc:creator>tackme</dc:creator>
      <pubDate>Fri, 14 Jan 2022 02:29:49 +0000</pubDate>
      <link>https://dev.to/tackme31/kontororadedictionaryxing-nogetparametawoshou-kequ-ru-4d5d</link>
      <guid>https://dev.to/tackme31/kontororadedictionaryxing-nogetparametawoshou-kequ-ru-4d5d</guid>
      <description>&lt;p&gt;コントローラのアクションでDictionary型のGETパラメータを受け取るには、以下のようなフォーマットでパラメータを記述します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com/api/Sample/SampleData?param[key1]=val1&amp;amp;param[key2]=val2&amp;amp;...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;上記のリクエストを投げると、アクションで定義した&lt;code&gt;param&lt;/code&gt;引数で以下のように値を受け取ることができます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"api/[controller]"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SampleController&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Controller&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;HttpGet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"[action]"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Data&lt;/span&gt; &lt;span class="nf"&gt;SampleData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;param&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;val1&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;param&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"key1"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;val2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;param&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"key2"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;...;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  注意点
&lt;/h2&gt;

&lt;p&gt;先ほどの例で&lt;code&gt;param&lt;/code&gt;パラメータ無しのリクエストを投げるとアクションが見つからずエラーが発生します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com/api/Sample/SampleData
=&amp;gt; 500 Error
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;空のディクショナリを渡すには、以下のような値無しの&lt;code&gt;param&lt;/code&gt;パラメータ付きのリクエストを投げる必要があります。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com/api/Sample/SampleData?param
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;HttpGet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"[action]"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;InitData&lt;/span&gt; &lt;span class="nf"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;param&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;param&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; 0&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;...;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  参考
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/22707788/is-it-possible-to-get-dictionary-from-query-string"&gt;c# - Is it possible to get Dictionary from query string? - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aspnet</category>
      <category>csharp</category>
    </item>
    <item>
      <title>SonarQubeでJavaのメモリ不足エラーが発生した際の対処法</title>
      <dc:creator>tackme</dc:creator>
      <pubDate>Wed, 22 Sep 2021 06:07:43 +0000</pubDate>
      <link>https://dev.to/tackme31/sonarqube-java-55i0</link>
      <guid>https://dev.to/tackme31/sonarqube-java-55i0</guid>
      <description>&lt;p&gt;&lt;a href="https://www.sonarqube.org/"&gt;SonarQube&lt;/a&gt;で大きなプロジェクトの解析を行うと、以下のようなエラーが発生し処理が停止してしまうことがあります。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;java.lang.OutOfMemoryError: Java heap space&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;dockerでコンテナ起動時に環境変数 &lt;code&gt;SONAR_CE_JAVAOPTS="-Xmx1G -Xms1G"&lt;/code&gt; を指定してヒープサイズを大きくすると解消できます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; sonarqube &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;SONAR_CE_JAVAOPTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"-Xmx1G -Xms1G"&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 9000:9000 sonarqube:lts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  参考
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://community.sonarsource.com/t/how-to-set-sonarqube-compute-engine-java-memory-parameters-with-environment-variables/21792/6"&gt;How to set Sonarqube Compute Engine Java memory parameters with Environment Variables - Get help / SonarQube - SonarSource Community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sonarqube</category>
    </item>
    <item>
      <title>PowerShellでホームディレクトリを変更する</title>
      <dc:creator>tackme</dc:creator>
      <pubDate>Fri, 17 Sep 2021 17:05:11 +0000</pubDate>
      <link>https://dev.to/tackme31/powershell-3noi</link>
      <guid>https://dev.to/tackme31/powershell-3noi</guid>
      <description>&lt;p&gt;PowerShellの初期読み込みファイル（&lt;code&gt;ii $PROFILE&lt;/code&gt;で開けます）に以下を追記するとホームディレクトリを変更できます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# $HOMEの変更&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Remove-Variable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;HOME&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Set-Variable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;HOME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# '~'の解決先を変更&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$fs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$ExecutionContext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SessionState&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Provider&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"FileSystem"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$fs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Home&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;これで&lt;code&gt;$HOME&lt;/code&gt;の値や&lt;code&gt;cd ~&lt;/code&gt;の移動先が設定したディレクトリに変更されます。&lt;/p&gt;

</description>
      <category>powershell</category>
    </item>
    <item>
      <title>カスタマイズなしでSitecoreの管理画面の色を変更する</title>
      <dc:creator>tackme</dc:creator>
      <pubDate>Thu, 01 Apr 2021 07:48:08 +0000</pubDate>
      <link>https://dev.to/tackme31/sitecore-1cei</link>
      <guid>https://dev.to/tackme31/sitecore-1cei</guid>
      <description>&lt;p&gt;「ローカル環境だと思ってアイテムを編集したら実は本番環境だった😱」みたいな経験、ありませんか？私はあります。何度かやらかしました。&lt;br&gt;
本番環境にアクセスしていることが視覚的に分かれば、こんな事故は起きないはずです。&lt;br&gt;
ということで、この記事では環境ごとにSitecoreの管理画面の色を変更する方法を紹介します。Sitecoreのカスタマイズは不要です。&lt;/p&gt;

&lt;p&gt;こんな感じの画面になります。一目瞭然ですね。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiqmaeomdu69cqt4vjxqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiqmaeomdu69cqt4vjxqu.png" alt="Alt Text" width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpzfjj45g2m9h6qklvndm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpzfjj45g2m9h6qklvndm.png" alt="Alt Text" width="764" height="523"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  変更方法
&lt;/h2&gt;

&lt;p&gt;お察しの方もいらっしゃるかもしれませんが、Chromeの拡張機能であるStylusを使用します。Stylusを使用すると、特定のURLで任意のCSSを適用することができます。&lt;br&gt;
まずはChromeにこの拡張機能をインストールしましょう。Firefox, Operaでも使用することができます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://chrome.google.com/webstore/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne?hl=ja"&gt;Stylus - Chrome ウェブストア&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;インストールしたらStylusの管理画面を開き、左側のメニューから「新スタイルを作成」をクリックします。&lt;/p&gt;

&lt;p&gt;スタイルの編集画面が表示されるので、まずは適当な名前をつけて保存してください。&lt;/p&gt;

&lt;p&gt;次に左側のメニューの「インポート」をクリックします。テキストエリアが表示されるので、以下のCSSをコピペして「スタイルを上書き」を選択してください。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@-moz-document&lt;/span&gt; &lt;span class="n"&gt;url-prefix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;"http://foo.prod.sc"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;"bar.prod.sc"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nc"&gt;.sc-globalHeader&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.scRibbon&lt;/span&gt; &lt;span class="nc"&gt;.chunk&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.scRibbonToolbarStrip&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#3765bf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.scRibbon&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#1c3e7d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.scRibbon&lt;/span&gt; &lt;span class="nc"&gt;.chunk&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.scRibbonToolbarStrip&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.scRibbonNavigatorButtonsActive&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.scRibbonToolbar&lt;/span&gt; &lt;span class="nc"&gt;.scRibbonToolbarStrip&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#6b94e1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.sc-applicationContent-main&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#c3ddff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@-moz-document&lt;/span&gt; &lt;span class="n"&gt;url-prefix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;"http://foo.prod.sc/sitecore/login"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;"bar.prod.identityserver"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.login-outer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#6998ff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.login-page&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;for&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'Username'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nd"&gt;:before&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;#loginLbl&lt;/span&gt;&lt;span class="nd"&gt;:before&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"【本番環境】 "&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.login-page&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;for&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;'Password'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nd"&gt;:before&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;#passLabel&lt;/span&gt;&lt;span class="nd"&gt;:before&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"【本番環境】 "&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;以下のように2つのCSSが読み込まれます。上が管理画面のスタイル、下がログイン画面のスタイルです。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxs8kxpyxqx0qizwd4nz5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxs8kxpyxqx0qizwd4nz5.png" alt="Alt Text" width="800" height="682"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;それぞれのスタイルの下部に「適用先」とあるので、上のスタイルに管理画面のURL（ドメイン）を指定して、下にスタイルにログイン画面のURL（ドメイン）を指定してください。&lt;/p&gt;

&lt;p&gt;最後に保存すればおしまいです。実際にSitecoreにアクセスしてみてください。&lt;/p&gt;

&lt;p&gt;Sitecoreのイメージカラーの補色っぽい色を設定していますが、もし色が気に入らなければ適当に変えてください。&lt;/p&gt;

&lt;p&gt;それでは、Happy Sitecoring!&lt;/p&gt;

</description>
      <category>css</category>
      <category>sitecore</category>
    </item>
    <item>
      <title>JSSのIntegrated ModeでConnected GraphQLを使用すると証明書エラーが発生する</title>
      <dc:creator>tackme</dc:creator>
      <pubDate>Wed, 24 Mar 2021 08:30:37 +0000</pubDate>
      <link>https://dev.to/tackme31/jss-integrated-mode-connected-graphql-3gmf</link>
      <guid>https://dev.to/tackme31/jss-integrated-mode-connected-graphql-3gmf</guid>
      <description>&lt;p&gt;JSSでウェブサイトを作成していた際にGraphQLで詰まったので備忘録として残しておきます。&lt;/p&gt;

&lt;p&gt;Integrated GraphQLだと動的にパラメータを変更するような処理が組めないので、そういう場合はConnected GraphQLを使うことになります。&lt;/p&gt;

&lt;p&gt;しかし、Connected GrapQLを使用したコードをSitecoreへデプロイしてIntegrated Modeで動作させると以下のようなエラーが発生します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;unable to verify the first certificate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;これはnode.jsはWindowsの証明書ストアを参照しないため、SSRの実行時にAPIへのリクエストで証明書の検証に失敗することが原因です。&lt;/p&gt;

&lt;h2&gt;
  
  
  対応方法
&lt;/h2&gt;

&lt;p&gt;まずはウェブサイトの中間（ルート）証明書をブラウザから取得します。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/@menakajain/export-download-ssl-certificate-from-server-site-url-bcfc41ea46a2"&gt;Export &amp;amp; Download — SSL Certificate from Server (Site URL) | by Menaka Jain | Medium&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;証明書の形式は &lt;code&gt;Base 64 encoded X.509 (.CER)&lt;/code&gt; を選択してください。&lt;/p&gt;

&lt;p&gt;次にその証明書を適当なフォルダに配置します。&lt;/p&gt;

&lt;p&gt;最後にSitecore.configへ以下のパッチを適用します。JSSで使用するNode.jsのプロセスに環境変数 &lt;code&gt;NODE_EXTRA_CA_CERTS&lt;/code&gt; を割り当てています（システム環境変数に直接設定してもOKです）。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;configuration&lt;/span&gt; &lt;span class="na"&gt;xmlns:role=&lt;/span&gt;&lt;span class="s"&gt;"http://www.sitecore.net/xmlconfig/role/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;sitecore&lt;/span&gt; &lt;span class="na"&gt;role:require=&lt;/span&gt;&lt;span class="s"&gt;"ContentManagement or ContentDelivery or Standalone"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;javaScriptServices&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;renderEngines&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;renderEngine&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"nodejs"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;instance&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"defaults"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!-- 証明書のパスを指定 --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;EnvironmentVariables&amp;gt;&lt;/span&gt;
              &lt;span class="nt"&gt;&amp;lt;var&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"NODE_EXTRA_CA_CERTS"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"C:\path\to\certificate.cer"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/EnvironmentVariables&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/instance&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/renderEngine&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/renderEngines&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/javaScriptServices&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/sitecore&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;node.jsでは環境変数の&lt;code&gt;NODE_EXTRA_CA_CERTS&lt;/code&gt;に証明書ファイルへのパスを設定しておくことで、node.jsがその証明書を参照するようになります。&lt;/p&gt;

&lt;p&gt;これでエラーが発生せずにConnected GrapQLを使用できるようになります。&lt;/p&gt;

&lt;h2&gt;
  
  
  参考
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://devsencore.com/2020/10/18/jss-headless-ssr-proxy-unable-to-verify-the-first-certificate/"&gt;JSS headless SSR proxy “unable to verify the first certificate” – Dev's Encore&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sitecore</category>
      <category>jss</category>
      <category>react</category>
      <category>graphql</category>
    </item>
    <item>
      <title>Azure Searchで取得したファセットのカウント数が実際のドキュメント数と異なる場合の対処法</title>
      <dc:creator>tackme</dc:creator>
      <pubDate>Wed, 24 Mar 2021 02:15:47 +0000</pubDate>
      <link>https://dev.to/tackme31/azure-search-3p9o</link>
      <guid>https://dev.to/tackme31/azure-search-3p9o</guid>
      <description>&lt;p&gt;Azure Searchで取得したファセットのカウント数と実際のドキュメントの数が異なっている現象に遭遇しました。&lt;/p&gt;

&lt;p&gt;Azure Searchではシャーディングアーキテクチャが原因で不正確な値を返すことがあるようです。ファセット取得クエリで以下のように&lt;code&gt;count&lt;/code&gt;に大きな値を渡すことで正確な値を取得できるようになります。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;amp;facet=color,count:100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ただしドキュメント数が多い場合はパフォーマンスが低下する可能性があるため注意が必要です。&lt;/p&gt;

&lt;h2&gt;
  
  
  参考
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/azure/search/search-faceted-navigation"&gt;Add a faceted navigation category hierarchy - Azure Cognitive Search | Microsoft Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>azure</category>
      <category>azuresearch</category>
    </item>
    <item>
      <title>slick.jsで作成したスライダー読み込み時のレイアウトずれ対策</title>
      <dc:creator>tackme</dc:creator>
      <pubDate>Thu, 18 Mar 2021 05:42:13 +0000</pubDate>
      <link>https://dev.to/tackme31/slick-js-25ni</link>
      <guid>https://dev.to/tackme31/slick-js-25ni</guid>
      <description>&lt;p&gt;トップページなどによく見られるスライダー（カルーセルパネル）は、画像が読み込まれるまで高さが計算できず、コアウェブバイタルのContent Layout Shift (CLS)に影響を与えます。&lt;/p&gt;

&lt;p&gt;今回はよく使用されるスライダーのライブラリであるslick.jsでこの問題に対応する方法をご紹介します。&lt;/p&gt;

&lt;p&gt;例として以下のようなスライダーのHTMLを考えます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"slider"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/image1"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/image2"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/image3"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;li&lt;/code&gt;タグのに設定した画像をスライダーで表示する簡単なHTMLです。&lt;/p&gt;

&lt;p&gt;まずCLSの対策では画像に対して&lt;code&gt;width&lt;/code&gt;および&lt;code&gt;height&lt;/code&gt;属性を指定することが重要です。&lt;br&gt;
これらを指定することで画像の縦横比を予め計算でき、画像が表示される箇所に同等のサイズのスペースを確保しておくことができます。これによりユーザーの意図しないレイアウトのズレが解決できます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"slider"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- サイズを指定 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/image1"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"1000"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"400"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/image2"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"1000"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"400"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/image3"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"1000"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"400"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ただしslick.jsを使用している場合、スクリプトの読み込みが完了するまでは全ての画像が表示されるため、余計なスペースが確保されてしまいます。&lt;br&gt;
更にスクリプトが読み込まれると１つ目以外の画像が非表示になるため、ユーザーの意図しないレイアウトのズレが発生してしまいます。&lt;/p&gt;

&lt;p&gt;これを解決するために、以下のスタイルを当てます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="nc"&gt;.slider&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="nd"&gt;:not&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;:first-child&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;これは1つ目以外の画像を予め非表示にしておくスタイルです。&lt;/p&gt;

&lt;p&gt;これではスクリプト読み込み後でも2つ目以降の画像が表示されないままなのでは？と思うかもしれませんが、slider.jsではスライダーを作成する際に&lt;code&gt;ul&lt;/code&gt;タグと&lt;code&gt;li&lt;/code&gt;タグの間に&lt;code&gt;div&lt;/code&gt;タグを挟み込みます。&lt;br&gt;
上記のスタイルでは&lt;code&gt;ul&lt;/code&gt;タグの&lt;strong&gt;直下の&lt;/strong&gt;&lt;code&gt;li&lt;/code&gt;タグに対してスタイルを当てているため、スクリプト読み込み後はセレクターの対象から外れ、スライダーに画像が表示されるようになります。&lt;/p&gt;

&lt;p&gt;これにより、スクリプト読み込み前は1つ目の画像のスペースだけが確保され、読み込み語は1つ目の画像のみが表示されるため、レイアウトのズレが発生しなくなります。&lt;/p&gt;

&lt;h2&gt;
  
  
  参考
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://itnext.io/javascript-sliders-will-kill-your-website-performance-5e4925570e2b"&gt;Javascript sliders will kill your website performance | by Javier Villanueva | ITNEXT&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>css</category>
      <category>seo</category>
      <category>slickjs</category>
      <category>carousel</category>
    </item>
    <item>
      <title>Sitecore PaaSでデプロイスロットだけにconfigを適用する方法</title>
      <dc:creator>tackme</dc:creator>
      <pubDate>Tue, 02 Mar 2021 06:28:45 +0000</pubDate>
      <link>https://dev.to/tackme31/sitecore-paas-config-3fc7</link>
      <guid>https://dev.to/tackme31/sitecore-paas-config-3fc7</guid>
      <description>&lt;p&gt;Sitecore 9.0以降ではルールベースのconfigに対応しており、検索プロバイダやサーバーロールに応じて異なるconfigを適用できるようになりました。これらの情報はWeb.configで&lt;code&gt;*:define&lt;/code&gt;という名前のApp Settingsを用いて定義されています。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- 他にもたくさんあります。 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;add&lt;/span&gt; &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"role:define"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"ContentDelivery"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;add&lt;/span&gt; &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"search:define"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Solr"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;add&lt;/span&gt; &lt;span class="na"&gt;key=&lt;/span&gt;&lt;span class="s"&gt;"exmEnabled:define"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"yes"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;これらの他に&lt;code&gt;env:define&lt;/code&gt;という独自の環境名を定義することができる設定が用意されており、これを用いることでデプロイスロットにだけconfigを設定することができます。&lt;/p&gt;

&lt;h2&gt;
  
  
  手順
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Azureポータルでデプロイスロットを開き、Configurationを選択します。
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwwdu9d4f6r6hjtz7413s.png" alt="image01" width="758" height="499"&gt;
&lt;/li&gt;
&lt;li&gt;New application settingを選択します。
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkv019tphs1u3dd06zbsk.png" alt="image02" width="686" height="427"&gt;
&lt;/li&gt;
&lt;li&gt;Nameに&lt;code&gt;env:define&lt;/code&gt;を、Valueに&lt;code&gt;Staging&lt;/code&gt;を入力して、Deployment slot settingにチェックを入れます。
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nhwoimpx51n38dyjy1w.png" alt="image03" width="523" height="301"&gt;
&lt;/li&gt;
&lt;li&gt;Stagingだけに適用したいconfigの属性に &lt;code&gt;env:require="Staging"&lt;/code&gt; を追加します。
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- 名前空間 env を宣言 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;configuration&lt;/span&gt; &lt;span class="na"&gt;xmlns:env=&lt;/span&gt;&lt;span class="s"&gt;"http://www.sitecore.net/xmlconfig/env/"&lt;/span&gt; &lt;span class="na"&gt;xmlns:patch=&lt;/span&gt;&lt;span class="s"&gt;"http://www.sitecore.net/xmlconfig/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;sitecore&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;settings&amp;gt;&lt;/span&gt;
            &lt;span class="c"&gt;&amp;lt;!-- envがStagingのサーバーは異なるURLを使用する --&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;setting&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Media.MediaLinkServerUrl"&lt;/span&gt; &lt;span class="na"&gt;env:require=&lt;/span&gt;&lt;span class="s"&gt;"Staging"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;patch:attribute&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"value"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;http://staging.example.com&lt;span class="nt"&gt;&amp;lt;/patch:attribute&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/setting&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/settings&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/sitecore&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;これでデプロイスロットだけにconfigが適用されます。Deployment slot settingにチェックを入れた設定はスワップしてもスワップ前のサーバーに適用されるので、このような挙動を実現できます。&lt;/p&gt;

&lt;p&gt;また以下のように&lt;code&gt;!&lt;/code&gt;を使って指定した環境名以外に適用することも可能です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;configuration&lt;/span&gt; &lt;span class="na"&gt;xmlns:env=&lt;/span&gt;&lt;span class="s"&gt;"http://www.sitecore.net/xmlconfig/env/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;sitecore&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;settings&amp;gt;&lt;/span&gt;
      &lt;span class="c"&gt;&amp;lt;!-- envがStagingの場合はFooを使用 --&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;setting&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"MySetting"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Foo"&lt;/span&gt; &lt;span class="na"&gt;env:require=&lt;/span&gt;&lt;span class="s"&gt;"Staging"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="c"&gt;&amp;lt;!-- それ以外ではBarを使用 --&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;setting&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"MySetting"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Bar"&lt;/span&gt; &lt;span class="na"&gt;env:require=&lt;/span&gt;&lt;span class="s"&gt;"!Staging"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/settings&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/sitecore&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  参考
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://doc.sitecore.com/developers/90/platform-administration-and-architecture/en/use-a-rule-based-configuration.html"&gt;Use a rule-based configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wttech.blog/blog/2020/blue-green-deployment-of-sitecore-solutions-hosted-in-azure-paas/"&gt;Blue-Green deployment of Sitecore solutions hosted in Azure PaaS | Wunderman Thompson Technology&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sitecore</category>
      <category>azure</category>
    </item>
    <item>
      <title>Sitecoreのライブラリを開発する</title>
      <dc:creator>tackme</dc:creator>
      <pubDate>Thu, 24 Dec 2020 06:08:54 +0000</pubDate>
      <link>https://dev.to/tackme31/sitecore-589o</link>
      <guid>https://dev.to/tackme31/sitecore-589o</guid>
      <description>&lt;p&gt;先日Sitecoreのレコメンドライブラリ「&lt;a href="https://github.com/xirtardauq/Cairngorm"&gt;Cairngorm&lt;/a&gt;」をリリースしました。作成にあたって色々詰まったところがあったので、今回は一からライブラリを作成する方法を解説します。&lt;/p&gt;

&lt;p&gt;Sitecoreのライブラリに特有の作業は「プロジェクトの作成」節だけなので、パッケージの作成方法をご存じの方はそれ以外は飛ばしてOKです。&lt;/p&gt;

&lt;h2&gt;
  
  
  プロジェクトの作成
&lt;/h2&gt;

&lt;p&gt;まずはVisual Studioで以下の設定でプロジェクトを作成します。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;テンプレート: &lt;code&gt;クラス ライブラリ (.NET Framework)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;フレームワーク: &lt;code&gt;.NET Framework 4.5.2&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;つぎにライブラリの作成にあたって必要になるSitecore関連のパッケージをNuGetでインストールします。&lt;br&gt;
インストールするバージョンは&lt;strong&gt;8.2.160729&lt;/strong&gt;を指定してください。今回は例として、&lt;code&gt;Sitecore.Kernel&lt;/code&gt;をインストールして進めます。&lt;/p&gt;

&lt;p&gt;一度Visual Studioを閉じて、プロジェクトフォルダにある "packages.config" を開いてください。Sitecore.Kernelのpackageノードに&lt;code&gt;developmentDependency="true"&lt;/code&gt;を追加しましょう。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;packages&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;package&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"Sitecore.Kernel"&lt;/span&gt; &lt;span class="na"&gt;version=&lt;/span&gt;&lt;span class="s"&gt;"8.2.160729"&lt;/span&gt; &lt;span class="na"&gt;targetFramework=&lt;/span&gt;&lt;span class="s"&gt;"net452"&lt;/span&gt; &lt;span class="na"&gt;developmentDependency=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/packages&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;これで、Sitecoreのバージョンに依存しないライブラリが作成できます。具体的には Sitecore 8.2.1 - 9.x に対応できます。おそらく10にも対応できると思いますが、試していないのでわかりません。  &lt;/p&gt;

&lt;h2&gt;
  
  
  ライブラリの実装
&lt;/h2&gt;

&lt;p&gt;Visual Studioを開き、ライブラリの中身を実装します。ここは特に注意点はありません。好きなようにコードを書いてください（もちろん、.NET Framework 4.5.2なので構文には制限があります）。&lt;/p&gt;

&lt;p&gt;configファイルを使うライブラリの場合は、プロジェクトにファイルを追加してプロパティでビルドアクションを「コンテンツ」に設定しておいてください。こうしておくと、NuGetでライブラリをインストールすると自動的にconfigファイルが追加されるようになります。  &lt;/p&gt;

&lt;h2&gt;
  
  
  NuGetパッケージの設定
&lt;/h2&gt;

&lt;p&gt;実装を終えたら、&lt;code&gt;AssemblyInfo.cs&lt;/code&gt;を編集します。それぞれの項目に何を設定すべきかは調べれば出てくると思いますが、ひとまず以下の項目を記述しておけばOKです。  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;AssemblyTitle&lt;/code&gt;: ライブラリ名&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AssemblyCompany&lt;/code&gt;: 作成者の名前&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AssemblyProduct&lt;/code&gt;: ライブラリ名&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AssemblyCopyright&lt;/code&gt;: &lt;code&gt;"Copyright c {年} {作成者名}"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AssemblyVersion&lt;/code&gt;: 適当なバージョン&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AssemblyFileVersion&lt;/code&gt;: 適当なバージョン&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;私は初めてのバージョンは大体&lt;code&gt;0.1.0&lt;/code&gt;を設定しますが、別に&lt;code&gt;1.0.0&lt;/code&gt;でも問題ないと思います。&lt;/p&gt;

&lt;p&gt;次にプロジェクトフォルダ以下に&lt;code&gt;{プロジェクト名}.nuspec&lt;/code&gt;という名前でファイルを作成します。ファイルの中身は以下を貼り付けてください。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;package&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;metadata&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;$id$&lt;span class="nt"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;$version$&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;authors&amp;gt;&lt;/span&gt;$author$&lt;span class="nt"&gt;&amp;lt;/authors&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;owners&amp;gt;&lt;/span&gt;$author$&lt;span class="nt"&gt;&amp;lt;/owners&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;requireLicenseAcceptance&amp;gt;&lt;/span&gt;false&lt;span class="nt"&gt;&amp;lt;/requireLicenseAcceptance&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;license&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"expression"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;MIT&lt;span class="nt"&gt;&amp;lt;/license&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;description&amp;gt;&lt;/span&gt;$description$&lt;span class="nt"&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;releaseNotes&amp;gt;&amp;lt;/releaseNotes&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;copyright&amp;gt;&lt;/span&gt;Copyright @2020 $author$&lt;span class="nt"&gt;&amp;lt;/copyright&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/metadata&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/package&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ライセンスは好きなものを設定しましょう。また上記以外にも色々と設定項目があるので、詳しくは以下のURLを参照してください。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/ja-JP/nuget/reference/nuspec"&gt;https://docs.microsoft.com/ja-JP/nuget/reference/nuspec&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  NuGetパッケージの作成
&lt;/h2&gt;

&lt;p&gt;パッケージの作成にはNuGet CLIを使います。以下のURLからnuget.exeをダウンロードして適当なフォルダに配置し、パスを通しておいてください。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/ja-jp/nuget/consume-packages/install-use-packages-nuget-cli"&gt;https://docs.microsoft.com/ja-jp/nuget/consume-packages/install-use-packages-nuget-cli&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;まずはプロジェクトをRelease構成でビルドしてください。&lt;br&gt;
ビルドが終わったらPowerShellを開き、以下のコマンドを実行します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/path/to/solution/project&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# プロジェクトのフォルダに移動&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nuget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pack&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Prop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Configuration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Release&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;処理が終わると、作業フォルダに &lt;code&gt;{プロジェクト名}.{バージョン}.nupkg&lt;/code&gt; という名前でパッケージが生成されているはずです。&lt;/p&gt;

&lt;h2&gt;
  
  
  パッケージの公開
&lt;/h2&gt;

&lt;p&gt;最後に以下のサイトに従ってNuGet Galleryにパッケージを公開することができます。&lt;strong&gt;一度公開したパッケージは削除できないので注意してください&lt;/strong&gt;。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/ja-jp/nuget/nuget-org/publish-a-package"&gt;https://docs.microsoft.com/ja-jp/nuget/nuget-org/publish-a-package&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;上記以外にも&lt;code&gt;nuget push&lt;/code&gt;コマンドを使って公開することもできます。どちらを使っても同じなので好きな方を選んでください。&lt;/p&gt;

&lt;p&gt;また、NuGet Galleryに公開しなくても.nupkgファイルさえあればプロジェクトにインストールすることができます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://qiita.com/Midoliy/items/86c7d6b53bf226368f62#2-nuget-%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E7%AE%A1%E7%90%86%E7%94%A8%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%82%92%E7%94%A8%E6%84%8F%E3%81%99%E3%82%8B"&gt;共有フォルダを利用してnugetパッケージを管理する方法 - Qiita&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;はじめから公開するのは怖い、という方や社内でだけ共有したい、という方はこちらの方法を使うことをオススメします。&lt;/p&gt;

&lt;h2&gt;
  
  
  最後に
&lt;/h2&gt;

&lt;p&gt;今回はソースコードだけを提供するライブラリの作成方法でした。ライブラリの一部としてSitecoreのアイテムも提供したい場合は今回の方法では実現できません。  &lt;/p&gt;

&lt;p&gt;アイテムも提供したい場合は、一度ライブラリを適用したSitecoreの環境を作成して、Sitecoreのパッケージを作成しましょう。作成したパッケージはGitHubやSitecore Marketplaceで公開すればOKです。&lt;/p&gt;

&lt;p&gt;ライブラリの作成はいい経験にもなりますし、Sitecore MVPへの応募時のアピールにもなります。皆さんもぜひライブラリを作成して公開していきましょう。&lt;/p&gt;

&lt;p&gt;それでは、Happy Sitecoring！&lt;/p&gt;

</description>
      <category>sitecore</category>
      <category>nuget</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Update all items that share the same catalog entity when the item is saved</title>
      <dc:creator>tackme</dc:creator>
      <pubDate>Tue, 24 Nov 2020 08:19:31 +0000</pubDate>
      <link>https://dev.to/tackme31/update-all-items-that-share-the-same-catalog-entity-when-the-item-is-saved-me4</link>
      <guid>https://dev.to/tackme31/update-all-items-that-share-the-same-catalog-entity-when-the-item-is-saved-me4</guid>
      <description>&lt;p&gt;In Sitecore Commerce, a category/product entity associated with the different parents is treated as the different items in the Content Editor. Each item's fields are kept in the entity's &lt;code&gt;ExternalSettings&lt;/code&gt; component per entity relationship. So one item  is edited, the others will not be updated. You can change this behavior by customizing the &lt;code&gt;CatalogDataProvider&lt;/code&gt; class.  &lt;/p&gt;

&lt;p&gt;To retrieve all items that share an entity, use the &lt;code&gt;CatalogRepository&lt;/code&gt; class. The implementation is the following.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetEntityShareCatalogItems&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Item&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Deterministic ID is an item's ID in the Content Editor.&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;deterministicId&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Guid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="c1"&gt;// Sitecore ID is an one-to-one GUID with the entity.&lt;/span&gt;
    &lt;span class="c1"&gt;// This is used for mapping entity with items internally, so not visible in the Content Editor.&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;catalogRepository&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;CatalogRepository&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Language&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;sitecoreId&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;catalogRepository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetSitecoreIdForDeterministicId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;deterministicId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;IsNullOrWhiteSpace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sitecoreId&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;entityId&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;catalogRepository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetEntityIdFromMappings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sitecoreId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;IsNullOrWhiteSpace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entityId&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Get all items that share the entity ID.&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;deterministicIds&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;catalogRepository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetDeterministicIdsForEntityId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entityId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;includeVariations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;deterministicIds&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt; &lt;span class="p"&gt;||&lt;/span&gt; &lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="n"&gt;deterministicIds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Any&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;deterministicIds&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Null&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Database&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetItem&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;DescendsFrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TemplateID&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Language&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Language&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToList&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And apply field changes to all the items by customizing the &lt;code&gt;CatalogDataProvider.SaveItem&lt;/code&gt; method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyCatalogDataProvider&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CatalogDataProvider&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;SaveItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ItemDefinition&lt;/span&gt; &lt;span class="n"&gt;itemDefinition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ItemChanges&lt;/span&gt; &lt;span class="n"&gt;changes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CallContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="nf"&gt;CanProcessItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;itemDefinition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;LanguageSwitcher&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;changes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Language&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Call the method here.&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;catalogItems&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;GetEntityShareCatalogItems&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;changes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="c1"&gt;// Apply the same changes to all the items.&lt;/span&gt;
            &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;catalogItems&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;definition&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ItemDefinition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;itemDefinition&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;itemDefinition&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TemplateID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;itemDefinition&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BranchId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;clonedChanges&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;changes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Clone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

                &lt;span class="k"&gt;try&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;success&lt;/span&gt; &lt;span class="p"&gt;&amp;amp;=&lt;/span&gt; &lt;span class="k"&gt;base&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SaveItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;definition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;clonedChanges&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;success&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then replace the default data provider with the customized one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;configuration&lt;/span&gt; &lt;span class="na"&gt;xmlns:patch=&lt;/span&gt;&lt;span class="s"&gt;"http://www.sitecore.net/xmlconfig/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;sitecore&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;dataProviders&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;catalogProvider&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"Sitecore.Commerce.Engine.Connect.DataProvider.CatalogDataProvider, Sitecore.Commerce.Engine.Connect"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;patch:attribute&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"type"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Namespace.To.MyCatalogDataProvider, Assembly&lt;span class="nt"&gt;&amp;lt;/patch:attribute&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/catalogProvider&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/dataProviders&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/sitecore&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now when a catalog item is saved, all related items are updated together.&lt;/p&gt;

</description>
      <category>sitecore</category>
      <category>commerce</category>
    </item>
    <item>
      <title>Sitecoreでウェブサイトの初期表示を速くする方法（Viewのプリコンパイルの設定方法）</title>
      <dc:creator>tackme</dc:creator>
      <pubDate>Tue, 10 Nov 2020 08:21:09 +0000</pubDate>
      <link>https://dev.to/tackme31/sitecore-view-38d9</link>
      <guid>https://dev.to/tackme31/sitecore-view-38d9</guid>
      <description>&lt;p&gt;Sitecoreでは初めて描画するレンダリング（View）はアクセス時にコンパイルされます。ページへの初回アクセスが遅くなる原因の一つは、この実行時コンパイルにあります。&lt;br&gt;
あらかじめすべてのViewをコンパイルしておくことで、初期表示時間を改善することができます。&lt;/p&gt;
&lt;h2&gt;
  
  
  設定方法
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Viewファイルが含まれているプロジェクトに、NuGetで &lt;code&gt;RazorGenerator.MsBuild&lt;/code&gt; をインストールします。依存関係は無視してOKです。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;以下のパッチを適用します。&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;configuration&lt;/span&gt; &lt;span class="na"&gt;xmlns:patch=&lt;/span&gt;&lt;span class="s"&gt;"http://www.sitecore.net/xmlconfig/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;sitecore&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;settings&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- 物理ファイルの代わりにプリコンパイルされたViewを使用する設定 --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;setting&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Mvc.UsePhysicalViewsIfNewer"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;patch:attribute&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"value"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;false&lt;span class="nt"&gt;&amp;lt;/patch:attribute&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/setting&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/settings&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;mvc&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- プリコンパイルされたViewを使用するアセンブリ一覧 --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;precompilation&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;assemblies&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;assemblyIdentity&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Habitat.Foundation.Account"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;assemblyIdentity&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Habitat.Feature.Search"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/assemblies&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/precompilation&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/mvc&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/sitecore&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;li&gt;&lt;p&gt;プロジェクトをデプロイします。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;以上です。  &lt;/p&gt;

&lt;p&gt;dnSpy等でビルドしたアセンブリを除いてみると、名前空間&lt;code&gt;ASP&lt;/code&gt;にコンパイルされたViewが生成されていることを確認出来ます。&lt;/p&gt;

&lt;h2&gt;
  
  
  注意点
&lt;/h2&gt;

&lt;p&gt;プリコンパイルを設定すると、たとえサーバー上のViewファイルを編集してもページに適用されなくなります。Viewファイルを変更した際には必ずソースコードのデプロイを行うよう注意してください。&lt;/p&gt;

&lt;h2&gt;
  
  
  参考
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://olmecdev.com/2019/Precompiling-Sitecore-Views/"&gt;Olmec Dev | Sitecore 9 View Precompilation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sitecore</category>
      <category>aspdotnet</category>
    </item>
  </channel>
</rss>
