<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Koji Noshita – Blog</title><link>https://koji.noshita.net/blog/</link><description>Recent content in Blog on Koji Noshita</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><managingEditor>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</managingEditor><webMaster>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</webMaster><lastBuildDate>Tue, 14 Oct 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://koji.noshita.net/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Ghostty + zellijのターミナル設定</title><link>https://koji.noshita.net/blog/2025/1014-1014-terminal/</link><pubDate>Tue, 14 Oct 2025 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2025/1014-1014-terminal/</guid><description>
&lt;h2&gt;これまで&lt;span class="hx:absolute hx:-mt-20" id="これまで"&gt;&lt;/span&gt;
&lt;a href="#%e3%81%93%e3%82%8c%e3%81%be%e3%81%a7" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;macOSでは，端末エミュレータとしてデフォルトのターミナル.appを，ターミナルマルチプレクサとして&lt;a href="https://github.com/tmux/tmux"target="_blank" rel="noopener"&gt;tmux&lt;/a&gt;を使っていた．&lt;/p&gt;
&lt;p&gt;特に大きな不満はなかったけれど，異なるプラットフォームでの使い心地を近付けたい，（設定はできるが）あまり設定をいじりまくりたくない，といった気持ちから別の環境に移行することにした．&lt;/p&gt;
&lt;h2&gt;Ghostty&lt;span class="hx:absolute hx:-mt-20" id="ghostty"&gt;&lt;/span&gt;
&lt;a href="#ghostty" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;端末エミュレータは&lt;a href="https://ghostty.org/"target="_blank" rel="noopener"&gt;Ghostty&lt;/a&gt;にした．
軽快に使えて，設定も最小限で良く，インスペクタで挙動も確認しやすい．&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ghostty.org/docs/config#zero-configuration-philosophy"target="_blank" rel="noopener"&gt;Zero Configuration Philosophy&lt;/a&gt;を掲げており，そのままでも良い感じに使える．&lt;/p&gt;
&lt;p&gt;現在は，以下の項目のみカスタマイズしている．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# $HOME/Library/Application\ Support/com.mitchellh.ghostty/config
theme = Dracula&amp;#43;
window-height = 40
window-width = 120
window-padding-x = 5
background-opacity = 0.9
background-blur = true
font-family = UDEV Gothic 35NF
font-feature = -dlig
macos-option-as-alt = left&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;現状ではmacOSとLinuxのみ提供だが，&lt;a href="https://ghostty.org/docs/features"target="_blank" rel="noopener"&gt;いずれWindowsにも対応することが予定はされている&lt;/a&gt;．&lt;/p&gt;
&lt;p&gt;ほかの候補としては&lt;a href="https://wezterm.org/index.html"target="_blank" rel="noopener"&gt;WezTerm&lt;/a&gt;があり，（PowerShellの代替として）Windowsではこちらを利用することにした．&lt;/p&gt;
&lt;h2&gt;zellij&lt;span class="hx:absolute hx:-mt-20" id="zellij"&gt;&lt;/span&gt;
&lt;a href="#zellij" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ターミナルマルチプレクサは&lt;a href="https://zellij.dev/"target="_blank" rel="noopener"&gt;zellij&lt;/a&gt;にした．&lt;/p&gt;
&lt;p&gt;Rust製で軽快に動き，キーバインドを覚えてなくても常にキーバインドや状態が“見えている”のでライトユーザーに優しい．&lt;/p&gt;
&lt;p&gt;それほどガッツリ使っているわけでもない自分としてはとてもありがたいインタフェース．&lt;/p&gt;
&lt;p&gt;この辺のブログを見てみると使い勝手の良さがイメージできるかも．&lt;/p&gt;
&lt;p&gt;参考：&lt;a href="https://zenn.dev/5ei74r0/articles/zellij-for-beginners"target="_blank" rel="noopener"&gt;初心者にこそ使ってほしいRust製Terminal MultiplexerであるところのZellij&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;macOSで使う際に単語先頭へのジャンプのショートカットがzellijの新しいfloating paneの作成と干渉していたので，それのみカスタマイズしている．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# $HOME/.config/zellij/config.kdl
keybinds {
normal {
unbind &amp;#34;Alt f&amp;#34;
bind &amp;#34;Alt F&amp;#34; { ToggleFloatingPanes; }
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考：&lt;a href="https://github.com/zellij-org/zellij/issues/4151"target="_blank" rel="noopener"&gt;&lt;code&gt;Alt right&lt;/code&gt; and &lt;code&gt;Alt f&lt;/code&gt; behave identically on macOS, &lt;code&gt;Alt left&lt;/code&gt; does nothing&lt;/a&gt;&lt;/p&gt;</description></item><item><title>GitHub Classroomでの課題設定</title><link>https://koji.noshita.net/blog/2025/0602-0602-gh-classroom/</link><pubDate>Mon, 02 Jun 2025 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2025/0602-0602-gh-classroom/</guid><description>
&lt;h2&gt;前提&lt;span class="hx:absolute hx:-mt-20" id="前提"&gt;&lt;/span&gt;
&lt;a href="#%e5%89%8d%e6%8f%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;講義や演習での課題の提出をGitHub Classroomで管理したい．&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;課題配布用リポジトリの作成&lt;span class="hx:absolute hx:-mt-20" id="課題配布用リポジトリの作成"&gt;&lt;/span&gt;
&lt;a href="#%e8%aa%b2%e9%a1%8c%e9%85%8d%e5%b8%83%e7%94%a8%e3%83%aa%e3%83%9d%e3%82%b8%e3%83%88%e3%83%aa%e3%81%ae%e4%bd%9c%e6%88%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;課題リポジトリを，Classroom用組織アカウント内に作成する．&lt;/p&gt;
&lt;p&gt;Classroom用組織アカウントとは別に，課題用の組織アカウントを作成する方が良さそう．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;課題用はClassroomとは紐づけず，年度を問わず利用する．&lt;/li&gt;
&lt;li&gt;Classroom用組織アカウントは年度ごとに新たに作成する．課題の提出先はこちら．&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;現状では分離できていないのでいずれ別に作成する．&lt;/p&gt;
&lt;p&gt;（課題用組織アカウント内の）課題用リポジトリはprivate templateとする．&lt;/p&gt;
&lt;p&gt;たとえば，&lt;code&gt;assignment-XXX&lt;/code&gt;のような名前で作成する．&lt;/p&gt;
&lt;h2&gt;課題の作成&lt;span class="hx:absolute hx:-mt-20" id="課題の作成"&gt;&lt;/span&gt;
&lt;a href="#%e8%aa%b2%e9%a1%8c%e3%81%ae%e4%bd%9c%e6%88%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GitHub Classroomにて，クラスを選択し，&lt;code&gt;New assignment&lt;/code&gt;から新たな課題を作成する．&lt;/p&gt;
&lt;p&gt;たとえば，&lt;code&gt;assignment-01&lt;/code&gt;のような名前で作成する．&lt;/p&gt;
&lt;p&gt;必要に応じて締め切りを設定する．&lt;/p&gt;
&lt;h3&gt;課題のテンプレート&lt;span class="hx:absolute hx:-mt-20" id="課題のテンプレート"&gt;&lt;/span&gt;
&lt;a href="#%e8%aa%b2%e9%a1%8c%e3%81%ae%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先ほど作成したテンプレートリポジトリをスターターコードとして設定する．&lt;/p&gt;
&lt;p&gt;&lt;code&gt;visibility&lt;/code&gt;は&lt;code&gt;private&lt;/code&gt;．&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Copy the default branch only&lt;/code&gt;にチェックを入れる．&lt;/p&gt;
&lt;h3&gt;自動採点など&lt;span class="hx:absolute hx:-mt-20" id="自動採点など"&gt;&lt;/span&gt;
&lt;a href="#%e8%87%aa%e5%8b%95%e6%8e%a1%e7%82%b9%e3%81%aa%e3%81%a9" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;自動採点やPRによるフィードバックはいったんオフ．&lt;/p&gt;</description></item><item><title>数理生物学演習向けPython環境 2025年度版</title><link>https://koji.noshita.net/blog/2025/0426-0426-python-env/</link><pubDate>Sat, 26 Apr 2025 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2025/0426-0426-python-env/</guid><description>
&lt;h2&gt;概要&lt;span class="hx:absolute hx:-mt-20" id="概要"&gt;&lt;/span&gt;
&lt;a href="#%e6%a6%82%e8%a6%81" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://koji.noshita.net/courses/compbio/compbio2025/"&gt;数理生物学演習 2025年度&lt;/a&gt;向けのローカルPython環境を構築するための手順を説明する．&lt;/p&gt;
&lt;h2&gt;uv&lt;span class="hx:absolute hx:-mt-20" id="uv"&gt;&lt;/span&gt;
&lt;a href="#uv" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pythonのプロジェクト管理ツールの&lt;a href="https://docs.astral.sh/uv/"target="_blank" rel="noopener"&gt;uv&lt;/a&gt;を使って環境構築する．&lt;/p&gt;
&lt;p&gt;まずは，uvをインストールする．既に導入済みであればスキップしてOK．&lt;/p&gt;
&lt;p&gt;以下では，パッケージマネージャー経由でのuvのインストール方法を示す．&lt;/p&gt;
&lt;p&gt;公式マニュアル&lt;a href="https://docs.astral.sh/uv/getting-started/installation/"target="_blank" rel="noopener"&gt;Installing uv | uv&lt;/a&gt;に，その他のインストール方法についても詳しい説明がある．
好きな方法でインストールして良い．&lt;/p&gt;
&lt;h3&gt;Windows&lt;span class="hx:absolute hx:-mt-20" id="windows"&gt;&lt;/span&gt;
&lt;a href="#windows" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h4&gt;scoopのインストール&lt;span class="hx:absolute hx:-mt-20" id="scoopのインストール"&gt;&lt;/span&gt;
&lt;a href="#scoop%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Windowsでは&lt;a href="https://scoop.sh/"target="_blank" rel="noopener"&gt;scoop&lt;/a&gt;を使ってuvをインストールする．scoopがインストール済みであればスキップしてOK．&lt;/p&gt;
&lt;p&gt;PowerShellを開いて，以下のコマンドを打ち込む．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Set-ExecutionPolicy&lt;/span&gt; &lt;span class="n"&gt;-ExecutionPolicy&lt;/span&gt; &lt;span class="n"&gt;RemoteSigned&lt;/span&gt; &lt;span class="n"&gt;-Scope&lt;/span&gt; &lt;span class="n"&gt;CurrentUser&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Invoke-RestMethod&lt;/span&gt; &lt;span class="n"&gt;-Uri&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="p"&gt;//&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;scoop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;sh&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;Invoke-Expression&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;scoopがインストールできたら，uvをインストールしよう．&lt;/p&gt;
&lt;h4&gt;scoopによるuvのインストール&lt;span class="hx:absolute hx:-mt-20" id="scoopによるuvのインストール"&gt;&lt;/span&gt;
&lt;a href="#scoop%e3%81%ab%e3%82%88%e3%82%8buv%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;PowerShellから以下のコマンドを実行しよう．
scoopのコマンドの詳細については&lt;a href="https://github.com/ScoopInstaller/Scoop/wiki/Commands"target="_blank" rel="noopener"&gt;公式リポジトリのWiki&lt;/a&gt;を参照．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;scoop&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;uv&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;インストールできたか確認しよう．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;uv&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;uvのコマンドの説明が表示されれば，無事インストールできている．&lt;/p&gt;
&lt;h3&gt;macOS/Linux&lt;span class="hx:absolute hx:-mt-20" id="macoslinux"&gt;&lt;/span&gt;
&lt;a href="#macoslinux" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h4&gt;homebrewのインストール&lt;span class="hx:absolute hx:-mt-20" id="homebrewのインストール"&gt;&lt;/span&gt;
&lt;a href="#homebrew%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;macOS（もしくはLinux）では&lt;a href="https://brew.sh/ja/"target="_blank" rel="noopener"&gt;homebrew&lt;/a&gt;を使ってuvをインストールする．homebrewがインストール済みであればスキップしてOK．&lt;/p&gt;
&lt;p&gt;ターミナルを開いて，以下のコマンドを打ち込む．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/bin/bash -c &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;homebrewがインストールできたら，uvをインストールしよう．&lt;/p&gt;
&lt;h4&gt;homebrewによるuvのインストール&lt;span class="hx:absolute hx:-mt-20" id="homebrewによるuvのインストール"&gt;&lt;/span&gt;
&lt;a href="#homebrew%e3%81%ab%e3%82%88%e3%82%8buv%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;ターミナルから以下のコマンドを実行しよう．
homebrewのコマンドの詳細については&lt;a href="https://docs.brew.sh/Manpage"target="_blank" rel="noopener"&gt;公式コマンドドキュメント&lt;/a&gt;を参照．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install uv&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;インストールできたか確認しよう．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uv&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;uvのコマンドの説明が表示されれば，無事インストールできている．&lt;/p&gt;
&lt;h2&gt;数理生物学演習向けPythonプロジェクト&lt;span class="hx:absolute hx:-mt-20" id="数理生物学演習向けpythonプロジェクト"&gt;&lt;/span&gt;
&lt;a href="#%e6%95%b0%e7%90%86%e7%94%9f%e7%89%a9%e5%ad%a6%e6%bc%94%e7%bf%92%e5%90%91%e3%81%91python%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;数理生物学演習向けのPythonプロジェクトを作っていく．&lt;/p&gt;
&lt;h3&gt;Pythonのインストール&lt;span class="hx:absolute hx:-mt-20" id="pythonのインストール"&gt;&lt;/span&gt;
&lt;a href="#python%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Pythonをインストールしよう．uvは既にインストールされているPythonを検出するが，それ以外のバージョンをインストールしたいときがよくある．&lt;/p&gt;
&lt;p&gt;ここではColabと同じバージョンのPythonをインストールしよう．&lt;/p&gt;
&lt;p&gt;2025.04.26現在，ColabにはPythonの&lt;code&gt;3.11.12&lt;/code&gt;がインストールされている．
&lt;code&gt;3.11&lt;/code&gt;系をインストールしよう．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uv python install 3.11&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;プロジェクトの作成&lt;span class="hx:absolute hx:-mt-20" id="プロジェクトの作成"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ae%e4%bd%9c%e6%88%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;プロジェクトは&lt;code&gt;compbio2025&lt;/code&gt;というディレクトリの中に作成する．&lt;/p&gt;
&lt;p&gt;ここでは自身のホームディレクトリ下の作業ディレクトリ（Windowsだと&lt;code&gt;C:\Users\XXX\working_dir\&lt;/code&gt;，macOSだと&lt;code&gt;/Users/XXX/working_dir/&lt;/code&gt;）の内部に，&lt;code&gt;compbio2025&lt;/code&gt;を作成する．他の場所でも構わない．&lt;/p&gt;
&lt;p&gt;&lt;code&gt;XXX&lt;/code&gt;はユーザーアカウント．&lt;/p&gt;
&lt;p&gt;以下では，コマンドはWindowsではPowerShell，macOSではターミナルで実行していると想定する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# working_dirへ移動&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; working_dir
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# プロジェクトの作成（Pythonのバージョン指定オプション -p）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uv init compbio2025 -p 3.11
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# プロジェクト内部へ移動&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; compbio2025&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;以下のようなファイルとディレクトリが作成された
（&lt;code&gt;.&lt;/code&gt;からはじまるものは隠しファイル/ディレクトリなので，エクスプローラーやFinderでは表示されていないはず）．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .gitignore
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── .python-version
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── main.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── pyproject.toml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── README.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;main.py&lt;/code&gt;はサンプルとして作成されているスクリプトファイル（実行すると&lt;code&gt;Hello from compbio2025!&lt;/code&gt;と表示される）．&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pyproject.toml&lt;/code&gt;はプロジェクトの設定ファイル．&lt;/li&gt;
&lt;li&gt;&lt;code&gt;README.md&lt;/code&gt;はプロジェクトの説明を記述するファイル．&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;必要なパッケージの導入&lt;span class="hx:absolute hx:-mt-20" id="必要なパッケージの導入"&gt;&lt;/span&gt;
&lt;a href="#%e5%bf%85%e8%a6%81%e3%81%aa%e3%83%91%e3%83%83%e3%82%b1%e3%83%bc%e3%82%b8%e3%81%ae%e5%b0%8e%e5%85%a5" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このプロジェクト内に演習で必要なパッケージをインストールする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uv add numpy scipy matplotlib plotly jupyter jupyterlab&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;JupyterLabの起動&lt;span class="hx:absolute hx:-mt-20" id="jupyterlabの起動"&gt;&lt;/span&gt;
&lt;a href="#jupyterlab%e3%81%ae%e8%b5%b7%e5%8b%95" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ノートブック環境で進めるために&lt;a href="https://jupyterlab.readthedocs.io/en/latest/"target="_blank" rel="noopener"&gt;JupyterLab&lt;/a&gt;を利用する．&lt;/p&gt;
&lt;p&gt;プロジェクトディレクトリ内で以下のコマンドを実行すると，JupyterLabがブラウザで立ち上がる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uv run jupyter lab&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;あとは，Colabと同様に適切な場所にノートブックを作成して，プログラミングを進める．&lt;/p&gt;
&lt;h2&gt;おまけ：VSCodeからの利用&lt;span class="hx:absolute hx:-mt-20" id="おまけvscodeからの利用"&gt;&lt;/span&gt;
&lt;a href="#%e3%81%8a%e3%81%be%e3%81%91vscode%e3%81%8b%e3%82%89%e3%81%ae%e5%88%a9%e7%94%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://code.visualstudio.com/"target="_blank" rel="noopener"&gt;Visual Studio Code&lt;/a&gt;（VSCode）からも利用できる．&lt;/p&gt;
&lt;h3&gt;ipykernelの導入&lt;span class="hx:absolute hx:-mt-20" id="ipykernelの導入"&gt;&lt;/span&gt;
&lt;a href="#ipykernel%e3%81%ae%e5%b0%8e%e5%85%a5" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;プロジェクトに&lt;a href="https://ipykernel.readthedocs.io/en/stable/"target="_blank" rel="noopener"&gt;IPython Kernel&lt;/a&gt;を導入しよう．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uv add ipykernel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Jupyter拡張の導入&lt;span class="hx:absolute hx:-mt-20" id="jupyter拡張の導入"&gt;&lt;/span&gt;
&lt;a href="#jupyter%e6%8b%a1%e5%bc%b5%e3%81%ae%e5%b0%8e%e5%85%a5" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;VSCodeに&lt;a href="https://marketplace.visualstudio.com/items/?itemName=ms-toolsai.jupyter"target="_blank" rel="noopener"&gt;Jupyter拡張&lt;/a&gt;を導入する．&lt;/p&gt;
&lt;h3&gt;新しいノートブックファイルを作成し，カーネルを選択する&lt;span class="hx:absolute hx:-mt-20" id="新しいノートブックファイルを作成しカーネルを選択する"&gt;&lt;/span&gt;
&lt;a href="#%e6%96%b0%e3%81%97%e3%81%84%e3%83%8e%e3%83%bc%e3%83%88%e3%83%96%e3%83%83%e3%82%af%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e4%bd%9c%e6%88%90%e3%81%97%e3%82%ab%e3%83%bc%e3%83%8d%e3%83%ab%e3%82%92%e9%81%b8%e6%8a%9e%e3%81%99%e3%82%8b" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;新しいノートブック（例えば，&lt;code&gt;01/01.ipynb&lt;/code&gt;）を作成し，開く．&lt;/p&gt;
&lt;p&gt;「カーネルの選択」をクリックし，&lt;code&gt;.venv&lt;/code&gt;を選択すると，作成したプロジェクトの仮想環境で解析ができる．&lt;/p&gt;</description></item><item><title>論文が出版されました Noshita et al. 2025 J. R. Soc. Interface</title><link>https://koji.noshita.net/blog/2025/0223-noshita_2025_jrsocinterface/</link><pubDate>Sun, 23 Feb 2025 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2025/0223-noshita_2025_jrsocinterface/</guid><description>
&lt;p&gt;論文が出版されました．&lt;/p&gt;
&lt;p&gt;Noshita, K., Nakagawa, T., Kaneda, A., Tamura, K., Nakao, H., 2025. The cultural transmission of Ongagawa style pottery in the prehistoric Japan: quantitative analysis on three-dimensional data of archaeological pottery in the early Yayoi period. J. R. Soc. Interface 22, 20240889. &lt;a href="https://doi.org/10.1098/rsif.2024.0889"target="_blank" rel="noopener"&gt;https://doi.org/10.1098/rsif.2024.0889&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;本研究は新学術領域&lt;a href="https://out-of-eurasia.jp/"target="_blank" rel="noopener"&gt;出ユーラシアの統合的人類史学 - 文明創出メカニズムの解明 -&lt;/a&gt;の成果です．&lt;/p&gt;
&lt;p&gt;プレスリリースもして頂きました．&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.kyushu-u.ac.jp/ja/researches/view/1216"target="_blank" rel="noopener"&gt;弥生時代前期土器の拡散過程を定量的に検証&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;内容紹介&lt;span class="hx:absolute hx:-mt-20" id="内容紹介"&gt;&lt;/span&gt;
&lt;a href="#%e5%86%85%e5%ae%b9%e7%b4%b9%e4%bb%8b" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;弥生時代の遠賀川式土器の二次元/三次元の形態解析により，伝播ルートに関する従来の仮説を定量的に裏付けた研究です．&lt;/p&gt;
&lt;p&gt;考古遺物の分析は類型学的分類に基づくことが多く，連続的な「かたち」の変化を定量的に扱うことはあまりされてきませんでした．
特に三次元形態データの解析ではその傾向は顕著です．&lt;/p&gt;
&lt;p&gt;近年の三次元計測技術の発展に伴い，三次元データの取得自体はそれほど困難ではなくなりました．
また幾何学的形態測定学的な手法は比較的確立しています．
しかし，具体的に三次元データにおいて幾何学的形態測定学，例えば球面調和関数解析，を適用した事例は多くありません．&lt;/p&gt;
&lt;p&gt;考古遺物の三次元形態の定量的な評価ができれば，農耕の伝播などの文化進化との関連の解析などが可能になると考えられます．&lt;/p&gt;
&lt;p&gt;そこで，弥生時代前期の西日本を中心に広く出土する遠賀川式土器を対象に，二次元/三次元の定量的な形態解析をおこない，その伝播ルートの仮説との整合性を確かめました．
遠賀川式土器は，農耕と連動して北部九州から東海地方まで伝播していったと考えられています．&lt;/p&gt;
&lt;p&gt;本研究では，これまでに報告書などに記載されている実測図として蓄積された二次元データ，三次元スキャナや写真測量により新規に取得した三次元データ，それぞれ約500資料からなるデータセットを構築しました．&lt;/p&gt;
&lt;p&gt;このデータセットに基づき，幾何学的形態測定学的手法（二次元データには楕円フーリエ解析，三次元データには球面調和関数解析）を適用し，定量化をおこないました．&lt;/p&gt;
&lt;p&gt;さらに，主成分分析に基づき遠賀川式土器の実測形態空間を構築し，遠賀川式土器がもつ形態的なばらつきを可視化しました．
この上に出土した地域や時代をマッピングすることで，地域差や時代差，あるいはその両方を捉えました．&lt;/p&gt;
&lt;p&gt;最終的に，地域差と時代差のパタンから遠賀川式土器が，日本海側と瀬戸内側の２つルートを経由して伝播した可能性が高いことを土器形態の定量的な変遷からも支持されることを示しました．&lt;/p&gt;
&lt;p&gt;本研究を実施するうえで，多くの埋蔵文化財センターや博物館，研究機関にて資料の計測をさせていただきました．
こうした蓄積なく，大規模なデータに基づく研究は不可能です．
改めて感謝いたします．&lt;/p&gt;
&lt;h2&gt;余談&lt;span class="hx:absolute hx:-mt-20" id="余談"&gt;&lt;/span&gt;
&lt;a href="#%e4%bd%99%e8%ab%87" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;球面調和関数解析のコードなどはGitHubにて公開しています（&lt;a href="https://github.com/MorphometricsGroup/Noshita-2025-Ongagawa"target="_blank" rel="noopener"&gt;Noshita-2025-Ongagawa&lt;/a&gt;）．
考古遺物への適用例としては割と珍しいと思いますので参考になれば幸いです．
基本的には球と位相的に同一視できる対象の解析に利用できますので，その他の対象へもぜひ試していただきたいです．&lt;/p&gt;
&lt;p&gt;また，解析の流れは&lt;a href="https://www.keisoshobo.co.jp/book/b640259.html"target="_blank" rel="noopener"&gt;カタチの由来、データの未来&lt;/a&gt;にて（ざっくりと）日本語で解説したものがありますので，興味ある方はこちらもご覧頂けると嬉しいです．&lt;/p&gt;</description></item><item><title>クライアント認証を利用するサイトのLet's Encrypt発行SSL証明書の更新</title><link>https://koji.noshita.net/blog/2025/0121-0121-certbot-clientauth/</link><pubDate>Tue, 21 Jan 2025 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2025/0121-0121-certbot-clientauth/</guid><description>
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;クライアント認証がかけられているサイトのSSL証明書を自動更新する&lt;/li&gt;
&lt;li&gt;SSL証明書はLet&amp;rsquo;s Encryptで発行し，certbotで自動更新する&lt;/li&gt;
&lt;li&gt;Webサーバーはnginxを使う&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;自動更新の失敗&lt;span class="hx:absolute hx:-mt-20" id="自動更新の失敗"&gt;&lt;/span&gt;
&lt;a href="#%e8%87%aa%e5%8b%95%e6%9b%b4%e6%96%b0%e3%81%ae%e5%a4%b1%e6%95%97" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;設定からしばらくして自動更新が失敗しているcertificateがあることに気づく．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo certbot renew
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Failed to renew certificate XXX with error: Some challenges have failed.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;XXX&lt;/code&gt;は対象ドメイン．&lt;/p&gt;
&lt;p&gt;このドメインは&lt;a href="https://koji.noshita.net/blog/2024/1112-1112-ssl-client-nginx/"&gt;クライアント認証を設定&lt;/a&gt;し，
すべてのhttpアクセスをhttpsへリダイレクトしている
そのため，&lt;a href="https://letsencrypt.org/docs/challenge-types/#http-01-challenge"target="_blank" rel="noopener"&gt;HTTP-01 challenge&lt;/a&gt;に失敗していると思われる．&lt;/p&gt;
&lt;h2&gt;Nginxの設定&lt;span class="hx:absolute hx:-mt-20" id="nginxの設定"&gt;&lt;/span&gt;
&lt;a href="#nginx%e3%81%ae%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;HTTP-01 challengeで利用する&lt;code&gt;http://XXX/.well-known/acme-challenge/&lt;/code&gt;以下のみをhttpsへリダイレクトさせないようにする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;XXX&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/.well-known/acme-challenge/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;alias&lt;/span&gt; &lt;span class="s"&gt;/PATH/.well-known/acme-challenge/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;301&lt;/span&gt; &lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="nv"&gt;$host$request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;PATH&lt;/code&gt;はルートディレクトリ．&lt;/p&gt;
&lt;h2&gt;更新の確認&lt;span class="hx:absolute hx:-mt-20" id="更新の確認"&gt;&lt;/span&gt;
&lt;a href="#%e6%9b%b4%e6%96%b0%e3%81%ae%e7%a2%ba%e8%aa%8d" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;とりあえず&lt;code&gt;--dry-run&lt;/code&gt;オプションをつけて更新がうまくいくかを確認する．&lt;/p&gt;
&lt;p&gt;うまくいけば実際に更新するか，自動更新を待てばよい．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo certbot renew --dry-run&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>SSLクライアント認証に関係する中間証明局とnginxの設定</title><link>https://koji.noshita.net/blog/2024/1112-1112-ssl-client-nginx/</link><pubDate>Tue, 12 Nov 2024 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2024/1112-1112-ssl-client-nginx/</guid><description>
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;クライアント認証向けに自己CAで署名したクライアント証明書を作成する&lt;/li&gt;
&lt;li&gt;nginxでクライアント認証周りの設定をする&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;自己CAと署名&lt;span class="hx:absolute hx:-mt-20" id="自己caと署名"&gt;&lt;/span&gt;
&lt;a href="#%e8%87%aa%e5%b7%b1ca%e3%81%a8%e7%bd%b2%e5%90%8d" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;CAの秘密鍵：&lt;code&gt;ca.key&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;CA証明書：&lt;code&gt;ca.crt&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;を作成する．&lt;/p&gt;
&lt;p&gt;中間CAの秘密鍵を作成．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl genrsa -out ca.key &lt;span class="m"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;自己署名中間CA証明書を作成．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl req -new -x509 -days &lt;span class="m"&gt;365&lt;/span&gt; -key ca.key -out ca.crt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;有効期限を365日としている．関連した情報を聞かれるので回答する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Country Name &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt; letter code&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;AU&lt;span class="o"&gt;]&lt;/span&gt;:JP
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;State or Province Name &lt;span class="o"&gt;(&lt;/span&gt;full name&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Some-State&lt;span class="o"&gt;]&lt;/span&gt;:XXX
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Locality Name &lt;span class="o"&gt;(&lt;/span&gt;eg, city&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;:XXX
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Organization Name &lt;span class="o"&gt;(&lt;/span&gt;eg, company&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Internet Widgits Pty Ltd&lt;span class="o"&gt;]&lt;/span&gt;:XXX
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Organizational Unit Name &lt;span class="o"&gt;(&lt;/span&gt;eg, section&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Common Name &lt;span class="o"&gt;(&lt;/span&gt;e.g. server FQDN or YOUR name&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;:xxx.xxx.xxx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Email Address &lt;span class="o"&gt;[]&lt;/span&gt;:xxx@xxx.xxx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;クライアント証明書の作成&lt;span class="hx:absolute hx:-mt-20" id="クライアント証明書の作成"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e8%a8%bc%e6%98%8e%e6%9b%b8%e3%81%ae%e4%bd%9c%e6%88%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この辺は&lt;a href="https://koji.noshita.net/blog/2023/0601-ssl-client/"&gt;以前のポスト&lt;/a&gt;も参照．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;クライアント秘密鍵：&lt;code&gt;client.key&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;クライアント証明書要求：&lt;code&gt;client.csr&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;クライアント証明書：&lt;code&gt;client.crt&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;を作成する．&lt;/p&gt;
&lt;p&gt;クライアント秘密鍵を作成する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl genrsa -out client.key &lt;span class="m"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;クライアント証明書要求を作成する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl req -new -key client.key -out client.csr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;関連した情報を聞かれるので回答する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Country Name &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt; letter code&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;AU&lt;span class="o"&gt;]&lt;/span&gt;:JP
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;State or Province Name &lt;span class="o"&gt;(&lt;/span&gt;full name&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Some-State&lt;span class="o"&gt;]&lt;/span&gt;:Tokyo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Locality Name &lt;span class="o"&gt;(&lt;/span&gt;eg, city&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;:Shibuya
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Organization Name &lt;span class="o"&gt;(&lt;/span&gt;eg, company&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Internet Widgits Pty Ltd&lt;span class="o"&gt;]&lt;/span&gt;:Example, Inc.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Organizational Unit Name &lt;span class="o"&gt;(&lt;/span&gt;eg, section&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;:Customer Support
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Common Name &lt;span class="o"&gt;(&lt;/span&gt;e.g. server FQDN or YOUR name&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Email Address &lt;span class="o"&gt;[]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please enter the following &lt;span class="s1"&gt;&amp;#39;extra&amp;#39;&lt;/span&gt; attributes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;to be sent with your certificate request
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;A challenge password &lt;span class="o"&gt;[]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;An optional company name &lt;span class="o"&gt;[]&lt;/span&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;クライアント証明書を作成する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl x509 -req -days &lt;span class="m"&gt;365&lt;/span&gt; -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;有効期限を365日としている．&lt;/p&gt;
&lt;p&gt;ブラウザなどへインポートするために，クライアント証明書とクライアント秘密鍵をPKCS#12ファイルへまとめる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl pkcs12 -export -out client.p12 -inkey client.key -in client.crt -certfile ca.crt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;nginxでのクライアント認証の設定&lt;span class="hx:absolute hx:-mt-20" id="nginxでのクライアント認証の設定"&gt;&lt;/span&gt;
&lt;a href="#nginx%e3%81%a7%e3%81%ae%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e8%aa%8d%e8%a8%bc%e3%81%ae%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下での運用を想定．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;バーチャルホスト&lt;/li&gt;
&lt;li&gt;サーバー証明書は&lt;a href="https://letsencrypt.org/"target="_blank" rel="noopener"&gt;Let&amp;rsquo;s Encrypt&lt;/a&gt;で発行&lt;/li&gt;
&lt;li&gt;先ほど作成した&lt;code&gt;ca.crt&lt;/code&gt;は&lt;code&gt;/etc/nginx/client_certificates&lt;/code&gt;に保存&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;xxx.xxx.xxx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;301&lt;/span&gt; &lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="nv"&gt;$host$request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_protocols&lt;/span&gt; &lt;span class="s"&gt;TLSv1.2&lt;/span&gt; &lt;span class="s"&gt;TLSv1.3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_ciphers&lt;/span&gt; &lt;span class="s"&gt;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;xxx.xxx.xxx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="s"&gt;/var/www/web&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;index&lt;/span&gt; &lt;span class="s"&gt;index.html&lt;/span&gt; &lt;span class="s"&gt;index.htm&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;/etc/letsencrypt/live/xxx.xxx.xxx/fullchain.pem&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;/etc/letsencrypt/live/xxx.xxx.xxx/privkey.pem&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_session_cache&lt;/span&gt; &lt;span class="s"&gt;shared:SSL:1m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_session_timeout&lt;/span&gt; &lt;span class="mi"&gt;10m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_client_certificate&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;/etc/nginx/client_certificates/ca.crt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_verify_client&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_verify_depth&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="nv"&gt;$uri/&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;確認&lt;span class="hx:absolute hx:-mt-20" id="確認"&gt;&lt;/span&gt;
&lt;a href="#%e7%a2%ba%e8%aa%8d" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;client.p12&lt;/code&gt;をブラウザに読み込み，クライアント認証によりアクセスできることを確認する．&lt;/p&gt;
&lt;p&gt;必要に応じて，&lt;code&gt;.mobileconfig&lt;/code&gt;を作成してiOSデバイスへの読み込みなどをおこなう（参照：&lt;a href="https://koji.noshita.net/blog/2023/0601-ssl-client/#ios"&gt;iOS | WebページのためのSSLクライアント認証の設定&lt;/a&gt;）．&lt;/p&gt;</description></item><item><title>論文が出版されました Murata and Noshita 2024 Plant Phenomics</title><link>https://koji.noshita.net/blog/2024/0606-murata_noshita_2024_plantphenomics/</link><pubDate>Thu, 06 Jun 2024 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2024/0606-murata_noshita_2024_plantphenomics/</guid><description>
&lt;p&gt;&lt;a href="https://orcid.org/0009-0009-7993-9670"target="_blank" rel="noopener"&gt;村田さん&lt;/a&gt;との共著論文が出版されました！&lt;/p&gt;
&lt;p&gt;簡単に内容を紹介します．&lt;/p&gt;
&lt;h2&gt;内容紹介&lt;span class="hx:absolute hx:-mt-20" id="内容紹介"&gt;&lt;/span&gt;
&lt;a href="#%e5%86%85%e5%ae%b9%e7%b4%b9%e4%bb%8b" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;２次元と３次元の情報を統合することで３次元的な葉縁を定量化する手法を提案した研究です．&lt;/p&gt;
&lt;p&gt;Murata, H., &lt;strong&gt;Noshita, K.&lt;/strong&gt;*, 2024. Three-Dimensional Leaf Edge Reconstruction Combining Two- and Three-Dimensional Approaches. &lt;em&gt;Plant Phenomics&lt;/em&gt; &lt;strong&gt;6&lt;/strong&gt;, 0181. &lt;a href="https://doi.org/10.34133/plantphenomics.0181"target="_blank" rel="noopener"&gt;https://doi.org/10.34133/plantphenomics.0181&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;葉は，植物の最も重要な器官の一つです．そのため生息環境に応じた様々な機能的ニーズを満たす多様な形態学的特性を示します．従来，葉形態は２次元（2D）的に定量化されることが多く，葉の機能の３次元（3D）側面を十分には捉えられていません．&lt;/p&gt;
&lt;p&gt;3Dデータ取得が高精度・簡便になってきていますが，葉（薄い構造）の３次元再構築は未だに難しい課題です．例えば，SfM/MVSなどにより対象表面を点の集合（点群）として再構築する方法では，特に葉縁の形態を正確に定量化することは困難です．&lt;/p&gt;
&lt;p&gt;本研究では，2D画像でのインスタンスセグメンテーションと曲線ベースの3D再構成を組み合わせた3D葉縁定量化の方法を提案しました．この手法は主に以下の５つの要素からなります．&lt;/p&gt;
&lt;a href="https://spj.science.org/doi/10.34133/plantphenomics.0181#F1"&gt;
&lt;figure class="center"&gt;&lt;img src="https://spj.science.org/cms/10.34133/plantphenomics.0181/asset/e0139d98-36a2-4193-a744-8d32f4271d2e/assets/graphic/plantphenomics.0181.fig.001.jpg"
alt="Fig. 1" width="500px"&gt;
&lt;/figure&gt;
&lt;/a&gt;
&lt;br /&gt;
&lt;p&gt;１．まず，多視点画像のそれぞれに対して葉一枚一枚を個別に認識するモデルをMask R-CNNで作成しました（A）．得られた葉のマスク画像からは簡単にその２次元輪郭が抽出できます（B）．&lt;/p&gt;
&lt;p&gt;２．同時に，SfMによりカメラの位置と向きと疎な点群を推定します（C）．&lt;/p&gt;
&lt;p&gt;３．画像間での葉のマッチング．１で推定した葉それぞれが多視点画像間でどう対応するのかは自明ではありません．2で推定した疎な点群を３次元的に領域分割し投影行列に基づいて各画像に再投影することで対応関係を導きました（D）．（このステップは今後改良を予定しています）&lt;/p&gt;
&lt;p&gt;４．曲線ベースの3D再構成による3D曲線フラグメントの推定．２次元輪郭のペアに対して３次元再構築をおこなうことで小さな曲線片（曲線フラグメント）を多数再構築します．この再構築手法はFabbri and Kimia (2010) で提案された曲線ベース多視点ステレオに相当します．&lt;/p&gt;
&lt;p&gt;５．最後に，B スプライン曲線フィッティングにより3D曲線フラグメントを葉縁モデルとして閉曲線に統合します．&lt;/p&gt;
&lt;p&gt;結果は以下のようになります．例えば，シミュレーションで作った１枚の葉や個体を想定した複数の葉について再構築できています．&lt;/p&gt;
&lt;a href="https://spj.science.org/doi/10.34133/plantphenomics.0181#F4"&gt;
&lt;figure class="center"&gt;&lt;img src="https://spj.science.org/cms/10.34133/plantphenomics.0181/asset/4bdb3abe-4e8a-4924-b78c-5af8e9173a2b/assets/graphic/plantphenomics.0181.fig.004.jpg"
alt="Fig. 4" width="500px"&gt;
&lt;/figure&gt;
&lt;/a&gt;
&lt;br /&gt;
&lt;p&gt;実際の植物の画像データからも再構築できます．これはダイズの例．&lt;/p&gt;
&lt;a href="https://spj.science.org/doi/10.34133/plantphenomics.0181#F8"&gt;
&lt;figure class="center"&gt;&lt;img src="https://spj.science.org/cms/10.34133/plantphenomics.0181/asset/27c8e3a5-9c0d-4c4e-8839-290a32f0faf5/assets/graphic/plantphenomics.0181.fig.008.jpg"
alt="Fig. 1" width="500px"&gt;
&lt;/figure&gt;
&lt;/a&gt;
&lt;br /&gt;
&lt;iframe src="https://drive.google.com/file/d/1DXB7R_ynFKrqW6o9Lhg-2XCvVSDV0TST/preview" width="640" height="480" allow="autoplay"&gt;&lt;/iframe&gt;
&lt;p&gt;もっと複雑な葉形態にも対応できます．例えば切れ込みのある葉や穴が空いている場合などでも再構築できます．ただし，現状ではセレーションのような細かい構造や細長い葉の先端部などの高い曲率を持つ部分などでは精度が下がります．この辺も今後の改善を狙っている部分になります．&lt;/p&gt;
&lt;a href="https://spj.science.org/doi/10.34133/plantphenomics.0181#F10"&gt;
&lt;figure class="center"&gt;&lt;img src="https://spj.science.org/cms/10.34133/plantphenomics.0181/asset/344a0778-e200-4340-8060-dc04ed5e3a5b/assets/graphic/plantphenomics.0181.fig.010.jpg"
alt="Fig. 10" width="500px"&gt;
&lt;/figure&gt;
&lt;/a&gt;
&lt;br /&gt;
&lt;p&gt;本研究では，対象の構造に注目した2D/3Dの解析を組み合わせることで，点ベースのアプローチでは難しかった葉縁を捉えることに成功しました．&lt;/p&gt;
&lt;p&gt;本手法は，3D植物フェノタイピングにおける重要なツールになると考えています．今後はさらに様々な解剖学的構造の３次元空間中での統合を進めていきます！&lt;/p&gt;
&lt;p&gt;また，今回使ったデータセットはZenodoで公開しています．ご活用頂けると嬉しいです！
&lt;a href="https://koji.noshita.net/projects/datasets"&gt;Morphometrics Group Dataset Collection&lt;/a&gt;&lt;/p&gt;</description></item><item><title>VSCodeのスニペットの設定</title><link>https://koji.noshita.net/blog/2024/0109-vscode-snippets/</link><pubDate>Tue, 09 Jan 2024 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2024/0109-vscode-snippets/</guid><description>
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;VSCodeでスニペットを登録したい．&lt;/li&gt;
&lt;li&gt;Markdownのスニペットを登録したい．&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;VSCodeのスニペットの設定&lt;span class="hx:absolute hx:-mt-20" id="vscodeのスニペットの設定"&gt;&lt;/span&gt;
&lt;a href="#vscode%e3%81%ae%e3%82%b9%e3%83%8b%e3%83%9a%e3%83%83%e3%83%88%e3%81%ae%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Code&lt;/code&gt; -&amp;gt; &lt;code&gt;基本設定&lt;/code&gt; -&amp;gt; &lt;code&gt;ユーザースニペットの構成&lt;/code&gt;で作成したいスニペットの言語を選択する．&lt;/p&gt;
&lt;p&gt;今回はMarkdownで新規作成したかったので，&lt;code&gt;markdown.json&lt;/code&gt;を入力して開く．&lt;/p&gt;
&lt;p&gt;登録したいスニペットを以下のフォーマットで追記する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;TITLE&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;prefix&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;body&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;１行目&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;２行目&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;yyy&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;TITLE&lt;/code&gt;はスニペット名，&lt;code&gt;xxx&lt;/code&gt;には呼び出しに用いるキーワード，&lt;code&gt;yyy&lt;/code&gt;はオプションで説明を記入する．&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;quot;body&amp;quot;&lt;/code&gt;に展開したい内容を書く．&lt;/p&gt;
&lt;p&gt;&lt;a href="https://code.visualstudio.com/docs/editor/userdefinedsnippets#_tabstops"target="_blank" rel="noopener"&gt;カーソル位置&lt;/a&gt;や&lt;a href="https://code.visualstudio.com/docs/editor/userdefinedsnippets#_variables"target="_blank" rel="noopener"&gt;変数&lt;/a&gt;などを利用できる．&lt;/p&gt;
&lt;h3&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/editor/userdefinedsnippets"target="_blank" rel="noopener"&gt;Snippets in Visual Studio Code | 公式ドキュメント&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax"target="_blank" rel="noopener"&gt;Snippet syntax&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Markdown向け追加設定&lt;span class="hx:absolute hx:-mt-20" id="markdown向け追加設定"&gt;&lt;/span&gt;
&lt;a href="#markdown%e5%90%91%e3%81%91%e8%bf%bd%e5%8a%a0%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;デフォルトではMarkdownは&lt;code&gt;editor.quickSuggestions&lt;/code&gt;がすべて&lt;code&gt;false&lt;/code&gt;になっている．&lt;/p&gt;
&lt;p&gt;&lt;code&gt;other&lt;/code&gt;を&lt;code&gt;true&lt;/code&gt;にすることでスニペットが有効になる．&lt;/p&gt;
&lt;p&gt;&lt;code&gt;command ⌘&lt;/code&gt; + &lt;code&gt;shift ⇧&lt;/code&gt; + &lt;code&gt;p&lt;/code&gt;でコマンドパレットを開き，&lt;code&gt;settings.json&lt;/code&gt;を選択して，以下の設定を追記する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;[markdown]&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;editor.quickSuggestions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;other&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考-1"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83-1" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/getstarted/settings#_default-settings"target="_blank" rel="noopener"&gt;Default settings | 公式ページ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>TailscaleのmacOSのコマンドラインでの再認証</title><link>https://koji.noshita.net/blog/2024/0104-tailscale-reauth-mac/</link><pubDate>Thu, 04 Jan 2024 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2024/0104-tailscale-reauth-mac/</guid><description>
&lt;h2&gt;前提・やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="前提やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e5%89%8d%e6%8f%90%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Tailscaleのkeyが期限切れ（expired）になったので，再認証したい．&lt;/li&gt;
&lt;li&gt;CLIで再認証をおこないたい．&lt;/li&gt;
&lt;li&gt;対象のデバイスはmacOS．&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tailscale CLI&lt;span class="hx:absolute hx:-mt-20" id="tailscale-cli"&gt;&lt;/span&gt;
&lt;a href="#tailscale-cli" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;/Applications/Tailscale.app/Contents/MacOS/Tailscale&lt;/code&gt;に様々な設定などをおこなうためのCLIがある．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;tailscale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/Applications/Tailscale.app/Contents/MacOS/Tailscale&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;を&lt;code&gt;.zshrc&lt;/code&gt;に追加しておくと便利．&lt;/p&gt;
&lt;h3&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tailscale.com/kb/1080/cli"target="_blank" rel="noopener"&gt;Tailscale CLI | 公式ドキュメント&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;再認証&lt;span class="hx:absolute hx:-mt-20" id="再認証"&gt;&lt;/span&gt;
&lt;a href="#%e5%86%8d%e8%aa%8d%e8%a8%bc" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-amber-200 hx:bg-amber-100 hx:text-amber-900 hx:dark:border-amber-200/30 hx:dark:bg-amber-900/30 hx:dark:text-amber-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;p&gt;&lt;code&gt;tailscale up --force-reauth&lt;/code&gt;実行の際にはTailscaleの接続が切れるので，直接sshなどで接続した状態で行うべきではない．&lt;/p&gt;
&lt;p&gt;もしリモートで行う場合は，何らかの迂回路を用いること．&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tailscale up --force-reauth&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;もし対象がExit nodeの場合は以下の通り．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tailscale up --force-reauth --advertise-exit-node &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;コマンドが実行できれば以下のように認証のためのページへのURLが表示される．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;To authenticate, visit:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://login.tailscale.com/a/XXX&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;XXX&lt;/code&gt;は毎回異なる．&lt;/p&gt;
&lt;p&gt;URLへアクセスし，Tailscaleへログインして認証を完了させる．&lt;/p&gt;
&lt;p&gt;成功すれば，&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Success.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;と表示される．&lt;/p&gt;
&lt;h3&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考-1"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83-1" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tailscale.com/kb/1028/key-expiry?q=Custom%20authentication%20periods%20#renewing-keys-for-an-expired-device"target="_blank" rel="noopener"&gt;Key Expiry - Renewing keys for an expired device | 公式ドキュメント&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Python環境構築 2023.10</title><link>https://koji.noshita.net/blog/2023/1017-python-env/</link><pubDate>Tue, 17 Oct 2023 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2023/1017-python-env/</guid><description>
&lt;h2&gt;概要&lt;span class="hx:absolute hx:-mt-20" id="概要"&gt;&lt;/span&gt;
&lt;a href="#%e6%a6%82%e8%a6%81" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pyenv/pyenv"target="_blank" rel="noopener"&gt;Pyenv&lt;/a&gt;：複数バージョンのPythonの管理する．&lt;/li&gt;
&lt;li&gt;&lt;a href="https://python-poetry.org/"target="_blank" rel="noopener"&gt;poetry&lt;/a&gt;：各解析や開発のための個別の仮想環境を管理する．&lt;/li&gt;
&lt;li&gt;OSはmacOS, Linuxを想定している．Windowsの場合はWSL2でLinux環境を用意して利用する．&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pythonの環境を構築する方法は他にも選択肢がある．ニーズや好みに合わせて選択してほしい．&lt;/p&gt;
&lt;h2&gt;インストール&lt;span class="hx:absolute hx:-mt-20" id="インストール"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://brew.sh/"target="_blank" rel="noopener"&gt;homebrew&lt;/a&gt;でインストールする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install pyenv poetry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Pyenv&lt;span class="hx:absolute hx:-mt-20" id="pyenv"&gt;&lt;/span&gt;
&lt;a href="#pyenv" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;複数のバージョンのPythonを切り替えて使いたい場合は多い．&lt;/p&gt;
&lt;p&gt;そうした際には複数のPython環境を導入し，自身でパスを設定しても良いが面倒である．&lt;/p&gt;
&lt;p&gt;そこで通常はPyenvのような複数のPython環境のインストールや切り替えを支援するツールを利用することになる．&lt;/p&gt;
&lt;h3&gt;依存ライブラリのインストール&lt;span class="hx:absolute hx:-mt-20" id="依存ライブラリのインストール"&gt;&lt;/span&gt;
&lt;a href="#%e4%be%9d%e5%ad%98%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;公式ドキュメントに従い，自身の環境に合わせて必要なライブラリをインストールしておく．&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/pyenv/pyenv/wiki#suggested-build-environment"target="_blank" rel="noopener"&gt;Suggested build environment&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Pythonのインストール&lt;span class="hx:absolute hx:-mt-20" id="pythonのインストール"&gt;&lt;/span&gt;
&lt;a href="#python%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;いくつかのPython環境をインストールしてみよう．
以下では&lt;code&gt;3.11.6&lt;/code&gt;と&lt;code&gt;3.12.0&lt;/code&gt;をインストールしているが，使いたいバージョンを設定してほしい．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# インストールできるPython環境の一覧を確認&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pyenv install -l
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3.11.6と3.12.0をインストール&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pyenv install 3.11.6 3.12.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;バージョンの切り替え&lt;span class="hx:absolute hx:-mt-20" id="バージョンの切り替え"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%81%ae%e5%88%87%e3%82%8a%e6%9b%bf%e3%81%88" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;インストールしたPythonをそれぞれ使ってみよう．&lt;/p&gt;
&lt;p&gt;以下では&lt;code&gt;3.11.6&lt;/code&gt;を&lt;code&gt;XXX&lt;/code&gt;というディレクトリ内で，
&lt;code&gt;3.12.0&lt;/code&gt;を&lt;code&gt;YYY&lt;/code&gt;というディレクトリ内でそれぞれ利用することを想定している
（別バージョンのPythonを別のプロジェクトで使うイメージ）．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 特定ディレクトリ内で3.11.6を使う&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; XXX
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pyenv &lt;span class="nb"&gt;local&lt;/span&gt; 3.11.6
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python --version
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 特定ディレクトリ内で3.12.0を使う&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; YYY
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pyenv &lt;span class="nb"&gt;local&lt;/span&gt; 3.12.0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python --version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;一度，&lt;code&gt;pyenv local&lt;/code&gt;コマンドを実行すれば，以降はそのディレクトリ内に移動すれば自動で設定したバージョンが利用される．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3.11.6が利用される&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; XXX
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python --version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;これは&lt;code&gt;pyenv local&lt;/code&gt;コマンドの実行時に&lt;code&gt;.python-version&lt;/code&gt;という隠しファイルがディレクトリ内に作成され，
そこに設定したバージョンが記載されているためである．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat .python-version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;おまけ&lt;span class="hx:absolute hx:-mt-20" id="おまけ"&gt;&lt;/span&gt;
&lt;a href="#%e3%81%8a%e3%81%be%e3%81%91" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;いくつか使うかもしれない機能やTipsを紹介する．
最初はとりあえず無視してもらって良い．&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;pyenv global&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="pyenv-global"&gt;&lt;/span&gt;
&lt;a href="#pyenv-global" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;特定のディレクトリ内だけでなく，デフォルトで使いたいバージョンを指定することもできる．
&lt;code&gt;pyenv global&lt;/code&gt;コマンドを使う．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pyenv global XXX&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;XXX&lt;/code&gt;は設定したいバージョン．&lt;/p&gt;
&lt;p&gt;ディレクトリ内に&lt;code&gt;.python-version&lt;/code&gt;ファイルがある場合は，そちらが優先される．&lt;/p&gt;
&lt;h4&gt;複数バージョンの指定&lt;span class="hx:absolute hx:-mt-20" id="複数バージョンの指定"&gt;&lt;/span&gt;
&lt;a href="#%e8%a4%87%e6%95%b0%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%81%ae%e6%8c%87%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;code&gt;pyenv local&lt;/code&gt;や&lt;code&gt;pyenv global&lt;/code&gt;では複数のバージョンを指定することもできる．&lt;/p&gt;
&lt;p&gt;例えば&lt;code&gt;3.10.13&lt;/code&gt;と&lt;code&gt;miniconda3-latest&lt;/code&gt;をグローバルに使うPythonとして設定する場合は以下のようにする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pyenv global 3.10.13 miniconda3-latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;miniconda3-latestでシェル起動時に自動的にbase環境に入らないようにする&lt;span class="hx:absolute hx:-mt-20" id="miniconda3-latestでシェル起動時に自動的にbase環境に入らないようにする"&gt;&lt;/span&gt;
&lt;a href="#miniconda3-latest%e3%81%a7%e3%82%b7%e3%82%a7%e3%83%ab%e8%b5%b7%e5%8b%95%e6%99%82%e3%81%ab%e8%87%aa%e5%8b%95%e7%9a%84%e3%81%abbase%e7%92%b0%e5%a2%83%e3%81%ab%e5%85%a5%e3%82%89%e3%81%aa%e3%81%84%e3%82%88%e3%81%86%e3%81%ab%e3%81%99%e3%82%8b" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 仮想環境外に出て（conda deactivate）以下を実行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;conda config --set auto_activate_base False&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Poetry&lt;span class="hx:absolute hx:-mt-20" id="poetry"&gt;&lt;/span&gt;
&lt;a href="#poetry" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;プロジェクト毎に使いたいパッケージやそのバージョンは通常異なる．&lt;/p&gt;
&lt;p&gt;こうした場合には，他のプロジェクトなどに影響を受けないように切り離されたPython環境（仮想環境）を構築することが一般的である．&lt;/p&gt;
&lt;p&gt;例えば，標準ライブラリでは&lt;a href="https://docs.python.org/3/library/venv.html"target="_blank" rel="noopener"&gt;venv&lt;/a&gt;が提供されており，
異なる解析環境・開発環境を作成することができる．&lt;/p&gt;
&lt;p&gt;Poetryは依存管理からパッケージング（Pythonパッケージを開発して配布可能な形式にまとめる）までを支援するツールである．&lt;/p&gt;
&lt;p&gt;ここでは，Poetryを使って各解析や開発のための個別の仮想環境を管理する．&lt;/p&gt;
&lt;h3&gt;Authorの設定&lt;span class="hx:absolute hx:-mt-20" id="authorの設定"&gt;&lt;/span&gt;
&lt;a href="#author%e3%81%ae%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;デフォルトでは，&lt;code&gt;.gitconfig&lt;/code&gt;の&lt;code&gt;user&lt;/code&gt;情報から名前とメールアドレスを取得してくる．
何も設定していない場合は，必須項目になる．&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/python-poetry/poetry/blob/611033a7335f3c8e2b74dd58688fb9021cf84a5b/src/poetry/console/commands/init.py#L135C1-L140C47"target="_blank" rel="noopener"&gt;poetry/src/poetry/console/commands/init.py&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ここでは&lt;code&gt;.gitconfig&lt;/code&gt;に設定をおこなっておこう．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git config --global user.name &lt;span class="s2"&gt;&amp;#34;XXX XXX&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git config --global user.email xxx@example.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;XXX XXX&lt;/code&gt;と&lt;code&gt;xxx@example.com&lt;/code&gt;は自身の情報を入力する．&lt;/p&gt;
&lt;h3&gt;プロジェクトの作成&lt;span class="hx:absolute hx:-mt-20" id="プロジェクトの作成"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ae%e4%bd%9c%e6%88%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;特定のディレクトリ以下を（同じ仮想環境を使う）一つのプロジェクトとする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# プロジェクトの作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; XXX
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;poetry init&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;設定項目についての質問が表示されるので入力していこう．&lt;/p&gt;
&lt;p&gt;デフォルトのままで良ければ空欄で良い．&lt;/p&gt;
&lt;p&gt;ここではPythonのバージョンだけ3.9以上3.13未満としている．&lt;/p&gt;
&lt;p&gt;Poetryにおける（Pythonやパッケージの）バージョン指定方法は公式ドキュメントの&lt;a href="https://python-poetry.org/docs/dependency-specification/"target="_blank" rel="noopener"&gt;Dependency specification&lt;/a&gt;を参照してほしい．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;This &lt;span class="nb"&gt;command&lt;/span&gt; will guide you through creating your pyproject.toml config.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Package name &lt;span class="o"&gt;[&lt;/span&gt;XXX&lt;span class="o"&gt;]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Version &lt;span class="o"&gt;[&lt;/span&gt;0.1.0&lt;span class="o"&gt;]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Description &lt;span class="o"&gt;[]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Author &lt;span class="o"&gt;[&lt;/span&gt;NAME &amp;lt;MAIL&amp;gt;, n to skip&lt;span class="o"&gt;]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;License &lt;span class="o"&gt;[]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Compatible Python versions &lt;span class="o"&gt;[&lt;/span&gt;^3.11&lt;span class="o"&gt;]&lt;/span&gt;: &amp;gt;&lt;span class="o"&gt;=&lt;/span&gt;3.9,&amp;lt;3.13
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Would you like to define your main dependencies interactively? &lt;span class="o"&gt;(&lt;/span&gt;yes/no&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;yes&lt;span class="o"&gt;]&lt;/span&gt; no
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Would you like to define your development dependencies interactively? &lt;span class="o"&gt;(&lt;/span&gt;yes/no&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;yes&lt;span class="o"&gt;]&lt;/span&gt; no
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Generated file&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;ディレクトリ内に，&lt;code&gt;pyproject.toml&lt;/code&gt;という設定ファイルが生成される．&lt;/p&gt;
&lt;h3&gt;依存パッケージのインストール&lt;span class="hx:absolute hx:-mt-20" id="依存パッケージのインストール"&gt;&lt;/span&gt;
&lt;a href="#%e4%be%9d%e5%ad%98%e3%83%91%e3%83%83%e3%82%b1%e3%83%bc%e3%82%b8%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;プロジェクト内で使うパッケージをインストールしていく．&lt;/p&gt;
&lt;p&gt;以下では，NumPy, SciPy, pandas, matplotlib, JupyterLabをインストールしているが，自身のプロジェクトに必要なものを導入しよう．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;poetry add numpy scipy pandas matplotlib jupyterlab&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;これらのパッケージの情報も&lt;code&gt;pyproject.toml&lt;/code&gt;に記載される．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat pyproject.toml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;code&gt;poetry run&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="poetry-run"&gt;&lt;/span&gt;
&lt;a href="#poetry-run" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Poetryで作成した仮想環境は自動ではactivateされない．&lt;/p&gt;
&lt;p&gt;Poetryで作成した仮想環境上でコマンドを実行したい場合は&lt;code&gt;poetry run&lt;/code&gt;を使う．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;poetry run jupyter lab&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;code&gt;poetry shell&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="poetry-shell"&gt;&lt;/span&gt;
&lt;a href="#poetry-shell" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Poetryで作成した仮想環境内でシェルを立ち上げる場合は&lt;code&gt;poetry shell&lt;/code&gt;を使う．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;poetry shell&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;仮想環境内に導入したパッケージなどを利用できる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;jupyter lab&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;仮想環境でのPythonバージョンの変更&lt;span class="hx:absolute hx:-mt-20" id="仮想環境でのpythonバージョンの変更"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%ae%e6%83%b3%e7%92%b0%e5%a2%83%e3%81%a7%e3%81%aepython%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%81%ae%e5%a4%89%e6%9b%b4" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;poetry env use&lt;/code&gt;により仮想環境を切り替えることができる．&lt;/p&gt;
&lt;p&gt;例えば，異なるバージョンを利用することが可能．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;poetry env use 3.12&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;仮想環境の一覧は&lt;code&gt;poetry env list&lt;/code&gt;で確認できる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;poetry env list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>論文が出版されました Iwamasa and Noshita (2023) PLOS Comput. Biol.</title><link>https://koji.noshita.net/blog/2023/0802-iwamasa-noshita-2023-ploscomputbiol/</link><pubDate>Wed, 02 Aug 2023 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2023/0802-iwamasa-noshita-2023-ploscomputbiol/</guid><description>
&lt;p&gt;&lt;a href="https://orcid.org/0000-0001-8967-7859"target="_blank" rel="noopener"&gt;岩政さん&lt;/a&gt;との共著論文が出版されました！&lt;/p&gt;
&lt;p&gt;Iwamasa, K., Noshita, K.* Network feature-based phenotyping of leaf venation robustly reconstructs the latent space. &lt;em&gt;PLOS Comput. Biol.&lt;/em&gt; (2023) &lt;strong&gt;19&lt;/strong&gt;, e1010581. &lt;a href="https://doi.org/10.1371/journal.pcbi.1010581"target="_blank" rel="noopener"&gt;https://doi.org/10.1371/journal.pcbi.1010581&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;プレプリント投稿やプレスリリースなど新しい取り組みにもチャレンジし，良い経験になりました．&lt;/p&gt;
&lt;p&gt;最後に改めて，データセットを利用させていただいた&lt;a href="https://www.kahaku.go.jp/research/db/geology-paleontology/cleared_leaf/"target="_blank" rel="noopener"&gt;国立科学博物館 葉脈標本データベース&lt;/a&gt;に感謝いたします．&lt;/p&gt;
&lt;h2&gt;Tweetまとめ&lt;span class="hx:absolute hx:-mt-20" id="tweetまとめ"&gt;&lt;/span&gt;
&lt;a href="#tweet%e3%81%be%e3%81%a8%e3%82%81" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="ja" dir="ltr"&gt;岩政さん &lt;a href="https://twitter.com/colum2131?ref_src=twsrc%5Etfw"&gt;@colum2131&lt;/a&gt; との共著論文が出版されました 🎉 葉脈ネットワークの定量化とその潜在空間を特定した研究です 🍃 &lt;br&gt;&lt;br&gt;Network feature-based phenotyping of leaf venation robustly reconstructs the latent space &lt;a href="https://t.co/VlhUDMxDOa"&gt;https://t.co/VlhUDMxDOa&lt;/a&gt;&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315433104535552?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;植物の葉脈は水や光合成産物の輸送に関わるネットワーク状の構造です．そのため生理学的には透水性や蒸散効率に関わる重要な形質です．特に，被子植物の葉脈は階層的で複雑な葉脈構造を示し，分類の際にも注目する形質と考えられています．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315434559959041?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;こうした葉脈構造の評価は，比較的シンプルな計測値（長さ，直径，分岐角度，areole面積，単位面積あたりの長さなど）でおこなわれるケースがほとんどでした．しかし，本質的には輸送網（ネットワーク構造）として定量化することが望ましいです．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315435809837057?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;そこで本研究では，葉脈構造をネットワークとして定量化するための手法を開発し，その有用性を示しました．提案手法は１．画像の取得，２．U-Netによる葉脈の抽出，３．無向グラフへの変換，４．ネットワーク特徴量化，からなります．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315437021995009?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;１．画像の取得．葉脈の観察を行う際には，透明化染色標本を用いることがありますが，処理に時間がかかります（~２週間程度）．今後のデータサイズの拡大を狙いハイスループットな手法として，シンプルな透過光による画像撮影方法を採用しました．&lt;a href="https://t.co/gcNFbZIeaE"&gt;https://t.co/gcNFbZIeaE&lt;/a&gt;&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315438255140864?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;２．U-Netによる葉脈の抽出．葉脈だけを抽出するためにセマンティックセグメンテーション向け深層学習モデルであるU-Netをもちいました．このモデルはグレースケール画像を入力にしており，染色標本・非染色標本の両方に適用できます．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315439672786946?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;U-Netの訓練のキモとして，”キレイな”画像だけのデータセットに古典的な画像解析を施すことで訓練データを用意した点があります．これによりアノテーションデータの作成の労力を抑えることができました．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315440952049665?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;３．無向グラフへの変換．葉脈だけを抜き出した二値画像から細線化により，葉脈のスケルトンを取得し，このスケルトンに基づいて分岐点，端点を探索し，それらを結ぶことで無向グラフを構築しています．ここまでを適用すると以下の通り🙌 &lt;a href="https://t.co/mEm8eK68fu"&gt;https://t.co/mEm8eK68fu&lt;/a&gt;&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315442889834496?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;４．ネットワーク特徴量化．無向グラフからNetSimileというサイズ不変なベクトル表現を計算し，これを葉脈構造の特徴量としました．この特徴量に基づき様々なデータ解析や可視化をおこなうことになります．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315444290732033?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;デモンストレーションとして，まずこの葉脈特徴量だけから伊都キャンパスでサンプリングした５種の葉を見分けることができるかを検討し，その結果およそ90%の精度で見分けることができました．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315445620310017?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;つまり，分類群特異的な構造情報をある程度含んでいる特徴量になっているだろうと考えられます（単純なクラス分類の問題を解きたい場合は葉の形状やテクスチャなどを含む画像情報も使ったほうが良いと思います）．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315446903775232?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;そして本研究のハイライトは葉脈構造の潜在空間を特定できた点になります．伊都キャンパスでサンプリングした5種479枚の非染色葉標本と国立科学博物館 葉脈標本データベース（&lt;a href="https://t.co/2wY74R8hE9"&gt;https://t.co/2wY74R8hE9&lt;/a&gt;）に含まれる5属328枚の染色標本の解析しました．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315448199839748?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;葉脈構造特徴量の主成分分析の結果，PC1とPC3の空間に１次元的なU字型の分布を見出しました．またこの曲線にそって葉脈の高次構造がツリー状からループ状に遷移していることがわかりました．&lt;a href="https://t.co/SOvPyPYxVD"&gt;https://t.co/SOvPyPYxVD&lt;/a&gt;&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315449583931392?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;この分布パターンはRonellenfitsch and Katifori (2019) &lt;a href="https://t.co/16eQswjQnW"&gt;https://t.co/16eQswjQnW&lt;/a&gt; で理論的に予測された輸送効率，形成効率，損傷に対するロバスト性のパレート最適（いずれかの機能を改善しようと葉脈を変化させるとそれ以外が低下する）に対応する可能性が高いです．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315450947080195?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;葉脈構造をネットワーク特徴量として定量的に評価したことで，データ駆動的にその潜在空間を特定し，「かたち」の多様性と制約の理解へつなげることができたと考えています！&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315452436054017?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;今回の解析には国立科学博物館 葉脈標本データベース（&lt;a href="https://t.co/2wY74R8hE9"&gt;https://t.co/2wY74R8hE9&lt;/a&gt;）を利用させて頂きました．こうしたデータセットが整備・公開，そして維持されていることは本当にありがたいです．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315453690179584?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;はじめてプレスリリースしてみました．ツッコミどころ有りましたらご指摘いただけると幸いです．今後へ活かしていこうと思います．色々調整をおこなって頂いた広報や編集部などのみなさま，ありがとうございました！&lt;br&gt;&lt;br&gt;九州大学：&lt;a href="https://t.co/KHPb7YWGAD"&gt;https://t.co/KHPb7YWGAD&lt;/a&gt;&lt;br&gt;JST: &lt;a href="https://t.co/n9lES0t8EN"&gt;https://t.co/n9lES0t8EN&lt;/a&gt;&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1682315613467967488?ref_src=twsrc%5Etfw"&gt;July 21, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;</description></item><item><title>ktch：モデルベース形態測定学向けPythonパッケージ</title><link>https://koji.noshita.net/blog/2023/0721-ktch/</link><pubDate>Fri, 21 Jul 2023 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2023/0721-ktch/</guid><description>
&lt;h2&gt;ktch&lt;span class="hx:absolute hx:-mt-20" id="ktch"&gt;&lt;/span&gt;
&lt;a href="#ktch" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;さまざまな階層の「かたち」の定量解析をシンプルかつ手軽に実施できる環境の実現を目指し，開発を進めているPythonパッケージ &lt;a href="https://doc.ktch.dev/"target="_blank" rel="noopener"&gt;ktch&lt;/a&gt; を公開しました．&lt;/p&gt;
&lt;p&gt;現時点では，標識点ベース形態測定学の一般化プロクラステス解析，輪郭ベース形態測定学の楕円フーリエ解析（あと球面調和関数解析の係数からの形状再構築部分）を実装しています．
今後も開発を進めて，球面調和関数解析，確率分布ベース，deformable shape，パーシステントホモロジー解析を活用した手法，理論形態モデルなどの実装を進め，多様なモダリティの「かたち」の定量解析の実現を目指します．&lt;/p&gt;
&lt;p&gt;RのMomocs，geomorph，shapesなど既に幾何学的形態測定学関連の解析ツールは存在していますが，それぞれ独自のデータ構造やインターフェースをベースにしており，データのやり取りが（個人的には）煩雑でした．
インタラクティブな解析はPythonでやることが多いという事情もあり，scikit-learn APIを採用して他のツールでの可視化や統計解析，機械学習モデルの開発へ展開し易いようにしました．
データもNumPyの多次元配列やPandasのデータフレームを前提としているので，Pythonのデータ解析の基盤の上に「かたち」の数理解析システムを構築するイメージです．&lt;/p&gt;
&lt;p&gt;&lt;a href="https://doc.ktch.dev/notebooks/index.html"target="_blank" rel="noopener"&gt;サンプルノートブック&lt;/a&gt;も少しづつ増やして解析の流れをカタログ化していこうと思っています．&lt;/p&gt;
&lt;p&gt;フィードバック歓迎です！ 何かお気づきの点があればGitHubで&lt;a href="https://github.com/noshita/ktch/issues"target="_blank" rel="noopener"&gt;issue&lt;/a&gt;を投げて頂けると嬉しいです．&lt;/p&gt;
&lt;h2&gt;Tweetのまとめ&lt;span class="hx:absolute hx:-mt-20" id="tweetのまとめ"&gt;&lt;/span&gt;
&lt;a href="#tweet%e3%81%ae%e3%81%be%e3%81%a8%e3%82%81" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="ja" dir="ltr"&gt;形態測定学向けPythonパッケージ ktchを公開しました🚀．&lt;br&gt;さまざまな「かたち」の定量解析をシンプルかつ手軽に実施できる環境の実現を目指し，引き続き開発を進めていきます！&lt;br&gt;ドキュメント：&lt;a href="https://t.co/ZtSB0rNmP9"&gt;https://t.co/ZtSB0rNmP9&lt;/a&gt;&lt;br&gt;GitHubレポジトリ：&lt;a href="https://t.co/ayZUZr4xb4"&gt;https://t.co/ayZUZr4xb4&lt;/a&gt;&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1677167441586327552?ref_src=twsrc%5Etfw"&gt;July 7, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;主に以下の２点を重視しています．１．様々な階層の「かたち」の定量解析を統一的なフレームワークで実施できる環境を作る．２．scikit-learn API互換．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1677167966419578880?ref_src=twsrc%5Etfw"&gt;July 7, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;１．様々な階層の「かたち」の定量解析．現状では，の一般化プロクラステス解析（標識点ベース），楕円フーリエ解析（輪郭ベース）を実装しています．これらは主に形態や形状という位置・向き（・サイズ）に依らない対象の性質を定量化できますが，「かたち」にはより多様な側面が存在します．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1677167968256675840?ref_src=twsrc%5Etfw"&gt;July 7, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;今後は，各解析方法の機能強化に加えて，球面調和関数解析，確率分布ベース，deformable shape，パーシステントホモロジー解析を活用した手法，理論形態モデルなどの実装を進め，多様なモダリティの「かたち」の定量解析の実現を目指します．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1677167969485615105?ref_src=twsrc%5Etfw"&gt;July 7, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;２．scikit-learn API互換．Pythonでの機械学習パッケージとしてデファクトスタンダードのscikit-learnのAPIに基づき開発しています．fit, transform, inverse_transformなどの馴染みのあるインターフェースから「かたち」に関連したデータを解析できます．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1677167970844577792?ref_src=twsrc%5Etfw"&gt;July 7, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;RのMomocs，geomorph，shapesなど既に幾何学的形態測定学関連の解析ツールは存在していますが，それぞれ独自のデータ構造やインターフェースをベースにしており，データのやり取りが個人的には煩雑でした．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1677167972434202624?ref_src=twsrc%5Etfw"&gt;July 7, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;そこで整備されているインターフェースとしてscikit-learn APIを採用し，データもNumPyの多次元配列やPandasのデータフレームを前提とし他のツールでの可視化や統計解析，機械学習モデルの開発へ展開し易いようにしました．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1677167973793169409?ref_src=twsrc%5Etfw"&gt;July 7, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;scikit-learn scikit-learnを使ったことがある人は自然に使えると思います．使い方はこんな感じ．&lt;a href="https://t.co/6b04SffuBQ"&gt;https://t.co/6b04SffuBQ&lt;/a&gt;&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1677167975215009792?ref_src=twsrc%5Etfw"&gt;July 7, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;絶賛開発中なので，バグを見つけたり，ドキュメントの記述が不足している箇所・不正確な箇所を見つけたりした際にはissueを投げていただけると助かります．機能追加についてのフィードバックも歓迎です（追加の保証はできませんが）． &lt;a href="https://t.co/kK4ESyuX5W"&gt;https://t.co/kK4ESyuX5W&lt;/a&gt;&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1677167977584791552?ref_src=twsrc%5Etfw"&gt;July 7, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;試して頂けると嬉しいです！！&lt;br&gt;「かたち」の定量解析をやる仲間が増えるといいなー．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1677167979413508096?ref_src=twsrc%5Etfw"&gt;July 7, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;</description></item><item><title>論文が出版されました Araki and Noshita (2023) Evolution</title><link>https://koji.noshita.net/blog/2023/0709-araki-noshita-2023-evolution/</link><pubDate>Sun, 09 Jul 2023 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2023/0709-araki-noshita-2023-evolution/</guid><description>
&lt;p&gt;&lt;a href="https://orcid.org/0000-0001-9531-2303"target="_blank" rel="noopener"&gt;荒木さん&lt;/a&gt;との共同研究が論文になりました！&lt;/p&gt;
&lt;p&gt;Araki, A., Noshita, K.* Theoretical morphological analysis of differential morphospace occupation patterns for terrestrial and aquatic gastropods. &lt;em&gt;Evolution&lt;/em&gt; (2023). &lt;a href="https://doi.org/10.1093/evolut/qpad110"target="_blank" rel="noopener"&gt;https://doi.org/10.1093/evolut/qpad110&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Tweetのまとめ&lt;span class="hx:absolute hx:-mt-20" id="tweetのまとめ"&gt;&lt;/span&gt;
&lt;a href="#tweet%e3%81%ae%e3%81%be%e3%81%a8%e3%82%81" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Twitterでざっくりした解説をしましたのでまとめておきます．&lt;/p&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p lang="ja" dir="ltr"&gt;論文が出版されました！荒木さん（&lt;a href="https://t.co/7ccxvpMsTM"&gt;https://t.co/7ccxvpMsTM&lt;/a&gt;）との共同研究です．&lt;br&gt;&lt;br&gt;Theoretical morphological analysis of differential morphospace occupation patterns for terrestrial and aquatic gastropods &lt;a href="https://t.co/CW8HHsi114"&gt;https://t.co/CW8HHsi114&lt;/a&gt;&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1673912039255994368?ref_src=twsrc%5Etfw"&gt;June 28, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none" data-theme="light"&gt;&lt;p lang="ja" dir="ltr"&gt;腹足類（巻貝）の殻形態が陸棲と水棲で異なる形態空間占有パターンを示すことを博物館標本の計測から明らかにし，&lt;br&gt;その差がなぜ生じたかを理論形態学的な解析により検討しました．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1673912040757555201?ref_src=twsrc%5Etfw"&gt;June 28, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;生物の形態はそのデータが分布する空間（形態空間）の全域には分布せず，偏った占有パターンを示すことが多いことが知られています．&lt;br&gt;機能的要請，生息環境，発生的・構造的・系統的制約の下での進化プロセスによって，こうした形態的多様性がかたちづくられてきたためと考えられています．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1673912042078765056?ref_src=twsrc%5Etfw"&gt;June 28, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;本研究では，陸棲種が水棲種よりも高い殻口の傾きを示すことを明らかにしました．&lt;br&gt;この差は，陸棲種の二峰分布の一方のピークの存在と，螺塔が高くない場合でも低い殻口の傾きをもつ種が水棲種に一定数観察されることの両方により生じています．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1673912044792446977?ref_src=twsrc%5Etfw"&gt;June 28, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;この生息環境に対する異なる形態空間占有パターンの違いが生まれた究極要因を明らかにするため，殻形態の理論形態モデルであるRaupのモデル（の拡張版）を用いて，&lt;br&gt;様々な螺塔の高さと殻口の傾きをもつ仮想的な殻形態を生成し，解析をおこないました．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1673912046210134017?ref_src=twsrc%5Etfw"&gt;June 28, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;理論モデルに基づき，「殻の不安定性」と「投影面積」を計算し，機能性の指標としました．&lt;br&gt;その際に，二通りの仮想的な姿勢を仮定し，より機能的な姿勢を採用することにしました．&lt;br&gt;その結果，陸棲種が安定かつ投影面積の小さい（邪魔になりにくい）殻をもつ傾向があることが明らかになりました．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1673912047531331585?ref_src=twsrc%5Etfw"&gt;June 28, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;一方で，なぜ螺塔が高くない場合でも低い殻口の傾きをもつ水棲種が一定数観察されるのかは機能的な殻形態の観点からは説明できませんでした．&lt;br&gt;この螺塔が高くない場合でも低い殻口の傾きをもつ形態空間の領域では，成長方向を接地面に垂直にする姿勢でより機能的になります．&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1673912048898674689?ref_src=twsrc%5Etfw"&gt;June 28, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;そこで，機能的制約が陸棲種に比べ水棲種で緩く，水棲種は成長などに有利と考えられる姿勢を取ることができるのではないか，&lt;br&gt;またその結果として形態空間占有パターンの違いが生じたのではないかという仮説を提案しました．&lt;br&gt;（今後飼育実験や野外調査で検証されると嬉しいです．）&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1673912050303791106?ref_src=twsrc%5Etfw"&gt;June 28, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;形態空間という解析ツール上に色々な情報を集約することでこうした結果が見えてきました．&lt;br&gt;うまく使えば（可視化だけじゃない）強力なツールになると考えています．&lt;br&gt;ぜひ皆さん形態空間解析やっていきましょう！！&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1673912051750797314?ref_src=twsrc%5Etfw"&gt;June 28, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;blockquote class="twitter-tweet" data-conversation="none"&gt;&lt;p lang="ja" dir="ltr"&gt;余談ですが，Advance Articlesの中でVermeij先生の&amp;quot;隣&amp;quot;になって，密かに嬉しかったです． &lt;a href="https://t.co/no4z6qdGga"&gt;pic.twitter.com/no4z6qdGga&lt;/a&gt;&lt;/p&gt;&amp;mdash; 野下 浩司 / Noshita, Koji (@noshitakoji) &lt;a href="https://twitter.com/noshitakoji/status/1673912053113954305?ref_src=twsrc%5Etfw"&gt;June 28, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;</description></item><item><title>WebページのためのSSLクライアント認証の設定</title><link>https://koji.noshita.net/blog/2023/0601-ssl-client/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2023/0601-ssl-client/</guid><description>
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Webページへのアクセス制限をSSLクライアント認証でおこないたい&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;現状は以下の通り．&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Webサーバーには&lt;a href="https://httpd.apache.org/"target="_blank" rel="noopener"&gt;Apache&lt;/a&gt;を利用&lt;/li&gt;
&lt;li&gt;対象のページは&lt;a href="https://letsencrypt.org/"target="_blank" rel="noopener"&gt;Let&amp;rsquo;s Encrypt&lt;/a&gt;で発行されたSSLサーバ証明書を利用してhttps化されている&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;2については，オレオレ証明書を使うとiOS端末では&lt;code&gt;NSURLErrorDomain&lt;/code&gt;エラーがでて表示できない（PCの場合ではブラウザに認証局追加する必要がある）ので，素直にLet&amp;rsquo;s Encryptを使うのが良い．&lt;/p&gt;
&lt;h2&gt;SSLクライアント認証によるアクセス制限&lt;span class="hx:absolute hx:-mt-20" id="sslクライアント認証によるアクセス制限"&gt;&lt;/span&gt;
&lt;a href="#ssl%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e8%aa%8d%e8%a8%bc%e3%81%ab%e3%82%88%e3%82%8b%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e5%88%b6%e9%99%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;鍵や証明書のファイル形式については&lt;a href="https://qiita.com/kunichiko/items/12cbccaadcbf41c72735"target="_blank" rel="noopener"&gt;RSA鍵、証明書のファイルフォーマットについて | Qiita&lt;/a&gt;などを参照．&lt;/p&gt;
&lt;p&gt;今回は以下のようにする．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;XXX.key クライアント秘密鍵&lt;/li&gt;
&lt;li&gt;XXX.csr クライアント証明書要求&lt;/li&gt;
&lt;li&gt;XXX.crt クライアント証明書&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;クライアントには以下のファイルを設定することになる．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;XXX.p12 クライアント証明書とクライアント秘密鍵をまとめたPKCS#12&lt;/li&gt;
&lt;li&gt;XXX.mobileconfig iOS/iPadOSデバイス向けのプロファイル&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CA関係の以下のファイルは作成済みとする．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CA_PATH/ca.key 中間CA証明書秘密鍵&lt;/li&gt;
&lt;li&gt;CA_PATH/ca.crt 中間CA証明書&lt;/li&gt;
&lt;li&gt;CA_PATH/ca.srl シリアル番号&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;クライアント証明書の作成&lt;span class="hx:absolute hx:-mt-20" id="クライアント証明書の作成"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e8%a8%bc%e6%98%8e%e6%9b%b8%e3%81%ae%e4%bd%9c%e6%88%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;クライアント秘密鍵&lt;span class="hx:absolute hx:-mt-20" id="クライアント秘密鍵"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e7%a7%98%e5%af%86%e9%8d%b5" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl genrsa -out XXX.key&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;クライアント証明書要求&lt;span class="hx:absolute hx:-mt-20" id="クライアント証明書要求"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e8%a8%bc%e6%98%8e%e6%9b%b8%e8%a6%81%e6%b1%82" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl req -new -days &lt;span class="m"&gt;180&lt;/span&gt; -key XXX.key -out XXX.csr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;ここでは有効期限を180日としている．&lt;/p&gt;
&lt;h3&gt;クライアント証明書へ署名&lt;span class="hx:absolute hx:-mt-20" id="クライアント証明書へ署名"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e8%a8%bc%e6%98%8e%e6%9b%b8%e3%81%b8%e7%bd%b2%e5%90%8d" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;中間CA秘密鍵で署名する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl x509 -req -days &lt;span class="m"&gt;180&lt;/span&gt; -in XXX.csr -CA CA_PATH/ca.crt -CAkey CA_PATH/private/ca.key -CAcreateserial -CAserial CA_PATH/ca.srl --out XXX.crt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;ここでは有効期限を180日としている．&lt;/p&gt;
&lt;h3&gt;PKCS#12&lt;span class="hx:absolute hx:-mt-20" id="pkcs12"&gt;&lt;/span&gt;
&lt;a href="#pkcs12" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ブラウザなどへインポートするために，クライアント証明書とクライアント秘密鍵をPKCS#12ファイルへまとめる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl pkcs12 -export -in XXX.crt -inkey XXX.key -out XXX.p12&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;クライアント証明書の設置&lt;span class="hx:absolute hx:-mt-20" id="クライアント証明書の設置"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e8%a8%bc%e6%98%8e%e6%9b%b8%e3%81%ae%e8%a8%ad%e7%bd%ae" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Firefox&lt;span class="hx:absolute hx:-mt-20" id="firefox"&gt;&lt;/span&gt;
&lt;a href="#firefox" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;XXX.p12&lt;/code&gt;を読み込む．&lt;/p&gt;
&lt;h3&gt;iOS&lt;span class="hx:absolute hx:-mt-20" id="ios"&gt;&lt;/span&gt;
&lt;a href="#ios" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h4&gt;プロファイルの作成&lt;span class="hx:absolute hx:-mt-20" id="プロファイルの作成"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%97%e3%83%ad%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e4%bd%9c%e6%88%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;a href="https://support.apple.com/ja-jp/apple-configurator"target="_blank" rel="noopener"&gt;Apple Configurator&lt;/a&gt;を使ってiOS向けのプロファイル（.mobileconfigファイル）を作成する．&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;「新規プロファイル」でプロファイル編集ウィンドウを新たに開く．&lt;/li&gt;
&lt;li&gt;「一般」タブ
&lt;ul&gt;
&lt;li&gt;名前&lt;/li&gt;
&lt;li&gt;組織（つけたければ）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;「証明書」
&lt;ul&gt;
&lt;li&gt;「構成」から先程作成した.p12ファイルを読み込む&lt;/li&gt;
&lt;li&gt;作成時に設定したパスワードを入力&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;保存&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;XXX.mobileconfig&lt;/code&gt;ファイルが作成される&lt;/p&gt;
&lt;h4&gt;プロファイルのインストール&lt;span class="hx:absolute hx:-mt-20" id="プロファイルのインストール"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%97%e3%83%ad%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;メールなどで送り，インストール．&lt;/p&gt;
&lt;p&gt;iOS/iPadOSデバイス側では.mobileconfigファイルをメール（公式）もしくはSafariで開く必要があるので注意．&lt;/p&gt;
&lt;h2&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.konekuri.com/87/"target="_blank" rel="noopener"&gt;Let’s Encryptと自己認証局でクライアント証明書接続 | こねくりブログ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kanasys.com/tech/47"target="_blank" rel="noopener"&gt;iPhone/iPad等iOSに自己署名オレオレCA証明書からサーバー/クライアント証明書を署名しインストールする(2017/4/29更新) | 節約テクノロジ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ozuma.hatenablog.jp/entry/20130511/1368284304"target="_blank" rel="noopener"&gt;オレオレ証明書をopensslで作る（詳細版）| ろば電子が詰まつてゐる&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.openssl.org/docs/manmaster/man1/"target="_blank" rel="noopener"&gt;OpenSSL commands | OpenSSL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Let's Encrypt ワイルドカード証明書の更新</title><link>https://koji.noshita.net/blog/2022/0803-lets-encrypt-update/</link><pubDate>Wed, 03 Aug 2022 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2022/0803-lets-encrypt-update/</guid><description>
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Let&amp;rsquo;s Encryptのワイルドカード証明書を更新したい．&lt;/p&gt;
&lt;p&gt;既にワイルドカードでの証明書発行済みとする．&lt;/p&gt;
&lt;h2&gt;更新&lt;span class="hx:absolute hx:-mt-20" id="更新"&gt;&lt;/span&gt;
&lt;a href="#%e6%9b%b4%e6%96%b0" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;証明書の発行&lt;span class="hx:absolute hx:-mt-20" id="証明書の発行"&gt;&lt;/span&gt;
&lt;a href="#%e8%a8%bc%e6%98%8e%e6%9b%b8%e3%81%ae%e7%99%ba%e8%a1%8c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo certbot certonly --manual &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --preferred-challenges dns-01 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --server https://acme-v02.api.letsencrypt.org/directory &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -m XXX@XXX.XXX &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d yyy.yyy &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s2"&gt;&amp;#34;*.yyy.yyy&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;XXX@XXX.XXX&lt;/code&gt;はメールアドレス，&lt;code&gt;yyy.yyy&lt;/code&gt;が対象となるドメイン．&lt;/p&gt;
&lt;p&gt;以下が，表示される．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Saving debug log to /var/log/letsencrypt/letsencrypt.log
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Plugins selected: Authenticator manual, Installer None
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cert is due &lt;span class="k"&gt;for&lt;/span&gt; renewal, auto-renewing...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Renewing an existing certificate
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Performing the following challenges:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dns-01 challenge &lt;span class="k"&gt;for&lt;/span&gt; yyy.yyy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dns-01 challenge &lt;span class="k"&gt;for&lt;/span&gt; yyy.yyy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NOTE: The IP of this machine will be publicly logged as having requested this
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;certificate. If you&lt;span class="s1"&gt;&amp;#39;re running certbot in manual mode on a machine that is not
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;your server, please ensure you&amp;#39;&lt;/span&gt;re okay with that.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Are you OK with your IP being logged?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;(&lt;/span&gt;Y&lt;span class="o"&gt;)&lt;/span&gt;es/&lt;span class="o"&gt;(&lt;/span&gt;N&lt;span class="o"&gt;)&lt;/span&gt;o: Y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please deploy a DNS TXT record under the name
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;_acme-challenge.yage.info with the following value:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Before continuing, verify the record is deployed.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Press Enter to Continue&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;ここではまだEnterは押さず，DNSレコードの設定とその確認をおこなう．&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ&lt;/code&gt;は実行毎に異なる．&lt;/p&gt;
&lt;h4&gt;DNSレコードの設定と確認&lt;span class="hx:absolute hx:-mt-20" id="dnsレコードの設定と確認"&gt;&lt;/span&gt;
&lt;a href="#dns%e3%83%ac%e3%82%b3%e3%83%bc%e3%83%89%e3%81%ae%e8%a8%ad%e5%ae%9a%e3%81%a8%e7%a2%ba%e8%aa%8d" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;DNSサーバーで&lt;code&gt;_acme-challenge.yyy.yyy&lt;/code&gt;のTXTレコードに&lt;code&gt;ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ&lt;/code&gt;を設定する．&lt;/p&gt;
&lt;p&gt;その後，以下のコマンドで先程の値が反映されたかを確認する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nslookup -type&lt;span class="o"&gt;=&lt;/span&gt;txt _acme-challenge.yyy.yyy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;確認できたら，Enterを押し，処理をすすめる．&lt;/p&gt;
&lt;p&gt;問題がなければ，証明書が更新される．&lt;/p&gt;
&lt;p&gt;証明書更新後はwebサーバを再起動する．&lt;/p&gt;</description></item><item><title>最近のtips 2022.03</title><link>https://koji.noshita.net/blog/2022/0316-tips/</link><pubDate>Wed, 16 Mar 2022 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2022/0316-tips/</guid><description>
&lt;h2&gt;Ubuntuの再起動が要求される際に原因を確認する&lt;span class="hx:absolute hx:-mt-20" id="ubuntuの再起動が要求される際に原因を確認する"&gt;&lt;/span&gt;
&lt;a href="#ubuntu%e3%81%ae%e5%86%8d%e8%b5%b7%e5%8b%95%e3%81%8c%e8%a6%81%e6%b1%82%e3%81%95%e3%82%8c%e3%82%8b%e9%9a%9b%e3%81%ab%e5%8e%9f%e5%9b%a0%e3%82%92%e7%a2%ba%e8%aa%8d%e3%81%99%e3%82%8b" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Ubuntuマシンにログインした際に，&lt;code&gt;*** System restart required ***&lt;/code&gt;と表示されることがある．
普段はあまり気にせず再起動していたが，何が原因か知りたい．&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/var/run/reboot-required&lt;/code&gt;の有無により，システムは通知を出しているらしい．&lt;/p&gt;
&lt;p&gt;また，&lt;code&gt;/var/run/reboot-required.pkgs&lt;/code&gt;に再起動を要求しているパッケージのリストが格納されているので，この中身を確認すれば少し情報が得られる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat /var/run/reboot-required.pkgs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://askubuntu.com/questions/164/how-can-i-tell-from-the-command-line-whether-the-machine-requires-a-reboot"target="_blank" rel="noopener"&gt;How can I tell, from the command line, whether the machine requires a reboot? | Ask Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yakutatatips.hatenablog.com/entry/2020/07/15/160025"target="_blank" rel="noopener"&gt;Ubuntuが再起動要求してきたときの原因 | 役に立ちそうもないTips移転版&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>最近のtips 2022.01</title><link>https://koji.noshita.net/blog/2022/0113-tips/</link><pubDate>Thu, 13 Jan 2022 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2022/0113-tips/</guid><description>
&lt;h2&gt;macOS Finderでのパスのコピー&lt;span class="hx:absolute hx:-mt-20" id="macos-finderでのパスのコピー"&gt;&lt;/span&gt;
&lt;a href="#macos-finder%e3%81%a7%e3%81%ae%e3%83%91%e3%82%b9%e3%81%ae%e3%82%b3%e3%83%94%e3%83%bc" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Finderでパスをコピーしたいファイル/ディレクトリを右クリック&lt;/li&gt;
&lt;li&gt;&lt;code&gt;⌥ option&lt;/code&gt;を押すと表示が切り替わる &lt;code&gt;コピー&lt;/code&gt; → &lt;code&gt;&amp;quot;~&amp;quot;のパス名をコピー&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;これをクリックすればパスがコピーされる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;macOS Finderでのファイル/ディレクトリのカット&amp;amp;ペースト&lt;span class="hx:absolute hx:-mt-20" id="macos-finderでのファイルディレクトリのカットペースト"&gt;&lt;/span&gt;
&lt;a href="#macos-finder%e3%81%a7%e3%81%ae%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e3%81%ae%e3%82%ab%e3%83%83%e3%83%88%e3%83%9a%e3%83%bc%e3%82%b9%e3%83%88" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;対象のファイル/ディレクトリを&lt;code&gt;⌘ command&lt;/code&gt;+&lt;code&gt;C&lt;/code&gt;でコピー&lt;/li&gt;
&lt;li&gt;ペースト先で，&lt;code&gt;⌘ command&lt;/code&gt;+&lt;code&gt;⌥ option&lt;/code&gt;+&lt;code&gt;V&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;これでソースのファイル/ディレクトリが消えて，ペーストされる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;ownCloud/Nextcloudでの&lt;code&gt;423 Locked&lt;/code&gt;による同期エラーの解決&lt;span class="hx:absolute hx:-mt-20" id="owncloudnextcloudでの423-lockedによる同期エラーの解決"&gt;&lt;/span&gt;
&lt;a href="#owncloudnextcloud%e3%81%a7%e3%81%ae423-locked%e3%81%ab%e3%82%88%e3%82%8b%e5%90%8c%e6%9c%9f%e3%82%a8%e3%83%a9%e3%83%bc%e3%81%ae%e8%a7%a3%e6%b1%ba" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ownCloud/Nextcloudのクライアントでファイルの同期を行っている際に，
&lt;code&gt;423 Locked&lt;/code&gt;でエラーが返り，いくつかのファイルの動機が完了しないケースがあった．&lt;/p&gt;
&lt;p&gt;どうやらサーバー側での問題らしいので，データベースを直接弄って対応する．&lt;/p&gt;
&lt;h3&gt;ownCloud/Nextcloudをメンテナンスモードに変更&lt;span class="hx:absolute hx:-mt-20" id="owncloudnextcloudをメンテナンスモードに変更"&gt;&lt;/span&gt;
&lt;a href="#owncloudnextcloud%e3%82%92%e3%83%a1%e3%83%b3%e3%83%86%e3%83%8a%e3%83%b3%e3%82%b9%e3%83%a2%e3%83%bc%e3%83%89%e3%81%ab%e5%a4%89%e6%9b%b4" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ownCloud/Nextcloudを配置しているディレクトリに移動してoccを使う&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo -u www-data php occ maintenance:mode --on&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;データベースからロックテーブルのレコードを削除&lt;span class="hx:absolute hx:-mt-20" id="データベースからロックテーブルのレコードを削除"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9%e3%81%8b%e3%82%89%e3%83%ad%e3%83%83%e3%82%af%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%81%ae%e3%83%ac%e3%82%b3%e3%83%bc%e3%83%89%e3%82%92%e5%89%8a%e9%99%a4" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# データベース（MySQL/MariaDB）にログイン&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;oc_file_locks&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;exit&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;DATABASE&lt;/code&gt;は利用しているデータベース名．&lt;/p&gt;
&lt;h3&gt;ownCloud/Nextcloudのメンテナンスモードを解除&lt;span class="hx:absolute hx:-mt-20" id="owncloudnextcloudのメンテナンスモードを解除"&gt;&lt;/span&gt;
&lt;a href="#owncloudnextcloud%e3%81%ae%e3%83%a1%e3%83%b3%e3%83%86%e3%83%8a%e3%83%b3%e3%82%b9%e3%83%a2%e3%83%bc%e3%83%89%e3%82%92%e8%a7%a3%e9%99%a4" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo -u www-data php occ maintenance:mode --off&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;クライアントが再接続された際に，同期される．&lt;/p&gt;
&lt;p&gt;参考：&lt;a href="https://arimasou16.com/blog/2018/02/16/00247/"target="_blank" rel="noopener"&gt;ownCloudが、Server replied &amp;ldquo;423 Locked&amp;rdquo;&amp;hellip;で同期エラーとなるのを解消する |有馬総一郎のブログ&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;FreeDOSのシャットダウン&lt;span class="hx:absolute hx:-mt-20" id="freedosのシャットダウン"&gt;&lt;/span&gt;
&lt;a href="#freedos%e3%81%ae%e3%82%b7%e3%83%a3%e3%83%83%e3%83%88%e3%83%80%e3%82%a6%e3%83%b3" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Ctr + Alt + Del&lt;/p&gt;
&lt;h2&gt;&lt;code&gt;ERROR: Insufficient PCI Resources Detected!!!&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="error-insufficient-pci-resources-detected"&gt;&lt;/span&gt;
&lt;a href="#error-insufficient-pci-resources-detected" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;前提&lt;span class="hx:absolute hx:-mt-20" id="前提"&gt;&lt;/span&gt;
&lt;a href="#%e5%89%8d%e6%8f%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Supermicro X10DAi/Cのファームウェアアップデート後に以下のエラーが出た．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;
PCI OUT OF RESOURCES CONDITION:
Error: Insufficient PCI Resources Detected!!!
System is running with Insufficient PCI Resources!
In order to display this message some
PCI devices were set to disabled state!
It is strongly recommended to Power Off the system and remove some PCI/PCI Express cards from the system!
To continue booting, proceed to &amp;lt;Save &amp;amp; Exit&amp;gt; Menu Option and select Boot Device or &amp;lt;Discard Changes and Exit&amp;gt;.
WARNING: If you choose to continue booting some Operating Systems might not be able to complete boot correctly!&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;対応&lt;span class="hx:absolute hx:-mt-20" id="対応"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%be%e5%bf%9c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Advanced&amp;gt;PCI/PnP Configuration&lt;/code&gt;で&lt;code&gt;Abobe 4G Decoding&lt;/code&gt;を&lt;code&gt;Enable&lt;/code&gt;にすることで対応．&lt;/p&gt;
&lt;h3&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://qiita.com/Taroi_Japanista/items/a48bf5d3e52956c00b32"target="_blank" rel="noopener"&gt;起動時のInsufficient PCI Resources Detected | Qiita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.supermicro.com/support/faqs/faq.cfm?faq=15556"target="_blank" rel="noopener"&gt;Online Support | Supermicro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Ricty系フォントのバックチックを修正する</title><link>https://koji.noshita.net/blog/2021/0721-ricty-backtick/</link><pubDate>Wed, 21 Jul 2021 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2021/0721-ricty-backtick/</guid><description>
&lt;h2&gt;問題&lt;span class="hx:absolute hx:-mt-20" id="問題"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%8f%e9%a1%8c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;（多分）macOSをBig Surに更新した後から，Sublime TextやVSCodeでバックチック（`）が文字に被って表示されるようになってしまった．
Ricty系のフォントを使っていたのが問題らしい．&lt;/p&gt;
&lt;p&gt;とりあえず，Ricty系をしばらくは使いたいので修正する．メンテされていないようなのでいずれは他のフォントへ変えた方が良いのかも知れない．&lt;/p&gt;
&lt;h3&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://qiita.com/uKLEina/items/ff0877871fc425952b92#comment-74375ba083e256f6c787"target="_blank" rel="noopener"&gt;Rictyのバッククオートを修正する&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zenn.dev/konboi/articles/6dcd22f4e77c175653ed"target="_blank" rel="noopener"&gt;Rictyのバッククォートが被るのを修正しようとしたら少し嵌った話&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rictyfonts.github.io/"target="_blank" rel="noopener"&gt;プログラミング用フォント Ricty&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;FontForgeとRicty Diminishedのインストール&lt;span class="hx:absolute hx:-mt-20" id="fontforgeとricty-diminishedのインストール"&gt;&lt;/span&gt;
&lt;a href="#fontforge%e3%81%a8ricty-diminished%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;homebrewで&lt;a href="https://fontforge.org"target="_blank" rel="noopener"&gt;FontForge&lt;/a&gt;と&lt;a href="https://rictyfonts.github.io/diminished"target="_blank" rel="noopener"&gt;Ricty Diminished&lt;/a&gt;をインストールする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install fontforge font-ricty-diminished&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;FontForgeで修正&lt;span class="hx:absolute hx:-mt-20" id="fontforgeで修正"&gt;&lt;/span&gt;
&lt;a href="#fontforge%e3%81%a7%e4%bf%ae%e6%ad%a3" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;フォントの修正用のFontForgeスクリプトを作成．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# cvt_rity.pe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Open&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Select&lt;span class="o"&gt;(&lt;/span&gt;0u0060&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SetGlyphClass&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;base&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Generate&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;スクリプトファイルの権限を設定．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod a+x cvt_ricty.pe&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;フォントファイルそれぞれに対し，作成したスクリプトを適用させる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;find /Users/&lt;span class="o"&gt;[&lt;/span&gt;USERNAME&lt;span class="o"&gt;]&lt;/span&gt;/Library/Fonts -name &lt;span class="s2"&gt;&amp;#34;RictyDiminished*.ttf&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; xargs -I &lt;span class="o"&gt;{}&lt;/span&gt; fontforge -lang ff -script cvt_ricty.pe &lt;span class="o"&gt;{}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;[USERNAME]&lt;/code&gt;はユーザー名．&lt;/p&gt;
&lt;p&gt;これで修正された．&lt;/p&gt;</description></item><item><title>Webブラウザのキーボードショートカットを変更する</title><link>https://koji.noshita.net/blog/2021/0503-brower-keyboard-shortcuts/</link><pubDate>Mon, 03 May 2021 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2021/0503-brower-keyboard-shortcuts/</guid><description>
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;FirefoxやChromeのタブ移動のショートカットキーを変更してターミナルの挙動と合わせたい．&lt;/p&gt;
&lt;p&gt;macOSの場合，デフォルトでは Command (⌘) + shift ⇧ + 左右キー (←→) でターミナルのタブを移動できる．
この挙動にWebブラウザの挙動を合わせる．&lt;/p&gt;
&lt;p&gt;FirefoxやChromeでは，タブ移動は Command (⌘) + Option (⌥) + 左右キー (←→) がデフォルト．
これを変更したい．&lt;/p&gt;
&lt;h2&gt;Firefox&lt;span class="hx:absolute hx:-mt-20" id="firefox"&gt;&lt;/span&gt;
&lt;a href="#firefox" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;macOS側で設定できなかったので&lt;a href="https://www.shortkeys.app/"target="_blank" rel="noopener"&gt;Shortkeys&lt;/a&gt;を使う．
ただし，webサイトを開いているタブ上でだけ有効なので，新しいタブやFirefoxの設定を開いているタブでは機能しない．
おとなしくCommand + Optionを使うべきかもしれないが，しばらくShortkeysを試す．&lt;/p&gt;
&lt;h3&gt;アドオンを追加 → ショートカットキーの設定&lt;span class="hx:absolute hx:-mt-20" id="アドオンを追加--ショートカットキーの設定"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%a2%e3%83%89%e3%82%aa%e3%83%b3%e3%82%92%e8%bf%bd%e5%8a%a0--%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%ab%e3%83%83%e3%83%88%e3%82%ad%e3%83%bc%e3%81%ae%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下のものを追加．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Shortcut: &lt;code&gt;command+shift+left&lt;/code&gt;，Behavior: &lt;code&gt;Previous tab&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Shortcut: &lt;code&gt;command+shift+right&lt;/code&gt;，Behavior: &lt;code&gt;Next tab&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;全てのサイトで有効化する．&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2021/browser-keyboard-shortcuts/shortkeys_01.png"
alt="Shortkeys" width="600px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;設定ファイルのやり取り&lt;span class="hx:absolute hx:-mt-20" id="設定ファイルのやり取り"&gt;&lt;/span&gt;
&lt;a href="#%e8%a8%ad%e5%ae%9a%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e3%82%84%e3%82%8a%e5%8f%96%e3%82%8a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Import，Exportも可能．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;key&amp;#34;: &amp;#34;command+shift+left&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;action&amp;#34;: &amp;#34;prevtab&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;label&amp;#34;: &amp;#34;Privious tab&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;sites&amp;#34;: &amp;#34;&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;sitesArray&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ],
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;activeInInputs&amp;#34;: true,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;blacklist&amp;#34;: false
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;key&amp;#34;: &amp;#34;command+shift+right&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;action&amp;#34;: &amp;#34;nexttab&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;label&amp;#34;: &amp;#34;Next tab&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;sites&amp;#34;: &amp;#34;&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;sitesArray&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ],
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;activeInInputs&amp;#34;: true,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;blacklist&amp;#34;: false
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2021/browser-keyboard-shortcuts/shortkeys_02.png"
alt="Shortkeys Export" width="600px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Chrome&lt;span class="hx:absolute hx:-mt-20" id="chrome"&gt;&lt;/span&gt;
&lt;a href="#chrome" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;macOS側でショットカットキーを変更できるのでこちらを使う．&lt;/p&gt;
&lt;h3&gt;システム環境設定 → キーボード → ショートカット → アプリケーション&lt;span class="hx:absolute hx:-mt-20" id="システム環境設定--キーボード--ショートカット--アプリケーション"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%e7%92%b0%e5%a2%83%e8%a8%ad%e5%ae%9a--%e3%82%ad%e3%83%bc%e3%83%9c%e3%83%bc%e3%83%89--%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%ab%e3%83%83%e3%83%88--%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2021/browser-keyboard-shortcuts/macos_shortcuts.png"
alt="macOS Chrome shortcuts" width="600px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;新しいショートカットを追加（+）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;アプリケーション：&lt;code&gt;Google Chrome&lt;/code&gt;，メニュータイトル：&lt;code&gt;次のタブを選択&lt;/code&gt;，キーボードショートカット：&lt;code&gt;⇧⌘→&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;アプリケーション：&lt;code&gt;Google Chrome&lt;/code&gt;，メニュータイトル：&lt;code&gt;前のタブを選択&lt;/code&gt;，キーボードショートカット：&lt;code&gt;⇧⌘←&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.shortkeys.app/"target="_blank" rel="noopener"&gt;Shortkeys&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/mikecrittenden/shortkeys"target="_blank" rel="noopener"&gt;Shortkeys | Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/shortkeys/"target="_blank" rel="noopener"&gt;Shortkeys (Custom Keyboard Shortcuts) for Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mikecrittenden/shortkeys/wiki/How-To-Use-Shortkeys"target="_blank" rel="noopener"&gt;How To Use Shortkeys&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://toripiyo.hatenablog.com/entry/2020/01/27/223934"target="_blank" rel="noopener"&gt;Mac Chromeのタブ切り替えのショートカットキーをカスタマイズする | TORIPIYO DIARY&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://support.apple.com/ja-jp/guide/mac-help/mchlp2271/mac"target="_blank" rel="noopener"&gt;Macでアプリケーションのキーボードショートカットを作成する | macOSユーザーガイド&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>最近のtips 2020.04</title><link>https://koji.noshita.net/blog/2020/0403-tips/</link><pubDate>Fri, 03 Apr 2020 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2020/0403-tips/</guid><description>
&lt;h2&gt;Ubuntu 18.04 LTSでTLD .localは名前解決できない．&lt;span class="hx:absolute hx:-mt-20" id="ubuntu-1804-ltsでtld-localは名前解決できない"&gt;&lt;/span&gt;
&lt;a href="#ubuntu-1804-lts%e3%81%a7tld-local%e3%81%af%e5%90%8d%e5%89%8d%e8%a7%a3%e6%b1%ba%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%84" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;研究室内DNSサーバーで.localを使ってたら，Ubuntu 18.04 LTSから名前解決できなかった．
基本的に，TLDとして.localを使うことは推奨されていない（Active Directoryで良くないことが起こるらしい）．&lt;/p&gt;
&lt;p&gt;Ubuntu 18.04 LTSからはsystemd-resolvedの仕様で使えない．
これを機にTLDを変更することにした．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;参考
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://qiita.com/isobecky74/items/f4d453861cba684f43b3"target="_blank" rel="noopener"&gt;[AWS]Ubuntu18.04などでlocal TLDが名前解決できない問題 | Qiita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.d-wood.com/blog/2018/10/26_10573.html"target="_blank" rel="noopener"&gt;[Server &amp;amp; Network General] トップレベルドメインに .dev や .local は使ってはいけない&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>最近のtips 2019.10</title><link>https://koji.noshita.net/blog/2019/1004-tips/</link><pubDate>Fri, 04 Oct 2019 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2019/1004-tips/</guid><description>
&lt;h2&gt;Fiji（ImageJ）での顕微鏡画像のマージ&lt;span class="hx:absolute hx:-mt-20" id="fijiimagejでの顕微鏡画像のマージ"&gt;&lt;/span&gt;
&lt;a href="#fijiimagej%e3%81%a7%e3%81%ae%e9%a1%95%e5%be%ae%e9%8f%a1%e7%94%bb%e5%83%8f%e3%81%ae%e3%83%9e%e3%83%bc%e3%82%b8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;染色画像をマージしたいときの作業．&lt;/p&gt;
&lt;p&gt;それぞれの染色画像を読み込み．&lt;/p&gt;
&lt;p&gt;Image → Color → Merge&lt;/p&gt;
&lt;p&gt;それぞれの画像をどれに割り当てるかを指定．&lt;/p&gt;
&lt;h2&gt;Homebrewでパッケージ更新時の&lt;code&gt;RuntimeError: cmake not present or broken&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="homebrewでパッケージ更新時のruntimeerror-cmake-not-present-or-broken"&gt;&lt;/span&gt;
&lt;a href="#homebrew%e3%81%a7%e3%83%91%e3%83%83%e3%82%b1%e3%83%bc%e3%82%b8%e6%9b%b4%e6%96%b0%e6%99%82%e3%81%aeruntimeerror-cmake-not-present-or-broken" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Homebrewでパッケージ更新をおこなうと以下のようなエラーが出た．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;gt;&amp;gt; brew upgrade
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Error: An exception occurred whithin a child process:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; RuntimeError: PATH_TO_HOMEBREW/opt/cmake not present or broken
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Please reinstall cmake. Sorry :&lt;span class="o"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;cmakeを再インストールして，再度upgradeを試すが同様のエラーが発生．&lt;/p&gt;
&lt;p&gt;一旦，unlinkして再度linkすれば良いらしい．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;参考
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://kanashimichiraura.hatenadiary.jp/entry/2016/10/31/012509"target="_blank" rel="noopener"&gt;MacOS入れ直したらbrew upgradeでエラーが出るようになった&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;gt;&amp;gt; brew unlink cmake
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Unlinking PATH_TO_HOMEBREW/Cellar/cmake/3.15.3... &lt;span class="m"&gt;0&lt;/span&gt; symlinks removed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;&amp;gt;&amp;gt; brew link cmake
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Linking PATH_TO_HOMEBREW/Cellar/cmake/3.15.3... &lt;span class="m"&gt;455&lt;/span&gt; symlinks created&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;どうもcmakeのsymlinkがなくなっていたっぽい？&lt;/p&gt;
&lt;h2&gt;Pipenvでのローカルな環境変数の定義&lt;span class="hx:absolute hx:-mt-20" id="pipenvでのローカルな環境変数の定義"&gt;&lt;/span&gt;
&lt;a href="#pipenv%e3%81%a7%e3%81%ae%e3%83%ad%e3%83%bc%e3%82%ab%e3%83%ab%e3%81%aa%e7%92%b0%e5%a2%83%e5%a4%89%e6%95%b0%e3%81%ae%e5%ae%9a%e7%be%a9" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;.env&lt;/code&gt;ファイルをプロジェクトのルートに配置することで，
自動的にローカルな環境変数を読み込むことができる．&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.env&lt;/code&gt;をバージョン管理システムへコミットすることは非推奨．
APIキーとかに利用できる．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;参考
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pipenv-ja.readthedocs.io/ja/translate-ja/advanced.html#automatic-loading-of-env"target="_blank" rel="noopener"&gt;.env の自動読み込み|Pipenv公式ドキュメント&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;code&gt;mkdir&lt;/code&gt;コマンドで連番ディレクトリ作成&lt;span class="hx:absolute hx:-mt-20" id="mkdirコマンドで連番ディレクトリ作成"&gt;&lt;/span&gt;
&lt;a href="#mkdir%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%81%a7%e9%80%a3%e7%95%aa%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e4%bd%9c%e6%88%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1 - 20までのディレクトリ作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir &lt;span class="o"&gt;{&lt;/span&gt;1..20&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# prefixやsuffixがある場合でも可能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 0埋めもできる&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir Num_&lt;span class="o"&gt;{&lt;/span&gt;005..015&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# アルファベットでも連番作成可能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ここではa - eを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir &lt;span class="o"&gt;{&lt;/span&gt;a..e&lt;span class="o"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;参考
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blanche-toile.com/tools/useful-commands-mkdir-touch"target="_blank" rel="noopener"&gt;複数のフォルダやファイルを一括で作成する便利なコマンドの使い方とテクニック&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://qiita.com/tzono/items/ba79e5abbe629a8586f3"target="_blank" rel="noopener"&gt;linuxで連番のディレクトリを一括で作る方法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>最近のtips 2019.08</title><link>https://koji.noshita.net/blog/2019/0814-tips/</link><pubDate>Wed, 14 Aug 2019 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2019/0814-tips/</guid><description>
&lt;h2&gt;MathJaxでの数式の参照&lt;span class="hx:absolute hx:-mt-20" id="mathjaxでの数式の参照"&gt;&lt;/span&gt;
&lt;a href="#mathjax%e3%81%a7%e3%81%ae%e6%95%b0%e5%bc%8f%e3%81%ae%e5%8f%82%e7%85%a7" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;MathJaxで数式を参照するときは数式番号（や記号）を&lt;code&gt;tag&lt;/code&gt;でつける．
（&lt;code&gt;autoNumber&lt;/code&gt;が&lt;code&gt;AMS&lt;/code&gt;か&lt;code&gt;all&lt;/code&gt;に設定されているなら必要ないが，デフォルトだと&lt;code&gt;none&lt;/code&gt;）&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-LaTeX" data-lang="LaTeX"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sb"&gt;$$&lt;/span&gt;&lt;span class="nb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;\frac&lt;/span&gt;&lt;span class="nb"&gt;{dx}{dt} &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt; a x &lt;/span&gt;&lt;span class="nv"&gt;\label&lt;/span&gt;&lt;span class="nb"&gt;{eq:expgrowth}&lt;/span&gt;&lt;span class="nv"&gt;\tag&lt;/span&gt;&lt;span class="nb"&gt;{&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="nb"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;$$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;式（&lt;span class="s"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;\ref&lt;/span&gt;&lt;span class="nb"&gt;{eq:expgrowth}&lt;/span&gt;&lt;span class="s"&gt;$&lt;/span&gt;）は...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;これで以下のようになる．&lt;/p&gt;
&lt;p&gt;$$
\frac{dx}{dt} = a x \label{eq:expgrowth}\tag{1}
$$&lt;/p&gt;
&lt;p&gt;式（$\ref{eq:expgrowth}$）は&amp;hellip;&lt;/p&gt;</description></item><item><title>"巻き"の理論形態モデル（１）：対数らせんモデル</title><link>https://koji.noshita.net/blog/2019/0718-logarithmic-spiral-model/</link><pubDate>Thu, 18 Jul 2019 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2019/0718-logarithmic-spiral-model/</guid><description>
&lt;h2&gt;&amp;ldquo;巻き&amp;quot;の数理モデル&lt;span class="hx:absolute hx:-mt-20" id="巻きの数理モデル"&gt;&lt;/span&gt;
&lt;a href="#%e5%b7%bb%e3%81%8d%e3%81%ae%e6%95%b0%e7%90%86%e3%83%a2%e3%83%87%e3%83%ab" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;　これから数回に分けて&amp;quot;巻き&amp;quot;の理論形態モデルをいくつか紹介したい．
基本的には，&lt;a href="http://www.jsmb.jp/newsletter/backnumbers/NL-83.pdf"target="_blank" rel="noopener"&gt;数理生物学会ニュースレターの第83号&lt;/a&gt;の野下(2017)の内容をベースにするつもりだが，追加の内容を盛り込んだり，図を増やしたり，サンプルコードを公開したりする予定．&lt;/p&gt;
&lt;h2&gt;貝殻と付加成長&lt;span class="hx:absolute hx:-mt-20" id="貝殻と付加成長"&gt;&lt;/span&gt;
&lt;a href="#%e8%b2%9d%e6%ae%bb%e3%81%a8%e4%bb%98%e5%8a%a0%e6%88%90%e9%95%b7" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;　基本的に軟体動物のつくる貝殻を想定してモデルを紹介していく．
最終的には紹介するモデルは，より一般の３次元的な管状構造（&amp;ldquo;太さを持った空間曲線&amp;rdquo;）や付加成長する物体についても拡張できるのだが，
当面は貝殻のかたちと成長を記述するモデルとしての側面から紹介していきたい．&lt;/p&gt;
&lt;p&gt;　まず軟体動物の貝殻がどのように作られるのかを確認したい．
軟体動物の殻は，炭酸カルシウムを主な成分として生物が自身でつくる生体鉱物（biomineral）である．
内臓塊を覆う器官である外套膜の辺縁部（外套膜縁）で，
まず有機物からなる膜状構造（殻皮）を殻表面に形成し，これを基質に炭酸カルシウムの結晶を沈着させ殻層が成長してゆく．&lt;/p&gt;
&lt;p&gt;このように殻口の&amp;quot;縁&amp;rdquo; へ少しづつ沈着させることで殻を成長させる「付加成長」と呼ばれる成長様式をとる．&lt;/p&gt;
&lt;p&gt;例えば腹足類の場合は，巻きの中心に対して殻口の外側が内側に対して大きく成長することで，殻が巻くことになる（図1）．&lt;/p&gt;
&lt;p&gt;これから紹介していくモデルは，この形作りの仮定を（程度の差はあるが）反映している．&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/blog/2019/0718-logarithmic-spiral-model/accretionary-growth.png"
alt="図1. 付加成長と成長勾配" width="200px"&gt;&lt;figcaption&gt;
&lt;p&gt;図1. 腹足類の場合，巻きの中心に対して殻口の外側が内側に対して大きく成長することで，殻が巻く．&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/center&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;対数らせんモデル logarithmic spiral model&lt;span class="hx:absolute hx:-mt-20" id="対数らせんモデル-logarithmic-spiral-model"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%be%e6%95%b0%e3%82%89%e3%81%9b%e3%82%93%e3%83%a2%e3%83%87%e3%83%ab-logarithmic-spiral-model" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最もシンプルな巻きパタンのモデルとして対数らせんモデル&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;から見ていこう．&lt;/p&gt;
&lt;p&gt;ここでは極座標系を考えて，動径$r$と偏角$\theta$に以下の関係があるとしよう．
$$
\begin{equation}
\frac{d r}{d \theta} = \alpha r(\theta) \label{eq:ls}\tag{1}
\end{equation}
$$&lt;/p&gt;
&lt;p&gt;$\alpha$は成長率を定めるパラメータである．
$r$（巻きの中心から殻口の端までの長さ）がある種の体サイズを表していると考えれば，その成長速度は体サイズに比例することを表現している&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;．&lt;/p&gt;
&lt;p&gt;式（\ref{eq:ls}）を初期条件$r(0) = r_0$として解けば，
$$
r(\theta) = r_0 e^{\alpha \theta} \label{eq:lssol}\tag{2}
$$
となり，この平面曲線は対数らせんとなる．&lt;/p&gt;
&lt;p&gt;成長率を定めるパラメータ$\alpha$を変化させると様々な巻きパタンを描ける（図2）．&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/blog/2019/0718-logarithmic-spiral-model/overview-01.png"
alt="図2. 対数らせんモデル" width="800px"&gt;&lt;figcaption&gt;
&lt;p&gt;図2. 対数らせんモデルで表現できる平面的な巻きパタン．巻きパタンは$\alpha$によって決まる．&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;!-- ### 自然界に存在する（かもしれない）対数らせん
$\alpha = \frac{1}{2 \pi}\log{\frac{1+\sqrt{5}}{2}}$のとき，いわゆる黄金らせん（golden spiral）になる．
オウムガイの断面が黄金らせんに近いという話もあるが，実際のところは怪しい． --&gt;
&lt;h2&gt;サンプルコード&lt;span class="hx:absolute hx:-mt-20" id="サンプルコード"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab%e3%82%b3%e3%83%bc%e3%83%89" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;実際に動かしてみたい方はサンプルノートブックをダウンロードして or Colab上で試してみて！&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/noshita/theoretical-morphology-examples/blob/master/coiling/logarithmic-spiral-model/logarithmic_spiral_model.ipynb"target="_blank" rel="noopener"&gt;&lt;img src="https://img.shields.io/badge/GitHub-Jupyter%20Notebook%20%28Python%29-F37626.svg?logo=GitHub" alt="" loading="lazy" /&gt;&lt;/a&gt;
&lt;a href="http://colab.research.google.com/github/noshita/theoretical-morphology-examples/blob/master/coiling/logarithmic-spiral-model/logarithmic_spiral_model.ipynb"target="_blank" rel="noopener"&gt;&lt;img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab" loading="lazy" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;問題点を発見した場合はissueの投稿をお願いします:bow:
&lt;a href="https://github.com/noshita/theoretical-morphology-examples/issues"target="_blank" rel="noopener"&gt;&lt;img src="https://img.shields.io/github/issues-raw/noshita/theoretical-morphology-examples.svg" alt="" loading="lazy" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;次回予告&lt;span class="hx:absolute hx:-mt-20" id="次回予告"&gt;&lt;/span&gt;
&lt;a href="#%e6%ac%a1%e5%9b%9e%e4%ba%88%e5%91%8a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;対数らせんモデルはなかなかに多様な巻きパタンを記述できることがわかった．
しかし，やはり太さを持った管である螺管が３次元的に巻いている実際の貝殻を記述するにはいささか表現力が足りない．&lt;/p&gt;
&lt;p&gt;次回は，理論形態学という分野が生まれる契機となったRaupのモデルについて紹介したい．&lt;/p&gt;
&lt;h2 class="unnumbered"&gt;参考文献&lt;span class="hx:absolute hx:-mt-20" id="参考文献"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83%e6%96%87%e7%8c%ae" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul id="refs" class="references"&gt;
&lt;li id="ref-Moseley:1838jo"&gt;Moseley H, 1838. XVII. On the geometrical forms of turbinated and discoid shells. Philosophical Transactions of the Royal Society of London 128, 351–370. https://doi.org/10.1098/rstl.1838.0018
&lt;/li&gt;
&lt;li id="ref-thompson1992"&gt;Thompson D’Arcy Wentworth, 1992. On Growth and Form, Revised. ed. Dover Publications, New York.
&lt;/li&gt;
&lt;li id="ref-thompson1942"&gt;Thompson D’Arcy Wentworth, 1942. On Growth and Form, 2nd ed. Cambridge University Press.
&lt;/li&gt;
&lt;li id="ref-野下2017"&gt;野下浩司, 2017. 巻きの理論形態モデル：有殻軟体動物を例に. 日本数理生物学会ニュースレター 83, 19–23.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;D&amp;rsquo;Arcy W. Thompsonによる古典的マスターピース「On Growth and Form」においては等角らせん（equiangular spiral）として言及されている(Thompson, 1992, 1942)．巻貝などの巻き方を対数らせんモデルに基づき理解しようとする試みは古く，Moseley (1838)まで遡ることができる．&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;このモデル（\ref{eq:ls}）は指数成長モデルと同じかたち．&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>QNAP Cloud Drive Syncが起動しない場合の対処</title><link>https://koji.noshita.net/blog/2019/0711-qnap-sync-stuck/</link><pubDate>Thu, 11 Jul 2019 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2019/0711-qnap-sync-stuck/</guid><description>
&lt;h2&gt;状況&lt;span class="hx:absolute hx:-mt-20" id="状況"&gt;&lt;/span&gt;
&lt;a href="#%e7%8a%b6%e6%b3%81" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.qnap.com/"target="_blank" rel="noopener"&gt;QNAP&lt;/a&gt;のNAS（QTS 4.3系列）を利用&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.qnap.com/en/app_releasenotes/list.php?app_choose=CloudDriveSync"target="_blank" rel="noopener"&gt;Cloud Drive Sync&lt;/a&gt;を使ってDropboxと同期
&lt;ul&gt;
&lt;li&gt;一般ユーザーで同期ジョブを設定&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cloud Drive Syncを起動しようとするが，「Loading data, please wait &amp;hellip;」と表示されて操作できない&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;対処&lt;span class="hx:absolute hx:-mt-20" id="対処"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%be%e5%87%a6" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://forum.qnap.com/viewtopic.php?t=134211#p629711"target="_blank" rel="noopener"&gt;[SOLVED] Hybrid Backup Sync no longer launching after firmware 4.3.3.0238&lt;/a&gt;を参考にした．
こちらは&lt;a href="https://www.qnap.com/ja-jp/app_releasenotes/list.php?p=2&amp;amp;app_choose=HybridBackup"target="_blank" rel="noopener"&gt;Hybrid Backup Sync&lt;/a&gt;のケースだが，同様の方法で回復した．&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;AppCenterからCloud Drive Syncを探す&lt;/li&gt;
&lt;li&gt;Cloud Drive Syncを「停止」&lt;/li&gt;
&lt;li&gt;再度，Cloud Drive Syncを「開始」&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これで同期ジョブが動き出した．
ただし，AppCenterからの操作は管理者アカウントで行う必要があるので注意が必要．&lt;/p&gt;
&lt;p&gt;これでしばらく様子見．&lt;/p&gt;</description></item><item><title>インストール済みWindows10でのOEMパーティションの削除と作成</title><link>https://koji.noshita.net/blog/2019/0511-oempartition/</link><pubDate>Sat, 11 May 2019 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2019/0511-oempartition/</guid><description>
&lt;h2&gt;前提，あるいは起こった悲劇&lt;span class="hx:absolute hx:-mt-20" id="前提あるいは起こった悲劇"&gt;&lt;/span&gt;
&lt;a href="#%e5%89%8d%e6%8f%90%e3%81%82%e3%82%8b%e3%81%84%e3%81%af%e8%b5%b7%e3%81%93%e3%81%a3%e3%81%9f%e6%82%b2%e5%8a%87" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Windows10とUbuntu16.04LTSのデュアルブート環境を利用していた．
Windows10の大型アップデート後にOEMパーティションが想定外のところに作成されたらしく，ブートローダが消えたり，Ubuntuにログインできなくなったり（こちらはOEMパーティションのせいではない？）した．&lt;/p&gt;
&lt;p&gt;復旧を試みブートローダを再導入したが，ログイン画面には辿り着くがログインできず．Ubuntu内には特に重要なデータは保存していなかったので再度セットアップすることにした．しかし，SSDの後方50GBぐらいの位置にOEMパーティションが作成されていたため，このままでは中途半端な領域しか確保できない．&lt;/p&gt;
&lt;p&gt;OEMパーティションをWindowsのすぐ後ろに移動させたくなった．そして，どうせなら再度Windowsの大型アップデートによる悲劇を起こさないよう，十分な容量をもったOEMパーティションを確保することにした．&lt;/p&gt;
&lt;p&gt;現状は&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntuのパーティションは削除済み&lt;/li&gt;
&lt;li&gt;OEMパーティションが前方と後方に２つある&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;で，こんな感じ．&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2019/0511-partition/01_old.png"
alt="old" width="600px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;用語など&lt;span class="hx:absolute hx:-mt-20" id="用語など"&gt;&lt;/span&gt;
&lt;a href="#%e7%94%a8%e8%aa%9e%e3%81%aa%e3%81%a9" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;OEM：original equipment manufacturer．WindowsのOEMパーティションにはシステムのリカバリに関する情報が保存されいる．&lt;/li&gt;
&lt;li&gt;大型アップデートでOEMパーティションが作成される：既存のOEMパーティションが不十分な場合に新たにOEMパーティションが作成される．デフォルトではディスクの先頭に500MB程度が割り当てられている．しかし，最近の大型アップデート時には800MB以上の領域が必要になるようで，OEMパーティションが足りない→新しいパーティション作成，という流れ．&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これを&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2019/0511-partition/01_old.png"
alt="old" width="600px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;こうして&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2019/0511-partition/02_new.png"
alt="new" width="600px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;最終的に確保した領域にもう一度Ubuntuをインストールしたい．&lt;/p&gt;
&lt;p&gt;既存のOEMパーティションに保存されている内容は復旧しなくていいことにする．&lt;/p&gt;
&lt;h2&gt;既存のOEMパーティションの削除（と全体の調整）&lt;span class="hx:absolute hx:-mt-20" id="既存のoemパーティションの削除と全体の調整"&gt;&lt;/span&gt;
&lt;a href="#%e6%97%a2%e5%ad%98%e3%81%aeoem%e3%83%91%e3%83%bc%e3%83%86%e3%82%a3%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e5%89%8a%e9%99%a4%e3%81%a8%e5%85%a8%e4%bd%93%e3%81%ae%e8%aa%bf%e6%95%b4" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Windowsにはディスクドライブを管理するGUIツールとして，&lt;code&gt;ディスクの管理&lt;/code&gt;（&lt;code&gt;diskmgmt.msc&lt;/code&gt;）がある．しかし，OEMパーティションはこちらからは削除できない．&lt;code&gt;diskpart&lt;/code&gt;を使って作業することになる．&lt;/p&gt;
&lt;p&gt;&lt;code&gt;diskpart&lt;/code&gt;を利用する場合には管理者権限が必要になる．コマンドプロンプトから&lt;code&gt;diskpart&lt;/code&gt;と入力すると管理者権限が求められるので，了承すると別ウィンドウで&lt;code&gt;diskpart.exe&lt;/code&gt;が起動する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-PowerShell" data-lang="PowerShell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## ディスクの一覧表示&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="n"&gt;disk&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## 操作するディスクの選択&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;select &lt;/span&gt;&lt;span class="n"&gt;disk&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ディスク番号&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## パーティションの一覧表示&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="n"&gt;partition&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;削除したいパーティションを選択して，削除する．これを削除したいパーティションすべてに対しておこなう．
今回は２つあるOEMパーティションの両方を削除した．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-PowerShell" data-lang="PowerShell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## 削除したいパーティションの選択&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;select &lt;/span&gt;&lt;span class="n"&gt;partition&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;パーティション番号&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## パーティションの削除&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;delete&lt;/span&gt; &lt;span class="n"&gt;partition&lt;/span&gt; &lt;span class="n"&gt;override&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;override&lt;/code&gt;は保護されたパーティションを削除する際（&lt;code&gt;force protected パラメーターを設定しないと、保護されたパーティションは削除できません。&lt;/code&gt;というエラーが出る場合）に必要．&lt;/p&gt;
&lt;p&gt;これで&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2019/0511-partition/03_delete.png"
alt="delete" width="600px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;となっていれば良い．他にいらないパーティションが残っていればそれも削除する．今回は，Ubuntuのパーティションも削除した（こちらはディスク管理から削除できる）．&lt;/p&gt;
&lt;h2&gt;新しいOEMパーティションの作成&lt;span class="hx:absolute hx:-mt-20" id="新しいoemパーティションの作成"&gt;&lt;/span&gt;
&lt;a href="#%e6%96%b0%e3%81%97%e3%81%84oem%e3%83%91%e3%83%bc%e3%83%86%e3%82%a3%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e4%bd%9c%e6%88%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;引き続き&lt;code&gt;diskpart&lt;/code&gt;コマンドを使って作業していく．事前に適切なボリュームを選択しているものとする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-PowerShell" data-lang="PowerShell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## パーティションの作成（今回はサイズ4GB）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;create&lt;/span&gt; &lt;span class="n"&gt;partition&lt;/span&gt; &lt;span class="n"&gt;primary&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;4000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## フォーマット&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;format&lt;/span&gt; &lt;span class="n"&gt;quick&lt;/span&gt; &lt;span class="n"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ntfs&lt;/span&gt; &lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Recovery tools&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## 一時的にボリュームキャラクタを割り当てる&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;assign&lt;/span&gt; &lt;span class="n"&gt;letter&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;R&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## パーティションの種類を設定する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;de94bba4-06d1-4d40-a16a-bfd50179d6ac&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## GPT属性を割り当てる&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# GPT_ATTRIBUTE_PLATFORM_REQUIRED (0x1)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER (0x8000000000000000)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# これらの組み合わせ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gpt&lt;/span&gt; &lt;span class="n"&gt;attributes&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;0x8000000000000001&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ### ちょっと詰まったところ：再起動するとボリュームキャラクターが復活してマウントされる
`diskpart`の`remove`でボリュームキャラクターを削除しても，PCを再起動するとボリュームキャラクターが復活してマウントされてします．OEMは通常は見えないでほしい． --&gt;
&lt;p&gt;これで，&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2019/0511-partition/04_OEM.png"
alt="OEM" width="600px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;のようになっていれば完了．&lt;/p&gt;
&lt;p&gt;あとはUbuntuをインストールするだけ．今回はついでにUbuntu18.04LST（デスクトップ版）に切り替えた．
これで今後はOEM領域について悩まされないで済むと嬉しい．要経過観察．&lt;/p&gt;
&lt;h2&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://decomo.info/wiki/pc/windows_manually_partitioning_using_diskpart_in_install_time"target="_blank" rel="noopener"&gt;Windowsインストール時にdiskpartで手動でパーティションを作る|クソゲ〜製作所&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://niisan.blog.shinobi.jp/Entry/179/"target="_blank" rel="noopener"&gt;Win8からWin8.1へのアップデートで回復パーティションが２つできるを一応解決してみた|Niisanの波乱万丈記・・・&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://eng-notebook.com/blog-entry-165/"target="_blank" rel="noopener"&gt;diskpartコマンドで「force protected パラメーターを設定しないと、保護されたパーティションは削除できません」と表示された場合の対処方法|Engineer&amp;rsquo;s Notebook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://eng-notebook.com/blog-entry-166/"target="_blank" rel="noopener"&gt;OEMパーティションなどの保護パーティションを削除する方法|Engineer&amp;rsquo;s Notebook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://thinkpadweb.com/oem%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/"target="_blank" rel="noopener"&gt;OEMパーティションを削除する方法|ThinkPadWeb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cs.tohoku-gakuin.ac.jp/~otofuji/ETC/Win-System/Appendix/diskpart-man.html"target="_blank" rel="noopener"&gt;DiskPart のコマンド ライン オプション&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/ja-JP/windows-hardware/manufacture/desktop/configure-uefigpt-based-hard-drive-partitions"target="_blank" rel="noopener"&gt;UEFI/GPT ベースのハード ドライブ パーティション|Microsoft Hardware Dev Center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn898536.aspx"target="_blank" rel="noopener"&gt;Windows RE の展開|Microsoft Hardware Dev Center&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>数理生物学演習（2019年度）向けVS Code環境構築</title><link>https://koji.noshita.net/blog/2019/0407-envvscode2019/</link><pubDate>Sun, 07 Apr 2019 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2019/0407-envvscode2019/</guid><description>
&lt;h2&gt;Visual Studio Code（VS Code）の導入&lt;span class="hx:absolute hx:-mt-20" id="visual-studio-codevs-codeの導入"&gt;&lt;/span&gt;
&lt;a href="#visual-studio-codevs-code%e3%81%ae%e5%b0%8e%e5%85%a5" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://code.visualstudio.com/"target="_blank" rel="noopener"&gt;VS Code&lt;/a&gt;はMicrosoftが開発しているオープンソースのプログラミング向けテキストエディタ．
プログラミングに必要な機能が充実しており比較的軽量．&lt;/p&gt;
&lt;p&gt;本演習では，ソースコードを編集する場合に利用するが，それほど使用頻度は高くないかも（主にノートブック形式で演習を進めていくため）．
ただ，ないといざというとき困るのでインストールしておくこと．&lt;/p&gt;
&lt;p&gt;公式ドキュメントを読むのがベスト．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/setup/setup-overview"target="_blank" rel="noopener"&gt;Setting up Visual Studio Code&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/setup/windows"target="_blank" rel="noopener"&gt;Visual Studio Code on Windows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/setup/mac"target="_blank" rel="noopener"&gt;Visual Studio Code on macOS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ダウンロード&lt;span class="hx:absolute hx:-mt-20" id="ダウンロード"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ダウンロードページ（&lt;a href="https://code.visualstudio.com/Download"target="_blank" rel="noopener"&gt;Download Visual Studio Code&lt;/a&gt;）から自分のOSに合ったインストーラーもしくはファイルをダウンロードする．&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2019/0407-envVSCode2019/vscode_download_01.png"
alt="VSCode" width="600px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;インストール Windows&lt;span class="hx:absolute hx:-mt-20" id="インストール-windows"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab-windows" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;ダウンロードしたインストーラー（&lt;code&gt;VSCodeUserSetup-{version}.exe&lt;/code&gt;）を実行する（&lt;code&gt;{version}&lt;/code&gt;はダウンロードした時期により異なる）．
&lt;ol&gt;
&lt;li&gt;Visual Studio Code セットアップウィザード：「次へ」をクリック.&lt;/li&gt;
&lt;li&gt;使用許諾契約書の同意：確認して問題がなければ「同意する」にチェックを入れて，「次へ」をクリック．&lt;/li&gt;
&lt;li&gt;インストール先の指定：デフォルトでは&lt;code&gt;C:\users\{username}\AppData\Local\Programs\Microsoft VS Code&lt;/code&gt;．問題があれば変更する（通常はそのままでOK）．&lt;/li&gt;
&lt;li&gt;プログラムグループの指定：「次へ」をクリック.&lt;/li&gt;
&lt;li&gt;追加タスクの選択：デフォルトでは「PATHへの追加（再起動後に使用可能）」のみにチェックが入っている状態．このままで問題ないが，必要に応じてチェックを入れる．その後，「次へ」をクリック．&lt;/li&gt;
&lt;li&gt;インストール準備完了：設定を確認する．問題がなければ「インストール」をクリック．&lt;/li&gt;
&lt;li&gt;インストール状況：しばし待つ．&lt;/li&gt;
&lt;li&gt;Visual Studio Code セットアップウィザードの完了：「完了」をクリック．「Visual Studio Codeを実行する」にチェックが入っていればVS Codeが起動する．&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2019/0407-envVSCode2019/vscode_win_03.png"
alt="Miniconda" width="600px"&gt;&lt;figcaption&gt;
&lt;p&gt;インストール先の指定（手順３）&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2019/0407-envVSCode2019/vscode_win_05.png"
alt="Miniconda" width="600px"&gt;&lt;figcaption&gt;
&lt;p&gt;追加タスクの選択（手順５）&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;インストール macOS&lt;span class="hx:absolute hx:-mt-20" id="インストール-macos"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab-macos" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;ダウンロードしたファイル（&lt;code&gt;VSCode-darwin-stable.zip&lt;/code&gt;）を解凍し，&lt;code&gt;Visual Studio Code.app&lt;/code&gt;を取り出す．&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Visual Studio Code.app&lt;/code&gt;をアプリケーションフォルダへ移動させる．&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2019/0407-envVSCode2019/vscode_macOS_01.png"
alt="Miniconda" width="300px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;拡張機能（Extensions）の導入&lt;span class="hx:absolute hx:-mt-20" id="拡張機能extensionsの導入"&gt;&lt;/span&gt;
&lt;a href="#%e6%8b%a1%e5%bc%b5%e6%a9%9f%e8%83%bdextensions%e3%81%ae%e5%b0%8e%e5%85%a5" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;VS Codeでは拡張機能を追加して自分にあった開発環境を作ることができる．&lt;/p&gt;
&lt;p&gt;公式ドキュメント：&lt;a href="https://code.visualstudio.com/docs/editor/extension-gallery"target="_blank" rel="noopener"&gt;Extension Marketplace&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;推奨拡張機能&lt;span class="hx:absolute hx:-mt-20" id="推奨拡張機能"&gt;&lt;/span&gt;
&lt;a href="#%e6%8e%a8%e5%a5%a8%e6%8b%a1%e5%bc%b5%e6%a9%9f%e8%83%bd" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本演習では，以下の拡張機能を追加することを推奨する．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/itemdetails?itemName=ms-python.python"target="_blank" rel="noopener"&gt;Python&lt;/a&gt;：Python向けのコードチェック，デバッグ，補完などをサポートする&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons"target="_blank" rel="noopener"&gt;vscode-icons&lt;/a&gt;：エクスプローラー中にディレクトリやファイルなどのアイコンを表示して可視性を上げる&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer"target="_blank" rel="noopener"&gt;Bracket Pair Colorizer&lt;/a&gt;：括弧のペアを色を変えて可視性を上げる&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense"target="_blank" rel="noopener"&gt;Path Intellisense&lt;/a&gt;：パスやファイル名の補完&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;その他&lt;span class="hx:absolute hx:-mt-20" id="その他"&gt;&lt;/span&gt;
&lt;a href="#%e3%81%9d%e3%81%ae%e4%bb%96" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;他にも好みに合わせて以下のような拡張機能を追加しても良い．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=shardulm94.trailing-spaces"target="_blank" rel="noopener"&gt;Trailing Spaces&lt;/a&gt;：行最後のスペースの可視化や削除&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ja"target="_blank" rel="noopener"&gt;Japanese Language Pack for Visual Studio Code&lt;/a&gt;：VS Codeを日本語化する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これら以外にも様々な拡張機能があるので興味のある人は調べて追加してみよう．&lt;/p&gt;
&lt;h2&gt;おまけ&lt;span class="hx:absolute hx:-mt-20" id="おまけ"&gt;&lt;/span&gt;
&lt;a href="#%e3%81%8a%e3%81%be%e3%81%91" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;演習では扱わない内容．興味がある人は色々調べて使いこなそう．&lt;/p&gt;
&lt;h3&gt;VS CodeでJupyter Notebookを使う&lt;span class="hx:absolute hx:-mt-20" id="vs-codeでjupyter-notebookを使う"&gt;&lt;/span&gt;
&lt;a href="#vs-code%e3%81%a7jupyter-notebook%e3%82%92%e4%bd%bf%e3%81%86" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;公式：&lt;a href="https://code.visualstudio.com/docs/python/jupyter-support"target="_blank" rel="noopener"&gt;Working with Jupyter Notebooks in Visual Studio Code&lt;/a&gt;&lt;/p&gt;</description></item><item><title>数理生物学演習（2019年度）向けPython環境構築</title><link>https://koji.noshita.net/blog/2019/0405-envpython2019/</link><pubDate>Fri, 05 Apr 2019 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2019/0405-envpython2019/</guid><description>
&lt;h2&gt;Minicondaの導入&lt;span class="hx:absolute hx:-mt-20" id="minicondaの導入"&gt;&lt;/span&gt;
&lt;a href="#miniconda%e3%81%ae%e5%b0%8e%e5%85%a5" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://docs.conda.io/en/latest/miniconda.html"target="_blank" rel="noopener"&gt;Miniconda&lt;/a&gt;は&lt;a href="https://conda.io/projects/conda/en/latest/#"target="_blank" rel="noopener"&gt;conda&lt;/a&gt;というパッケージマネージャーとPythonを含むディストリビューション．
本演習ではMinicondaを用いてPythonの環境構築をおこない，解析などを進めていく．
導入方法はWindowsとmacOSで若干異なるが，導入後は殆ど同じように使うことが出来る．&lt;/p&gt;
&lt;h3&gt;ダウンロード&lt;span class="hx:absolute hx:-mt-20" id="ダウンロード"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず，&lt;a href="https://conda.io/en/latest/miniconda.html#"target="_blank" rel="noopener"&gt;MinicondaのWebページ&lt;/a&gt;へアクセスし，インストーラをダウンロードする．&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2019/0406-envPython2019/miniconda_download_01.png"
alt="Miniconda" width="600px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;自分のOSに合ったインストーラ（3系列）を選択し，ダウンロードする．&lt;/p&gt;
&lt;h3&gt;インストール Windows&lt;span class="hx:absolute hx:-mt-20" id="インストール-windows"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab-windows" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;ダウンロードしたインストーラー（&lt;code&gt;Miniconda-latest-Windows-x86_64.exe&lt;/code&gt;）を実行する．
&lt;ol&gt;
&lt;li&gt;Welcome to Miniconda3 VERSION (64-bit) Setup（VERSIONは時期により異なる）：「Next」をクリック．&lt;/li&gt;
&lt;li&gt;License Agreement：確認して問題なければ「I Agree」をクリック．&lt;/li&gt;
&lt;li&gt;Select Installation Type：デフォルトでは「Just Me」にチェックが入っている（基本はこれでOK）．&lt;/li&gt;
&lt;li&gt;Choose Install Location：デフォルトでは&lt;code&gt;C:\users\{username}\Miniconda3&lt;/code&gt;にインストールされる．必要に応じて変更しても良い．&lt;/li&gt;
&lt;li&gt;Advanced Install Options：「Register Anaconda as my default Python 3.7」にのみチェックして，「Install」をクリック．&lt;/li&gt;
&lt;li&gt;Installing：しばし待つ．&lt;/li&gt;
&lt;li&gt;Installation Complete：インストールが終了したら「Next」をクリック．&lt;/li&gt;
&lt;li&gt;Thanks for installing Miniconda3!：「Finish」をクリック．&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2019/0406-envPython2019/miniconda_install_win_03.png"
alt="Miniconda" width="600px"&gt;&lt;figcaption&gt;
&lt;p&gt;Select Installation Type（手順３）&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;br /&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/2019/0406-envPython2019/miniconda_install_win_05.png"
alt="Miniconda" width="600px"&gt;&lt;figcaption&gt;
&lt;p&gt;Advanced Install Options（手順５）&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;インストール　macOS&lt;span class="hx:absolute hx:-mt-20" id="インストールmacos"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%abmacos" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;ダウンロードしたインストーラー（&lt;code&gt;Miniconda-latest-MacOSX-x86_64.pkg&lt;/code&gt;）を実行する．
&lt;ol&gt;
&lt;li&gt;ようこそMiniconda3インストーラへ：「続ける」をクリック．&lt;/li&gt;
&lt;li&gt;大切な情報：確認して問題なければ「続ける」をクリック．&lt;/li&gt;
&lt;li&gt;使用許諾契約：確認して問題なければ「続ける」をクリックし，「同意する」をクリック．&lt;/li&gt;
&lt;li&gt;“Machintosh HD”に標準インストール：インストール先を変更したい場合は「インストール先を変更…」から選択．基本的にはそのままでOK．「インストール」をクリック．&lt;/li&gt;
&lt;li&gt;Miniconda3のインストール：しばし待つ．&lt;/li&gt;
&lt;li&gt;インストールが完了しました。：「閉じる」をクリック．&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;最初の設定&lt;span class="hx:absolute hx:-mt-20" id="最初の設定"&gt;&lt;/span&gt;
&lt;a href="#%e6%9c%80%e5%88%9d%e3%81%ae%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;conda及びパッケージの更新&lt;span class="hx:absolute hx:-mt-20" id="conda及びパッケージの更新"&gt;&lt;/span&gt;
&lt;a href="#conda%e5%8f%8a%e3%81%b3%e3%83%91%e3%83%83%e3%82%b1%e3%83%bc%e3%82%b8%e3%81%ae%e6%9b%b4%e6%96%b0" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ターミナル（WindowsではAnaconda Prompt，macOSではターミナル）に以下のコマンドを入力しcondaとインストール済みパッケージを更新する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# condaの更新&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;conda update conda
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;conda update --all
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;conda update -n base conda&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;仮想環境の作成&lt;span class="hx:absolute hx:-mt-20" id="仮想環境の作成"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%ae%e6%83%b3%e7%92%b0%e5%a2%83%e3%81%ae%e4%bd%9c%e6%88%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本演習用の仮想環境を作成する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 仮想環境の作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ここでは「compbio2019」という名前の仮想環境をバージョン3.7で作っている．&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# conda create -n 名前 python=バージョン&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;conda create -n compbio2019 &lt;span class="nv"&gt;python&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3.7&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;確認してみよう．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 仮想環境の一覧&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;conda info -e&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;仮想環境の起動・終了&lt;span class="hx:absolute hx:-mt-20" id="仮想環境の起動終了"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%ae%e6%83%b3%e7%92%b0%e5%a2%83%e3%81%ae%e8%b5%b7%e5%8b%95%e7%b5%82%e4%ba%86" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;作成しただけでは仮想環境は有効化されていない．
以下のコマンドで仮想環境に入ろう．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 仮想環境の起動&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# conda activate 名前&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;conda activate compbio2019&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;仮想環境から抜けたい場合は以下の通り．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 仮想環境の終了&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;conda deactivate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;もし&lt;code&gt;conda&lt;/code&gt;コマンドが見つからないといったメッセージが出た場合は一度ターミナルを終了し，
もう一度仮想環境の起動から試してみよう．それでもうまくいかないときは手を挙げてTAを呼ぼう！&lt;/p&gt;
&lt;h3&gt;パッケージのインストール・更新&lt;span class="hx:absolute hx:-mt-20" id="パッケージのインストール更新"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%91%e3%83%83%e3%82%b1%e3%83%bc%e3%82%b8%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e6%9b%b4%e6%96%b0" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下の作業はすべて，演習用の仮想環境内でおこなう．&lt;/p&gt;
&lt;p&gt;一度，インストール済みのパッケージを更新する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# すべてのパッケージの更新&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;conda update --all&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;その後，今後の演習に必要な基本的なパッケージをインストールする．
ここでは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NumPy: 数値計算&lt;/li&gt;
&lt;li&gt;SciPy: 科学計算関係&lt;/li&gt;
&lt;li&gt;Matplotlib: プロット関係&lt;/li&gt;
&lt;li&gt;Pandas: データ解析関係&lt;/li&gt;
&lt;li&gt;Jupyter: 解析・開発環境関係&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;をインストールする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 必要なパッケージのインストール&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;conda install numpy scipy matplotlib pandas jupyter&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;ここに挙げた以外のパッケージが必要になった場合はその都度指示する．&lt;/p&gt;
&lt;h2&gt;基本的な使い方&lt;span class="hx:absolute hx:-mt-20" id="基本的な使い方"&gt;&lt;/span&gt;
&lt;a href="#%e5%9f%ba%e6%9c%ac%e7%9a%84%e3%81%aa%e4%bd%bf%e3%81%84%e6%96%b9" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Jupyter Notebookの起動・操作&lt;span class="hx:absolute hx:-mt-20" id="jupyter-notebookの起動操作"&gt;&lt;/span&gt;
&lt;a href="#jupyter-notebook%e3%81%ae%e8%b5%b7%e5%8b%95%e6%93%8d%e4%bd%9c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;設定した仮想環境内でJupyter Notebookを起動しよう．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Jupyter Notebook Serverの起動&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;jupyter notebook&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;デフォルトのブラウザ（EdgeとかChromeとかFirefoxとか）が起動し，そこにJupyter Notebookのダッシュボード画面が表示される．Chromeが（他のブラウザに比べて）安定しているようなのでChromeで開くことをおすすめする．&lt;/p&gt;
&lt;p&gt;起動コマンドを実行した場所が表示されるので，演習用のディレクトリへ移動する．&lt;/p&gt;
&lt;p&gt;例えば，~/CompBio2019/01などへ移動する．&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/compbio/env/envPython/Anaconda_usage_ipynb_02.png"
alt="Anaconda" width="600px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;作業を行いたいディレクトリへ移動できたら，ノートブックを作成する．
ダッシュボード画面から New → Python 3と辿り，クリックする．&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/compbio/env/envPython/Anaconda_usage_ipynb_03.png"
alt="Anaconda" width="300px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;新しいタブが開き，そこにノートブック画面が表示される．
ダッシュボードのタブを確認すると Untitled.ipynb というファイルが作成されていることが確認できる．
名前は適宜変更する．&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/compbio/env/envPython/Anaconda_usage_ipynb_04.png"
alt="Anaconda" width="600px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;各セルにコードを打ち込み，Shift + Enterで実行できる．&lt;/p&gt;
&lt;p&gt;In [i]: のセル（iはセルの番号）は入力，それに対応する出力は Out [i]: のセルへ表示される．&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/compbio/env/envPython/Anaconda_usage_ipynb_05.png"
alt="Anaconda" width="600px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;もし途中でブラウザを閉じてしまった場合&lt;span class="hx:absolute hx:-mt-20" id="もし途中でブラウザを閉じてしまった場合"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%82%e3%81%97%e9%80%94%e4%b8%ad%e3%81%a7%e3%83%96%e3%83%a9%e3%82%a6%e3%82%b6%e3%82%92%e9%96%89%e3%81%98%e3%81%a6%e3%81%97%e3%81%be%e3%81%a3%e3%81%9f%e5%a0%b4%e5%90%88" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ターミナルが残っていれば，&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Copy/paste this URL into your browser when you connect &lt;span class="k"&gt;for&lt;/span&gt; the first time.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;to login with a token:&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;以下に表示されているURLをブラウザに入力することで再びダッシュボード画面に入ることができる．&lt;/p&gt;
&lt;p&gt;&lt;figure class="center"&gt;&lt;img src="https://koji.noshita.net/materials/compbio/env/envPython/Anaconda_usage_ipynb_06.png"
alt="Anaconda" width="600px"&gt;
&lt;/figure&gt;
&lt;br /&gt;&lt;/p&gt;</description></item><item><title>CircleCI 2.0への移行</title><link>https://koji.noshita.net/blog/2018/0804-circleci2/</link><pubDate>Sat, 04 Aug 2018 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2018/0804-circleci2/</guid><description>
&lt;h2&gt;前提&lt;span class="hx:absolute hx:-mt-20" id="前提"&gt;&lt;/span&gt;
&lt;a href="#%e5%89%8d%e6%8f%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Webページを静的サイトジェネレータで作成し，Githubで管理して，S3に公開している（&lt;a href="https://koji.noshita.net/blog/2017/0202-webpage/"&gt;参考| Webサイト管理・公開をhugo+GitHub+S3で&lt;/a&gt;）．&lt;/p&gt;
&lt;p&gt;GitHubにpushすると&lt;a href="https://circleci.com/"target="_blank" rel="noopener"&gt;CircleCI&lt;/a&gt;が自動的にビルドとデプロイをするよう設定している．
現状で利用している&lt;code&gt;circle.yml&lt;/code&gt;はこんな感じ．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;checkout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;post&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;git submodule sync&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;git submodule update --init --recursive&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;machine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Asia/Tokyo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;dependencies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;override&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;sudo pip install awscli&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;sudo pip install Pygments&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;sudo pip install pygments-github-lexers&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;go get -v github.com/gohugoio/hugo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;git config --global user.name &amp;#34;noshita&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;git config --global user.email &amp;#34;noshita@morphometrics.jp&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;post&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;aws configure set region us-west-2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;aws configure set preview.cloudfront true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;override&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;echo &amp;#34;Nothing to do here&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;deployment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;production&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;branch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;master&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;hugo --cleanDestinationDir &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;aws s3 sync ~/koji.noshita.net/public/ s3://koji.noshita.net/ --delete&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;aws cloudfront create-invalidation --distribution-id &amp;lt;CloudFront ID&amp;gt; --paths &amp;#39;/*&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;これを&lt;a href="https://circleci.com/blog/sunsetting-1-0/"target="_blank" rel="noopener"&gt;CircleCI 1.0が終了する&lt;/a&gt;ので2.0へ移行することにした．&lt;/p&gt;
&lt;h2&gt;&lt;code&gt;config-translation&lt;/code&gt; APIによる移行&lt;span class="hx:absolute hx:-mt-20" id="config-translation-apiによる移行"&gt;&lt;/span&gt;
&lt;a href="#config-translation-api%e3%81%ab%e3%82%88%e3%82%8b%e7%a7%bb%e8%a1%8c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;CircleCIは1.0から2.0への移行のためのツール&lt;a href="https://circleci.com/docs/2.0/config-translation/"target="_blank" rel="noopener"&gt;&lt;code&gt;config-translation&lt;/code&gt;&lt;/a&gt;を用意してくれている．
今回はAPIから利用した．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; curl &lt;span class="s2"&gt;&amp;#34;https://circleci.com/api/v1.1/project/github/USERNAME/REPOSITORYNAME/config-translation?circle-token=&lt;/span&gt;&lt;span class="nv"&gt;$CIRCLE_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &amp;gt; tmp.yml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;GitHubのユーザー名（&lt;code&gt;USERNAME&lt;/code&gt;），対象となるリポジトリ（&lt;code&gt;REPOSITORYNAME&lt;/code&gt;），&lt;a href="https://circleci.com/docs/2.0/managing-api-tokens/#creating-a-personal-api-token"target="_blank" rel="noopener"&gt;CircleCI API トークン&lt;/a&gt;（&lt;code&gt;CIRCLE_TOKEN&lt;/code&gt;）はそれぞれ自身の環境に合わせたものを利用する．&lt;/p&gt;
&lt;p&gt;ここでは出力結果を&lt;code&gt;tmp.yml&lt;/code&gt;に保存しているので，これを参考にしていく．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# This configuration was automatically generated from a CircleCI 1.0 config.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# It should include any build commands you had along with commands that CircleCI&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# inferred from your project structure. We strongly recommend you read all the&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# comments in this file to understand the structure of CircleCI 2.0, as the idiom&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# for configuration has changed substantially in 2.0 to allow arbitrary jobs rather&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# than the prescribed lifecycle of 1.0. In general, we recommend using this generated&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# configuration as a reference rather than using it in production, though in most&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# cases it should duplicate the execution of your original 1.0 config.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;working_directory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/noshita/koji.noshita.net&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parallelism&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;shell&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/bin/bash --login&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# CircleCI 2.0 does not support environment variables that refer to each other the same way as 1.0 did.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# If any of these refer to each other, rewrite them so that they don&amp;#39;t or see https://circleci.com/docs/2.0/env-vars/#interpolating-environment-variables-to-set-other-environment-variables .&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;CIRCLE_ARTIFACTS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/tmp/circleci-artifacts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;CIRCLE_TEST_REPORTS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/tmp/circleci-test-results&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# In CircleCI 1.0 we used a pre-configured image with a large number of languages and other packages.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# In CircleCI 2.0 you can now specify your own image, or use one of our pre-configured images.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# The following configuration line tells CircleCI to use the specified docker image as the runtime environment for you job.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# We have selected a pre-built image that mirrors the build environment we use on&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# the 1.0 platform, but we recommend you choose an image more tailored to the needs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# of each job. For more information on choosing an image (or alternatively using a&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# VM instead of a container) see https://circleci.com/docs/2.0/executor-types/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# To see the list of pre-built images that CircleCI provides for most common languages see&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# https://circleci.com/docs/2.0/circleci-images/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;docker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;circleci/build-image:ubuntu-14.04-XXL-upstart-1189-5614f37&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/sbin/init&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Machine Setup&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# The following `checkout` command checks out your code to your working directory. In 1.0 we did this implicitly. In 2.0 you can choose where in the course of a job your code should be checked out.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;checkout&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Prepare for artifact and test results collection equivalent to how it was done on 1.0.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# In many cases you can simplify this from what is generated here.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# &amp;#39;See docs on artifact collection here https://circleci.com/docs/2.0/artifacts/&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# This is based on your 1.0 configuration file or project settings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;working_directory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/noshita/koji.noshita.net&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;echo &amp;#39;&amp;#39;Asia/Tokyo&amp;#39;&amp;#39; | sudo tee -a /etc/timezone; sudo dpkg-reconfigure
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; -f noninteractive tzdata; sudo service mysql restart; sudo service postgresql
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; restart; &amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Checkout&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# This would typically go in either a build or a build-and-test job when using workflows&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# This is based on your 1.0 configuration file or project settings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;git submodule sync&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;git submodule update --init --recursive&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Dependencies&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# This would typically go in either a build or a build-and-test job when using workflows&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Restore the dependency cache&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;restore_cache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# This branch if available&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;v1-dep-{{ .Branch }}-&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Default branch if not&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;v1-dep-master-&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Any branch if there are none on the default branch - this should be unnecessary if you have your default branch configured correctly&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;v1-dep-&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# This is based on your 1.0 configuration file or project settings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;go get -v github.com/gohugoio/hugo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;git config --global user.name &amp;#34;noshita&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;git config --global user.email &amp;#34;noshita@morphometrics.jp&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# This is based on your 1.0 configuration file or project settings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sudo pip install awscli&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sudo pip install Pygments&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sudo pip install pygments-github-lexers&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# This is based on your 1.0 configuration file or project settings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aws configure set region us-west-2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aws configure set preview.cloudfront true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Save dependency cache&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;save_cache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1-dep-{{ .Branch }}-{{ epoch }}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# This is a broad list of cache paths to include many possible development environments&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# You can probably delete some of these entries&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;vendor/bundle&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;~/virtualenvs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;~/.m2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;~/.ivy2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;~/.bundle&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;~/.go_workspace&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;~/.gradle&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;~/.cache/bower&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# This would typically be a build job when using workflows, possibly combined with build&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# This is based on your 1.0 configuration file or project settings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;echo &amp;#34;Nothing to do here&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Your existing circle.yml file contains deployment steps.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# The config translation tool does not support translating deployment steps&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# since deployment in CircleCI 2.0 are better handled through workflows.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# See the documentation for more information https://circleci.com/docs/2.0/workflows/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Teardown&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# If you break your build into multiple jobs with workflows, you will probably want to do the parts of this that are relevant in each&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Save test results&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;store_test_results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/tmp/circleci-test-results&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Save artifacts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;store_artifacts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/tmp/circleci-artifacts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;store_artifacts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/tmp/circleci-test-results&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;deployとworkflow&lt;span class="hx:absolute hx:-mt-20" id="deployとworkflow"&gt;&lt;/span&gt;
&lt;a href="#deploy%e3%81%a8workflow" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;概ね自動で変換してくれたが，&lt;code&gt;config-translation&lt;/code&gt;はdeploymentステップはサポートしていないので，追記する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;TZ&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/usr/share/zoneinfo/Asia/Tokyo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;docker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;circleci/python:3.6-stretch&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;working_directory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/noshita/koji.noshita.net&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;attach_workspace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/koji.noshita.net&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Install awscli&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sudo pip install awscli&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aws configure set region us-west-2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aws configure set preview.cloudfront true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deploy to S3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aws s3 sync ~/koji.noshita.net/public/ s3://koji.noshita.net/ --delete&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deploy to CloundFront&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aws cloudfront create-invalidation --distribution-id &amp;lt;CloudFront ID&amp;gt; --paths &amp;#39;/*&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;deployステップはjobs以下に追加する．&lt;/p&gt;
&lt;p&gt;また，CircleCI 2.0で導入された&lt;a href="https://circleci.com/docs/2.0/workflows/"target="_blank" rel="noopener"&gt;workflow&lt;/a&gt;により実行の順序を制御する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;workflows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build-deploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;build&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requires&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;build&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;branches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;only&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;master&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;workflowsは最上位に配置（ネストしない）．&lt;/p&gt;
&lt;h2&gt;docker imageの変更とコンテナをまたいだデータの受け渡し&lt;span class="hx:absolute hx:-mt-20" id="docker-imageの変更とコンテナをまたいだデータの受け渡し"&gt;&lt;/span&gt;
&lt;a href="#docker-image%e3%81%ae%e5%a4%89%e6%9b%b4%e3%81%a8%e3%82%b3%e3%83%b3%e3%83%86%e3%83%8a%e3%82%92%e3%81%be%e3%81%9f%e3%81%84%e3%81%a0%e3%83%87%e3%83%bc%e3%82%bf%e3%81%ae%e5%8f%97%e3%81%91%e6%b8%a1%e3%81%97" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;buildステップで利用するdocker imageをgolang版に変更した．&lt;/p&gt;
&lt;p&gt;また，buildステップとdeployステップで利用するコンテナが異なるので，
ビルドしたwebページ関連のファイルを渡せるように&lt;a href="https://circleci.com/docs/2.0/configuration-reference/#persist_to_workspace"target="_blank" rel="noopener"&gt;persist_to_workspace&lt;/a&gt;と&lt;a href="https://circleci.com/docs/2.0/configuration-reference/#attach_workspace"target="_blank" rel="noopener"&gt;attach_workspace&lt;/a&gt;を設定した．&lt;/p&gt;
&lt;p&gt;最終的には以下の様になった．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;working_directory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/noshita/koji.noshita.net&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parallelism&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;CIRCLE_ARTIFACTS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/tmp/circleci-artifacts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;CIRCLE_TEST_REPORTS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/tmp/circleci-test-results&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;TZ&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/usr/share/zoneinfo/Asia/Tokyo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;docker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;circleci/golang:1.10-stretch&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# command: /sbin/init&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;checkout&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;git submodule sync&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;git submodule update --init --recursive&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;go get -v github.com/gohugoio/hugo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;git config --global user.name &amp;#34;noshita&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;git config --global user.email &amp;#34;noshita@morphometrics.jp&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# This is based on your 1.0 configuration file or project settings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# - run: sudo pip install awscli&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sudo apt-get install python-pip&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sudo pip install Pygments&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sudo pip install pygments-github-lexers&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;hugo --cleanDestinationDir &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# This is based on your 1.0 configuration file or project settings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;echo &amp;#34;Nothing to do here&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Save test results&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;store_test_results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/tmp/circleci-test-results&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Save artifacts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;store_artifacts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/tmp/circleci-artifacts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;store_artifacts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/tmp/circleci-test-results&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;persist_to_workspace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;root&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/noshita/koji.noshita.net&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;public&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;TZ&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/usr/share/zoneinfo/Asia/Tokyo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;docker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;circleci/python:3.6-stretch&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;working_directory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/noshita/koji.noshita.net&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;attach_workspace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;~/koji.noshita.net&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Install awscli&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sudo pip install awscli&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aws configure set region us-west-2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aws configure set preview.cloudfront true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deploy to S3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aws s3 sync ~/koji.noshita.net/public/ s3://koji.noshita.net/ --delete&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deploy to CloundFront&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;aws cloudfront create-invalidation --distribution-id &amp;lt;CloudFront ID&amp;gt; --paths &amp;#39;/*&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;workflows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build-deploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;build&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;requires&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;build&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;branches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;only&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;master&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;確認&lt;span class="hx:absolute hx:-mt-20" id="確認"&gt;&lt;/span&gt;
&lt;a href="#%e7%a2%ba%e8%aa%8d" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;設定ファイルは従来&lt;code&gt;circle.yml&lt;/code&gt;であったが，2.0からは&lt;code&gt;.circleci/config.yml&lt;/code&gt;となるので，そのように保存する．&lt;/p&gt;
&lt;p&gt;&lt;code&gt;circleci&lt;/code&gt;コマンドから設定ファイルの検証ができるので，まずはこれで確認する．
macOSではhomebrewで導入できる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;circleci config validate -c .circleci/config.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 問題なければ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.circleci/config.yml is valid
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# と表示される&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;問題なければ，GitHubへプッシュし，ビルドが成功すれば移行できたことになる．&lt;/p&gt;
&lt;p&gt;Webのインターフェースの方では特に操作は必要ないが，Circle2.0で実行されていることだけ確認しておくと良い．&lt;/p&gt;</description></item><item><title>深層学習環境の更新</title><link>https://koji.noshita.net/blog/2017/1219-dlenvupdate/</link><pubDate>Tue, 19 Dec 2017 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2017/1219-dlenvupdate/</guid><description>
&lt;h2&gt;前提&lt;span class="hx:absolute hx:-mt-20" id="前提"&gt;&lt;/span&gt;
&lt;a href="#%e5%89%8d%e6%8f%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;既に，&lt;a href="https://koji.noshita.net/blog/2017/0223-deeplearningenv/"&gt;Ubuntu 16.04 LTSにCUDAとTensorFlowを入れて深層学習環境をつくる&lt;/a&gt;の方法にてCUDA，cuDNN，TensorFlowを導入済みとする．&lt;/p&gt;
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;CUDAのバージョンアップ&lt;/li&gt;
&lt;li&gt;cuDNNのバージョンアップ&lt;/li&gt;
&lt;li&gt;TensorFlowの更新&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;グラフィックカードドライバーとCUDAのバージョンアップ&lt;span class="hx:absolute hx:-mt-20" id="グラフィックカードドライバーとcudaのバージョンアップ"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%b0%e3%83%a9%e3%83%95%e3%82%a3%e3%83%83%e3%82%af%e3%82%ab%e3%83%bc%e3%83%89%e3%83%89%e3%83%a9%e3%82%a4%e3%83%90%e3%83%bc%e3%81%a8cuda%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%82%a2%e3%83%83%e3%83%97" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;既にレポジトリを登録しているの，通常のパッケージ更新で大丈夫．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo aptitude update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo aptitude upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;パッケージ依存関係の問題の解消が求められるかも知れない．
その場合は設定を考え修正．&lt;/p&gt;
&lt;p&gt;ちなみに&lt;code&gt;~/.zshrc&lt;/code&gt;の設定は以下のように修正した．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/cuda/bin&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="p"&gt;:+:&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="si"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/cuda/lib64&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class="p"&gt;:+:&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class="si"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;CUDA_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/cuda&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;テスト&lt;span class="hx:absolute hx:-mt-20" id="テスト"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%86%e3%82%b9%e3%83%88" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;サンプルを試してみる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /usr/local/cuda/samples
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo make&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;OpenGL関係もビルドできるようになったが，実行時エラーが出る．
とりあえず今後の課題．&lt;/p&gt;
&lt;p&gt;幾つか試す．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; bin/x86_64/linux/release
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# デバイス情報&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deviceQuery
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# バンド幅&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./bandwidthTest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 多体問題&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./nbody -benchmark -numbodies&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;256000&lt;/span&gt; -device&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;cuDNNのバージョンアップ&lt;span class="hx:absolute hx:-mt-20" id="cudnnのバージョンアップ"&gt;&lt;/span&gt;
&lt;a href="#cudnn%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%82%a2%e3%83%83%e3%83%97" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;導入したい最新のcuDNNをダウンロードする．&lt;a href="https://developer.nvidia.com"target="_blank" rel="noopener"&gt;NVIDIA Developer&lt;/a&gt;のアカウントが必要．
ダウンロードしたファイルを展開し，CUDAのディレクトリへコピーする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tar xzvf cudnn-9.1-linux-x64-v7.tgz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cp -a cuda/lib64/* /usr/local/cuda/lib64/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cp -a cuda/include/* /usr/local/cuda/include/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;TensorFlowの更新&lt;span class="hx:absolute hx:-mt-20" id="tensorflowの更新"&gt;&lt;/span&gt;
&lt;a href="#tensorflow%e3%81%ae%e6%9b%b4%e6%96%b0" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;CUDAとcuDNNの対応を状況を確認して，適切なものをインストールする．
pypiからではCUDAなどのバージョンが適切でない場合があるので，ここでは&lt;a href="https://github.com/mind/wheels"target="_blank" rel="noopener"&gt;TensorFlow Optimized Wheels&lt;/a&gt;を利用する．
例えば，Python3.5，CUDA9.1であれば，&lt;a href="https://github.com/mind/wheels/releases/tag/tf1.4.1-gpu-cuda91"target="_blank" rel="noopener"&gt;TensorFlow 1.4.1 (GPU, CUDA 9.1)&lt;/a&gt;．&lt;/p&gt;
&lt;p&gt;TensorFlow Optimized Wheelsでは基本的に&lt;a href="https://github.com/01org/mkl-dnn"target="_blank" rel="noopener"&gt;Intel(R) Math Kernel Library for Deep Neural Networks (Intel(R) MKL-DNN)&lt;/a&gt;をサポートするwheelとなっている（そうでないものにはwithout MKLなどの記載がある）．そのためMKL-DNNを導入する必要がある．
&lt;a href="https://github.com/mind/wheels#mkl"target="_blank" rel="noopener"&gt;MKL|TensorFlow Optimized Wheels&lt;/a&gt;の通りの手順でインストール可能．&lt;/p&gt;
&lt;p&gt;一度古いバージョンをアンインストールし，適切なWheelのURLを指定してインストールする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip uninstall tensorflow-gpu tensorflow-tensorboard
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install --upgrade https://github.com/mind/wheels/releases/download/tf1.4.1-gpu-cuda91/tensorflow-1.4.1-cp35-cp35m-linux_x86_64.whl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;これでインストールできた．&lt;/p&gt;
&lt;p&gt;テストコードを試して，インストールの完了とGPUが利用できているか確認．
&lt;a href="https://www.tensorflow.org/tutorials/using_gpu"target="_blank" rel="noopener"&gt;チュートリアル&lt;/a&gt;から以下のコードを試す．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Creates a graph.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;constant&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6.0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;constant&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6.0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;matmul&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Creates a session with log_device_placement set to True.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sess&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Session&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ConfigProto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;log_device_placement&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Runs the op.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sess&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;うまくいけば環境が構築できたことになる．&lt;/p&gt;
&lt;h2&gt;今後の課題&lt;span class="hx:absolute hx:-mt-20" id="今後の課題"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%8a%e5%be%8c%e3%81%ae%e8%aa%b2%e9%a1%8c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;OpenGL系のテストの実行時エラーの解消&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Vagrant BoxをVagrant Cloudへ登録</title><link>https://koji.noshita.net/blog/2017/1129-vagrantcloud/</link><pubDate>Wed, 29 Nov 2017 00:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2017/1129-vagrantcloud/</guid><description>
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Vagrant Cloudへboxを登録する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Vagrant Boxのホスティングが&lt;a href="https://atlas.hashicorp.com/"target="_blank" rel="noopener"&gt;Atlas&lt;/a&gt;のサービスから分離されて&lt;a href="https://app.vagrantup.com/"target="_blank" rel="noopener"&gt;Vagrant Cloud&lt;/a&gt;になった．
今後は&lt;a href="https://www.vagrantup.com/docs/vagrant-cloud/api.html"target="_blank" rel="noopener"&gt;Vagrant Cloud API&lt;/a&gt;を利用してVagrant Boxの登録をおこなう．&lt;/p&gt;
&lt;p&gt;Vagrant Boxの作成は&lt;a href="https://koji.noshita.net/blog/2017/0311-packervagrant/"&gt;PackerでVagrant Boxファイルを作成&lt;/a&gt;を参照．&lt;/p&gt;
&lt;h2&gt;トークンの生成&lt;span class="hx:absolute hx:-mt-20" id="トークンの生成"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%88%e3%83%bc%e3%82%af%e3%83%b3%e3%81%ae%e7%94%9f%e6%88%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Setting → Security の Authentication Tokensで生成できる．
Descriptionにトークンを認識するための記述を入力し，Generate tokenボタンを押す．&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;img src="https://koji.noshita.net/materials/2017/1129-vagrantCloud/vc_01.png" title="Setting → Security" alt="トークンの生成" loading="lazy" /&gt;
&lt;figcaption&gt;Setting → Security&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;一度だけトークンが表示されるので適切なところに保存しておく．&lt;/p&gt;
&lt;p&gt;APIを利用しても生成可能．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --header &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://app.vagrantup.com/api/v1/authenticate &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --data &lt;span class="s1"&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;token&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;description&amp;#34;: &amp;#34;Login from cURL&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;user&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;login&amp;#34;: &amp;#34;USERNAME&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;password&amp;#34;: &amp;#34;PASSWORD&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# レスポンス例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;Login from cURL&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;token&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;qwlIE1qBVUafsg.atlasv1.FLwfJSSYkl49i4qZIu8R31GBnI9r8DrW4IQKMppkGq5rD264lRksTqaIN0zY9Bmy0zs&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;token_hash&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;7598236a879ecb42cb0f25399d6f25d1d2cfbbc6333392131bbdfba325eb352795c169daa4a61a8094d44afe817a857e0e5fc7dc72a1401eb434577337d1246c&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;created_at&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;2017-10-18T19:16:24.956Z&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;USERNAME&lt;/code&gt;と&lt;code&gt;PASSWORD&lt;/code&gt;はVagrant Cloudのものを入力する．&lt;/p&gt;
&lt;h2&gt;Vagrant Boxの登録&lt;span class="hx:absolute hx:-mt-20" id="vagrant-boxの登録"&gt;&lt;/span&gt;
&lt;a href="#vagrant-box%e3%81%ae%e7%99%bb%e9%8c%b2" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ここからはAPIを利用する方法だけ触れる．&lt;/p&gt;
&lt;h3&gt;新しいBoxの作成&lt;span class="hx:absolute hx:-mt-20" id="新しいboxの作成"&gt;&lt;/span&gt;
&lt;a href="#%e6%96%b0%e3%81%97%e3%81%84box%e3%81%ae%e4%bd%9c%e6%88%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;公開したいBoxについて一回だけ実行すれば良い．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --header &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --header &lt;span class="s2"&gt;&amp;#34;Authorization: Bearer VAGRANT_CLOUD_TOKEN&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://app.vagrantup.com/api/v1/boxes &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --data &lt;span class="s1"&gt;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;box&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;username&amp;#34;: &amp;#34;USERNAME&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;name&amp;#34;: &amp;#34;BOXNAME&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;short_description&amp;#34;: &amp;#34;My dev box&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;description&amp;#34;: &amp;#34;My development Vagrant box&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#34;is_private&amp;#34;: false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt; &amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;VAGRANT_CLOUD_TOKEN&lt;/code&gt;はアクセストークン．&lt;/p&gt;
&lt;p&gt;公開する場合は&lt;code&gt;is_private&lt;/code&gt;を&lt;code&gt;false&lt;/code&gt;にする．
&lt;code&gt;true&lt;/code&gt;でも作成できるが，&lt;code&gt;vagrant&lt;/code&gt;コマンドなどで実際にアクセスする場合には有料プランに変更する必要がある．&lt;/p&gt;
&lt;h3&gt;新しいバージョンの作成&lt;span class="hx:absolute hx:-mt-20" id="新しいバージョンの作成"&gt;&lt;/span&gt;
&lt;a href="#%e6%96%b0%e3%81%97%e3%81%84%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%81%ae%e4%bd%9c%e6%88%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;公開しているVagrant Boxを更新する場合に毎回実行する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --header &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --header &lt;span class="s2"&gt;&amp;#34;Authorization: Bearer VAGRANT_CLOUD_TOKEN&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://app.vagrantup.com/api/v1/box/USERNAME/BOXNAME/versions &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --data &lt;span class="s1"&gt;&amp;#39;{ &amp;#34;version&amp;#34;: { &amp;#34;version&amp;#34;: &amp;#34;VERSION&amp;#34; } }&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;VERSION&lt;/code&gt;で適切なバージョンを指定する．&lt;/p&gt;
&lt;h3&gt;新しいプロバイダーの作成&lt;span class="hx:absolute hx:-mt-20" id="新しいプロバイダーの作成"&gt;&lt;/span&gt;
&lt;a href="#%e6%96%b0%e3%81%97%e3%81%84%e3%83%97%e3%83%ad%e3%83%90%e3%82%a4%e3%83%80%e3%83%bc%e3%81%ae%e4%bd%9c%e6%88%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;プロバイダーを指定する．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VirtualBox&lt;/li&gt;
&lt;li&gt;VMware&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Hyper-V&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;が対応している．その他にもカスタムで作ることもできる．
例えば，&lt;a href="https://parallels.github.io/vagrant-parallels/"target="_blank" rel="noopener"&gt;Parallels&lt;/a&gt;なども利用できる．&lt;/p&gt;
&lt;p&gt;今回はVirtualBoxを使うことにする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --header &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --header &lt;span class="s2"&gt;&amp;#34;Authorization: Bearer VAGRANT_CLOUD_TOKEN&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://app.vagrantup.com/api/v1/box/USERNAME/BOXNAME/version/VERSION/providers &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --data &lt;span class="s1"&gt;&amp;#39;{ &amp;#34;provider&amp;#34;: { &amp;#34;name&amp;#34;: &amp;#34;virtualbox&amp;#34; } }&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Boxのアップロード&lt;span class="hx:absolute hx:-mt-20" id="boxのアップロード"&gt;&lt;/span&gt;
&lt;a href="#box%e3%81%ae%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ビルドしたVagrant Boxファイルをアップロードする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# アップロード用URLの取得&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;response&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;curl &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --header &lt;span class="s2"&gt;&amp;#34;Authorization: Bearer VAGRANT_CLOUD_TOKEN&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://app.vagrantup.com/api/v1/box/USERNAME/BOXNAME/version/VERSION/provider/virtualbox/upload&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# jqを使ってアップロード用URLを抽出&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;upload_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$response&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; jq .upload_path &lt;span class="p"&gt;|&lt;/span&gt; sed &lt;span class="s1"&gt;&amp;#39;s/&amp;#34;//g&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# アップロード&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl &lt;span class="nv"&gt;$upload_path&lt;/span&gt; --request PUT --upload-file BOXPATH
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# レスポンス例&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;upload_path&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;https://archivist.hashicorp.com/v1/object/630e42d9-2364-2412-4121-18266770468e&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;BOXPATH&lt;/code&gt;にはBoxファイルへのパスを指定する．&lt;/p&gt;
&lt;p&gt;今回はアップロードを失敗することが多かった．
最終的にはいつの間にかアップロードされていた．
原因不明．今後の課題．&lt;/p&gt;
&lt;h2&gt;リリース&lt;span class="hx:absolute hx:-mt-20" id="リリース"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%aa%e3%83%aa%e3%83%bc%e3%82%b9" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;vagrant&lt;/code&gt;コマンドからアクセスできるようにリリースする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --header &lt;span class="s2"&gt;&amp;#34;Authorization: Bearer VAGRANT_CLOUD_TOKEN&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; https://app.vagrantup.com/api/v1/box/USERNAME/BOXNAME/version/VERSION/release &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --request PUT&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;これで，&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant init USER/BOX
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant up&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;で利用できる．
旧版を導入済みの場合は&lt;code&gt;vagrant box update USER/BOX&lt;/code&gt;で更新できる．&lt;/p&gt;
&lt;h2&gt;今後の課題&lt;span class="hx:absolute hx:-mt-20" id="今後の課題"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%8a%e5%be%8c%e3%81%ae%e8%aa%b2%e9%a1%8c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;boxのアップロードが失敗することが多い．原因を知りたい．&lt;/li&gt;
&lt;li&gt;Packerの&lt;a href="https://www.packer.io/docs/post-processors/vagrant-cloud.html"target="_blank" rel="noopener"&gt;Vagrant Cloud Post-Processor&lt;/a&gt;への移行&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;参考&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.vagrantup.com/docs/vagrant-cloud/api.html"target="_blank" rel="noopener"&gt;Vagrant Cloud API&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.vagrantup.com/docs/vagrant-cloud/api.html#authentication-1"target="_blank" rel="noopener"&gt;Authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.vagrantup.com/docs/vagrant-cloud/api.html#boxes"target="_blank" rel="noopener"&gt;Boxes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.vagrantup.com/docs/vagrant-cloud/api.html#versions"target="_blank" rel="noopener"&gt;Versions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.vagrantup.com/docs/vagrant-cloud/api.html#providers"target="_blank" rel="noopener"&gt;Providers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.vagrantup.com/docs/vagrant-cloud/api.html#upload-a-provider"target="_blank" rel="noopener"&gt;Upload a provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.vagrantup.com/docs/vagrant-cloud/api.html#release-a-version"target="_blank" rel="noopener"&gt;Release a version&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Fail2Banでアクセス制限</title><link>https://koji.noshita.net/blog/2017/0923-fail2ban/</link><pubDate>Sat, 23 Sep 2017 00:22:40 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2017/0923-fail2ban/</guid><description>
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;sshでの総当たり攻撃を拒否&lt;/li&gt;
&lt;li&gt;ブラックリストの自動更新&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;前提&lt;span class="hx:absolute hx:-mt-20" id="前提"&gt;&lt;/span&gt;
&lt;a href="#%e5%89%8d%e6%8f%90" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;サーバーの&lt;code&gt;/var/log/auth.log&lt;/code&gt;を見るとsshアクセスを試みている形跡がある&lt;/li&gt;
&lt;li&gt;不正アクセスはされていないようだが，制限しておいた方が良さそうな気がする&lt;/li&gt;
&lt;li&gt;ある程度のセキュリティ対策は既におこなっている
&lt;ul&gt;
&lt;li&gt;rootログイン不可&lt;/li&gt;
&lt;li&gt;パスワード認証不可&lt;/li&gt;
&lt;li&gt;認証の試行回数を制限&lt;/li&gt;
&lt;li&gt;ファイアウォール&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ログの確認は以下のようにおこなう．
適宜フィルタリングしてどんなアクセスがあるか確認すれば良い．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;//ログ確認
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; cat /var/log/auth.log &lt;span class="p"&gt;|&lt;/span&gt; grep sshd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;// 存在しないユーザーへのアクセス
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; cat /var/log/auth.log &lt;span class="p"&gt;|&lt;/span&gt; grep sshd.&lt;span class="se"&gt;\*&lt;/span&gt;Invalid
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Fail2Ban&lt;span class="hx:absolute hx:-mt-20" id="fail2ban"&gt;&lt;/span&gt;
&lt;a href="#fail2ban" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://github.com/fail2ban/fail2ban"target="_blank" rel="noopener"&gt;Fail2Ban&lt;/a&gt;はログの解析により総当たり攻撃を検知し，IPアドレスに基づいて一定時間アクセス制限をおこなう．&lt;/p&gt;
&lt;h3&gt;導入&lt;span class="hx:absolute hx:-mt-20" id="導入"&gt;&lt;/span&gt;
&lt;a href="#%e5%b0%8e%e5%85%a5" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; sudo aptitude install fail2ban
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;設定&lt;span class="hx:absolute hx:-mt-20" id="設定"&gt;&lt;/span&gt;
&lt;a href="#%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;/etc/fail2ban/jail.conf&lt;/code&gt;は直接編集することが推奨されていないようなので，
&lt;code&gt;/etc/fail2ban/jail.local&lt;/code&gt;に設定を書き込む．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; sudo emacs /etc/fail2ban/jail.local
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;jail.local&lt;/code&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-emacs" data-lang="emacs"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;INCLUDES&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;before&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;paths-debian.conf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;DEFAULT&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ignoreip&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;127.0.0.1/8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ignorecommand&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;bantime&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;findtime&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;maxretry&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;backend&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;auto&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;usedns&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="ne"&gt;warn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;logencoding&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;auto&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;enabled&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;filter&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;%&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nv"&gt;Mail&lt;/span&gt; &lt;span class="nv"&gt;Settings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;destemail&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;xxx@yyy.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;sendername&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;Fail2Ban&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;mta&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;mail&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nv"&gt;Firewall&lt;/span&gt; &lt;span class="nv"&gt;Defaults&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;protocol&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;tcp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;chain&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;INPUT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;port&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;0:65535&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;banaction&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;iptables-multiport&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nv"&gt;Our&lt;/span&gt; &lt;span class="nv"&gt;Banning&lt;/span&gt; &lt;span class="nv"&gt;Action&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nv"&gt;ban&lt;/span&gt; &lt;span class="nv"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;send&lt;/span&gt; &lt;span class="nv"&gt;an&lt;/span&gt; &lt;span class="nv"&gt;e-mail&lt;/span&gt; &lt;span class="nv"&gt;with&lt;/span&gt; &lt;span class="nv"&gt;whois&lt;/span&gt; &lt;span class="nv"&gt;report&lt;/span&gt; &lt;span class="nb"&gt;and&lt;/span&gt; &lt;span class="nv"&gt;relevant&lt;/span&gt; &lt;span class="nf"&gt;log&lt;/span&gt; &lt;span class="nv"&gt;lines&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nv"&gt;to&lt;/span&gt; &lt;span class="nv"&gt;the&lt;/span&gt; &lt;span class="nv"&gt;destemail.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;action_mwl&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;%&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;banaction&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;name=%&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;s,&lt;/span&gt; &lt;span class="nv"&gt;bantime=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%(bantime)s&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;port=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%(port)s&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;protocol=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%(protocol)s&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;chain=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%(chain)s&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;%&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;mta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;s-whois-lines&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;name=%&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;s,&lt;/span&gt; &lt;span class="nv"&gt;sender=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%(sender)s&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;dest=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%(destemail)s&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;logpath=%&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;logpath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;s,&lt;/span&gt; &lt;span class="nv"&gt;chain=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;%(chain)s&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nv"&gt;Choose&lt;/span&gt; &lt;span class="nv"&gt;default&lt;/span&gt; &lt;span class="nv"&gt;action.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;action&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;%&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;action_mwl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nv"&gt;JAILS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nv"&gt;SSH&lt;/span&gt; &lt;span class="nv"&gt;servers&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;sshd&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;enabled&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;port&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;ssh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;filter&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;sshd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;logpath&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;/var/log/auth.*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;maxretry&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;sshd-ddos&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;enabled&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;port&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;ssh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;filter&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;sshd-ddos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;logpath&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;/var/log/auth.*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;maxretry&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;6&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;bantime = -1&lt;/code&gt;は永久ban．&lt;/p&gt;
&lt;h3&gt;起動&lt;span class="hx:absolute hx:-mt-20" id="起動"&gt;&lt;/span&gt;
&lt;a href="#%e8%b5%b7%e5%8b%95" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;設定を変更した後は再起動する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; sudo service fail2ban start
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;// 再起動
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; sudo service fail2ban restart
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;確認&lt;span class="hx:absolute hx:-mt-20" id="確認"&gt;&lt;/span&gt;
&lt;a href="#%e7%a2%ba%e8%aa%8d" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; sudo fail2ban-client status
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; sudo fail2ban-client status sshd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;ブラックリスト&lt;span class="hx:absolute hx:-mt-20" id="ブラックリスト"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%96%e3%83%a9%e3%83%83%e3%82%af%e3%83%aa%e3%82%b9%e3%83%88" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GitHubレポジトリ&lt;a href="https://github.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning"target="_blank" rel="noopener"&gt;mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning&lt;/a&gt;から設定ファイルをダウンロードする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;// /etc/fail2ban/filter.d/blacklist.conf の作成
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; /etc/fail2ban/filter.d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; sudo wget https://raw.githubusercontent.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning/master/filter.d/blacklist.conf -O blacklist.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;// /etc/fail2ban/action.d/blacklist.conf の作成
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; /etc/fail2ban/action.d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; sudo wget https://raw.githubusercontent.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning/master/action.d/blacklist.conf -O blacklist.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;/etc/fail2ban/jail.local&lt;/code&gt;の末尾へ追記する．&lt;/p&gt;
&lt;p&gt;&lt;code&gt;jail.local&lt;/code&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-emacs" data-lang="emacs"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;blacklist&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;enabled&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;logpath&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;/var/log/fail2ban.*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;filter&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;blacklist&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;banaction&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;blacklist&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;bantime&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;31536000&lt;/span&gt; &lt;span class="c1"&gt;; 1 year&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;findtime&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;31536000&lt;/span&gt; &lt;span class="c1"&gt;; 1 year&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;maxretry&lt;/span&gt; &lt;span class="nf"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;10&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;blacklistに登録されたipが列挙されるファイル&lt;code&gt;/etc/fail2ban/ip.blacklist&lt;/code&gt;を作成する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;sudo touch /etc/fail2ban/ip.blacklist
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;sudo chmod 755 /etc/fail2ban/ip.blacklist
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;その後，再起動する．&lt;/p&gt;
&lt;h2&gt;今後の課題&lt;span class="hx:absolute hx:-mt-20" id="今後の課題"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%8a%e5%be%8c%e3%81%ae%e8%aa%b2%e9%a1%8c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;しばらくモニタリングして結果を確認
&lt;ul&gt;
&lt;li&gt;不正アクセス元のIPがブラックリストへ追加されているか&lt;/li&gt;
&lt;li&gt;総当たり攻撃が減っているか&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://endoyuta.com/2016/11/04/%E3%81%95%E3%81%8F%E3%82%89vps-ubuntu-%E8%A8%AD%E5%AE%9A-1/"target="_blank" rel="noopener"&gt;さくらVPSにUbuntu16.04を入れた後の各種設定方法（１）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ubuntu101.co.za/security/fail2ban/fail2ban-persistent-bans-ubuntu/"target="_blank" rel="noopener"&gt;Fail2Ban SSH Nginx Persistent Bans Ubuntu 16.04&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning"target="_blank" rel="noopener"&gt;mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://linux-sys-adm.com/ubuntu-16.04-lts-how-to-configure-firewall-iptables-fail2ban/"target="_blank" rel="noopener"&gt;Ubuntu 16.04 LTS – How To Configure FireWall/IpTables and Fail2Ban&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cm3.hateblo.jp/entry/2015/07/28/150656"target="_blank" rel="noopener"&gt;fail2ban を導入&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>「文化進化の考古学」の補遺を書きました</title><link>https://koji.noshita.net/blog/2017/0913-cultevol/</link><pubDate>Wed, 13 Sep 2017 20:42:15 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2017/0913-cultevol/</guid><description>
&lt;p&gt;&lt;a href="http://www.keisoshobo.co.jp/book/b308154.html"target="_blank" rel="noopener"&gt;文化進化の考古学&lt;/a&gt;（&lt;a href="http://www.hisashinakao.com/"target="_blank" rel="noopener"&gt;中尾 央&lt;/a&gt;，&lt;a href="https://www.rekihaku.ac.jp/research/researcher/matsugi_takehiko/"target="_blank" rel="noopener"&gt;松木 武彦&lt;/a&gt;，&lt;a href="http://leeswijzer.org/"target="_blank" rel="noopener"&gt;三中 信宏&lt;/a&gt; 編）が少し前に出版されました．
本書は，課題設定による先導的人文学・社会科学研究推進事業 &lt;a href="http://www.cul-evo.org/"target="_blank" rel="noopener"&gt;歴史科学諸分野の連携・総合による文化進化学の構築&lt;/a&gt;の成果をまとめた一冊です．
縁あって，&lt;a href="https://sites.google.com/site/tmrkohei/"target="_blank" rel="noopener"&gt;田村 光平&lt;/a&gt;博士（東北大学）と一緒に補遺を書かせて頂きました．&lt;/p&gt;
&lt;p&gt;本補遺では，幾何学的形態測定学の基礎的な内容とRを使った簡単なデモ，解析上の注意点について解説しています．
そのため，考古学が専門の方だけでなく，対象の「かたち」を解析したい方全般に興味を持ってもらえる内容だと思います．
書店などでお見かけの際お手に取って頂けますと幸いです．&lt;/p&gt;
&lt;p&gt;以下幾つかお知らせ．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;執筆を担当した補遺には数式の誤植が幾つかあるので，&lt;a href="http://www.keisoshobo.co.jp/book/b308154.html"target="_blank" rel="noopener"&gt;公式サイト&lt;/a&gt;から正誤表をダウンロードして確認してください&lt;/li&gt;
&lt;li&gt;本補遺のサンプルコードとサンプルデータはGitHubレポジトリ&lt;a href="https://github.com/noshita/CultEvolAppendix"target="_blank" rel="noopener"&gt;noshita/CultEvolAppendix&lt;/a&gt;にて公開しています&lt;/li&gt;
&lt;li&gt;本書の「はじめに」と「おわりに」が&lt;a href="http://keisobiblio.com/2017/08/24/atogakitachiyomi_bunkashinkakoukogaku/"target="_blank" rel="noopener"&gt;けいそうビブリオフィル&lt;/a&gt;
にて公開されています&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>PackerでVagrant Boxファイルを作成</title><link>https://koji.noshita.net/blog/2017/0311-packervagrant/</link><pubDate>Sat, 11 Mar 2017 16:44:05 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2017/0311-packervagrant/</guid><description>
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;PackerでUbuntu 16.04 LTSのVagrant Boxファイルを自動作成&lt;/li&gt;
&lt;li&gt;テンプレートはBoxcutterを利用する&lt;/li&gt;
&lt;li&gt;Atlasへboxを登録する&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Packer&lt;span class="hx:absolute hx:-mt-20" id="packer"&gt;&lt;/span&gt;
&lt;a href="#packer" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://www.packer.io/"target="_blank" rel="noopener"&gt;Packer&lt;/a&gt;は仮想マシンやコンテナのイメージを作成するためのツール．
&lt;a href="https://github.com/boxcutter"target="_blank" rel="noopener"&gt;Boxcutter&lt;/a&gt;はPacker用の設定テンプレート集．&lt;/p&gt;
&lt;p&gt;PackerではOSの自動インストールにDebian系では&lt;a href="https://help.ubuntu.com/lts/installation-guide/armhf/apb.html"target="_blank" rel="noopener"&gt;Preseed&lt;/a&gt;，RedHat系では&lt;a href="https://access.redhat.com/documentation/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/ch-kickstart2.html"target="_blank" rel="noopener"&gt;Kickstart&lt;/a&gt;を使う．
今回はUbuntuなのでpreseedファイルを利用する．&lt;/p&gt;
&lt;p&gt;Boxcutterの&lt;code&gt;ubuntu1604.json&lt;/code&gt;の設定から必要に応じて幾つかパラメータを変更する．
今回は以下の通り．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;_comment&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Build with `packer build -var-file=ubuntu1604.json ubuntu.json`&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;vm_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ubuntu1604&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;cpus&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;disk_size&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;40000&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;iso_checksum&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;f529548fa7468f2d8413b8427d8e383b830df5f6&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;iso_checksum_type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;sha1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;iso_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ubuntu-16.04.2-server-amd64.iso&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;iso_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;http://releases.ubuntu.com/16.04/ubuntu-16.04.2-server-amd64.iso&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;memory&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;3072&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;preseed&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;preseed_v1604.cfg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;hostname&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;vagrant-xenial64&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ssh_fullname&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ubuntu&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ssh_password&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*********&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;ssh_username&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ubuntu&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;vagrantfile_template&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tpl/vagrantfile-ubuntu1604.tpl&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;0.1.1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;&amp;quot;disk_size&amp;quot;&lt;/code&gt;と&lt;code&gt;&amp;quot;memory&amp;quot;&lt;/code&gt;の容量はMB単位．&lt;/p&gt;
&lt;p&gt;パスワードが長すぎる場合（？）にユーザー名の入力画面で処理がストップする（エンターを押して次に進めばそのまま処理は続行する）．条件の詳細は不明なので今後の課題．&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;quot;preseed&amp;quot;&lt;/code&gt;のファイル名に記号（文字と数字以外）が入るとsshが繋がらず落ちる．これも理由が不明なので今後の課題．&lt;/p&gt;
&lt;p&gt;また，VagrantFileのテンプレート（&lt;code&gt;tpl/vagrantfile-ubuntu1604.tpl&lt;/code&gt;）は以下の通り．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# -*- mode: ruby -*-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# vi: set ft=ruby :&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="no"&gt;Vagrant&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;configure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;define&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;vagrant-ubuntu1604&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;box&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;xenial64&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ubuntu&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ssh&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*********&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;packer&lt;/code&gt;コマンドでビルドをおこなう．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ packer build -only&lt;span class="o"&gt;=&lt;/span&gt;virtualbox-iso -var-file&lt;span class="o"&gt;=&lt;/span&gt;ubuntu1604.json ubuntu.json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;結果は，&lt;code&gt;box/virtualbox&lt;/code&gt;以下に保存されている．
これをvagrantに追加し利用する．&lt;/p&gt;
&lt;h2&gt;Vagrant Boxの登録&lt;span class="hx:absolute hx:-mt-20" id="vagrant-boxの登録"&gt;&lt;/span&gt;
&lt;a href="#vagrant-box%e3%81%ae%e7%99%bb%e9%8c%b2" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vagrant box add xenial64 box/virtualbox/ubuntu1604-0.1.1.box&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;あとはどこか好きな場所で起動させる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vagrant init xenial64
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vagrant up&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;code&gt;&amp;quot;update&amp;quot;: &amp;quot;true&amp;quot;&lt;/code&gt;の場合&lt;span class="hx:absolute hx:-mt-20" id="update-trueの場合"&gt;&lt;/span&gt;
&lt;a href="#update-true%e3%81%ae%e5%a0%b4%e5%90%88" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Vagrantのproviderがvirtualboxの場合はGuest Additionsがインストールされている．
Guest Additionsの意義は&lt;a href="http://vboxmania.net/content/guest-additions%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB"target="_blank" rel="noopener"&gt;Guest Additionsのインストール| VirtualBox Mania&lt;/a&gt;などを参照．&lt;/p&gt;
&lt;p&gt;ただし，仮想マシンのカーネルを更新するとGuest Additionsも更新しなければならない．
&lt;a href="https://github.com/dotless-de/vagrant-vbguest"target="_blank" rel="noopener"&gt;vagrant-vbguest&lt;/a&gt;プラグインを追加しておくことで，必要があれば自動でGuest Additionsを自動で更新してくれる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ vagrant plugin install vagrant-vbguest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Atlasへの登録&lt;span class="hx:absolute hx:-mt-20" id="atlasへの登録"&gt;&lt;/span&gt;
&lt;a href="#atlas%e3%81%b8%e3%81%ae%e7%99%bb%e9%8c%b2" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://atlas.hashicorp.com/"target="_blank" rel="noopener"&gt;Atlas&lt;/a&gt;はVagrant Boxのホスティングサービス．
登録にはユーザー登録が必要．現状ではprivateだと有料．&lt;/p&gt;
&lt;p&gt;&lt;code&gt;packer push&lt;/code&gt;コマンドを使うことでAtlas側でビルドして，完成したboxを公開することもできるが，これも有料．なので，今回はローカルでビルドしたboxをアップロードすることにする．&lt;/p&gt;
&lt;p&gt;Atlasにログインして手動でアップロードできるが，ここでは&lt;a href="https://atlas.hashicorp.com/help/api"target="_blank" rel="noopener"&gt;Box API&lt;/a&gt;を利用してアップロードする．&lt;/p&gt;
&lt;h3&gt;アクセストークン&lt;span class="hx:absolute hx:-mt-20" id="アクセストークン"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%83%88%e3%83%bc%e3%82%af%e3%83%b3" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;その前に準備としてアクセストークンを生成する必要がある．
Atlasのページから&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Account Settings
&lt;ul&gt;
&lt;li&gt;Tokens&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;と辿って，適当な名前をつけ，「Generate token」ボタンを押す．
トークンが一度だけ表示されるので，どこか適当なところに保存する．&lt;/p&gt;
&lt;h3&gt;Box APIを使ったアップロード&lt;span class="hx:absolute hx:-mt-20" id="box-apiを使ったアップロード"&gt;&lt;/span&gt;
&lt;a href="#box-api%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;既にBoxは作ってあるとする（APIからBoxを作ることも可能）．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# バージョンを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl https://atlas.hashicorp.com/api/v1/box/USER/BOX/versions -X POST -H &lt;span class="s2"&gt;&amp;#34;X-Atlas-Token: ACCESSTOKEN&amp;#34;&lt;/span&gt; -d &lt;span class="s2"&gt;&amp;#34;version[version]=VERSION&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# providerを追加&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl https://atlas.hashicorp.com/api/v1/box/USER/BOX/version/VERSION/providers -X POST -H &lt;span class="s2"&gt;&amp;#34;X-Atlas-Token: ACCESSTOKEN&amp;#34;&lt;/span&gt; -d &lt;span class="s2"&gt;&amp;#34;provider[name]=virtualbox&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#アップロード用のURLとパスが返る&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;upload_path&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;https://binstore.hashicorp.com/UPLOADTOKEN&amp;#34;&lt;/span&gt;,&lt;span class="s2"&gt;&amp;#34;token&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;UPLOADTOKEN&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Boxをアップロード&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl -X PUT --upload-file PATHTOBOXFILE https://binstore.hashicorp.com/UPLOADTOKEN
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# リリース&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl https://atlas.hashicorp.com/api/v1/box/USER/BOX/version/VERSION/release -X PUT -H &lt;span class="s2"&gt;&amp;#34;X-Atlas-Token: ACCESSTOKEN&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;これでAtlasへのVagrant Boxの登録が完了した．
今後は，&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant init USER/BOX
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vagrant up&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;で起動できる．&lt;code&gt;vagrant add&lt;/code&gt;を利用する必要がなくなる．&lt;/p&gt;
&lt;h2&gt;今後の課題&lt;span class="hx:absolute hx:-mt-20" id="今後の課題"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%8a%e5%be%8c%e3%81%ae%e8%aa%b2%e9%a1%8c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;ユーザー名入力画面でストップする現象
&lt;ul&gt;
&lt;li&gt;パスワードが長すぎる場合に起こっている？&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;preseed&lt;/code&gt;ファイル名に記号が含まれるとsshログインで失敗する
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;preseed-v1640.cfg&lt;/code&gt;や&lt;code&gt;preseed_v1640.cfg&lt;/code&gt;を使うと発生&lt;/li&gt;
&lt;li&gt;&lt;code&gt;preseedV1640.cfg&lt;/code&gt;とすると解決．&lt;/li&gt;
&lt;li&gt;その他記号については不明&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.packer.io/docs/"target="_blank" rel="noopener"&gt;Packer Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/boxcutter/ubuntu/blob/master/README.md"target="_blank" rel="noopener"&gt;README.md| Packer templates for Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tech.vasily.jp/entry/create-prod-and-dev-vm-image-atst-by-packer"target="_blank" rel="noopener"&gt;1コマンドで本番サーバと開発サーバ (のVMイメージ)を作る話 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://qiita.com/yoheimuta/items/fa4c7051940fee09c08e"target="_blank" rel="noopener"&gt;Packer で開発環境の Vagrant Box を自作して、post-processors 処理を通して S3 に保存・バージョン管理・ホスティングする&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://qiita.com/skai/items/6aea7fb83634afec648f"target="_blank" rel="noopener"&gt;研究室インフラを支える技術？ その３ ～設定自動化編～&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://qiita.com/ryurock/items/e3635221e4717f2addfe"target="_blank" rel="noopener"&gt;Packerをつかって3ステップでVagrantのBoxを作る&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.amedama.jp/entry/2015/08/19/204044"target="_blank" rel="noopener"&gt;Vagrant: vagrant-vbguest プラグインで仮想マシンの Guest Additions を最新に保つ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://atlas.hashicorp.com/help/api"target="_blank" rel="noopener"&gt;Atlas API Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://atlas.hashicorp.com/help/vagrant/boxes/create"target="_blank" rel="noopener"&gt;Creating a New Vagrant Box&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>AWS CLIで複数アカウントを利用する</title><link>https://koji.noshita.net/blog/2017/0307-awscli/</link><pubDate>Tue, 07 Mar 2017 01:32:47 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2017/0307-awscli/</guid><description>
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/jp/cli/"target="_blank" rel="noopener"&gt;AWS CLI&lt;/a&gt;を使う&lt;/li&gt;
&lt;li&gt;複数のアカウント（IAMユーザなど）を切り替える&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;a href="https://aws.amazon.com/jp/cli/"target="_blank" rel="noopener"&gt;AWS CLI&lt;/a&gt;&lt;span class="hx:absolute hx:-mt-20" id="aws-cli"&gt;&lt;/span&gt;
&lt;a href="#aws-cli" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;導入は&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;awscli&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;だけ．&lt;/p&gt;
&lt;h3&gt;プロファイルの設定&lt;span class="hx:absolute hx:-mt-20" id="プロファイルの設定"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%97%e3%83%ad%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 設定を開始&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws configure
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#AWS Access Key ID [None]: XXXXXXXXXXXX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#Default region name [None]: ap-northeast-1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#Default output format [None]: json&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;これで&lt;code&gt;Access Key ID&lt;/code&gt;，&lt;code&gt;Secret Access Key&lt;/code&gt;，&lt;code&gt;リージョン&lt;/code&gt;，&lt;code&gt;出力フォーマット&lt;/code&gt;をそれぞれ指定すれば，
&lt;code&gt;~/.aws/config&lt;/code&gt;と&lt;code&gt;~/.aws/credentials&lt;/code&gt;に設定が書き込まれる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# ~/.aws/config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;default&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ap-northeast-1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# ~/.aws/credentials&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;default&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;aws_access_key_id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;XXXXXXXXXXXX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;aws_secret_access_key&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;XXXXXXXXXXXXXXXXXXXXXXXX&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;現在（2017-03-07）指定できるリージョンは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;us-east-1 米国東部（バージニア北部）&lt;/li&gt;
&lt;li&gt;us-east-2 米国東部 (オハイオ)&lt;/li&gt;
&lt;li&gt;us-west-1 米国西部 (北カリフォルニア)&lt;/li&gt;
&lt;li&gt;us-west-2 米国西部 (オレゴン)&lt;/li&gt;
&lt;li&gt;ca-central-1 カナダ (中部)&lt;/li&gt;
&lt;li&gt;eu-west-1 欧州 (アイルランド)&lt;/li&gt;
&lt;li&gt;eu-central-1 欧州 (フランクフルト)&lt;/li&gt;
&lt;li&gt;eu-west-2 欧州 (ロンドン)&lt;/li&gt;
&lt;li&gt;ap-northeast-1 アジアパシフィック (東京)&lt;/li&gt;
&lt;li&gt;ap-northeast-2 アジアパシフィック (ソウル)&lt;/li&gt;
&lt;li&gt;ap-southeast-1 アジアパシフィック (シンガポール)&lt;/li&gt;
&lt;li&gt;ap-southeast-2 アジアパシフィック (シドニー)&lt;/li&gt;
&lt;li&gt;ap-south-1 アジアパシフィック (ムンバイ)&lt;/li&gt;
&lt;li&gt;sa-east-1 南米 (サンパウロ)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;基本的な使い方&lt;span class="hx:absolute hx:-mt-20" id="基本的な使い方"&gt;&lt;/span&gt;
&lt;a href="#%e5%9f%ba%e6%9c%ac%e7%9a%84%e3%81%aa%e4%bd%bf%e3%81%84%e6%96%b9" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;json&lt;/code&gt;でデータを返す設定で使うことが多いみたいなので，&lt;a href="https://stedolan.github.io/jq/"target="_blank" rel="noopener"&gt;jq&lt;/a&gt;を使うと便利．
macOSの場合はhomebrewで簡単に導入できる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install jq&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;EC2&lt;span class="hx:absolute hx:-mt-20" id="ec2"&gt;&lt;/span&gt;
&lt;a href="#ec2" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;h5&gt;インスタンスの作成と削除&lt;span class="hx:absolute hx:-mt-20" id="インスタンスの作成と削除"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%a4%e3%83%b3%e3%82%b9%e3%82%bf%e3%83%b3%e3%82%b9%e3%81%ae%e4%bd%9c%e6%88%90%e3%81%a8%e5%89%8a%e9%99%a4" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h5&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 自分が作成したイメージの一覧&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 describe-images --owners self &lt;span class="p"&gt;|&lt;/span&gt; jq &lt;span class="s1"&gt;&amp;#39;.Images[] | [.ImageId, .Name, .Description]&amp;#39;&lt;/span&gt; --compact-output
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# キーペアの一覧&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 describe-key-pairs &lt;span class="p"&gt;|&lt;/span&gt; jq &lt;span class="s1"&gt;&amp;#39;.KeyPairs[].KeyName&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# セキュリティグループの一覧&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 describe-security-groups &lt;span class="p"&gt;|&lt;/span&gt; jq &lt;span class="s1"&gt;&amp;#39;.SecurityGroups[] | [.GroupId, .GroupName, .Description]&amp;#39;&lt;/span&gt; --compact-output
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# インスタンスの作成（インスタンスIDを返す）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 run-instances --image-id &lt;span class="o"&gt;[&lt;/span&gt;ImgID&lt;span class="o"&gt;]&lt;/span&gt; --key-name &lt;span class="o"&gt;[&lt;/span&gt;KeyPair&lt;span class="o"&gt;]&lt;/span&gt; --security-group-ids &lt;span class="o"&gt;[&lt;/span&gt;SectyID&lt;span class="o"&gt;]&lt;/span&gt; --count &lt;span class="m"&gt;1&lt;/span&gt; --instance-type t2.micro &lt;span class="p"&gt;|&lt;/span&gt; jq &lt;span class="s1"&gt;&amp;#39;.Instances[].InstanceId&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# タグで名前をつける&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 create-tags --resources &lt;span class="o"&gt;[&lt;/span&gt;ID&lt;span class="o"&gt;]&lt;/span&gt; --tags &lt;span class="s1"&gt;&amp;#39;[{&amp;#34;Key&amp;#34;:&amp;#34;Name&amp;#34;, &amp;#34;Value&amp;#34;:&amp;#34;TestCLI&amp;#34;}]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# インスタンスのID，状態，名前の一覧を表示（runningになっているかを確認）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 describe-instances --profile biomet &lt;span class="p"&gt;|&lt;/span&gt; jq &lt;span class="s1"&gt;&amp;#39;.Reservations[].Instances[] | [.InstanceId, .Tags, .State.Name]&amp;#39;&lt;/span&gt; --compact-output
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# インスタンスのIDを指定して削除&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 terminate-instances --instance-ids &lt;span class="o"&gt;[&lt;/span&gt;ID&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# インスタンスのID，状態，名前の一覧を表示（terminatedになっているかを確認）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 describe-instances --profile biomet &lt;span class="p"&gt;|&lt;/span&gt; jq &lt;span class="s1"&gt;&amp;#39;.Reservations[].Instances[] | [.InstanceId, .Tags, .State.Name]&amp;#39;&lt;/span&gt; --compact-output&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;[ImgID]&lt;/code&gt;，&lt;code&gt;[SectyID]&lt;/code&gt;と&lt;code&gt;[ID]&lt;/code&gt;は適切なイメージID，セキュリティグループとインスタンスIDを指定する．&lt;/p&gt;
&lt;h5&gt;インスタンスの起動と停止&lt;span class="hx:absolute hx:-mt-20" id="インスタンスの起動と停止"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%a4%e3%83%b3%e3%82%b9%e3%82%bf%e3%83%b3%e3%82%b9%e3%81%ae%e8%b5%b7%e5%8b%95%e3%81%a8%e5%81%9c%e6%ad%a2" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h5&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# インスタンスのID，状態，名前の一覧を表示&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 describe-instances &lt;span class="p"&gt;|&lt;/span&gt; jq -r &lt;span class="s1"&gt;&amp;#39;.Reservations[].Instances[] | .InstanceId + &amp;#34;\t&amp;#34; + .State.Name + &amp;#34;\t&amp;#34; + .Tags[].Value&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# インスタンスのIDを指定して起動&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 start-instances --instance-ids &lt;span class="o"&gt;[&lt;/span&gt;ID&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 起動の確認&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 describe-instance-status --instance-ids &lt;span class="o"&gt;[&lt;/span&gt;ID&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 情報を絞る&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 describe-instance-status --instance-ids &lt;span class="o"&gt;[&lt;/span&gt;ID&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; jq &lt;span class="s1"&gt;&amp;#39;.InstanceStatuses[] | {InstanceId, InstanceState: .InstanceState.Name, SystemStatus: .SystemStatus.Status, InstanceStatus: .InstanceStatus.Status}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# インスタンスのIDを指定して停止&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 stop-instances --instance-ids &lt;span class="o"&gt;[&lt;/span&gt;ID&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 停止の確認（ID，状態，名前の一覧取得と基本は同じ）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 describe-instances &lt;span class="p"&gt;|&lt;/span&gt; jq -c &lt;span class="s1"&gt;&amp;#39;.Reservations[].Instances[] | {InstanceName: .Tags[] | select(.Key == &amp;#34;Name&amp;#34;).Value, InstanceId, InstanceState: .State.Name}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 情報を絞る&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 describe-instances &lt;span class="p"&gt;|&lt;/span&gt; jq -c &lt;span class="s1"&gt;&amp;#39;.Reservations[].Instances[] | {InstanceName: .Tags[] | select(.Key == &amp;#34;Name&amp;#34;).Value, InstanceId, InstanceState: .State.Name} | select(.InstanceId == &amp;#34;[ID]&amp;#34;)&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;S3&lt;span class="hx:absolute hx:-mt-20" id="s3"&gt;&lt;/span&gt;
&lt;a href="#s3" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;h5&gt;バケット操作&lt;span class="hx:absolute hx:-mt-20" id="バケット操作"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%90%e3%82%b1%e3%83%83%e3%83%88%e6%93%8d%e4%bd%9c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h5&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# バケットの作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 mb s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# リージョンを指定して作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 mb s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt; --region us-west-1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# バケットの削除（中身があるとエラー）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 rb s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 中身が合っても削除&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 rb s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt; --force&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;[Name]&lt;/code&gt;は適当なバケット名．&lt;/p&gt;
&lt;h5&gt;ファイル操作&lt;span class="hx:absolute hx:-mt-20" id="ファイル操作"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e6%93%8d%e4%bd%9c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;基本的にはUnixコマンドと同じように使える．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ローカル -&amp;gt; S3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 cp test.jpg s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;/testDir/testCP.jpg &lt;span class="c1"&gt;# コピー&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 mv test.jpg s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;/testDir/testMV.jpg &lt;span class="c1"&gt;# 移動&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# S3 -&amp;gt; ローカル&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 cp s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;/testDir/testCP.jpg ./
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 cp s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;/testDir/testMV.jpg ./
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ローカル -&amp;gt; S3 再帰（ディレクトリ全体の操作）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 cp &lt;span class="nb"&gt;test&lt;/span&gt; s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;/testDir/test &lt;span class="c1"&gt;# コピー&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 mv &lt;span class="nb"&gt;test&lt;/span&gt; s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;/testDir/test &lt;span class="c1"&gt;# 移動&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# S3 -&amp;gt; ローカル 再帰（ディレクトリ全体の操作）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 cp s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;/testDir/test &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="c1"&gt;# コピー&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 mv s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;/testDir/test &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="c1"&gt;# 移動&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 確認&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 ls
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 ls s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# オブジェクト削除&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 rm s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;/testDir/testCP.jpg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 rm s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;/testDir --recursive
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 rm s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt; --recursive &lt;span class="c1"&gt;# バケットの中身すべてが削除される（バケット自体は削除されない）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 同期 rsyncのようなコマンド&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 sync &lt;span class="nb"&gt;test&lt;/span&gt; s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;/testDir/test
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 次回からは差分だけがコピーされる&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 sync &lt;span class="nb"&gt;test&lt;/span&gt; s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;/testDir/test
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 削除も同期&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 sync &lt;span class="nb"&gt;test&lt;/span&gt; s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt;/testDir/test --delete&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;複数のプロファイル&lt;span class="hx:absolute hx:-mt-20" id="複数のプロファイル"&gt;&lt;/span&gt;
&lt;a href="#%e8%a4%87%e6%95%b0%e3%81%ae%e3%83%97%e3%83%ad%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;設定&lt;span class="hx:absolute hx:-mt-20" id="設定"&gt;&lt;/span&gt;
&lt;a href="#%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;コマンドから設定する場合は，オプションで名前を指定し情報を入力する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 設定を開始&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws configure --profile alternative
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#AWS Access Key ID [None]: YYYYYYYYYYYY&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#AWS Secret Access Key [None]: YYYYYYYYYYYYYYYYYYYYYYYY&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#Default region name [None]: us-west-2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#Default output format [None]: json&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;設定が増えている．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# ~/.aws/config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;default&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ap-northeast-1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;alternative&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;us-west-2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# ~/.aws/credentials&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;default&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;aws_access_key_id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;XXXXXXXXXXXX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;aws_secret_access_key&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;XXXXXXXXXXXXXXXXXXXXXXXX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;alternative&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;aws_access_key_id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;YYYYYYYYYYYY&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;aws_secret_access_key&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;YYYYYYYYYYYYYYYYYYYYYYYY&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;使い方&lt;span class="hx:absolute hx:-mt-20" id="使い方"&gt;&lt;/span&gt;
&lt;a href="#%e4%bd%bf%e3%81%84%e6%96%b9" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;オプションを付けてプロファイルを指定する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ec2 describe-key-pairs --profile alternative &lt;span class="p"&gt;|&lt;/span&gt; jq &lt;span class="s1"&gt;&amp;#39;.KeyPairs[].KeyName&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 mb s3://&lt;span class="o"&gt;[&lt;/span&gt;Name&lt;span class="o"&gt;]&lt;/span&gt; --profile alternative&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/jp/cli/"target="_blank" rel="noopener"&gt;AWS コマンドラインインターフェイス &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://qiita.com/takuharu/items/2b983fc447cb5d980751"target="_blank" rel="noopener"&gt;AWS CLIで複数のProfileを使い分ける&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tech.withsin.net/2015/04/17/awscli-profile/"target="_blank" rel="noopener"&gt;awscliを複数profileで使用する&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stedolan.github.io/jq/manual/"target="_blank" rel="noopener"&gt;jq Manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://qiita.com/takech9203/items/4b9394ddd3f190835ca5"target="_blank" rel="noopener"&gt;AWS CLIコマンドの実行オプション&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dev.classmethod.jp/cloud/aws/awscli-tips-ec2-start-stop/"target="_blank" rel="noopener"&gt;【Tips】AWS CLIを使ってAmazon EC2を起動・停止するワンライナーまとめ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://qiita.com/takachan/items/421928dc61c51af97fb1"target="_blank" rel="noopener"&gt;AWS Cli自分用Tips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://qiita.com/bohebohechan/items/891120175efc1b3cc7c4"target="_blank" rel="noopener"&gt;AWS-CLI EC2でおなじものをつくるよ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.task-notes.com/entry/20150904/1441335600"target="_blank" rel="noopener"&gt;AWS CLIのS3コマンドまとめ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Pillowでアノーテーション画像からマスク画像の作成</title><link>https://koji.noshita.net/blog/2017/0224-pillow/</link><pubDate>Fri, 24 Feb 2017 16:43:25 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2017/0224-pillow/</guid><description>
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://github.com/kyamagu/js-segment-annotator"target="_blank" rel="noopener"&gt;JS Segmentation Annotator&lt;/a&gt;で作成されたアノーテーション画像から，
それぞれのラベルに対してマスク画像を作成したい&lt;/p&gt;
&lt;h2&gt;Pillow&lt;span class="hx:absolute hx:-mt-20" id="pillow"&gt;&lt;/span&gt;
&lt;a href="#pillow" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="http://python-pillow.org/"target="_blank" rel="noopener"&gt;Pillpw&lt;/a&gt;は開発の止まっている&lt;a href="http://www.pythonware.com/products/pil/"target="_blank" rel="noopener"&gt;PIL&lt;/a&gt;のfork．
Python3系列にも対応している．&lt;/p&gt;
&lt;h3&gt;導入&lt;span class="hx:absolute hx:-mt-20" id="導入"&gt;&lt;/span&gt;
&lt;a href="#%e5%b0%8e%e5%85%a5" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install Pillow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;だけ．依存するパッケージは&lt;a href="http://pillow.readthedocs.io/en/latest/installation.html"target="_blank" rel="noopener"&gt;公式&lt;/a&gt;を参照．&lt;/p&gt;
&lt;h3&gt;画像のmode（&lt;a href="http://pillow.readthedocs.io/en/latest/handbook/concepts.html#modes"target="_blank" rel="noopener"&gt;Concept| Pillow&lt;/a&gt;）&lt;span class="hx:absolute hx:-mt-20" id="画像のmodeconcept-pillow"&gt;&lt;/span&gt;
&lt;a href="#%e7%94%bb%e5%83%8f%e3%81%aemodeconcept-pillow" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;ピクセルの型や&amp;quot;深さ&amp;quot;を定義するものとして&lt;code&gt;mode&lt;/code&gt;がある．
現在（2017-02-24）は，以下の&lt;code&gt;mode&lt;/code&gt;をサポートしている．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 (1-bit pixels, black and white, stored with one pixel per byte)&lt;/li&gt;
&lt;li&gt;L (8-bit pixels, black and white)&lt;/li&gt;
&lt;li&gt;P (8-bit pixels, mapped to any other mode using a color palette)&lt;/li&gt;
&lt;li&gt;RGB (3x8-bit pixels, true color)&lt;/li&gt;
&lt;li&gt;RGBA (4x8-bit pixels, true color with transparency mask)&lt;/li&gt;
&lt;li&gt;CMYK (4x8-bit pixels, color separation)&lt;/li&gt;
&lt;li&gt;YCbCr (3x8-bit pixels, color video format)&lt;/li&gt;
&lt;li&gt;LAB (3x8-bit pixels, the L&lt;em&gt;a&lt;/em&gt;b color space)&lt;/li&gt;
&lt;li&gt;HSV (3x8-bit pixels, Hue, Saturation, Value color space)&lt;/li&gt;
&lt;li&gt;I (32-bit signed integer pixels)&lt;/li&gt;
&lt;li&gt;F (32-bit floating point pixels)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらの&lt;code&gt;mode&lt;/code&gt;を引数として渡すときは__文字列__として渡す必要がある（1に注意）．&lt;/p&gt;
&lt;h3&gt;対応しているファイルフォーマット（&lt;a href="http://pillow.readthedocs.io/en/latest/handbook/image-file-formats.html"target="_blank" rel="noopener"&gt;Image file formats| Pillow&lt;/a&gt;）&lt;span class="hx:absolute hx:-mt-20" id="対応しているファイルフォーマットimage-file-formats-pillow"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%be%e5%bf%9c%e3%81%97%e3%81%a6%e3%81%84%e3%82%8b%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%83%e3%83%88image-file-formats-pillow" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;現在（2017-02-24）は，以下のフォーマットに対応している．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fully supported formats
&lt;ul&gt;
&lt;li&gt;BMP&lt;/li&gt;
&lt;li&gt;EPS&lt;/li&gt;
&lt;li&gt;GIF&lt;/li&gt;
&lt;li&gt;ICNS&lt;/li&gt;
&lt;li&gt;ICO&lt;/li&gt;
&lt;li&gt;IM&lt;/li&gt;
&lt;li&gt;JPEG&lt;/li&gt;
&lt;li&gt;JPEG 2000&lt;/li&gt;
&lt;li&gt;MSP&lt;/li&gt;
&lt;li&gt;PCX&lt;/li&gt;
&lt;li&gt;PNG&lt;/li&gt;
&lt;li&gt;PPM&lt;/li&gt;
&lt;li&gt;SGI&lt;/li&gt;
&lt;li&gt;SPIDER&lt;/li&gt;
&lt;li&gt;TIFF&lt;/li&gt;
&lt;li&gt;WebP&lt;/li&gt;
&lt;li&gt;XBM&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;特に重要なのはこれらのファイル形式．
他にもRead-onlyやWrite-onlyに対応しているファイル形式もある．&lt;/p&gt;
&lt;a data-toggle="collapse" href="#collapseReadOnly"&gt;
#### 読み込みのみサポート
&lt;/a&gt;
&lt;div class="collapse" id="collapseReadOnly"&gt;
&lt;div class="well"&gt;
&lt;ul&gt;
&lt;li&gt;CUR&lt;/li&gt;
&lt;li&gt;DCX&lt;/li&gt;
&lt;li&gt;DDS&lt;/li&gt;
&lt;li&gt;FLI, FLC&lt;/li&gt;
&lt;li&gt;FPX&lt;/li&gt;
&lt;li&gt;FTEX&lt;/li&gt;
&lt;li&gt;GBR&lt;/li&gt;
&lt;li&gt;GD&lt;/li&gt;
&lt;li&gt;IMT&lt;/li&gt;
&lt;li&gt;IPTC/NAA&lt;/li&gt;
&lt;li&gt;MCIDAS&lt;/li&gt;
&lt;li&gt;MIC&lt;/li&gt;
&lt;li&gt;MPO&lt;/li&gt;
&lt;li&gt;PCD&lt;/li&gt;
&lt;li&gt;PIXAR&lt;/li&gt;
&lt;li&gt;PSD&lt;/li&gt;
&lt;li&gt;TGA&lt;/li&gt;
&lt;li&gt;WAL&lt;/li&gt;
&lt;li&gt;XPM&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;a data-toggle="collapse" href="#collapseWriteOnly"&gt;
#### 書き込みのみサポート
&lt;/a&gt;
&lt;div class="collapse" id="collapseWriteOnly"&gt;
&lt;div class="well"&gt;
&lt;ul&gt;
&lt;li&gt;PALM&lt;/li&gt;
&lt;li&gt;PDF&lt;/li&gt;
&lt;li&gt;XV Thumbnails&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;a data-toggle="collapse" href="#collapseIdentifyOnly"&gt;
#### 認識のみサポート
&lt;/a&gt;
&lt;div class="collapse" id="collapseIdentifyOnly"&gt;
&lt;div class="well"&gt;
&lt;ul&gt;
&lt;li&gt;BUFR&lt;/li&gt;
&lt;li&gt;FITS&lt;/li&gt;
&lt;li&gt;GRIB&lt;/li&gt;
&lt;li&gt;HDF5&lt;/li&gt;
&lt;li&gt;MPEG&lt;/li&gt;
&lt;li&gt;WMF&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;それぞれのフォーマットは対応している&lt;code&gt;mode&lt;/code&gt;などが異なるので気をつける．&lt;/p&gt;
&lt;h3&gt;二値画像のバグ？&lt;span class="hx:absolute hx:-mt-20" id="二値画像のバグ"&gt;&lt;/span&gt;
&lt;a href="#%e4%ba%8c%e5%80%a4%e7%94%bb%e5%83%8f%e3%81%ae%e3%83%90%e3%82%b0" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;参考:&lt;a href="http://stackoverflow.com/questions/7597525/how-to-convert-image-which-mode-is-1-between-pil-and-numpy"target="_blank" rel="noopener"&gt;How to convert image which mode is “1” between PIL and numpy?| stackoverflow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mode='1'&lt;/code&gt;の画像について&lt;code&gt;numpy.array&lt;/code&gt;と&lt;code&gt;PIL.Image.Image&lt;/code&gt;を行き来すると挙動が怪しい．
何か理由があるのかも知れないが，とりあえず今後の課題．
今回は，最後に二値画像へ変換し，途中では&lt;code&gt;model='L'&lt;/code&gt;や&lt;code&gt;dtype=uint8&lt;/code&gt;を利用することにする．&lt;/p&gt;
&lt;h2&gt;アノーテーション画像のデコード&lt;span class="hx:absolute hx:-mt-20" id="アノーテーション画像のデコード"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%a2%e3%83%8e%e3%83%bc%e3%83%86%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e7%94%bb%e5%83%8f%e3%81%ae%e3%83%87%e3%82%b3%e3%83%bc%e3%83%89" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本題に入る．
&lt;a href="https://github.com/kyamagu/js-segment-annotator"target="_blank" rel="noopener"&gt;JS Segmentation Annotator&lt;/a&gt;でラベリングしたアノーテーション画像から，
それぞれのラベルに対応するマスク画像を出力する．&lt;/p&gt;
&lt;p&gt;JS Segmentation Annotatorでラベリングした情報はpngファイルにRGB値としてエンコードされている．
ラベル情報へ戻すにはデコードしてやる必要がある．
エンコード・デコードの方法はGitHubレポジトリの&lt;a href="https://github.com/kyamagu/js-segment-annotator#matlab-tips"target="_blank" rel="noopener"&gt;Matlab tipsの項&lt;/a&gt;に記載されている．&lt;/p&gt;
&lt;p&gt;JS Segmentation Annotator自体の使い方はGitHubレポジトリの&lt;a href="https://github.com/kyamagu/js-segment-annotator/blob/master/README.md"target="_blank" rel="noopener"&gt;README.md&lt;/a&gt;や
&lt;a href="http://kyamagu.github.io/js-segment-annotator/?view=index"target="_blank" rel="noopener"&gt;オンラインデモ&lt;/a&gt;を参照．&lt;/p&gt;
&lt;h3&gt;pngファイルの読み込みとデコード&lt;span class="hx:absolute hx:-mt-20" id="pngファイルの読み込みとデコード"&gt;&lt;/span&gt;
&lt;a href="#png%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e8%aa%ad%e3%81%bf%e8%be%bc%e3%81%bf%e3%81%a8%e3%83%87%e3%82%b3%e3%83%bc%e3%83%89" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;PIL&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# png画像（PATH_TO_ANNOTATION_IMG）を読み込み，RGB画像に変換（アルファチャネルの情報を削除）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PATH_TO_ANNOTATION_IMG&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;RGB&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# RGBそれぞれのチャネルを分割し，numpy.ndarrayへ変換&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;img&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;rArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;asarray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;asarray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;bArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;asarray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# デコード&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;annotation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rArray&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;annotation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bitwise_or&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;annotation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;left_shift&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gArray&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;annotation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bitwise_or&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;annotation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;left_shift&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bArray&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# (X, Y)座標のピクセルのラベル情報&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;annotation&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;出力&lt;span class="hx:absolute hx:-mt-20" id="出力"&gt;&lt;/span&gt;
&lt;a href="#%e5%87%ba%e5%8a%9b" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;二値画像として出力する．保存する前までは&lt;code&gt;dtype=uint8&lt;/code&gt;や&lt;code&gt;mode=P&lt;/code&gt;として扱う．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;imgArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;annotation&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;IDX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ones&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;annotation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uint8&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;zeros&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;annotation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uint8&lt;/span&gt; &lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fromarray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;imgArray&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;img&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OUTPUTPATH&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;IDX&lt;/code&gt;は取り出したいラベルの番号．&lt;/p&gt;
&lt;p&gt;以上で欲しいラベルのマスク画像が出力できた．&lt;/p&gt;
&lt;h2&gt;今後の課題&lt;span class="hx:absolute hx:-mt-20" id="今後の課題"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%8a%e5%be%8c%e3%81%ae%e8%aa%b2%e9%a1%8c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Pillowにおける二値画像の挙動の確認&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Ubuntu 16.04 LTSにCUDAとTensorFlowを入れて深層学習環境をつくる</title><link>https://koji.noshita.net/blog/2017/0223-deeplearningenv/</link><pubDate>Thu, 23 Feb 2017 16:39:03 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2017/0223-deeplearningenv/</guid><description>
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;深層学習やりたい&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tensorflow/tensorflow"target="_blank" rel="noopener"&gt;TensorFlow&lt;/a&gt;を使う&lt;/li&gt;
&lt;li&gt;GPUで高速化する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://github.com/tensorflow/tensorflow"target="_blank" rel="noopener"&gt;TensorFlow&lt;/a&gt;はオープンソースの機械学習ライブラリ．PythonやC++から利用できる．
今回はPythonから使うが，CUDAを利用したGPGPUで高速化する．&lt;/p&gt;
&lt;h2&gt;CUDAとcuDNNの導入&lt;span class="hx:absolute hx:-mt-20" id="cudaとcudnnの導入"&gt;&lt;/span&gt;
&lt;a href="#cuda%e3%81%a8cudnn%e3%81%ae%e5%b0%8e%e5%85%a5" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;CUDA&lt;span class="hx:absolute hx:-mt-20" id="cuda"&gt;&lt;/span&gt;
&lt;a href="#cuda" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="https://developer.nvidia.com/cuda-toolkit"target="_blank" rel="noopener"&gt;CUDA Toolkit&lt;/a&gt;からCUDA Toolkit 8.0のを導入する．
今回はパッケージマネージャを使う．
インストーラをダウンロードし，パッケージマネージャに追加する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_&amp;lt;version&amp;gt;_amd64.deb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo dpkg -i cuda-repo-ubuntu1604_&amp;lt;version&amp;gt;_amd64.deb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo aptitude update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo aptitude install cuda&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;version&amp;gt;&lt;/code&gt;はCUDA Toolkitのバージョン．&lt;/p&gt;
&lt;h4&gt;パスの設定&lt;span class="hx:absolute hx:-mt-20" id="パスの設定"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%91%e3%82%b9%e3%81%ae%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;code&gt;~/.zshrc&lt;/code&gt;に以下を追加．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-Bash" data-lang="Bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/cuda-8.0/bin&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="p"&gt;:+:&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="si"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/cuda-8.0/lib64&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class="p"&gt;:+:&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class="si"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;CUDA_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/cuda&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;テスト&lt;span class="hx:absolute hx:-mt-20" id="テスト"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%86%e3%82%b9%e3%83%88" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;サンプルを試してみる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /usr/local/cuda-8.0/samples
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo make&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;今回の環境だとOpenGL関係と思われるエラーが出て一部ビルドできなかった．
とりあえず今後の課題．&lt;/p&gt;
&lt;p&gt;幾つか試す．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; bin/x86_64/linux/release
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# デバイス情報&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./deviceQuery
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# バンド幅&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./bandwidthTest
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 多体問題&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./nbody -benchmark -numbodies&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;256000&lt;/span&gt; -device&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;cuDNN&lt;span class="hx:absolute hx:-mt-20" id="cudnn"&gt;&lt;/span&gt;
&lt;a href="#cudnn" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="https://developer.nvidia.com/cudnn"target="_blank" rel="noopener"&gt;cuDNN&lt;/a&gt;は深層学習用のCUDAライブラリ．
畳み込みを高速化する．&lt;/p&gt;
&lt;p&gt;&lt;a href="https://developer.nvidia.com/cudnn"target="_blank" rel="noopener"&gt;cuDNN&lt;/a&gt;からダウンロードするために&lt;a href="https://developer.nvidia.com"target="_blank" rel="noopener"&gt;NVIDIA Developer&lt;/a&gt;のアカウントを作る必要がある．&lt;/p&gt;
&lt;p&gt;ダウンロードしたファイルを展開し，CUDAのディレクトリへコピーする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tar xzvf cudnn-8.0-linux-x64-v5.1.tgz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cp -a cuda/lib64/* /usr/local/cuda-8.0/lib64/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cp -a cuda/include/* /usr/local/cuda-8.0/include/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;TensorFlowの導入&lt;span class="hx:absolute hx:-mt-20" id="tensorflowの導入"&gt;&lt;/span&gt;
&lt;a href="#tensorflow%e3%81%ae%e5%b0%8e%e5%85%a5" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;pyenv環境&lt;/li&gt;
&lt;li&gt;python3.5を利用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;を仮定する．
適当な仮想環境を作り，その中でGPU版を導入する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# TensorFlowのインストール（GPU版）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install tensorflow-gpu&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;もしうまくいかない場合は以下を試す（参考:&lt;a href="https://www.tensorflow.org/install/install_linux"target="_blank" rel="noopener"&gt;Installing with virtualenv| TensorFlow&lt;/a&gt;, &lt;a href="https://www.tensorflow.org/install/install_linux#TF_PYTHON_URL"target="_blank" rel="noopener"&gt;The URL of the TensorFlow Python package|TensorFlow&lt;/a&gt;）．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;TF_PYTHON_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0-cp35-cp35m-linux_x86_64.whl
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install --upgrade TF_PYTHON_URL&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;これで導入できた．&lt;/p&gt;
&lt;h3&gt;テスト&lt;span class="hx:absolute hx:-mt-20" id="テスト-1"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%86%e3%82%b9%e3%83%88-1" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;GPUが利用できているか確認．
&lt;a href="https://www.tensorflow.org/tutorials/using_gpu"target="_blank" rel="noopener"&gt;チュートリアル&lt;/a&gt;から以下のコードを試す．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Creates a graph.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;constant&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6.0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;constant&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6.0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;matmul&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Creates a session with log_device_placement set to True.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sess&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Session&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ConfigProto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;log_device_placement&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Runs the op.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sess&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;うまくいけば環境が構築できたことになる．&lt;/p&gt;
&lt;h3&gt;おまけ：GPUの監視&lt;span class="hx:absolute hx:-mt-20" id="おまけgpuの監視"&gt;&lt;/span&gt;
&lt;a href="#%e3%81%8a%e3%81%be%e3%81%91gpu%e3%81%ae%e7%9b%a3%e8%a6%96" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;nvidia-smi&lt;/code&gt;コマンドでGPUの使用状況を確認できる．&lt;/p&gt;
&lt;h2&gt;今後の課題&lt;span class="hx:absolute hx:-mt-20" id="今後の課題"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%8a%e5%be%8c%e3%81%ae%e8%aa%b2%e9%a1%8c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;テストをビルドするときに出たエラーの解消&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.nvidia.com/digits"target="_blank" rel="noopener"&gt;DIGIT&lt;/a&gt;を試す&lt;/li&gt;
&lt;li&gt;&lt;a href="https://keras.io"target="_blank" rel="noopener"&gt;Keras&lt;/a&gt;を試す&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html"target="_blank" rel="noopener"&gt;NVIDIA CUDA Installation Guide for Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://qiita.com/tetchi821/items/614ea4ceb4c193e14c6c"target="_blank" rel="noopener"&gt;CUDA 8.0 RCをUbuntu 16.04 LTS + GTX1080にインストール&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://qiita.com/JeJeNeNo/items/05e148a325192004e2cd"target="_blank" rel="noopener"&gt;CUDA 8.0とcuDNN 5.1をUbuntu 16.04LTSにインストールする&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tensorflow.org/versions/r0.11/get_started/os_setup"target="_blank" rel="noopener"&gt;Download and Setup| TensorFlow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://etanoke.hatenablog.com/entry/2016/10/09/184816"target="_blank" rel="noopener"&gt;Ubuntu 16.04でTensorFlow(GPU版)の環境構築&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Ubuntu 16.04 LTS &amp; Windows10デュアルブートでのOS切り替え</title><link>https://koji.noshita.net/blog/2017/0206-dualboot/</link><pubDate>Mon, 06 Feb 2017 00:14:07 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2017/0206-dualboot/</guid><description>
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;デュアルブート（Ubuntu 16.04 LTSとWindows10）のOSをリモート接続している状態で切り替えたい．&lt;/p&gt;
&lt;h3&gt;仮定&lt;span class="hx:absolute hx:-mt-20" id="仮定"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%ae%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Ubuntu 16.04 LTSとWindows10でデュアルブートを構築&lt;/li&gt;
&lt;li&gt;ブートローダは&lt;a href="https://www.gnu.org/software/grub/"target="_blank" rel="noopener"&gt;grub&lt;/a&gt;を利用&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Ubuntu16.04 LST → Windows10&lt;span class="hx:absolute hx:-mt-20" id="ubuntu1604-lst--windows10"&gt;&lt;/span&gt;
&lt;a href="#ubuntu1604-lst--windows10" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;grub-reboot&lt;/code&gt;コマンドを使う．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo grub-reboot &lt;span class="o"&gt;[&lt;/span&gt;num&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo shutdown -r now&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;[num]は&lt;code&gt;/boot/grub/grub.cfg &lt;/code&gt;のエントリ番号．
対象がsubmenuの中に存在する場合は以下のようにsubmenuを指定する番号とその内部でカーネルを指定するエントリ番号を&lt;code&gt;&amp;gt;&lt;/code&gt;でつないで入力する．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo grub-reboot &lt;span class="s1"&gt;&amp;#39;[num:submenu]&amp;gt;[num:menu]&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;エントリ番号の確認&lt;span class="hx:absolute hx:-mt-20" id="エントリ番号の確認"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%a8%e3%83%b3%e3%83%88%e3%83%aa%e7%95%aa%e5%8f%b7%e3%81%ae%e7%a2%ba%e8%aa%8d" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;カーネルを更新するとエントリが増えていくため，起動したいOSのエントリ番号が変わることがある（最近のUbuntuではsubmenu以下に古いカーネルが追加されるため，エントリ番号は通常変化しない）．
以下のコマンドを使い，エントリ番号を確認すると良い．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;grep -e &lt;span class="s2"&gt;&amp;#34;menuentry &amp;#34;&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;#34;^submenu&amp;#34;&lt;/span&gt; /boot/grub/grub.cfg&lt;span class="p"&gt;|&lt;/span&gt;sed &lt;span class="s2"&gt;&amp;#34;s|\$menuentry_id_option .*&lt;/span&gt;$&lt;span class="s2"&gt;||g&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;sed &lt;span class="s2"&gt;&amp;#34;s|--class .*&lt;/span&gt;$&lt;span class="s2"&gt;||g&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;nl -n ln -v &lt;span class="m"&gt;0&lt;/span&gt; -b p&lt;span class="s2"&gt;&amp;#34;^[ ]&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;nl -v &lt;span class="m"&gt;0&lt;/span&gt; -b p&lt;span class="s2"&gt;&amp;#34;^[^0-9]&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Windows10 → Ubuntu16.04 LST&lt;span class="hx:absolute hx:-mt-20" id="windows10--ubuntu1604-lst"&gt;&lt;/span&gt;
&lt;a href="#windows10--ubuntu1604-lst" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;/boot/grub/grubenv&lt;/code&gt;を書き換え，次回起動時のOSを指定する．
これは&lt;code&gt;grub-reboot&lt;/code&gt;コマンドがやっていることと同じこと．&lt;/p&gt;
&lt;h3&gt;システム領域をマウントする&lt;span class="hx:absolute hx:-mt-20" id="システム領域をマウントする"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%e9%a0%98%e5%9f%9f%e3%82%92%e3%83%9e%e3%82%a6%e3%83%b3%e3%83%88%e3%81%99%e3%82%8b" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;/boot&lt;/code&gt;が存在するパーティションをマウントする．
Windows側からLinuxパーティション（今回はext4）をマウントするために&lt;a href="http://www.ext2fsd.com/"target="_blank" rel="noopener"&gt;Ext2 Volume Manager&lt;/a&gt;を利用する．&lt;/p&gt;
&lt;p&gt;&lt;img src="https://koji.noshita.net/materials/2017/0206-dualboot/ext2_01.png" alt="EXT2VolumeManager" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;利用していないドライブキャラクタ（たとえば，Eドライブ）を適当に設定しマウントする．&lt;/p&gt;
&lt;p&gt;&lt;img src="https://koji.noshita.net/materials/2017/0206-dualboot/ext2_02.png" alt="grubenv" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;マウントしたドライブに&lt;code&gt;/boot/grub/grubenv&lt;/code&gt;を確認．&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;/boot/grub/grubenv&lt;/code&gt;を書き換える&lt;span class="hx:absolute hx:-mt-20" id="bootgrubgrubenvを書き換える"&gt;&lt;/span&gt;
&lt;a href="#bootgrubgrubenv%e3%82%92%e6%9b%b8%e3%81%8d%e6%8f%9b%e3%81%88%e3%82%8b" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;適当なテキストエディタで&lt;code&gt;/boot/grub/grubenv&lt;/code&gt;を以下のように書き換える．
[num]は同様にエントリ番号．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# GRUB Environment Block
next_entry=[num]
###########################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;この状態は&lt;code&gt;sudo grub-reboot [num]&lt;/code&gt;を実行した状況と同じなので，再起動すると指定したOSが起動する．&lt;/p&gt;
&lt;h2&gt;参考&lt;span class="hx:absolute hx:-mt-20" id="参考"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%82%e8%80%83" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://askubuntu.com/questions/635205/link-to-restart-from-windows-to-ubuntu"target="_blank" rel="noopener"&gt;Link to restart from Windows to Ubuntu | StackExchange&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ankyo.blog.so-net.ne.jp/2011-04-04"target="_blank" rel="noopener"&gt;【Ubuntu】WindowsからUbuntuのファイルシステム(ext4)にアクセスする方法 (Ext2Fsd ver. 0.50)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://hro-blog.blogspot.jp/2016/02/ext3windows10.html"target="_blank" rel="noopener"&gt;ext3ファイルシステムをWindows10で読み書き&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.ubuntu.com/community/Grub2/Submenus"target="_blank" rel="noopener"&gt; Grub2/Submenus&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Webサイト管理・公開をhugo+GitHub+S3で</title><link>https://koji.noshita.net/blog/2017/0202-webpage/</link><pubDate>Thu, 02 Feb 2017 15:25:08 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2017/0202-webpage/</guid><description>
&lt;h2&gt;やりたいこと&lt;span class="hx:absolute hx:-mt-20" id="やりたいこと"&gt;&lt;/span&gt;
&lt;a href="#%e3%82%84%e3%82%8a%e3%81%9f%e3%81%84%e3%81%93%e3%81%a8" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Webページを&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;静的サイトジェネレータで作成&lt;/li&gt;
&lt;li&gt;GitHubで管理&lt;/li&gt;
&lt;li&gt;S3でホスティング&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;静的サイトジェネレータ：Hugo&lt;span class="hx:absolute hx:-mt-20" id="静的サイトジェネレータhugo"&gt;&lt;/span&gt;
&lt;a href="#%e9%9d%99%e7%9a%84%e3%82%b5%e3%82%a4%e3%83%88%e3%82%b8%e3%82%a7%e3%83%8d%e3%83%ac%e3%83%bc%e3%82%bfhugo" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;リクエストに対してページを動的に生成する動的サイトに対して，サーバに設置したhtmlファイルなどをそのまま返すサイトを静的サイト（static site）という．
静的サイトジェネレータは，静的サイトの生成をテンプレートとMarkdownなどの軽量マークアップ言語からおこなうフレームワークのこと．
データベースが必要ない，基本的にテキストデータなのでバージョン管理システムとの相性が良いという点がCMSなどと比べたときのメリット．&lt;/p&gt;
&lt;p&gt;以前は，Pythonベースの&lt;a href="https://blog.getpelican.com/"target="_blank" rel="noopener"&gt;Pelican&lt;/a&gt;を使っていたが，
今回はその中でもビルド速度に定評がある&lt;a href="https://gohugo.io/"target="_blank" rel="noopener"&gt;Hugo&lt;/a&gt;を使うことにした．&lt;/p&gt;
&lt;p&gt;その他の人気静的サイトジェネレータについては&lt;a href="https://www.staticgen.com/"target="_blank" rel="noopener"&gt;StaticGen&lt;/a&gt;が参考になる．&lt;/p&gt;
&lt;h2&gt;ホスティング：S3&lt;span class="hx:absolute hx:-mt-20" id="ホスティングs3"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%9b%e3%82%b9%e3%83%86%e3%82%a3%e3%83%b3%e3%82%b0s3" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;AWSの&lt;a href="https://aws.amazon.com/s3/"target="_blank" rel="noopener"&gt;S3&lt;/a&gt;でホスティングする．&lt;/p&gt;
&lt;p&gt;次の状況を想定する．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;S3 Bucket「www.test.com」でホスティングする&lt;/li&gt;
&lt;li&gt;CloudFrontを経由して配信する&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;IAMユーザの作成とポリシー設定&lt;span class="hx:absolute hx:-mt-20" id="iamユーザの作成とポリシー設定"&gt;&lt;/span&gt;
&lt;a href="#iam%e3%83%a6%e3%83%bc%e3%82%b6%e3%81%ae%e4%bd%9c%e6%88%90%e3%81%a8%e3%83%9d%e3%83%aa%e3%82%b7%e3%83%bc%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;S3へのデプロイ用IAMユーザを作成し，ポリシーを設定する．
例えば，IAMユーザ「s3-deploy-web」を作成し，
ポリシー「s3-deploy」を以下のように作成・アタッチする．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;#34;Version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2012-10-17&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;#34;Statement&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;Effect&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Allow&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;Action&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;s3:GetObject&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;s3:PutObject&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;s3:DeleteObject&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;s3:ListObject&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;s3:ListBucket&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;Resource&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;arn:aws:s3:::www.test.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;arn:aws:s3:::www.test.com/*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Bucketの作成とポリシー設定&lt;span class="hx:absolute hx:-mt-20" id="bucketの作成とポリシー設定"&gt;&lt;/span&gt;
&lt;a href="#bucket%e3%81%ae%e4%bd%9c%e6%88%90%e3%81%a8%e3%83%9d%e3%83%aa%e3%82%b7%e3%83%bc%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;新規にBucket「www.test.com」を作成する．
プロパティ → 静的ウェブサイトホスティング から静的サイトのホスティングを有効にする．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;インデックスドキュメント：index.html&lt;/li&gt;
&lt;li&gt;エラードキュメント：404.html&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;をそれぞれ設定する．&lt;/p&gt;
&lt;h3&gt;CloudFront&lt;span class="hx:absolute hx:-mt-20" id="cloudfront"&gt;&lt;/span&gt;
&lt;a href="#cloudfront" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;いわゆるCDNサービス．世界中のエッジサーバから配信することで高速な配信が可能になる．&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;サブディレクトリでindex.htmlへの補完を利用する場合は注意！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;以下の設定をおこなう．
その他はデフォルト．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Origin Settings # サブディレクトリでindex.htmlへの補完を利用しない場合
&lt;ul&gt;
&lt;li&gt;Origin Domain Name: &lt;a href="https://www.test.com.s3.amazonaws.com"target="_blank" rel="noopener"&gt;www.test.com.s3.amazonaws.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Restrict Bucket Access: yes
&lt;ul&gt;
&lt;li&gt;Origin Access Identity: Create a New Identity&lt;/li&gt;
&lt;li&gt;Grant Read Permissions on Bucket:&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Origin Settings # サブディレクトリでindex.htmlへの補完を利用する場合，この場合はS3への直接アクセスが可能になる．
&lt;ul&gt;
&lt;li&gt;Origin Domain Name: S3の静的サイトホスティングのエンドポイント&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Default Cache Behavior Settings
&lt;ul&gt;
&lt;li&gt;Viewer Protocol Policy: Redirect HTTP to HTTPS&lt;/li&gt;
&lt;li&gt;もし投稿フォームがあればPOSTを許可&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Distribution Settings
&lt;ul&gt;
&lt;li&gt;Price Class: 適切な範囲を指定&lt;/li&gt;
&lt;li&gt;Alternate Domain Name: &lt;a href="https://www.test.com"target="_blank" rel="noopener"&gt;www.test.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SSL Certificate: Custom SSL Certificate
&lt;ul&gt;
&lt;li&gt;Request or Import a Certificate with ACMで新規のSSL証明書を発行してもらう&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Supported HTTP Versions: HTTP/2, HTTP/1.1, HTTP/1.0&lt;/li&gt;
&lt;li&gt;Default Root Object: index.html&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;404エラー&lt;span class="hx:absolute hx:-mt-20" id="404エラー"&gt;&lt;/span&gt;
&lt;a href="#404%e3%82%a8%e3%83%a9%e3%83%bc" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;サブディレクトリでindex.htmlへの補完を利用しない設定の場合は，
404エラーが期待される場面で&lt;code&gt;AccessDenied&lt;/code&gt;（403エラー）が出現する．&lt;/p&gt;
&lt;p&gt;詳細は理解していないが，&lt;code&gt;Restrict Bucket Access&lt;/code&gt;の設定が効いているような&amp;hellip;？&lt;/p&gt;
&lt;p&gt;今回はCloudfrontの&lt;code&gt;Error Pages&lt;/code&gt;で対応することにした．
以下の様に設定する．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP Error Code: 403&lt;/li&gt;
&lt;li&gt;Response Page Path: /404.html&lt;/li&gt;
&lt;li&gt;HTTP Response Code: 404&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;403エラーを受けて404エラーを返す．
大丈夫？今後の課題．&lt;/p&gt;
&lt;h2&gt;ビルド：GitHub + CircleCI&lt;span class="hx:absolute hx:-mt-20" id="ビルドgithub--circleci"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%93%e3%83%ab%e3%83%89github--circleci" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回はGitHubリポジトリへpushしたら，自動でビルドしてS3にホスティングする仕組みを作る．&lt;/p&gt;
&lt;p&gt;&lt;a href="https://circleci.com/"target="_blank" rel="noopener"&gt;CircleCI&lt;/a&gt;はビルド・テスト・デプロイ特化型の継続的インテグレーション（Continuous Integration）サービス．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GitHubのプライベートリポジトリで使いたい&lt;/li&gt;
&lt;li&gt;無料&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;という条件で選んだ．&lt;/p&gt;
&lt;h3&gt;Git(Hub)の設定&lt;span class="hx:absolute hx:-mt-20" id="githubの設定"&gt;&lt;/span&gt;
&lt;a href="#github%e3%81%ae%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;GitHub用にWebサイトの編集用リポジトリを作成．今回はprivateにする．&lt;/li&gt;
&lt;li&gt;.gitignoreは&lt;a href="https://github.com/tehbilly/hugo-example-blog"target="_blank" rel="noopener"&gt;Hugo docs&lt;/a&gt;の&lt;a href="https://github.com/tehbilly/hugo-example-blog/blob/master/.gitignore"target="_blank" rel="noopener"&gt;.gitignore&lt;/a&gt;ファイルを参考にした．&lt;/li&gt;
&lt;li&gt;とりあえず一度pushしておく．&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;CircleCIの設定&lt;span class="hx:absolute hx:-mt-20" id="circleciの設定"&gt;&lt;/span&gt;
&lt;a href="#circleci%e3%81%ae%e8%a8%ad%e5%ae%9a" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;CircleCIにGitHubアカウントでログインする．&lt;/li&gt;
&lt;li&gt;対象にしたいレポジトリのBuild Projectボタンを押す&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;もし，circle.ymlがルートにあれば一度目のBuildが走る．&lt;/p&gt;
&lt;p&gt;なければcircle.ymlを追加してpushすると，Buildが実行される．
今回は以下のようなファイルにした．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;checkout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;post&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;git submodule sync&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;git submodule update --init --recursive&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;machine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Asia/Tokyo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;dependencies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;override&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;sudo pip install awscli&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;sudo pip install Pygments&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;go get -v github.com/spf13/hugo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;git config --global user.name &amp;#34;noshita&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;git config --global user.email &amp;#34;noshita@morphometrics.jp&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;post&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;aws configure set region us-west-2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;aws configure set preview.cloudfront true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;override&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;echo &amp;#34;Nothing to do here&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;deployment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;production&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;branch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;master&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;commands&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;hugo --cleanDestinationDir &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;aws s3 sync ~/www.test.com/public/ s3://www.test.com/ --delete&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;aws cloudfront create-invalidation --distribution-id &amp;lt;CloudFront ID&amp;gt; --paths &amp;#39;/*&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;DNSの設定：お名前.com&lt;span class="hx:absolute hx:-mt-20" id="dnsの設定お名前com"&gt;&lt;/span&gt;
&lt;a href="#dns%e3%81%ae%e8%a8%ad%e5%ae%9a%e3%81%8a%e5%90%8d%e5%89%8dcom" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;今回は&lt;a href="https://www.onamae.com/"target="_blank" rel="noopener"&gt;お名前.com&lt;/a&gt;で取得したドメインを利用することにする．&lt;/p&gt;
&lt;p&gt;DNS関連機能の設定 → DNSレコード設定を利用する，からCNAMEレコードを設定する．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ホスト名: &lt;a href="https://www.test.com"target="_blank" rel="noopener"&gt;www.test.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;TYPE: CNAME&lt;/li&gt;
&lt;li&gt;TTL: 300&lt;/li&gt;
&lt;li&gt;VALUE: CloudFrontのドメイン名&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;確認&lt;span class="hx:absolute hx:-mt-20" id="確認"&gt;&lt;/span&gt;
&lt;a href="#%e7%a2%ba%e8%aa%8d" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;CDNの配信やDNSの設定の反映を待って，アクセスできるかを確認する．
アクセスできれば設定終了．&lt;/p&gt;
&lt;p&gt;ちなみに，&lt;a href="https://koji.noshita.net"target="_blank" rel="noopener"&gt;当サイト&lt;/a&gt;の管理は上記の方法でおこなっている．&lt;/p&gt;
&lt;h2&gt;今後の課題&lt;span class="hx:absolute hx:-mt-20" id="今後の課題"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%8a%e5%be%8c%e3%81%ae%e8%aa%b2%e9%a1%8c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;サブディレクトリでindex.htmlへの補完を利用しない設定の場合に，404エラーが期待される場面で&lt;code&gt;AccessDenied&lt;/code&gt;（403エラー）が出現する．
&lt;ul&gt;
&lt;li&gt;何故起こるのかの理解&lt;/li&gt;
&lt;li&gt;どう対応するのが適切かの把握&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>論文が出版されました</title><link>https://koji.noshita.net/blog/2015/1204-newpapernoshitaetal2016/</link><pubDate>Fri, 04 Dec 2015 12:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2015/1204-newpapernoshitaetal2016/</guid><description>
&lt;h2&gt;概要&lt;span class="hx:absolute hx:-mt-20" id="概要"&gt;&lt;/span&gt;
&lt;a href="#%e6%a6%82%e8%a6%81" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;　腹足類（巻貝）の殻の形態をコントロールする殻成長の勾配パタンをCTデータから定量化する手法を開発しました．&lt;/p&gt;
&lt;p&gt;　腹足類の殻は殻口縁辺部で炭酸カルシウムの結晶を少しずつ付加しながら成長します．
殻の“外側”が“内側”に比べ大きく成長することで，多くの腹足類では殻が巻くことになります（下図）．
本研究は，こうして出来上がった殻が，どのような成長勾配のパタンから生じたかを定量的に検証するための解析手法を提供します．&lt;/p&gt;
&lt;p&gt;　本手法は，殻の巻きパタンと殻口の形状が成長に伴い変化する場合（ヘビガイやノタウチガイなどの“異常巻き”巻貝）にも適用できるようデザインされています．&lt;/p&gt;
&lt;p&gt;　本手法はマイクロCTスキャナーのデータ（3Dボクセルデータ）の利用を想定しています．
今後のCTデータの普及にともない活用できるケースが増えてくると考えています．&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
&lt;img src="https://koji.noshita.net/materials/2015/newpaperNoshitaetal2016/01.png" title="研究目的" alt="研究目的" loading="lazy" /&gt;
&lt;figcaption&gt;研究目的&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;　本研究は，&lt;a href="https://sites.google.com/site/kshimizulst/"target="_blank" rel="noopener"&gt;清水啓介&lt;/a&gt;
博士（JAMSTEC）と&lt;a href="http://www.um.u-tokyo.ac.jp/hp/sasaki/index.htm"target="_blank" rel="noopener"&gt;佐々木猛智&lt;/a&gt;
准教授（東京大学総合研究博物館）との共同研究です．&lt;/p&gt;
&lt;h2&gt;論文情報&lt;span class="hx:absolute hx:-mt-20" id="論文情報"&gt;&lt;/span&gt;
&lt;a href="#%e8%ab%96%e6%96%87%e6%83%85%e5%a0%b1" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Noshita, K.&lt;/strong&gt;, Shimizu, K., &amp;amp; Sasaki, T. (2016). Geometric analysis and estimation of the growth rate gradient on gastropod shells. Journal of Theoretical Biology, 389(C), 11–19. &lt;a href="http://doi.org/10.1016/j.jtbi.2015.10.011"target="_blank" rel="noopener"&gt;http://doi.org/10.1016/j.jtbi.2015.10.011&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Dataverseから画像データをまとめて取得する</title><link>https://koji.noshita.net/blog/2015/1125-dataverse/</link><pubDate>Wed, 25 Nov 2015 19:18:01 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2015/1125-dataverse/</guid><description>
&lt;h2&gt;問題&lt;span class="hx:absolute hx:-mt-20" id="問題"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%8f%e9%a1%8c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://dataverse.harvard.edu/"target="_blank" rel="noopener"&gt;Harvard Dataverse&lt;/a&gt;に保存されている&lt;br&gt;
あるdatasetから画像データを一括で保存しようとしたらサイズ制限のため&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;***.jpeg &lt;span class="o"&gt;(&lt;/span&gt;image/jpeg&lt;span class="o"&gt;)&lt;/span&gt; **** bytes.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;***.jpeg &lt;span class="o"&gt;(&lt;/span&gt;image/jpeg&lt;span class="o"&gt;)&lt;/span&gt; skipped because the total size of the download bundle exceeded the limit of ** bytes.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;***.jpeg &lt;span class="o"&gt;(&lt;/span&gt;image/jpeg&lt;span class="o"&gt;)&lt;/span&gt; skipped because the total size of the download bundle exceeded the limit of ** bytes.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;みたいな記述のMANIFEST.TEXを含んだzipファイルがダウンロードされる．&lt;br&gt;
結果として，数個しか画像データがダウンロード出来ない．&lt;br&gt;
手動で一個一個ファイルを落とすなんてイヤだ．&lt;/p&gt;
&lt;h2&gt;解決策&lt;span class="hx:absolute hx:-mt-20" id="解決策"&gt;&lt;/span&gt;
&lt;a href="#%e8%a7%a3%e6%b1%ba%e7%ad%96" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;画像データそれぞれのurlを取得して，保存する．&lt;/p&gt;
&lt;h2&gt;手順&lt;span class="hx:absolute hx:-mt-20" id="手順"&gt;&lt;/span&gt;
&lt;a href="#%e6%89%8b%e9%a0%86" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;特定のdataverseがもつfileの一覧を取得する&lt;span class="hx:absolute hx:-mt-20" id="特定のdataverseがもつfileの一覧を取得する"&gt;&lt;/span&gt;
&lt;a href="#%e7%89%b9%e5%ae%9a%e3%81%aedataverse%e3%81%8c%e3%82%82%e3%81%a4file%e3%81%ae%e4%b8%80%e8%a6%a7%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href="http://guides.dataverse.org/en/latest/api/index.html"target="_blank" rel="noopener"&gt;dataverseのAPI&lt;/a&gt;を見ると
&lt;a href="http://guides.dataverse.org/en/latest/api/search.html"target="_blank" rel="noopener"&gt;Search API&lt;/a&gt;があるらしいので，これに従い取得する．&lt;/p&gt;
&lt;p&gt;とりあえずブラウザで確認したいって人は&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;https://dataverse.harvard.edu/api/search?=q=*&amp;amp;subtree=[dataverseのid]&amp;amp;type=file&amp;amp;key=[APIトークン]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;でチェック．
[dataverseのid]は欲しいデータをもつdatasetが含まれるdataverseのidを指定する．&lt;br&gt;
idはdataverseのurlからわかる．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;https://dataverse.harvard.edu/dataverse/&lt;span class="o"&gt;[&lt;/span&gt;dataverseのid&lt;span class="o"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;[APIトークン]はHarvard Dataverseにアカウントを作ると，生成できる．&lt;br&gt;
参照: &lt;a href="http://guides.dataverse.org/en/latest/user/account.html"target="_blank" rel="noopener"&gt;Account Creation &amp;amp; Management&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今回はcURLで&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X GET https://dataverse.harvard.edu/api/search?&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;*&lt;span class="se"&gt;\&amp;amp;&lt;/span&gt;&lt;span class="nv"&gt;subtree&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;特定のdataverseのid&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="se"&gt;\&amp;amp;&lt;/span&gt;&lt;span class="nv"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;file&lt;span class="se"&gt;\&amp;amp;&lt;/span&gt;&lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;APIトークン&lt;span class="o"&gt;]&lt;/span&gt; &amp;gt; &lt;span class="o"&gt;[&lt;/span&gt;保存先のファイル名&lt;span class="o"&gt;]&lt;/span&gt;.json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;のようにしてjsonファイルとして保存する．&lt;br&gt;
今回はfilelist.jsonとして保存したとして話を進める．&lt;/p&gt;
&lt;p&gt;特定のdatasetがもつfileの一覧を取得できたら早いのだが，
subtreeオプションやfqオプションでは対応できなさそう．&lt;br&gt;
なので一旦全部ダウンロードしてから適当なfileだけを選び出す．&lt;/p&gt;
&lt;h3&gt;必要なfileの取捨選択&lt;span class="hx:absolute hx:-mt-20" id="必要なfileの取捨選択"&gt;&lt;/span&gt;
&lt;a href="#%e5%bf%85%e8%a6%81%e3%81%aafile%e3%81%ae%e5%8f%96%e6%8d%a8%e9%81%b8%e6%8a%9e" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;取得したjsonファイルを読み込んでフィールドの値に応じて必要なfileをフィルタリングする．&lt;br&gt;
今回はpythonを利用した．&lt;/p&gt;
&lt;p&gt;大体こんな感じ．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;re&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="nn"&gt;json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# fileの情報一覧の読み込み&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;filelist.json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;r&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;filelist&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 特定のデータセットを指定するパタン&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 今回はDOIで指定する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;PTNDOI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;[データセットを指定するDOI]&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 欲しいfileの種類を指定するパタン&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;PTNTYPE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;[fileのtype，e.g. 拡張子]&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 必要なfile一覧の生成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;targetlist&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;filelist&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;PTNDOI&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;search&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="s1"&gt;&amp;#39;dataset_citation&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;PTNTYPE&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;search&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="s1"&gt;&amp;#39;file_type&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;targetlist&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&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="s1"&gt;&amp;#39;name&amp;#39;&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="s1"&gt;&amp;#39;url&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;[データセットを指定するDOI]や[fileのtype]には適切な正規表現パタンを記述する．&lt;/p&gt;
&lt;p&gt;後でfileをダウンロードするときにファイル名を保持したいので(url,name)を値に持つリストであるtargetlistを作っている．&lt;/p&gt;
&lt;h3&gt;データのダウンロード&lt;span class="hx:absolute hx:-mt-20" id="データのダウンロード"&gt;&lt;/span&gt;
&lt;a href="#%e3%83%87%e3%83%bc%e3%82%bf%e3%81%ae%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;wgetなどを利用しても良いが，-iオプション利用時に名前を指定する方法がよくわからなかったので引き続きpythonで作業した．&lt;br&gt;
大体こんな感じ．&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;urllib.request&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 出力先の指定&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;OUTPURDIR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;出力先のディレクトリ&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# fileのダウンロード&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;targetlist&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;outputfilepath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OUTPUTDIR&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="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 既にファイルが存在する場合は保存しない&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;outputfilepath&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;urlretrieve&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="n"&gt;outputfilepath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied!"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;今後の課題&lt;span class="hx:absolute hx:-mt-20" id="今後の課題"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%8a%e5%be%8c%e3%81%ae%e8%aa%b2%e9%a1%8c" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以上のように，pythonを使うとDataverseのデータを割と簡単に取得できた．&lt;br&gt;
しかし，ホントはもっとdataverseのapiを駆使してシンプルに操作すべきだと思う．&lt;br&gt;
Search APIのfqオプションの働きがよくわからず，例に上がっていたfq=publication_date_s:2015すらうまく機能しなかった．&lt;/p&gt;
&lt;p&gt;また&lt;a href="http://guides.dataverse.org/en/latest/api/dataaccess.html"target="_blank" rel="noopener"&gt;Data Access API&lt;/a&gt;も存在するので&lt;br&gt;
もう少し賢くダウンロード出来たかもしれない．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dataverseのAPI
&lt;ul&gt;
&lt;li&gt;Search API&lt;/li&gt;
&lt;li&gt;Data Access API&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>I've Moved</title><link>https://koji.noshita.net/blog/2015/0806-moving/</link><pubDate>Thu, 06 Aug 2015 01:00:00 +0000</pubDate><author>[110 111 115 104 105 116 97 64 109 111 114 112 104 111 109 101 116 114 105 99 115 46 106 112] (Koji Noshita)</author><guid>https://koji.noshita.net/blog/2015/0806-moving/</guid><description>
&lt;p&gt;Please let me know if you encounter any problems.&lt;/p&gt;
&lt;p&gt;noshita at morphometrics.jp&lt;/p&gt;</description></item></channel></rss>