<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>環境構築 – AichiLog</title>
	<atom:link href="https://aichi.blog/tag/%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89/feed/" rel="self" type="application/rss+xml" />
	<link>https://aichi.blog</link>
	<description>学びて富み　富みて学ぶ</description>
	<lastBuildDate>Sat, 29 Mar 2025 15:32:16 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://aichi.blog/wp-content/uploads/2021/12/cropped-915AB649-D1E9-4810-9658-CB8CE1B605FD.JPEG-2-32x32.jpeg</url>
	<title>環境構築 – AichiLog</title>
	<link>https://aichi.blog</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://aichi.blog/tag/%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89/feed/"/>
	<item>
		<title>【Git】commitzenをシェルスクリプトで実行</title>
		<link>https://aichi.blog/how-to-run-commitizen-with-shell-script/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-run-commitizen-with-shell-script</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Tue, 05 Dec 2023 03:56:11 +0000</pubDate>
				<category><![CDATA[コマンドライン]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3409</guid>

					<description><![CDATA[<p>達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ お疲れ様です。 今回は、commitzenに似た機能を実現できる、シェルスクリプトを作成しましたので、共有します。 目次 commitzenの問題スクリ [&#8230;]</p>
<p>The post <a href="https://aichi.blog/how-to-run-commitizen-with-shell-script/">【Git】commitzenをシェルスクリプトで実行</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<a rel="nofollow" href="//ck.jp.ap.valuecommerce.com/servlet/referral?sid=3639978&#038;pid=890530433&#038;vc_url=https%3A%2F%2Fstore.shopping.yahoo.co.jp%2Fsapphire98%2Fsapphire0dbc66359d.html%3Fsc_i%3Dshopping-pc-web-result-item-rsltlst-img"><img decoding="async" src="//ad.jp.ap.valuecommerce.com/servlet/gifbanner?sid=3639978&#038;pid=890530433" height="1" width="0" border="0">達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ</a>



<p>お疲れ様です。</p>



<p>今回は、commitzenに似た機能を実現できる、シェルスクリプトを作成しましたので、共有します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">commitzenの問題</a></li><li><a href="#toc2" tabindex="0">スクリプト</a></li><li><a href="#toc3" tabindex="0">実行方法</a></li><li><a href="#toc4" tabindex="0">おわり</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">commitzenの問題</span></h2>



<p>コミットメッセージを標準化する方法として、「commitzen」が挙げられると思います。</p>





<a rel="noopener" href="https://github.com/commitizen/cz-cli" title="GitHub - commitizen/cz-cli: The commitizen command line utility. #BlackLivesMatter" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://opengraph.githubassets.com/c2ccb40046f0a4fdf5c243200b44192b75497cd231158330cc6a56882c001fba/commitizen/cz-cli" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">GitHub - commitizen/cz-cli: The commitizen command line utility. #BlackLivesMatter</div><div class="blogcard-snippet external-blogcard-snippet">The commitizen command line utility. #BlackLivesMatter - commitizen/cz-cli</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/commitizen/cz-cli" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>




<p>しかし、このツールは、毎回インストールする手間や、Node.jsベースで、プロジェクトによっては追加の依存関係が必要になったりします。</p>



<p>そのような際、別の選択肢を一から探すのは手間です。</p>



<p>そのため、今回、シェルスクリプトを作成して、いかなるプロジェクトでも、同様のコミットメッセージを導入できるようにしました。</p>



<h2 class="wp-block-heading"><span id="toc2">スクリプト</span></h2>



<pre class="wp-block-code"><code>#!/bin/bash

# コミットタイプを尋ねる
echo "コミットのタイプを選択してください:"
echo "1. feat (新機能)"
echo "2. fix (バグ修正)"
echo "3. docs (ドキュメントの変更)"
echo "4. style (コードのスタイル変更、フォーマット等)"
echo "5. refactor (リファクタリング)"
echo "6. test (テスト関連)"
echo "7. chore (その他、ビルドプロセスや補助ツールの変更)"
echo "8. perf (パフォーマンス改善)"
echo "9. build (ビルドシステムや外部依存関係の変更)"
echo "10. ci (CI設定ファイルやスクリプトの変更)"
read -p "番号を入力してください: " type

case $type in
  1) type="feat";;
  2) type="fix";;
  3) type="docs";;
  4) type="style";;
  5) type="refactor";;
  6) type="test";;
  7) type="chore";;
  8) type="perf";;
  9) type="build";;
  10) type="ci";;
  *) echo "無効な選択肢です"; exit 1;;
esac

# スコープを尋ねる
read -p "変更のスコープ (コンポーネントやファイル名等) を入力してください: " scope

# コミットメッセージの概要を尋ねる
read -p "コミットメッセージの概要を簡潔に記述してください: " summary

# コミットメッセージの本文を尋ねる（オプション）
read -p "詳細なコミットメッセージを入力してください (オプション): " body

# コミットメッセージを組み立てる
commit_message="$type($scope): $summary"
if &#91; -n "$body" ]; then
  commit_message="$commit_message\\n\\n$body"
fi

# コミットを実行
git commit -m "$commit_message"
</code></pre>



<h2 class="wp-block-heading"><span id="toc3">実行方法</span></h2>



<p>上記のスクリプトの実行方法は、下記のコマンドを入力してください。</p>



<pre class="wp-block-code"><code>// ファイル名が「commit.sh」の場合
chmod +x commit.sh
</code></pre>



<p>そして、以下のコマンドで、スクリプトを実行してコミットを行います。</p>



<pre class="wp-block-code bash"><code>./commit.sh
</code></pre>



<h2 class="wp-block-heading"><span id="toc4">おわり</span></h2>



<p>今回のスクリプトは、基本的な機能しか持っていません。</p>



<p>プロジェクトのニーズに合わせて、カスタマイズしていってください。</p><p>The post <a href="https://aichi.blog/how-to-run-commitizen-with-shell-script/">【Git】commitzenをシェルスクリプトで実行</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>なぜasdfがプログラミング言語のバージョン管理に最適なのか？</title>
		<link>https://aichi.blog/why-asdf-is-best-for-programming-language-version-management/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=why-asdf-is-best-for-programming-language-version-management</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Fri, 01 Sep 2023 09:52:28 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3186</guid>

					<description><![CDATA[<p>目次 はじめに複数の言語を一括管理：asdfの強みasdfの基本コマンド事前準備：.default-npm-packagesファイルを作成しようこのファイルの役割とは？他のプログラミング言語でも同じような機能がある実際に [&#8230;]</p>
<p>The post <a href="https://aichi.blog/why-asdf-is-best-for-programming-language-version-management/">なぜasdfがプログラミング言語のバージョン管理に最適なのか？</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">複数の言語を一括管理：asdfの強み</a></li><li><a href="#toc3" tabindex="0">asdfの基本コマンド</a></li><li><a href="#toc4" tabindex="0">事前準備：.default-npm-packagesファイルを作成しよう</a><ol><li><a href="#toc5" tabindex="0">このファイルの役割とは？</a></li><li><a href="#toc6" tabindex="0">他のプログラミング言語でも同じような機能がある</a></li></ol></li><li><a href="#toc7" tabindex="0">実際にNode.jsをインストールしてみよう</a></li><li><a href="#toc8" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>プログラミングにおいて、言語のバージョン管理は非常に重要な作業です。特に、複数のプロジェクトを同時に管理する場合、それぞれで必要な言語のバージョンが異なることがよくあります。この記事では、そんな課題を解決する万能ツール<code>asdf</code>について詳しく解説します。</p>



<h2 class="wp-block-heading"><span id="toc2">複数の言語を一括管理：asdfの強み</span></h2>



<ul class="wp-block-list">
<li><strong>プラグイン形式で拡張性が高い</strong>
<ul class="wp-block-list">
<li><code>asdf</code>はプラグイン形式で、Node.jsからRuby、Pythonまで500近くの言語環境をサポートしています。</li>
</ul>
</li>



<li><strong>最新バージョンへの対応が早い</strong>
<ul class="wp-block-list">
<li><code>asdf</code>は各言語の最新バージョンに迅速に対応しています。これにより、常に最新の環境で開発を進めることができます。</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading"><span id="toc3">asdfの基本コマンド</span></h2>



<ul class="wp-block-list">
<li><code>asdf plugin list</code>：インストール済みのプラグイン一覧を表示</li>



<li><code>asdf install &lt;PLUGIN_NAME&gt; &lt;VERSION&gt;</code>：指定したプラグインとバージョンをインストール</li>



<li><code>asdf global &lt;PLUGIN_NAME&gt; &lt;VERSION&gt;</code>：グローバルに使うパッケージのバージョンを設定</li>
</ul>



<h2 class="wp-block-heading"><span id="toc4">事前準備：.default-npm-packagesファイルを作成しよう</span></h2>



<p>次に、<code>asdf</code>でNode.jsをインストールする前に、一つ大事な手続きがあります。それは、ホームディレクトリに<code>.default-npm-packages</code>というファイルを作成することです。このファイルには以下の内容を書き込んでください。</p>



<pre class="wp-block-code"><code># .default-npm-packages ファイルの内容
yarn
typescript
ts-node
typesync
npm-check-updates
</code></pre>



<h3 class="wp-block-heading"><span id="toc5">このファイルの役割とは？</span></h3>



<p>この<code>.default-npm-packages</code>ファイルは、Node.jsの新しいバージョンをインストールする際に、自動的に一緒にインストールされるnpmパッケージを指定できる非常に便利なファイルです。これにより、毎回必要なnpmパッケージを手動でインストールする手間が省けます。</p>



<h3 class="wp-block-heading"><span id="toc6">他のプログラミング言語でも同じような機能がある</span></h3>



<p>RubyやPythonでも、同じような機能が利用できます。Rubyでは<code>.default-gems</code>、Pythonでは<code>.default-python-packages</code>というファイルで、それぞれの言語でデフォルトでインストールしたいパッケージを指定できます。</p>



<h2 class="wp-block-heading"><span id="toc7">実際にNode.jsをインストールしてみよう</span></h2>



<pre class="wp-block-code"><code># 1. Homebrewを使ってasdfをインストール
# Homebrewがインストールされていない場合は、先にそれをインストールしてください。
brew install asdf

# 2. Node.jsのプラグインを追加
# asdfにNode.jsのプラグインを追加します。
asdf plugin add nodejs

# 3. 最新バージョンのNode.jsをインストール
# Node.jsの最新バージョンをインストールします。
asdf install nodejs latest

# 4. グローバルに使うNode.jsのバージョンを設定
# インストールしたNode.jsのバージョンをグローバルで使用するように設定します。
asdf global nodejs latest
</code></pre>



<h2 class="wp-block-heading"><span id="toc8">まとめ</span></h2>



<p><code>asdf</code>はその拡張性と多言語対応により、プログラミング言語のバージョン管理において非常に優れたツールです。特に複数のプロジェクトを管理する開発者にとっては、その効率と便利さは計り知れません。</p><p>The post <a href="https://aichi.blog/why-asdf-is-best-for-programming-language-version-management/">なぜasdfがプログラミング言語のバージョン管理に最適なのか？</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Yarn vs npm: なぜ開発者はYarnを選ぶのか？</title>
		<link>https://aichi.blog/why-developers-choose-yarn-over-npm/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=why-developers-choose-yarn-over-npm</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Fri, 01 Sep 2023 10:50:44 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[yarn]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3198</guid>

					<description><![CDATA[<p>目次 はじめにYarnが生まれた背景Yarnの特長とその魅力1. バージョン固定機能（yarn.lock）2. 高速なパフォーマンス3. WorkspaceのサポートYarnの使い方：主要なコマンド結論：Yarnはnpm [&#8230;]</p>
<p>The post <a href="https://aichi.blog/why-developers-choose-yarn-over-npm/">Yarn vs npm: なぜ開発者はYarnを選ぶのか？</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">Yarnが生まれた背景</a></li><li><a href="#toc3" tabindex="0">Yarnの特長とその魅力</a><ol><li><a href="#toc4" tabindex="0">1. バージョン固定機能（yarn.lock）</a></li><li><a href="#toc5" tabindex="0">2. 高速なパフォーマンス</a></li><li><a href="#toc6" tabindex="0">3. Workspaceのサポート</a></li></ol></li><li><a href="#toc7" tabindex="0">Yarnの使い方：主要なコマンド</a></li><li><a href="#toc8" tabindex="0">結論：Yarnはnpmの強力な代替品</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>Node.jsの世界では、npm（Node Package Manager）が長い間、唯一無二のパッケージ管理ツールでした。しかし、2016年に登場したYarnは、その新機能と高速性で多くの開発者の心をつかみました。この記事では、Yarnがどれほど魅力的なのか、その特長と利点について詳しく解説します。</p>



<h2 class="wp-block-heading"><span id="toc2">Yarnが生まれた背景</span></h2>



<p>Yarnは、Facebook（現在はMeta）が主導して2016年に公開されました。当時、npmには依存関係の管理が煩雑である、パフォーマンスが遅いなどの問題がありました。Yarnはこれらの問題を解決するために設計され、短期間で多くの開発者に受け入れられました。</p>



<h2 class="wp-block-heading"><span id="toc3">Yarnの特長とその魅力</span></h2>



<h3 class="wp-block-heading"><span id="toc4">1. バージョン固定機能（yarn.lock）</span></h3>



<p>Yarnの一番の特長は、<code>yarn.lock</code>というロックファイルを生成することで、依存パッケージのバージョンを固定する能力です。</p>



<h4 class="wp-block-heading">なぜこれが素晴らしいのか？</h4>



<ul class="wp-block-list">
<li><strong>安定性</strong>: 同じプロジェクトで複数の開発者が作業する場合でも、<code>yarn.lock</code>があれば全員が同じバージョンの依存パッケージを使用することが保証されます。</li>



<li><strong>予測可能性</strong>: バージョンが固定されているため、未知のバグや非互換性の問題を防ぐことができます。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc5">2. 高速なパフォーマンス</span></h3>



<p>Yarnは、npmよりも高速にパッケージをダウンロードとインストールができます。</p>



<h4 class="wp-block-heading">なぜこれが素晴らしいのか？</h4>



<ul class="wp-block-list">
<li><strong>効率性</strong>: 高速なインストールは、開発プロセスをスムーズにし、時間を節約します。</li>



<li><strong>CI/CDの高速化</strong>: 継続的インテグレーションと継続的デリバリー（CI/CD）の速度も向上します。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc6">3. Workspaceのサポート</span></h3>



<p>Yarnは、複数のプロジェクトやパッケージを一つのリポジトリ内で管理する「Workspace」という機能を提供しています。</p>



<h4 class="wp-block-heading">なぜこれが素晴らしいのか？</h4>



<ul class="wp-block-list">
<li><strong>一元管理</strong>: モノリポジトリの管理が容易になります。</li>



<li><strong>依存関係の整合性</strong>: Workspaceを使用すると、プロジェクト間での依存関係が一元管理され、その整合性が保たれます。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc7">Yarnの使い方：主要なコマンド</span></h2>



<p>Yarnは、npmと非常に似たコマンドラインインターフェースを持っていますが、いくつか独自の便利なコマンドもあります。</p>



<ul class="wp-block-list">
<li><code>yarn install</code>: 依存関係を解決し、パッケージをインストールします。</li>



<li><code>yarn add &lt;PACKAGE_NAME&gt;</code>: 新しいパッケージを追加します。</li>



<li><code>yarn remove &lt;PACKAGE_NAME&gt;</code>: 不要なパッケージを削除します。</li>



<li><code>yarn upgrade</code>: 既存のパッケージを最新バージョンにアップグレードします。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc8">結論：Yarnはnpmの強力な代替品</span></h2>



<p>Yarnは、npmに対して多くの優れた特長を持っています。特に、依存関係の管理、高速なパフォーマンス、そしてWorkspaceのサポートは、大規模なプロジェクトやプロフェッショナルな開発環境で非常に役立ちます。どちらのツールを選ぶかは、プロジェクトのニーズやチームの好みによるところが大きいですが、Yarnは多くの面で優れた選択肢と言えるでしょう。</p>



<p>この記事が、Yarnを採用するかどうかを検討している開発者の皆さんにとって、参考になれば幸いです。</p><p>The post <a href="https://aichi.blog/why-developers-choose-yarn-over-npm/">Yarn vs npm: なぜ開発者はYarnを選ぶのか？</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Yarnとnpmのスクリプト管理：package.jsonのscriptsエントリを理解する</title>
		<link>https://aichi.blog/yarn-npm-script-management-package-json/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=yarn-npm-script-management-package-json</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Fri, 01 Sep 2023 10:56:02 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[yarn]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3201</guid>

					<description><![CDATA[<p>目次 はじめにscriptsエントリの基本予約キーワードと特別な挙動フックとしての予約キーワードまとめ参考文献 はじめに 開発プロジェクトでよく使われるパッケージマネージャー、Yarnとnpm。どちらもpackage.j [&#8230;]</p>
<p>The post <a href="https://aichi.blog/yarn-npm-script-management-package-json/">Yarnとnpmのスクリプト管理：package.jsonのscriptsエントリを理解する</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">scriptsエントリの基本</a></li><li><a href="#toc3" tabindex="0">予約キーワードと特別な挙動</a></li><li><a href="#toc4" tabindex="0">フックとしての予約キーワード</a></li><li><a href="#toc5" tabindex="0">まとめ</a></li><li><a href="#toc6" tabindex="0">参考文献</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>開発プロジェクトでよく使われるパッケージマネージャー、Yarnとnpm。どちらも<code>package.json</code>の<code>scripts</code>エントリを活用して、様々なコマンドを簡単に実行できます。この記事では、この<code>scripts</code>エントリがどのように動作するのか、そしてそれがどれだけ便利なのかを詳しく解説します。</p>



<h2 class="wp-block-heading"><span id="toc2">scriptsエントリの基本</span></h2>



<p><code>package.json</code>の中には<code>scripts</code>というエントリがあります。このエントリにコマンドを登録しておくと、Yarnやnpmで簡単にそのコマンドを実行できます。例えば、以下のような設定があった場合、</p>



<pre class="wp-block-code"><code>"scripts": {
  "dev": "vite",
  "build": "tsc &amp;&amp; vite build",
  "preview": "vite preview"
}
</code></pre>



<p>Yarnでは<code>yarn dev</code>、npmでは<code>npm run dev</code>といった形で、<code>vite</code>コマンドが実行されます。</p>



<h2 class="wp-block-heading"><span id="toc3">予約キーワードと特別な挙動</span></h2>



<p><code>scripts</code>エントリには予約キーワードがあり、特別な挙動が設定されています。以下はその例です。</p>



<ul class="wp-block-list">
<li><code>start</code>: 開発用サーバの起動</li>



<li><code>restart</code>: 開発用サーバの再起動</li>



<li><code>stop</code>: 開発用サーバの停止</li>



<li><code>test</code>: テストの実行</li>
</ul>



<p>これらのキーワードは、特定のnpmコマンドや他の<code>scripts</code>エントリの前後で自動的に実行される場合もあります。</p>



<h2 class="wp-block-heading"><span id="toc4">フックとしての予約キーワード</span></h2>



<p>さらに、<code>pre</code>や<code>post</code>をキーワードの前につけることで、特定の処理の前後にスクリプトを実行できます。例えば、</p>



<ul class="wp-block-list">
<li><code>preinstall</code>, <code>postinstall</code>: パッケージインストールの前後</li>



<li><code>preuninstall</code>, <code>postuninstall</code>: パッケージアンインストールの前後</li>



<li><code>prestart</code>, <code>poststart</code>: <code>start</code>スクリプトの前後</li>



<li><code>pretest</code>, <code>posttest</code>: <code>test</code>スクリプトの前後</li>



<li><code>prepare</code>: インストール後の最終処理</li>
</ul>



<p>これらは、開発フローをよりスムーズにするために非常に便利です。</p>



<h2 class="wp-block-heading"><span id="toc5">まとめ</span></h2>



<p><code>package.json</code>の<code>scripts</code>エントリは、Yarnとnpmでプロジェクトを効率よく管理するための強力なツールです。予約キーワードやフックを活用することで、より高度なスクリプト管理が可能になります。この機能を最大限に活用して、開発プロセスを効率化しましょう。</p>



<h2 class="wp-block-heading"><span id="toc6">参考文献</span></h2>



<ul class="wp-block-list">
<li><a href="https://docs.npmjs.com/cli/v8/using-npm/scripts#life-cycle-operation-order">LifeCycleOperationOrder-scripts|npmDocs</a></li>
</ul>



<p>この記事が役立ったと感じたら、ぜひシェアをお願いします！</p><p>The post <a href="https://aichi.blog/yarn-npm-script-management-package-json/">Yarnとnpmのスクリプト管理：package.jsonのscriptsエントリを理解する</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Next.jsにおけるディレクトリ構成: デコロケーション vs コロケーション</title>
		<link>https://aichi.blog/nextjs-directory-structure-decolocation-vs-colocation/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nextjs-directory-structure-decolocation-vs-colocation</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Mon, 23 Oct 2023 03:19:52 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[next.js]]></category>
		<category><![CDATA[ディレクトリ構成]]></category>
		<category><![CDATA[文法]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3336</guid>

					<description><![CDATA[<p>Next.jsプロジェクトでのディレクトリ構成には大きく分けて「デコロケーション」と「コロケーション」の2つのアプローチがあります。 それぞれにはメリットとデメリットがあり、プロジェクトの規模やチームの作業スタイルによっ [&#8230;]</p>
<p>The post <a href="https://aichi.blog/nextjs-directory-structure-decolocation-vs-colocation/">Next.jsにおけるディレクトリ構成: デコロケーション vs コロケーション</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Next.jsプロジェクトでのディレクトリ構成には大きく分けて「デコロケーション」と「コロケーション」の2つのアプローチがあります。</p>



<p>それぞれにはメリットとデメリットがあり、プロジェクトの規模やチームの作業スタイルによって最適な選択が変わります。</p>



<p>今回は、これらの違いと使いどころをわかりやすく解説します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">デコロケーション（Decolocation）</a><ol><li><a href="#toc2" tabindex="0">概要と特徴</a></li><li><a href="#toc3" tabindex="0">具体的なディレクトリ構成</a></li><li><a href="#toc4" tabindex="0">メリットとデメリット</a></li></ol></li><li><a href="#toc5" tabindex="0">コロケーション</a><ol><li><a href="#toc6" tabindex="0">概要と特徴</a></li><li><a href="#toc7" tabindex="0">具体的なディレクトリ構成</a></li><li><a href="#toc8" tabindex="0">メリットとデメリット</a></li></ol></li><li><a href="#toc9" tabindex="0">結論: どちらを選ぶべきか？</a></li><li><a href="#toc10" tabindex="0">おまけ：デコロケーション、コロケーションの具体的なディレクトリ構成</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">デコロケーション（Decolocation）</span></h2>



<h3 class="wp-block-heading"><span id="toc2">概要と特徴</span></h3>



<p>デコロケーションでは、関連するリソース（コンポーネント、スタイル、テスト、APIなど）を別々のディレクトリに配置します。</p>



<p>これは、特に小規模なプロジェクトや、特定の種類のファイルを一箇所で一元管理したい場合に有用です。</p>



<h3 class="wp-block-heading"><span id="toc3">具体的なディレクトリ構成</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="- src/
  - components/
  - pages/
  - styles/
  - tests/
  - api/
- docs/" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">- src/</span></span>
<span class="line"><span style="color: #D4D4D4">  - components/</span></span>
<span class="line"><span style="color: #D4D4D4">  - pages/</span></span>
<span class="line"><span style="color: #D4D4D4">  - styles/</span></span>
<span class="line"><span style="color: #D4D4D4">  - tests/</span></span>
<span class="line"><span style="color: #D4D4D4">  - api/</span></span>
<span class="line"><span style="color: #D4D4D4">- docs/</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// デコロケーション（機能別にディレクトリを配置）

src/
├─ features/
│   ├─ FeatureA.tsx           # 機能A
│   ├─ FeatureB.tsx           # 機能B
│   └─ SubComponent.tsx       # サブコンポーネント
│
├─ components/                # 共通コンポーネント
│   ├─ SharedComponent.tsx    # 共有コンポーネント
│   └─ ...
│
├─ styles/                    # スタイルファイル
│   ├─ FeatureA.styles.ts
│   ├─ SubComponent.styles.ts
│   ├─ SharedComponent.styles.ts
│   └─ ...
│
└─ tests/                     # テストファイル
    ├─ FeatureA.test.ts
    ├─ SubComponent.test.ts
    ├─ SharedComponent.test.ts
    └─ ..." style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">// デコロケーション（機能別にディレクトリを配置）</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">src/</span></span>
<span class="line"><span style="color: #D4D4D4">├─ features/</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">FeatureA</span><span style="color: #D4D4D4">.tsx           # 機能</span><span style="color: #4EC9B0">A</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">FeatureB</span><span style="color: #D4D4D4">.tsx           # 機能</span><span style="color: #4EC9B0">B</span></span>
<span class="line"><span style="color: #D4D4D4">│   └─ </span><span style="color: #4EC9B0">SubComponent</span><span style="color: #D4D4D4">.tsx       # サブコンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│</span></span>
<span class="line"><span style="color: #D4D4D4">├─ components/                # 共通コンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">SharedComponent</span><span style="color: #D4D4D4">.tsx    # 共有コンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│   └─ ...</span></span>
<span class="line"><span style="color: #D4D4D4">│</span></span>
<span class="line"><span style="color: #D4D4D4">├─ styles/                    # スタイルファイル</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">FeatureA</span><span style="color: #D4D4D4">.styles.ts</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">SubComponent</span><span style="color: #D4D4D4">.styles.ts</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">SharedComponent</span><span style="color: #D4D4D4">.styles.ts</span></span>
<span class="line"><span style="color: #D4D4D4">│   └─ ...</span></span>
<span class="line"><span style="color: #D4D4D4">│</span></span>
<span class="line"><span style="color: #D4D4D4">└─ tests/                     # テストファイル</span></span>
<span class="line"><span style="color: #D4D4D4">    ├─ </span><span style="color: #4EC9B0">FeatureA</span><span style="color: #D4D4D4">.test.ts</span></span>
<span class="line"><span style="color: #D4D4D4">    ├─ </span><span style="color: #4EC9B0">SubComponent</span><span style="color: #D4D4D4">.test.ts</span></span>
<span class="line"><span style="color: #D4D4D4">    ├─ </span><span style="color: #4EC9B0">SharedComponent</span><span style="color: #D4D4D4">.test.ts</span></span>
<span class="line"><span style="color: #D4D4D4">    └─ ...</span></span></code></pre></div>



<h3 class="wp-block-heading"><span id="toc4">メリットとデメリット</span></h3>



<h4 class="wp-block-heading">メリット</h4>



<ul class="wp-block-list">
<li><strong>一元管理</strong>: 同じ種類のファイルが一箇所にまとまっているため、一覧性が高く管理が容易です。</li>



<li><strong>小規模プロジェクト向け</strong>: プロジェクトが小規模であれば、この方法で十分に管理が行えます。</li>
</ul>



<h4 class="wp-block-heading">デメリット</h4>



<ul class="wp-block-list">
<li><strong>関連性が低い</strong>: 関連するファイルが物理的に離れているため、開発時に多くのディレクトリを行き来する必要があります。</li>



<li><strong>スケーラビリティの問題</strong>: プロジェクトが大きくなると、管理が煩雑になる可能性があります。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc5">コロケーション</span></h2>



<h3 class="wp-block-heading"><span id="toc6">概要と特徴</span></h3>



<p>コロケーションでは、関連するリソースを一箇所にまとめます。これにより、プロジェクトの可読性と保守性が向上します。特に大規模なプロジェクトや複数人での開発において有用です。</p>



<h3 class="wp-block-heading"><span id="toc7">具体的なディレクトリ構成</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="- src/
  - pages/
    - Home/
  - components/
    - Button/
  - api/
    - User/" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">- src/</span></span>
<span class="line"><span style="color: #D4D4D4">  - pages/</span></span>
<span class="line"><span style="color: #D4D4D4">    - </span><span style="color: #4EC9B0">Home</span><span style="color: #D4D4D4">/</span></span>
<span class="line"><span style="color: #D4D4D4">  - components/</span></span>
<span class="line"><span style="color: #D4D4D4">    - </span><span style="color: #4EC9B0">Button</span><span style="color: #D4D4D4">/</span></span>
<span class="line"><span style="color: #D4D4D4">  - api/</span></span>
<span class="line"><span style="color: #D4D4D4">    - </span><span style="color: #4EC9B0">User</span><span style="color: #D4D4D4">/</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// コロケーション（関連するファイルを近くに配置）

src/
├─ features/
│   ├─ FeatureA.tsx           # 機能A
│   ├─ FeatureB.tsx           # 機能B
│   └─ SubComponent.tsx       # サブコンポーネント
│
├─ components/                # 共通コンポーネント
│   ├─ SharedComponent.tsx    # 共有コンポーネント
│   └─ ...
│
├─ styles/                    # スタイルファイル
│   ├─ FeatureA.styles.ts
│   ├─ SubComponent.styles.ts
│   ├─ SharedComponent.styles.ts
│   └─ ...
│
└─ tests/                     # テストファイル
    ├─ FeatureA.test.ts
    ├─ SubComponent.test.ts
    ├─ SharedComponent.test.ts
    └─ ...
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">// コロケーション（関連するファイルを近くに配置）</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">src/</span></span>
<span class="line"><span style="color: #D4D4D4">├─ features/</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">FeatureA</span><span style="color: #D4D4D4">.tsx           # 機能</span><span style="color: #4EC9B0">A</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">FeatureB</span><span style="color: #D4D4D4">.tsx           # 機能</span><span style="color: #4EC9B0">B</span></span>
<span class="line"><span style="color: #D4D4D4">│   └─ </span><span style="color: #4EC9B0">SubComponent</span><span style="color: #D4D4D4">.tsx       # サブコンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│</span></span>
<span class="line"><span style="color: #D4D4D4">├─ components/                # 共通コンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">SharedComponent</span><span style="color: #D4D4D4">.tsx    # 共有コンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│   └─ ...</span></span>
<span class="line"><span style="color: #D4D4D4">│</span></span>
<span class="line"><span style="color: #D4D4D4">├─ styles/                    # スタイルファイル</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">FeatureA</span><span style="color: #D4D4D4">.styles.ts</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">SubComponent</span><span style="color: #D4D4D4">.styles.ts</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">SharedComponent</span><span style="color: #D4D4D4">.styles.ts</span></span>
<span class="line"><span style="color: #D4D4D4">│   └─ ...</span></span>
<span class="line"><span style="color: #D4D4D4">│</span></span>
<span class="line"><span style="color: #D4D4D4">└─ tests/                     # テストファイル</span></span>
<span class="line"><span style="color: #D4D4D4">    ├─ </span><span style="color: #4EC9B0">FeatureA</span><span style="color: #D4D4D4">.test.ts</span></span>
<span class="line"><span style="color: #D4D4D4">    ├─ </span><span style="color: #4EC9B0">SubComponent</span><span style="color: #D4D4D4">.test.ts</span></span>
<span class="line"><span style="color: #D4D4D4">    ├─ </span><span style="color: #4EC9B0">SharedComponent</span><span style="color: #D4D4D4">.test.ts</span></span>
<span class="line"><span style="color: #D4D4D4">    └─ ...</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading"><span id="toc8">メリットとデメリット</span></h3>



<h4 class="wp-block-heading">メリット</h4>



<ul class="wp-block-list">
<li><strong>可読性</strong>: 関連するファイルが近くにあるため、コードの流れが理解しやすい。</li>



<li><strong>保守性</strong>: 一箇所にまとまっているため、変更やリファクタリングが容易です。</li>



<li><strong>開発速度</strong>: ファイルの行き来が減少し、開発がスムーズに行えます。</li>
</ul>



<h4 class="wp-block-heading">デメリット</h4>



<ul class="wp-block-list">
<li><strong>複雑性</strong>: 大規模なプロジェクトで多くの関連ファイルが一箇所に集まると、そのディレクトリ自体が複雑になる可能性があります。</li>



<li><strong>ファイル探索</strong>: 関連ファイルが多い場合、特定のファイルを見つけるのが少し難しくなるかもしれません。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc9">結論: どちらを選ぶべきか？</span></h2>



<ul class="wp-block-list">
<li><strong>小規模プロジェクト</strong>: デコロケーションが適しています。管理がシンプルで、必要なリソースがすぐに見つかります。</li>



<li><strong>大規模プロジェクトや複数人での開発</strong>: コロケーションが有用です。可読性と保守性が高く、開発効率も向上します。</li>
</ul>



<p>プロジェクトの規模、チームの作業スタイル、将来のスケーラビリティなどを考慮して、最適なディレクトリ構成を選びましょう。</p>



<h2 class="wp-block-heading"><span id="toc10">おまけ：デコロケーション、コロケーションの具体的なディレクトリ構成</span></h2>



<p>最後に、Todoアプリを作成する場合のディレクトリ構成を、デコロケーション、コロケーションをもちいて作成します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// デコロケーション

src/
├─ pages/                         # ページコンポーネント
│   ├─ HomePage.tsx               # ホームページ
│   ├─ TodoListPage.tsx           # Todoリストページ
│   └─ AboutPage.tsx              # アバウトページ
│
├─ components/                    # 共通コンポーネント
│   ├─ Navbar/                    # ナビゲーションバー
│   │   ├─ index.tsx
│   │   ├─ index.module.css
│   │   └─ ...
│   ├─ TodoItem/                  # Todo項目コンポーネント
│   │   ├─ index.tsx
│   │   ├─ index.module.css
│   │   └─ ...
│   └─ Button/                    # ボタンコンポーネント
│       ├─ index.tsx
│       ├─ index.module.css
│       └─ ...
│
├─ styles/                        # スタイルファイル
│   ├─ common.module.css          # 共通スタイル
│   └─ ...
│
└─ types/                         # 型定義ファイル
    ├─ commonTypes.ts             # 共通型定義
    └─ ...
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">// デコロケーション</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">src/</span></span>
<span class="line"><span style="color: #D4D4D4">├─ pages/                         # ページコンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">HomePage</span><span style="color: #D4D4D4">.tsx               # ホームページ</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">TodoListPage</span><span style="color: #D4D4D4">.tsx           # Todoリストページ</span></span>
<span class="line"><span style="color: #D4D4D4">│   └─ </span><span style="color: #4EC9B0">AboutPage</span><span style="color: #D4D4D4">.tsx              # アバウトページ</span></span>
<span class="line"><span style="color: #D4D4D4">│</span></span>
<span class="line"><span style="color: #D4D4D4">├─ components/                    # 共通コンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">Navbar</span><span style="color: #D4D4D4">/                    # ナビゲーションバー</span></span>
<span class="line"><span style="color: #D4D4D4">│   │   ├─ index.tsx</span></span>
<span class="line"><span style="color: #D4D4D4">│   │   ├─ index.module.css</span></span>
<span class="line"><span style="color: #D4D4D4">│   │   └─ ...</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ </span><span style="color: #4EC9B0">TodoItem</span><span style="color: #D4D4D4">/                  # Todo項目コンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│   │   ├─ index.tsx</span></span>
<span class="line"><span style="color: #D4D4D4">│   │   ├─ index.module.css</span></span>
<span class="line"><span style="color: #D4D4D4">│   │   └─ ...</span></span>
<span class="line"><span style="color: #D4D4D4">│   └─ </span><span style="color: #4EC9B0">Button</span><span style="color: #D4D4D4">/                    # ボタンコンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│       ├─ index.tsx</span></span>
<span class="line"><span style="color: #D4D4D4">│       ├─ index.module.css</span></span>
<span class="line"><span style="color: #D4D4D4">│       └─ ...</span></span>
<span class="line"><span style="color: #D4D4D4">│</span></span>
<span class="line"><span style="color: #D4D4D4">├─ styles/                        # スタイルファイル</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ common.module.css          # 共通スタイル</span></span>
<span class="line"><span style="color: #D4D4D4">│   └─ ...</span></span>
<span class="line"><span style="color: #D4D4D4">│</span></span>
<span class="line"><span style="color: #D4D4D4">└─ types/                         # 型定義ファイル</span></span>
<span class="line"><span style="color: #D4D4D4">    ├─ commonTypes.ts             # 共通型定義</span></span>
<span class="line"><span style="color: #D4D4D4">    └─ ...</span></span>
<span class="line"></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// コロケーション

app/
├─ (root)/                   # ドメインルート用ディレクトリ
│   ├─ page.tsx             # ドメインルートのページ
│   ├─ _components/          # ドメインルート専用のコンポーネント
│   │   └─ Navbar/           # ナビゲーションバー用コンポーネント
│   │       ├─ index.tsx
│   │       ├─ index.module.css
│   │       └─ ...
│   └─ _types/               # ドメインルート専用の型定義
│       └─ types.ts
│
├─ TodoList/                 # Todoリストページ用ディレクトリ
│   ├─ page.tsx             # Todoリストのページ
│   ├─ _components/          # Todoリスト専用のコンポーネント
│   │   ├─ TodoItem/         # 各Todo項目用コンポーネント
│   │   │   ├─ index.tsx
│   │   │   ├─ index.module.css
│   │   │   └─ ...
│   │   └─ ...
│   └─ _types/               # Todoリスト専用の型定義
│       └─ types.ts
│
├─ About/                    # アバウトページ用ディレクトリ
│   └─ page.tsx             # アバウトページ
│
components/                   # 共通コンポーネント用ディレクトリ
├─ Button/                    # 汎用ボタンコンポーネント
│   ├─ page.tsx
│   ├─ index.module.css
│   └─ ...
│
types/                        # 全体的な型定義用ディレクトリ
└─ globalTypes.ts             # アプリ全体で使用する型定義
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">// コロケーション</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">app/</span></span>
<span class="line"><span style="color: #D4D4D4">├─ (root)/                   # ドメインルート用ディレクトリ</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ page.tsx             # ドメインルートのページ</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ _components/          # ドメインルート専用のコンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│   │   └─ </span><span style="color: #4EC9B0">Navbar</span><span style="color: #D4D4D4">/           # ナビゲーションバー用コンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│   │       ├─ index.tsx</span></span>
<span class="line"><span style="color: #D4D4D4">│   │       ├─ index.module.css</span></span>
<span class="line"><span style="color: #D4D4D4">│   │       └─ ...</span></span>
<span class="line"><span style="color: #D4D4D4">│   └─ _types/               # ドメインルート専用の型定義</span></span>
<span class="line"><span style="color: #D4D4D4">│       └─ types.ts</span></span>
<span class="line"><span style="color: #D4D4D4">│</span></span>
<span class="line"><span style="color: #D4D4D4">├─ </span><span style="color: #4EC9B0">TodoList</span><span style="color: #D4D4D4">/                 # Todoリストページ用ディレクトリ</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ page.tsx             # Todoリストのページ</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ _components/          # Todoリスト専用のコンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│   │   ├─ </span><span style="color: #4EC9B0">TodoItem</span><span style="color: #D4D4D4">/         # 各Todo項目用コンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│   │   │   ├─ index.tsx</span></span>
<span class="line"><span style="color: #D4D4D4">│   │   │   ├─ index.module.css</span></span>
<span class="line"><span style="color: #D4D4D4">│   │   │   └─ ...</span></span>
<span class="line"><span style="color: #D4D4D4">│   │   └─ ...</span></span>
<span class="line"><span style="color: #D4D4D4">│   └─ _types/               # Todoリスト専用の型定義</span></span>
<span class="line"><span style="color: #D4D4D4">│       └─ types.ts</span></span>
<span class="line"><span style="color: #D4D4D4">│</span></span>
<span class="line"><span style="color: #D4D4D4">├─ </span><span style="color: #4EC9B0">About</span><span style="color: #D4D4D4">/                    # アバウトページ用ディレクトリ</span></span>
<span class="line"><span style="color: #D4D4D4">│   └─ page.tsx             # アバウトページ</span></span>
<span class="line"><span style="color: #D4D4D4">│</span></span>
<span class="line"><span style="color: #D4D4D4">components/                   # 共通コンポーネント用ディレクトリ</span></span>
<span class="line"><span style="color: #D4D4D4">├─ </span><span style="color: #4EC9B0">Button</span><span style="color: #D4D4D4">/                    # 汎用ボタンコンポーネント</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ page.tsx</span></span>
<span class="line"><span style="color: #D4D4D4">│   ├─ index.module.css</span></span>
<span class="line"><span style="color: #D4D4D4">│   └─ ...</span></span>
<span class="line"><span style="color: #D4D4D4">│</span></span>
<span class="line"><span style="color: #D4D4D4">types/                        # 全体的な型定義用ディレクトリ</span></span>
<span class="line"><span style="color: #D4D4D4">└─ globalTypes.ts             # アプリ全体で使用する型定義</span></span>
<span class="line"></span></code></pre></div>



<p></p><p>The post <a href="https://aichi.blog/nextjs-directory-structure-decolocation-vs-colocation/">Next.jsにおけるディレクトリ構成: デコロケーション vs コロケーション</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Commitizenでプロフェッショナルなコミットメッセージを作成しよう</title>
		<link>https://aichi.blog/create-professional-commit-messages-with-commitizen/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=create-professional-commit-messages-with-commitizen</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Tue, 07 Nov 2023 06:22:38 +0000</pubDate>
				<category><![CDATA[コマンドライン]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3356</guid>

					<description><![CDATA[<p>ソフトウェア開発において、コミットメッセージは後でコードの変更をレビューする際に非常に重要です。 良いコミットメッセージは、変更の内容を明確に伝え、他の開発者がプロジェクトの履歴を理解するのを助けます。 ここで、Comm [&#8230;]</p>
<p>The post <a href="https://aichi.blog/create-professional-commit-messages-with-commitizen/">Commitizenでプロフェッショナルなコミットメッセージを作成しよう</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>ソフトウェア開発において、コミットメッセージは後でコードの変更をレビューする際に非常に重要です。</p>



<p>良いコミットメッセージは、変更の内容を明確に伝え、他の開発者がプロジェクトの履歴を理解するのを助けます。</p>



<p>ここで、Commitizenというツールの出番です。Commitizenは、標準化されたコミットメッセージのフォーマットを簡単に作成するためのツールです。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Commitizenの始め方</a><ol><li><a href="#toc2" tabindex="0">インストール</a></li><li><a href="#toc3" tabindex="0">設定の追加</a></li><li><a href="#toc4" tabindex="0">コミットの作成</a></li></ol></li><li><a href="#toc5" tabindex="0">Commitizenのメリット</a></li><li><a href="#toc6" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Commitizenの始め方</span></h2>



<h3 class="wp-block-heading"><span id="toc2">インストール</span></h3>



<p>Commitizenを使い始めるには、まず以下のコマンドでグローバルにインストールします。</p>



<pre class="wp-block-code"><code>npm install -g commitizen</code></pre>



<p>これにより、<code>git commit</code>の代わりに使用する<code>git cz</code>コマンドが利用可能になります。</p>



<p>次に、日本語でコミットメッセージを作成するためのアダプター<code>cz-conventional-changelog-ja</code>をインストールします。</p>



<pre class="wp-block-code"><code>npm install -g cz-conventional-changelog-ja</code></pre>



<h3 class="wp-block-heading"><span id="toc3">設定の追加</span></h3>



<p>プロジェクトの<code>package.json</code>ファイルに以下の設定を追加します。</p>



<pre class="wp-block-code"><code>"config": {
  "commitizen": {
    "path": "cz-conventional-changelog-ja"
  }
}</code></pre>



<p>この設定により、Commitizenは日本語でのコミットメッセージの作成をサポートするようになります。</p>



<h3 class="wp-block-heading"><span id="toc4">コミットの作成</span></h3>



<p>設定が完了したら、コミットを作成するために以下のコマンドを使用します。</p>



<pre class="wp-block-code"><code>git cz</code></pre>



<p>このコマンドを実行すると、コミットの種類を選択するためのリストが表示されます。例えば、新しい機能の追加、バグ修正、ドキュメントの更新など、変更の種類に応じて適切なオプションを選ぶことができます。</p>



<h2 class="wp-block-heading"><span id="toc5">Commitizenのメリット</span></h2>



<ul class="wp-block-list">
<li><strong>標準化</strong>: Commitizenを使用すると、プロジェクト全体で一貫したコミットメッセージのフォーマットを維持できます。</li>



<li><strong>自動化</strong>: コミットメッセージのフォーマットを手動で記憶する必要がなく、プロンプトに従って入力するだけで良い形式のメッセージを作成できます。</li>



<li><strong>チームワークの向上</strong>: 新しい開発者がプロジェクトに参加したときに、コミットメッセージのフォーマットに迅速に適応できます。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc6">まとめ</span></h2>



<p>Commitizenは、コミットメッセージの品質を維持し、開発プロセスをスムーズにするための素晴らしいツールです。</p>



<p>設定は簡単で、使い始めることも容易です。</p>



<p>日本語でのコミットメッセージをサポートする<code>cz-conventional-changelog-ja</code>を使えば、日本の開発チームでも効率的に活用することができます。</p>



<p>プロジェクトの歴史が読みやすくなり、チーム内のコミュニケーションが向上するでしょう。</p>



<h4 class="wp-block-heading">参考文献</h4>





<a rel="noopener" href="https://dev.classmethod.jp/articles/commitizen/" title="Commitizenを使ってgitのコミットメッセージをしっかり書こう | DevelopersIO" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://images.ctfassets.net/ct0aopd36mqt/1dD7b8HkT2sbiJzUIewMTD/e5cdc6f33c4fdd9d798f11a4564612ff/eyecatch_developersio_darktone_1200x630.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Commitizenを使ってgitのコミットメッセージをしっかり書こう | DevelopersIO</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://dev.classmethod.jp/articles/commitizen/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">dev.classmethod.jp</div></div></div></div></a><p>The post <a href="https://aichi.blog/create-professional-commit-messages-with-commitizen/">Commitizenでプロフェッショナルなコミットメッセージを作成しよう</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Gitのよく使うコマンドまとめ：日常開発で役立つコマンド集</title>
		<link>https://aichi.blog/git-commands-for-daily-development/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=git-commands-for-daily-development</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Sun, 12 Nov 2023 03:40:48 +0000</pubDate>
				<category><![CDATA[コマンドライン]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[文法]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3362</guid>

					<description><![CDATA[<p>Gitは開発者にとって欠かせないツールですが、その多様なコマンドを覚えるのは一苦労です。 ここでは、日常的によく使うGitコマンドをわかりやすくまとめてみました。これらのコマンドは、開発の効率を上げるのに役立ちます。 目 [&#8230;]</p>
<p>The post <a href="https://aichi.blog/git-commands-for-daily-development/">Gitのよく使うコマンドまとめ：日常開発で役立つコマンド集</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Gitは開発者にとって欠かせないツールですが、その多様なコマンドを覚えるのは一苦労です。</p>



<p>ここでは、日常的によく使うGitコマンドをわかりやすくまとめてみました。これらのコマンドは、開発の効率を上げるのに役立ちます。</p>



<p></p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-14" checked><label class="toc-title" for="toc-checkbox-14">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">push</a><ol><li><a href="#toc2" tabindex="0">変更をプッシュした後に前の状態に戻す</a></li><li><a href="#toc3" tabindex="0">クローン後、新しいリポジトリにpushする</a></li></ol></li><li><a href="#toc4" tabindex="0">commit</a><ol><li><a href="#toc5" tabindex="0">コミットを消す</a></li><li><a href="#toc6" tabindex="0">最後のcommitの状態に戻す</a></li><li><a href="#toc7" tabindex="0">プッシュしていないコミットを一覧表示</a></li></ol></li><li><a href="#toc8" tabindex="0">merge</a><ol><li><a href="#toc9" tabindex="0">マージを削除する</a></li><li><a href="#toc10" tabindex="0">他のブランチを、mainブランチと同じ状態にする</a></li></ol></li><li><a href="#toc11" tabindex="0">リモート</a><ol><li><a href="#toc12" tabindex="0">リモート上の、ファイル名変更</a></li><li><a href="#toc13" tabindex="0">リモート上の、ファイルを削除</a></li><li><a href="#toc14" tabindex="0">リモートのリポジトリ名を変更した時、ローカル環境のリポジトリ名も変更</a></li></ol></li><li><a href="#toc15" tabindex="0">おわり</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">push</span></h2>



<h3 class="wp-block-heading"><span id="toc2">変更をプッシュした後に前の状態に戻す</span></h3>



<p>プッシュ後に「あ、間違えた！」と思ったことはありませんか？以下のコマンドで、特定のコミットに戻って再度プッシュできます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="git log --oneline  // コミットハッシュを取得
git reset --hard &lt;commit-hash&gt;  // 特定のコミットハッシュに戻る
git push origin &lt;branch-name&gt; --force  // 強制的にリモートにプッシュ
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">log</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--oneline</span><span style="color: #D4D4D4">  </span><span style="color: #CE9178">//</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">コミットハッシュを取得</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">reset</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--hard</span><span style="color: #D4D4D4"> &lt;</span><span style="color: #CE9178">commit-has</span><span style="color: #D4D4D4">h&gt;  </span><span style="color: #CE9178">//</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">特定のコミットハッシュに戻る</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">push</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">origin</span><span style="color: #D4D4D4"> &lt;</span><span style="color: #CE9178">branch-nam</span><span style="color: #D4D4D4">e&gt; </span><span style="color: #569CD6">--force</span><span style="color: #D4D4D4">  </span><span style="color: #CE9178">//</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">強制的にリモートにプッシュ</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading"><span id="toc3">クローン後、新しいリポジトリにpushする</span></h3>



<p>既存のリポジトリをクローンして、新しいリポジトリにプッシュする方法です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="git remote set-url origin <新しいリポジトリのURL&gt;
git remote -v
git branch -M main
git push -u origin main

" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">remote</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">set-url</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">origin</span><span style="color: #D4D4D4"> &lt;</span><span style="color: #CE9178">新しいリポジトリのUR</span><span style="color: #D4D4D4">L&gt;</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">remote</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-v</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">branch</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-M</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">main</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">push</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-u</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">origin</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">main</span></span>
<span class="line"></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading"><span id="toc4">commit</span></h2>



<h3 class="wp-block-heading"><span id="toc5">コミットを消す</span></h3>



<p>コミットを取り消したい場合はresetコマンドを使います。取り消すコミットを確認するためにlogコマンドとセットで使われることが多いです。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="git log --oneline
git reset オプション コミットID

# オプション
–soft
コミットされていない変更として残ります。
主に「コミットの内容を変更したい」時に使います。

–hard
こちらのオプションでは変更も全て削除されます。
「途中まで対応していたが結局対応不要になった」時などに使います。

" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">log</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--oneline</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">reset</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">オプション</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">コミットID</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># オプション</span></span>
<span class="line"><span style="color: #DCDCAA">–soft</span></span>
<span class="line"><span style="color: #DCDCAA">コミットされていない変更として残ります。</span></span>
<span class="line"><span style="color: #DCDCAA">主に「コミットの内容を変更したい」時に使います。</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">–hard</span></span>
<span class="line"><span style="color: #DCDCAA">こちらのオプションでは変更も全て削除されます。</span></span>
<span class="line"><span style="color: #DCDCAA">「途中まで対応していたが結局対応不要になった」時などに使います。</span></span>
<span class="line"></span>
<span class="line"></span></code></pre></div>



<p>他にもrevertコマンドがあります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="git revert コミットID" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">revert</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">コミットID</span></span></code></pre></div>



<h3 class="wp-block-heading"><span id="toc6">最後のcommitの状態に戻す</span></h3>



<p>作業ディレクトリの変更を取り消したい場合は、以下のコマンドが便利です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="git checkout .  // 直前の状態に戻す
git checkout <ファイル名&gt;  // 特定のファイルの変更を取り消す

" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">checkout</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">.</span><span style="color: #D4D4D4">  </span><span style="color: #CE9178">//</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">直前の状態に戻す</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">checkout</span><span style="color: #D4D4D4"> &lt;</span><span style="color: #CE9178">ファイル</span><span style="color: #D4D4D4">名&gt;  </span><span style="color: #CE9178">//</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">特定のファイルの変更を取り消す</span></span>
<span class="line"></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading"><span id="toc7">プッシュしていないコミットを一覧表示</span></h3>



<p>プッシュ前のコミットを確認するには、このコマンドを使います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="git log @{u}..

" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">log</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">@{u}..</span></span>
<span class="line"></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading"><span id="toc8">merge</span></h2>



<h3 class="wp-block-heading"><span id="toc9">マージを削除する</span></h3>



<p>マージを取り消し、最初のmergeコマンドを実行する前の状態に戻ります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="git merge --abort
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">merge</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--abort</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading"><span id="toc10">他のブランチを、mainブランチと同じ状態にする</span></h3>



<p>特定のブランチをmainブランチと同期させたい場合は、以下のようにします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="git fetch origin
git checkout ブランチ名
git merge origin/main

リモートの特定ブランチから、ローカルの特定のブランチへ変更を取り込む方法
git fetch origin
git cehckout 反映させたいブランチ
git merge origin/feature/Issues_#16
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">fetch</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">origin</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">checkout</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">ブランチ名</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">merge</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">origin/main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">リモートの特定ブランチから、ローカルの特定のブランチへ変更を取り込む方法</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">fetch</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">origin</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">cehckout</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">反映させたいブランチ</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">merge</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">origin/feature/Issues_#16</span></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading"><span id="toc11">リモート</span></h2>



<h3 class="wp-block-heading"><span id="toc12">リモート上の、ファイル名変更</span></h3>



<p>リモートリポジトリ上でファイル名を変更する方法です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="git mv 古いファイル名 新しいファイル名
// このコマンドは以下の3つのコマンドと同じ意味を持つ
mv 古いファイル名 新しいファイル名
git rm 古いファイル名
git add 新しいファイル名

" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">mv</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">古いファイル名</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">新しいファイル名</span></span>
<span class="line"><span style="color: #DCDCAA">//</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">このコマンドは以下の3つのコマンドと同じ意味を持つ</span></span>
<span class="line"><span style="color: #DCDCAA">mv</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">古いファイル名</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">新しいファイル名</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">rm</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">古いファイル名</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">add</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">新しいファイル名</span></span>
<span class="line"></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading"><span id="toc13">リモート上の、ファイルを削除</span></h3>



<p>リモートリポジトリからファイルを削除する方法です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="git rm  // ワークツリーとローカルリポジトリの両方から削除
git rm --cached ファイル名  // ローカルリポジトリからのみ削除
git rm -r ディレクトリ名  // ディレクトリごと削除

" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">rm</span><span style="color: #D4D4D4">  </span><span style="color: #CE9178">//</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">ワークツリーとローカルリポジトリの両方から削除</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">rm</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--cached</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">ファイル名</span><span style="color: #D4D4D4">  </span><span style="color: #CE9178">//</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">ローカルリポジトリからのみ削除</span></span>
<span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">rm</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-r</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">ディレクトリ名</span><span style="color: #D4D4D4">  </span><span style="color: #CE9178">//</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">ディレクトリごと削除</span></span>
<span class="line"></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading"><span id="toc14">リモートのリポジトリ名を変更した時、ローカル環境のリポジトリ名も変更</span></h3>



<p>リモートリポジトリのURLが変更された場合、ローカルリポジトリのURLも更新する必要があります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="git remote set-url origin 新しいリポジトリURL

" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">git</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">remote</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">set-url</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">origin</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">新しいリポジトリURL</span></span>
<span class="line"></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading"><span id="toc15">おわり</span></h2>



<p>これらのコマンドは、日々の開発作業をスムーズに進めるために非常に役立ちます。Gitのコマンドは多岐にわたりますが、これらは特に頻繁に使われるものです。適切に使いこなすことで、開発の効率が大きく向上します。</p><p>The post <a href="https://aichi.blog/git-commands-for-daily-development/">Gitのよく使うコマンドまとめ：日常開発で役立つコマンド集</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Flutter】Flutterプロジェクト内に、commitizenを導入する方法</title>
		<link>https://aichi.blog/how-to-implement-commitizen-in-flutter-project/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-implement-commitizen-in-flutter-project</link>
		
		<dc:creator><![CDATA[愛知郎]]></dc:creator>
		<pubDate>Fri, 15 Dec 2023 01:28:58 +0000</pubDate>
				<category><![CDATA[Flutter]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[文法]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://aichi.blog/?p=3414</guid>

					<description><![CDATA[<p>お疲れ様です。 今回は、FlutterプロジェクトにCommitizenを導入する手順をわかりやすく説明します。 目次 はじめに前提条件導入手順1. プロジェクトディレクトリに移動2. Commitizenをローカルにイ [&#8230;]</p>
<p>The post <a href="https://aichi.blog/how-to-implement-commitizen-in-flutter-project/">【Flutter】Flutterプロジェクト内に、commitizenを導入する方法</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>お疲れ様です。</p>



<p>今回は、FlutterプロジェクトにCommitizenを導入する手順をわかりやすく説明します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-16" checked><label class="toc-title" for="toc-checkbox-16">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">前提条件</a></li><li><a href="#toc3" tabindex="0">導入手順</a><ol><li><a href="#toc4" tabindex="0">1. プロジェクトディレクトリに移動</a></li><li><a href="#toc5" tabindex="0">2. Commitizenをローカルにインストール</a></li><li><a href="#toc6" tabindex="0">3. Commitizenを初期化</a></li><li><a href="#toc7" tabindex="0">4. コミットスクリプトをpackage.jsonに追加（オプション）</a></li><li><a href="#toc8" tabindex="0">5. コミットの実行</a></li></ol></li><li><a href="#toc9" tabindex="0">注意点</a></li><li><a href="#toc10" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>FlutterプロジェクトでCommitizenを導入するには、プロジェクトのGitリポジトリにCommitizenを統合する必要があります。</p>



<p>ただし、Flutter自体はDartを使用しており、Node.jsやnpmとは直接関連していません。そのため、Commitizenを導入するにはNode.js環境が必要です。</p>



<p>以下はFlutterプロジェクトにCommitizenを導入する手順です。</p>



<h2 class="wp-block-heading"><span id="toc2">前提条件</span></h2>



<ul class="wp-block-list">
<li>Node.jsがインストールされていることを確認してください。</li>



<li>Gitがインストールされていることを確認してください。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc3">導入手順</span></h2>



<h3 class="wp-block-heading"><span id="toc4">1. プロジェクトディレクトリに移動</span></h3>



<p>Flutterプロジェクトのルートディレクトリに移動します。</p>



<h3 class="wp-block-heading"><span id="toc5">2. Commitizenをローカルにインストール</span></h3>



<p>Node.jsのプロジェクトとして初期化するために、以下のコマンドを実行します（まだ<code>package.json</code>がない場合）。</p>



<pre class="wp-block-code"><code> npm init -y
</code></pre>



<p>次に、Commitizenを開発依存関係としてインストールします。</p>



<pre class="wp-block-code"><code>npm install --save-dev commitizen
</code></pre>



<h3 class="wp-block-heading"><span id="toc6">3. Commitizenを初期化</span></h3>



<pre class="wp-block-code"><code>npx commitizen init cz-conventional-changelog --save-dev --save-exact 
</code></pre>



<p>これにより、<code>cz-conventional-changelog</code>アダプタがプロジェクトに追加され、<code>package.json</code>に設定が保存されます。</p>



<h3 class="wp-block-heading"><span id="toc7">4. コミットスクリプトをpackage.jsonに追加（オプション）</span></h3>



<p><code>package.json</code>にコミットスクリプトを追加することで、<code>npm run commit</code>を使用してCommitizenを起動できます。</p>



<pre class="wp-block-code"><code>{
  "scripts": {
    "commit": "cz"
  }
}
</code></pre>



<p>こちらで、下記のコードも追加することで、commitizenを日本語で利用することができます。</p>



<pre class="wp-block-code"><code> "config": { 
    "commitizen": { 
       "path": "cz-conventional-changelog-ja" 
  } 
}
</code></pre>



<h3 class="wp-block-heading"><span id="toc8">5. コミットの実行</span></h3>



<p>これでセットアップは完了です。</p>



<p>コミットを行う際には、通常の<code>git commit</code>の代わりに<code>npx cz</code>または<code>npm run commit</code>（スクリプトを追加した場合）を使用します。</p>



<h2 class="wp-block-heading"><span id="toc9">注意点</span></h2>



<ul class="wp-block-list">
<li>CommitizenはFlutterのDartコードに直接関与しません。これはGitコミットメッセージの標準化のためのツールです。</li>



<li>FlutterプロジェクトにNode.js関連のファイル（<code>package.json</code>、<code>node_modules</code>フォルダなど）が追加されるため、これらを<code>.gitignore</code>に追加することを検討してください（もし必要であれば）。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc10">まとめ</span></h2>



<p>Commitizenを導入することで、Flutterプロジェクトのコミットメッセージの一貫性と可読性が向上します。チームでの開発がスムーズになるため、ぜひ試してみてください。</p>



<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
  .p-post-appeal {
    margin: 35px 0;
    padding: 28px 21px;
    border: 2px solid #ff9600;
    background-color: #fff6e0;
    border-radius: 6px;
  }
  .p-post-appeal_head {
    position: relative;
    margin-bottom: 14px;
    padding: 7px 0 7px 12px;
    font-size: 16px;
    font-weight: 700;
    line-height: 1.5;
  }
  .p-post-appeal_head:before {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    width: 5px;
    border-radius: 4px;
    background-color: #ff9600;
    content: "";
  }
  .p-post-appeal_text {
    margin-top: 14px;
    font-size: 15px;
    line-height: 1.6;
  }
  .p-post-appeal_button {
    display: block;
    margin-top: 21px;
    padding: 14px;
    border-radius: 4px;
    background: #ff9600;
    color: #fff;
    font-size: 18px;
    font-weight: 700;
    line-height: 1.6;
    text-align: center;
  }
</style>
</head>
<body>

<div class="p-post-appeal">
  <div class="p-post-appeal_head">「Kindle Unlimited」が2ヶ月99円！</div>
  <div class="p-post-appeal_inner">
    <a rel="noopener" href="https://amzn.to/3HEx8bO" target="_blank" class="gtm-contact_area">
      <img decoding="async" src="https://appliv-domestic.akamaized.net/v1/1200x/s1bb/s3-ap-northeast-1.amazonaws.com/img.app-liv.jp/articles/86585_1690784241_080721700_0_1200_528.jpeg" />
    </a>
    <p class="p-post-appeal_text">
      Amazonの読み放題サービス「Kindle Unlimited」が、2ヶ月99円で利用できるキャンペーンが実施中。通常は1ヶ月980円なので、2ヶ月で1,861円もお得になる大チャンス!!（表示される特別プランの金額が異なる場合があります）<br />
      ビジネス書・実用書・小説・マンガなど読み放題のジャンルは多岐にわたるのできっとあなたの読みたい本が見つかります！<br />
      「あなたへの特別プラン 2ヶ月99円キャンペーン」は公式サイトにて本キャンペーンが表示されたユーザーのみ利用できるので、まずは下のボタンからチェックしてみましょう！
    </p>
    <a rel="noopener" href="https://amzn.to/3HEx8bO" target="_blank" class="gtm-contact_area p-post-appeal_button">
      キャンペーンの確認はこちらから
    </a>
  </div>
</div>

</body>
</html><p>The post <a href="https://aichi.blog/how-to-implement-commitizen-in-flutter-project/">【Flutter】Flutterプロジェクト内に、commitizenを導入する方法</a> first appeared on <a href="https://aichi.blog">AichiLog</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
