<?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>CSV &#8211; ケケンタの独学ITブログ</title>
	<atom:link href="https://kekenta-it-blog.com/tag/csv/feed/" rel="self" type="application/rss+xml" />
	<link>https://kekenta-it-blog.com</link>
	<description>プログラミングやWeb制作の情報を発信</description>
	<lastBuildDate>Sat, 22 Mar 2025 09:01:12 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://kekenta-it-blog.com/wp-content/uploads/2023/07/cropped-KEKENTA-BLOG-32x32.png</url>
	<title>CSV &#8211; ケケンタの独学ITブログ</title>
	<link>https://kekenta-it-blog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【WordPress】記事情報をCSV出力するボタンを投稿一覧画面に設置する</title>
		<link>https://kekenta-it-blog.com/wp-output-csv-btn-post-list/</link>
					<comments>https://kekenta-it-blog.com/wp-output-csv-btn-post-list/#respond</comments>
		
		<dc:creator><![CDATA[ケケンタ]]></dc:creator>
		<pubDate>Sat, 22 Mar 2025 07:27:05 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[functions.php]]></category>
		<guid isPermaLink="false">https://kekenta-it-blog.com/?p=14878</guid>

					<description><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2025/03/eye-catch__wp-output-csv-btn-post-list__14878-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>この記事ではWordpressで 記事情報をCSV出力するボタンを投稿一覧画面に設置する方法 をご紹介します。 作成するボタン（イメージ） また、今回は「記事一覧情報をCSV出力する」という具体的な目的にそった内容となっ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2025/03/eye-catch__wp-output-csv-btn-post-list__14878-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p class="wp-block-paragraph">この記事ではWordpressで</p>



<p class="has-text-align-center is-style-big_kakko_box wp-block-paragraph"><strong>記事情報を<span class="swl-inline-color has-swl-deep-02-color">CSV出力するボタン</span>を投稿一覧画面に設置する方法</strong></p>



<p class="wp-block-paragraph">をご紹介します。</p>



<p class="has-text-align-center is-style-balloon_box u-mb-ctrl u-mb-10 wp-block-paragraph"><strong>作成するボタン（イメージ）</strong></p>


<div class="wp-block-image is-style-shadow u-mb-ctrl u-mb-30">
<figure class="aligncenter size-full"><img decoding="async" width="605" height="281" src="https://kekenta-it-blog.com/wp-content/uploads/2025/03/wp-output-csv01.jpg" alt="" class="wp-image-14920" srcset="https://kekenta-it-blog.com/wp-content/uploads/2025/03/wp-output-csv01.jpg 605w, https://kekenta-it-blog.com/wp-content/uploads/2025/03/wp-output-csv01-300x139.jpg 300w" sizes="(max-width: 605px) 100vw, 605px" /></figure>
</div>


<div class="swell-block-capbox cap_box is-style-shadow"><div class="cap_box_ttl"><span><span data-icon="LsLightbulb" data-id="0" style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMzIgNDYuNUgxNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTJoMTZjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyek00MS43IDE1LjlDNDEuMyAxMyA0MCAxMC4zIDM4LjIgOCAzNC41IDMuMiAyOSAuOCAyMy4xIDEgMTQgMS40IDYuNSA4LjkgNiAxOGMtLjMgNiAyLjQgMTEuNyA3LjIgMTUuNC41LjQuOC45LjggMS41djEuNmMwIDIuMiAxLjggNCA0IDRoMTJjMi4yIDAgNC0xLjggNC00VjM1YzAtLjYuMy0xLjIuOS0xLjcgNS4zLTQgOC0xMC42IDYuOC0xNy40em0tNy4xIDEuN2gtLjNjLS43IDAtMS4zLS41LTEuNS0xLjItLjctMy4yLTMuMi01LjctNi40LTYuMy0uOC0uMS0xLjQtLjktMS4yLTEuN3MuOS0xLjQgMS43LTEuMmM0LjQuOCA4IDQuMiA4LjkgOC42LjEuOC0uNCAxLjYtMS4yIDEuOHoiPjwvcGF0aD48L3N2Zz4=)" aria-hidden="true" class="swl-inline-icon"> </span><strong> この記事でわかること</strong></span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>WordPress管理画面にボタンを設置する方法</li>



<li>WordPress管理画面でPOST送信を実行する方法</li>



<li>記事一覧情報をCSVで出力する方法</li>



<li>WordPress管理画面で「フォーム送信」を動かすための仕組み</li>
</ul>
</div></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>今回ご紹介するソースコードを利用することで、<strong>記事ごとの記事IDやURLを一覧で出力する</strong>ことができます！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="is-style-icon_good wp-block-paragraph">また、今回は「記事一覧情報をCSV出力する」という具体的な目的にそった内容となっていますが、当記事の内容を理解することで<strong><span class="swl-marker mark_blue">WordPressの管理画面上でフォーム送信処理を安全に書くことができる</span></strong>ようになります。</p>



<p class="wp-block-paragraph">ぜひ最後までご覧いただければ幸いです！</p>


<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/wp-subloop-wq/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">【WordPress】WP_Query（サブループ）の使い方とパラメータ一覧を紹介</span>
			</a>
		</div>

<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/wp-edit-functions/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">【WordPress】functions.phpを編集する「３つ」の方法と編集時の注意点</span>
			</a>
		</div>

<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/wp-how-to-load-js/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">【WordPress】JavaScriptはどこに書けばいい？「３つの方法」を解説</span>
			</a>
		</div>

<div class="swell-block-postLink">			<a href="https://kekenta-it-blog.com/change-to-swell/" class="c-blogLink -internal" data-style="text">
				<!-- <i class="c-blogLink__icon icon-link" role="presentation"></i> -->
				<span class="c-blogLink__icon">
					<svg xmlns="http://www.w3.org/2000/svg" class="swl-svg-link __svg" width="1em" height="1em" viewBox="0 0 48 48" role="img" aria-hidden="true" focusable="false"><path d="M21.2 30.2c-.5 0-1-.2-1.4-.6l-.7-.7c-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l7.1-7.1c2.3-2.3 5.3-3.5 8.5-3.5s6.2 1.2 8.5 3.5c4.7 4.7 4.7 12.3 0 17l-3.5 3.5c-.8.8-2 .8-2.8 0-.8-.8-.8-2 0-2.8l3.5-3.5c3.1-3.1 3.1-8.2 0-11.3-1.5-1.5-3.5-2.3-5.7-2.3-2.1 0-4.2.8-5.7 2.3l-7.1 7.1c-1.5 1.5-2.3 3.5-2.3 5.7s.8 4.2 2.3 5.7l.7.7c.8.8.8 2 0 2.8-.4.3-.9.5-1.4.5z" /><path d="M13.4 46.6c-3.1 0-6.1-1.2-8.5-3.5-2.3-2.3-3.5-5.3-3.5-8.5s1.2-6.2 3.5-8.5l3.5-3.5c.8-.8 2-.8 2.8 0 .8.8.8 2 0 2.8l-3.5 3.5c-1.5 1.5-2.3 3.5-2.3 5.7 0 2.1.8 4.2 2.3 5.7 3.1 3.1 8.2 3.1 11.3 0l7.1-7.1c1.5-1.5 2.3-3.5 2.3-5.7 0-2.1-.8-4.2-2.3-5.7l-.7-.7c-.8-.8-.8-2 0-2.8.8-.8 2-.8 2.8 0l.7.7c2.3 2.3 3.5 5.3 3.5 8.5s-1.2 6.2-3.5 8.5l-7.1 7.1c-2.3 2.3-5.3 3.5-8.4 3.5z" /></svg>				</span>
				<span class="c-blogLink__text">無料テーマCocoonからSWELLに乗り換えた７つの理由【WordPress】</span>
			</a>
		</div>

<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2025/03/eye-catch__school-php-and-wp__14099-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/school-php-and-wp/">PHPやWordPressを学ぶのにおすすめのプログラミングスクール【７選】</a>
						<span class="p-blogCard__excerpt">僕はこれまで独学でPHPを学習してきました。結論から言えば、それでもPHPを習得することはできました。 しかし、それに費やした累計学習期間は1年ほど。モチベーション&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">【結論】ソースコード</h2>



<p class="is-style-icon_pen wp-block-paragraph">今回使用するファイルは<code class="file_name">functions.php</code>のみです。</p>



<p class="wp-block-paragraph">以下のソースコードをfunctions.phpに記述するだけで「記事の一覧情報をCSV出力するボタン」を投稿一覧画面に表示できます。</p>



<p class="is-style-balloon_box u-mb-ctrl u-mb-10 wp-block-paragraph"><strong>ソースコード（functions.php）</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP"><code>/**
 * CSVファイルを生成して出力する。
 */
function createCsvPostList()
{
	if (isset($_POST[&#39;csv-output&#39;]) && $_POST[&#39;csv-output&#39;] === &#39;true&#39;) {
		// セキュリティチェック
		if (!isset($_POST[&#39;nonce&#39;]) || !wp_verify_nonce($_POST[&#39;nonce&#39;], &#39;csv-output-action&#39;)) {
			wp_die(&#39;セキュリティチェックに失敗しました。&#39;);
		}

		// CSVファイル名
		$file_name = &#39;記事PV出力_&#39; . date(&#39;Ymd_His&#39;) . &#39;.csv&#39;;

		// CSVダウンロード用のヘッダーを設定
		header(&#39;Content-Type: text/csv; charset=utf-8&#39;);
		header(&#39;Content-Disposition: attachment; filename=&quot;&#39; . $file_name . &#39;&quot;&#39;);

		// 出力ストリームに接続されたファイルポインタを作成
		$output = fopen(&#39;php://output&#39;, &#39;w&#39;);

		// Excel互換のためにUTF-8 BOM（バイトオーダーマーク）を追加
		fwrite($output, &quot;\xEF\xBB\xBF&quot;);

		// CSVヘッダー行
		fputcsv($output, [&#39;記事ID&#39;, &#39;記事タイトル&#39;, &#39;記事URL&#39;]);

		// 公開済みの記事を全て取得
		$args = [
			&#39;post_type&#39;      =&gt; &#39;post&#39;,
			&#39;post_status&#39;    =&gt; &#39;publish&#39;,
			&#39;posts_per_page&#39; =&gt; -1, // 全ての記事を取得
		];
		$posts = new WP_Query($args);

		// 記事が見つからなかった場合の処理
		if (!$posts-&gt;have_posts()) {
			fputcsv($output, [&#39;記事が見つかりませんでした。&#39;]);
			fclose($output);
			exit;
		}

		// 記事の処理件数をカウント
		$post_count = 0;

		if ($posts-&gt;have_posts()) {
			while ($posts-&gt;have_posts()) {
				$posts-&gt;the_post();

				// 記事の処理件数をカウントアップ
				$post_count++;

				// 記事IDとタイトルを取得
				$post_id    = get_the_ID();
				$post_title = get_the_title();
				$post_url = get_permalink();

				// CSVにデータを追加
				fputcsv($output, [$post_id, $post_title, $post_url]);
			}
			wp_reset_postdata();
		}

		// 処理件数をCSVに出力
		fputcsv($output, [&#39;処理件数：&#39; . $post_count . &#39;件&#39;]);

		// ファイルポインタを閉じる
		fclose($output);

		// これ以上の出力を防ぐために終了
		exit;
	}
}

/**
 * 管理画面の投稿一覧画面にCSV出力ボタンを追加する
 */
function addCsvExportButtonToPostList()
{
    global $pagenow;

    // 投稿一覧画面でのみ実行
    if (&#39;edit.php&#39; === $pagenow) {
?&gt;
        &lt;form method=&quot;post&quot; action=&quot;&lt;?php echo admin_url(&#39;admin-post.php&#39;); ?&gt;&quot; style=&quot;display: inline-block; position: fixed; right: 30px; bottom: 30px;&quot;&gt;
            &lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;csv_export&quot;&gt;
            &lt;?php wp_nonce_field(&#39;csv-output-action&#39;, &#39;nonce&#39;); ?&gt;
            &lt;input type=&quot;hidden&quot; name=&quot;csv-output&quot; value=&quot;true&quot;&gt;
            &lt;button type=&quot;submit&quot; class=&quot;csv-output-btn&quot;&gt;記事情報をCSV出力&lt;/button&gt;
        &lt;/form&gt;
&lt;?php
    }
}
add_action(&#39;admin_footer&#39;, &#39;addCsvExportButtonToPostList&#39;);

/**
 * CSV出力処理を実行
 */
add_action(&#39;admin_post_csv_export&#39;, &#39;createCsvPostList&#39;);
add_action(&#39;admin_post_nopriv_csv_export&#39;, &#39;createCsvPostList&#39;);</code></pre></div>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="u-mb-ctrl u-mb-20 wp-block-paragraph"><strong>functions.phpの編集方法</strong>については以下の記事で詳しく解説しています。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/10/eye-catch__wp-edit-functions__11133-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/wp-edit-functions/" target="_blank" rel="noopener noreferrer">【WordPress】functions.phpを編集する「３つ」の方法と編集時の注意点</a>
						<span class="p-blogCard__excerpt">WordPressで機能カスタマイズをする際は、必ずと言っていいほどfunctions.phpを編集することになります。 しかし、functions.phpを編集したことで何らかのエラーが発生&#8230;</span>					</div>
				</div>
			</div>
		</div></div></div>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">解説</h2>



<p class="is-style-bg_stripe wp-block-paragraph">簡単に<strong>ソースコードの解説</strong>をします。</p>



<p class="is-style-balloon_box wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMzIgNDYuNUgxNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTJoMTZjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyek00MS43IDE1LjlDNDEuMyAxMyA0MCAxMC4zIDM4LjIgOCAzNC41IDMuMiAyOSAuOCAyMy4xIDEgMTQgMS40IDYuNSA4LjkgNiAxOGMtLjMgNiAyLjQgMTEuNyA3LjIgMTUuNC41LjQuOC45LjggMS41djEuNmMwIDIuMiAxLjggNCA0IDRoMTJjMi4yIDAgNC0xLjggNC00VjM1YzAtLjYuMy0xLjIuOS0xLjcgNS4zLTQgOC0xMC42IDYuOC0xNy40em0tNy4xIDEuN2gtLjNjLS43IDAtMS4zLS41LTEuNS0xLjItLjctMy4yLTMuMi01LjctNi40LTYuMy0uOC0uMS0xLjQtLjktMS4yLTEuN3MuOS0xLjQgMS43LTEuMmM0LjQuOCA4IDQuMiA4LjkgOC42LjEuOC0uNCAxLjYtMS4yIDEuOHoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsLightbulb" data-id="0" aria-hidden="true" class="swl-inline-icon"> </span><strong>ポイント（３つ）</strong></p>



<dl class="swell-block-dl is-style-border">
<dt class="swell-block-dl__dt">① createCsvPostList()</dt>



<dd class="swell-block-dl__dd">
<p class="wp-block-paragraph">CSVファイルの出力を行う関数</p>
</dd>



<dt class="swell-block-dl__dt">② addCsvExportButtonToPostList()</dt>



<dd class="swell-block-dl__dd">
<p class="wp-block-paragraph">投稿一覧画面にCSV出力処理を実行するためのボタンを設置する関数<br>（＝createCsvPostList()を実行するためのボタン）</p>
</dd>



<dt class="swell-block-dl__dt">③ add_action(&#8216;admin_post_〇〇〇&#8217;, &#8216;●●●●●&#8217;);</dt>



<dd class="swell-block-dl__dd">
<p class="wp-block-paragraph">WordPress管理画面内でPOST送信を実行するために必要なアクションフック</p>
</dd>
</dl>



<h3 class="wp-block-heading">① createCsvPostList()</h3>



<p class="wp-block-paragraph">createCsvPostList()はCSVファイルの出力を行う関数です。この関数が実行されることで、ローカルPC上に記事一覧情報がCSVファイルでダウンロードされます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP"><code>/**
 * CSVファイルを生成して出力する。
 */
function createCsvPostList()
{
	if (isset($_POST[&#39;csv-output&#39;]) && $_POST[&#39;csv-output&#39;] === &#39;true&#39;) {
		// セキュリティチェック
		if (!isset($_POST[&#39;nonce&#39;]) || !wp_verify_nonce($_POST[&#39;nonce&#39;], &#39;csv-output-action&#39;)) {
			wp_die(&#39;セキュリティチェックに失敗しました。&#39;);
		}

		// CSVファイル名
		$file_name = &#39;記事PV出力_&#39; . date(&#39;Ymd_His&#39;) . &#39;.csv&#39;;

		// CSVダウンロード用のヘッダーを設定
		header(&#39;Content-Type: text/csv; charset=utf-8&#39;);
		header(&#39;Content-Disposition: attachment; filename=&quot;&#39; . $file_name . &#39;&quot;&#39;);

		// 出力ストリームに接続されたファイルポインタを作成
		$output = fopen(&#39;php://output&#39;, &#39;w&#39;);

		// Excel互換のためにUTF-8 BOM（バイトオーダーマーク）を追加
		fwrite($output, &quot;\xEF\xBB\xBF&quot;);

		// CSVヘッダー行
		fputcsv($output, [&#39;記事ID&#39;, &#39;記事タイトル&#39;, &#39;記事URL&#39;]);

		// 公開済みの記事を全て取得
		$args = [
			&#39;post_type&#39;      =&gt; &#39;post&#39;,
			&#39;post_status&#39;    =&gt; &#39;publish&#39;,
			&#39;posts_per_page&#39; =&gt; -1, // 全ての記事を取得
		];
		$posts = new WP_Query($args);

		// 記事が見つからなかった場合の処理
		if (!$posts-&gt;have_posts()) {
			fputcsv($output, [&#39;記事が見つかりませんでした。&#39;]);
			fclose($output);
			exit;
		}

		// 記事の処理件数をカウント
		$post_count = 0;

		if ($posts-&gt;have_posts()) {
			while ($posts-&gt;have_posts()) {
				$posts-&gt;the_post();

				// 記事の処理件数をカウントアップ
				$post_count++;

				// 記事IDとタイトルを取得
				$post_id    = get_the_ID();
				$post_title = get_the_title();
				$post_url = get_permalink();

				// CSVにデータを追加
				fputcsv($output, [$post_id, $post_title, $post_url]);
			}
			wp_reset_postdata();
		}

		// 処理件数をCSVに出力
		fputcsv($output, [&#39;処理件数：&#39; . $post_count . &#39;件&#39;]);

		// ファイルポインタを閉じる
		fclose($output);

		// これ以上の出力を防ぐために終了
		exit;
	}
}</code></pre></div>



<p class="wp-block-paragraph">上から順番に、<strong><span class="swl-marker mark_yellow">主要なソースコードの解説</span></strong>をします。</p>



<p class="has-text-align-center wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGQ9Ik0yMDEuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMDYuNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiI+PC9wYXRoPjwvc3ZnPg==)" data-icon="FasAngleDown" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP"><code>if (isset($_POST[&#39;csv-output&#39;]) && $_POST[&#39;csv-output&#39;] === &#39;true&#39;){
    ～省略～
}</code></pre></div>



<p class="wp-block-paragraph">name属性が<code>csv-output</code>でvalue属性が<code>true</code>となっているボタンからPOST送信があった場合にのみ、CSV出力処理が実行されるよう制御しています。</p>



<p class="has-text-align-center wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGQ9Ik0yMDEuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMDYuNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiI+PC9wYXRoPjwvc3ZnPg==)" data-icon="FasAngleDown" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP"><code>// セキュリティチェック
if (!isset($_POST[&#39;nonce&#39;]) || !wp_verify_nonce($_POST[&#39;nonce&#39;], &#39;csv-output-action&#39;)) {
	wp_die(&#39;セキュリティチェックに失敗しました。&#39;);
}</code></pre></div>



<p class="wp-block-paragraph">WordPressには<strong>nonce</strong>という仕組みが用意されています。いわゆる<strong><span class="swl-inline-color has-swl-deep-01-color">CSRF攻撃対策</span></strong>のために、上記のセキュリティチェック処理が必須です。</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="u-mb-ctrl u-mb-20 wp-block-paragraph"><strong>CSRF対策</strong>については以下の記事で詳しく解説しています。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__csrf-php__918-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/csrf-php/" target="_blank" rel="noopener noreferrer">【CSRF】攻撃の流れやPHPでの対策方法を解説【クロスサイトリクエストフォージェリ】</a>
						<span class="p-blogCard__excerpt">Webサイトへのセキュリティ攻撃の１つにCSRF（クロスサイトリクエストフォージェリ）というものがあります。 この記事では、 CSRFの攻撃の流れ 攻撃による影響・被害 PH&#8230;</span>					</div>
				</div>
			</div>
		</div></div></div>



<p class="wp-block-paragraph">具体的には、ボタンをクリックしたときに<strong><span class="swl-inline-color has-swl-deep-02-color">トークン（ランダムな文字列）</span></strong>も一緒にPOST送信し、上記のソースコードで「このPOST送信は受け取って問題のないものか？（攻撃者によるリクエストではないか？）」を判定しています。</p>



<p class="wp-block-paragraph">POST送信を行うようなWebアプリでは、必ずこのようにトークンを用いて<strong>正規のリクエストかどうかを判定する必要があります。</strong></p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>CSRF対策をしておかないと、例えば、「アクセス情報を改ざん → 不正にアクセスされる」といった被害が発生する可能性があります！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="has-text-align-center wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGQ9Ik0yMDEuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMDYuNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiI+PC9wYXRoPjwvc3ZnPg==)" data-icon="FasAngleDown" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP"><code>// CSVファイル名
$file_name = &#39;記事PV出力_&#39; . date(&#39;Ymd_His&#39;) . &#39;.csv&#39;;</code></pre></div>



<p class="wp-block-paragraph">コメントにもあるように、ここでCSVファイルの名前を設定しています。ファイルの上書きを防ぐためにも、基本的には日時情報を含めることで、<strong>ファイル名が必ず一意となるようにする</strong>ことをオススメします。</p>



<p class="has-text-align-center wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGQ9Ik0yMDEuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMDYuNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiI+PC9wYXRoPjwvc3ZnPg==)" data-icon="FasAngleDown" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP"><code>// CSVダウンロード用のヘッダーを設定
header(&#39;Content-Type: text/csv; charset=utf-8&#39;);
header(&#39;Content-Disposition: attachment; filename=&quot;&#39; . $fileName . &#39;&quot;&#39;);</code></pre></div>



<p class="wp-block-paragraph">ここでは<strong>ヘッダー情報</strong>を設定しています。</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list -list-under-dashed is-style-check_list">
<li>Content-Type: text/csv;　……　ファイル形式をCSVに設定</li>



<li>Content-Disposition: attachment;　……　<code>attachment</code>を指定することで、「このファイルがダウンロードするべきもの」ということをブラウザへ伝えています。</li>
</ul>
</div></div>



<p class="has-text-align-center wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGQ9Ik0yMDEuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMDYuNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiI+PC9wYXRoPjwvc3ZnPg==)" data-icon="FasAngleDown" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP"><code>// CSVヘッダー行
fputcsv($output, [&#39;記事ID&#39;, &#39;記事タイトル&#39;, &#39;記事URL&#39;]);</code></pre></div>



<p class="wp-block-paragraph">CSVファイルに出力する各列の項目名を設定しています。出力する情報や出力する順番などに応じてご調整ください。</p>



<p class="has-text-align-center wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGQ9Ik0yMDEuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMDYuNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiI+PC9wYXRoPjwvc3ZnPg==)" data-icon="FasAngleDown" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP"><code>// 公開済みの記事を全て取得
$args = [
	&#39;post_type&#39;      =&gt; &#39;post&#39;,
	&#39;post_status&#39;    =&gt; &#39;publish&#39;,
	&#39;posts_per_page&#39; =&gt; -1, // 全ての記事を取得
];
$posts = new WP_Query($args);</code></pre></div>



<p class="wp-block-paragraph">ここではすべての記事情報を取得しています。行っていることは、サブループの生成とまったく同じです。</p>



<p class="wp-block-paragraph">上記のソースコードでは「公開済み」の記事を対象としていますが、<strong>別のオプションや複数のオプションを同時に指定することも可能</strong>です。</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="u-mb-ctrl u-mb-20 wp-block-paragraph">サブループ（WP_Query）については以下の記事で詳しく解説しています。<br>※「投稿状態のオプション」については下記記事の<a href="https://kekenta-it-blog.com/wp-subloop-wq/#index_id15" target="_blank" rel="noreferrer noopener">投稿の状態（公開・下書きなど）<span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNNDQgMkgzMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDJoOS4yTDI0IDIxLjJjLS44LjgtLjggMiAwIDIuOHMyIC44IDIuOCAwTDQyIDguOFYxOGMwIDEuMS45IDIgMiAyczItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PHBhdGggZD0iTTQxIDI3Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS0uOSAyLTIgMkg5Yy0xLjEgMC0yLS45LTItMlYxMWMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMkg5Yy0zLjMgMC02IDIuNy02IDZ2MjhjMCAzLjMgMi43IDYgNiA2aDI4YzMuMyAwIDYtMi43IDYtNlYyOWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsExternalLink" data-id="27" aria-hidden="true" class="swl-inline-icon"> </span></a>の章をご覧ください。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/07/eye-catch__wp-subloop-wq__9158-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/wp-subloop-wq/" target="_blank" rel="noopener noreferrer">【WordPress】WP_Query（サブループ）の使い方とパラメータ一覧を紹介</a>
						<span class="p-blogCard__excerpt">WordPressでサイト制作をしているとメインの記事一覧以外に「別の記事一覧も出力したい！」となることが多々あります。 今回はそこで深く関係してくるメインループ、サ&#8230;</span>					</div>
				</div>
			</div>
		</div></div></div>



<p class="has-text-align-center wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGQ9Ik0yMDEuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMDYuNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiI+PC9wYXRoPjwvc3ZnPg==)" data-icon="FasAngleDown" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP"><code>if ($posts-&gt;have_posts()) {
	while ($posts-&gt;have_posts()) {
		$posts-&gt;the_post();

		// 記事の処理件数をカウントアップ
		$post_count++;

		// 記事IDとタイトルを取得
		$post_id    = get_the_ID();
		$post_title = get_the_title();
		$post_url = get_permalink();

		// CSVにデータを追加
		fputcsv($output, [$post_id, $post_title, $post_url]);
	}
	wp_reset_postdata();
}</code></pre></div>



<p class="wp-block-paragraph">サブループを利用したことがある方ならお馴染みのループ処理です。ページ制作のときはここでHTMLタグを使用して記事情報を出力しますが、今回はCSVファイルへ出力するデータとして、記事情報をピックアップしています。</p>



<p class="is-style-big_icon_check wp-block-paragraph">もしカテゴリーやタグ情報も必要な場合は、この処理内でget_the_category()などのテンプレートタグを使用してご自由にカスタマイズ可能です。</p>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h3 class="wp-block-heading">② addCsvExportButtonToPostList()</h3>



<p class="wp-block-paragraph">続いて、<strong>投稿一覧画面にCSV出力処理を実行するためのボタンを表示するソースコード</strong>の解説です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP"><code>/**
 * 管理画面の投稿一覧画面にCSV出力ボタンを追加する
 */
function addCsvExportButtonToPostList()
{
    global $pagenow;

    // 投稿一覧画面でのみ実行
    if (&#39;edit.php&#39; === $pagenow) {
?&gt;
        &lt;form method=&quot;post&quot; action=&quot;&lt;?php echo admin_url(&#39;admin-post.php&#39;); ?&gt;&quot; style=&quot;display: inline-block; position: fixed; right: 30px; bottom: 30px;&quot;&gt;
            &lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;csv_export&quot;&gt;
            &lt;?php wp_nonce_field(&#39;csv-output-action&#39;, &#39;nonce&#39;); ?&gt;
            &lt;input type=&quot;hidden&quot; name=&quot;csv-output&quot; value=&quot;true&quot;&gt;
            &lt;button type=&quot;submit&quot; class=&quot;csv-output-btn&quot;&gt;記事情報をCSV出力&lt;/button&gt;
        &lt;/form&gt;
&lt;?php
    }
}
add_action(&#39;admin_footer&#39;, &#39;addCsvExportButtonToPostList&#39;);</code></pre></div>



<p class="has-text-align-center wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGQ9Ik0yMDEuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMDYuNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiI+PC9wYXRoPjwvc3ZnPg==)" data-icon="FasAngleDown" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP"><code>global $pagenow;

// 投稿一覧画面でのみ実行
if (&#39;edit.php&#39; === $pagenow) {
    ～省略～
}</code></pre></div>



<p class="wp-block-paragraph"><code>global $pagenow;</code>により、「現在表示中のページ情報」を取得することができます。また、「投稿一覧画面＝edit.php」のため、<strong>if分でいまいるページが投稿一覧画面かどうかを判定</strong>しています。</p>



<p class="has-text-align-center wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGQ9Ik0yMDEuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMDYuNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiI+PC9wYXRoPjwvc3ZnPg==)" data-icon="FasAngleDown" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP" data-line="4"><code>&lt;!-- ボタンは画面右下に固定表示する --&gt;
&lt;form method=&quot;post&quot; action=&quot;&lt;?php echo admin_url(&#39;admin-post.php&#39;); ?&gt;&quot; style=&quot;display: inline-block; position: fixed; bottom: 30px; right: 30px;&quot;&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;csv_export&quot;&gt;
	&lt;?php wp_nonce_field(&#39;csv-output-action&#39;, &#39;nonce&#39;); ?&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;csv-output&quot; value=&quot;true&quot;&gt;
	&lt;button type=&quot;submit&quot; class=&quot;csv-output-btn&quot;&gt;PV数をCSV出力&lt;/button&gt;
&lt;/form&gt;</code></pre></div>



<p class="wp-block-paragraph">ここで<strong>投稿一覧画面に表示するボタンのHTML</strong>を記述しています。</p>



<div class="wp-block-group is-style-big_icon_point u-mb-ctrl u-mb-30"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>action=&#8221;&lt;?php echo admin_url(&#8216;admin-post.php&#8217;); ?&gt;&#8221;でPOST送信先URLを自動生成</li>



<li>ハイライト行でWordpressの<code>wp_nonce_field</code>関数を利用し、トークンを生成</li>



<li>formタグに直接style属性を持たせ、position: fixed;で固定表示</li>
</ul>
</div></div>



<p class="wp-block-paragraph">WordPressでは管理画面内でフォーム送信を処理するためのファイルとして<code class="file_name">admin-post.php</code>が準備されています。action属性では、<code>admin_url()</code>関数を使用することで、<code class="file_name">admin-post.php</code>へPOST送信するためのURLを生成しています。</p>



<p class="wp-block-paragraph">また、<code>wp_nonce_field</code>関数によって、自動的にトークンを持つinputタグが生成されます。</p>



<p class="has-text-align-center is-style-balloon_box u-mb-ctrl u-mb-10 wp-block-paragraph"><code>wp_nonce_field</code><strong>関数によって自動生成されるinputタグ</strong></p>


<div class="wp-block-image is-style-shadow size_xs u-mb-ctrl u-mb-20">
<figure class="alignleft size-full"><img decoding="async" width="862" height="209" src="https://kekenta-it-blog.com/wp-content/uploads/2025/03/form_nonce_sample.jpg" alt="wp_nonce_field関数が自動生成するinputタグ" class="wp-image-14898" srcset="https://kekenta-it-blog.com/wp-content/uploads/2025/03/form_nonce_sample.jpg 862w, https://kekenta-it-blog.com/wp-content/uploads/2025/03/form_nonce_sample-300x73.jpg 300w, https://kekenta-it-blog.com/wp-content/uploads/2025/03/form_nonce_sample-768x186.jpg 768w" sizes="(max-width: 862px) 100vw, 862px" /><figcaption class="wp-element-caption">wp_nonce_field関数が自動生成するinputタグ</figcaption></figure>
</div>


<p class="has-text-align-center wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGQ9Ik0yMDEuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMDYuNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiI+PC9wYXRoPjwvc3ZnPg==)" data-icon="FasAngleDown" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP" data-line="4"><code>add_action(&#39;admin_footer&#39;, &#39;addCsvExportButtonToPostList&#39;);</code></pre></div>



<p class="wp-block-paragraph">最後に、アクションフック<code>admin_footer</code>に<code>addCsvExportButtonToPostList()</code>関数をフックすることで、投稿一覧画面のフッター部分（&lt;/body>タグの直前）でボタンのHTMLが出力されるよう設定しています。</p>



<p class="is-style-icon_info wp-block-paragraph"><code>admin_footer</code>フックを使用した場合、HTMLの出力箇所をCSSで調整する必要があります。今回はわかりやすくする意味でposition: fixed;による固定配置としました。</p>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h3 class="wp-block-heading">③ add_action(&#8216;admin_post_〇〇〇&#8217;, &#8216;●●●●●&#8217;);</h3>



<p class="wp-block-paragraph">３つ目のポイントとなるソースコードは、以下の２行です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-file="functions.php" data-lang="PHP" data-line="4"><code>/**
 * CSV出力処理を実行
 */
add_action(&#39;admin_post_csv_export&#39;, &#39;createCsvPostList&#39;);
add_action(&#39;admin_post_nopriv_csv_export&#39;, &#39;createCsvPostList&#39;);</code></pre></div>



<p class="wp-block-paragraph">先ほど<code class="file_name">admin-post.php</code>について触れました。</p>



<p class="wp-block-paragraph">上記２行のソースコードは、<code class="file_name">admin-post.php</code>で実行するための関数を登録するためのものです。<code class="file_name">admin-post.php</code>は、フォーム送信されたデータに含まれる「action属性の値」にもとづき、登録されているアクション（関数）を実行します。</p>



<p class="wp-block-paragraph">具体的には<span class="swl-marker mark_yellow"><strong><code>admin_post_{action}</code> というアクションフックに登録された関数が実行されるという仕組み</strong></span>になっています。</p>



<p class="has-text-align-center wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGQ9Ik0yMDEuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMDYuNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiI+PC9wYXRoPjwvc3ZnPg==)" data-icon="FasAngleDown" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span></p>



<p class="wp-block-paragraph">例えば今回のソースコードを見ると、formタグ内にあるinputタグのひとつに<code>value="csv_export"</code>が設定されています。（つまりフォームデータに<code>csv_export</code>が含まれる）</p>



<p class="wp-block-paragraph">一方、アクションフックでは<code>add_action('admin_post_<strong>csv_export</strong>', 'createCsvPostList');</code> のように、createCsvPostList()関数をフックしています。</p>



<p class="is-style-icon_good wp-block-paragraph">これにより、<strong>投稿一覧画面のボタンを押すことでcreateCsvPostList()＝CSV出力処理が実行される</strong>という仕組みになっています。</p>



<p class="wp-block-paragraph">なお、<code>admin_post_nopriv_csv_export</code>アクションフックについては、本来は<strong>非ログインユーザー向け</strong>のものです。一見すると不要にも思えますが、セキュリティの互換性から、admin_post_{action}とadmin_post_nopriv_{action}は併記することが推奨されています。</p>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



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



<p class="wp-block-paragraph">以上が<strong>記事情報をCSV出力するボタンを投稿一覧画面に設置する方法</strong>でした。</p>



<p class="wp-block-paragraph">今回は「記事一覧情報をCSV出力する」という具体的な目的にそった内容でした。しかし、当記事の内容を理解すれば、<strong>管理画面上でフォーム送信する処理を安全に書く</strong>ことができるようになります。</p>



<p class="wp-block-paragraph">特にnonceによるセキュリティチェックやadmin_post_{action}のようなアクションフックの理解は、Wordpressカスタマイズの柔軟性を高めてくれるはずです。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>この記事が皆さまのWordpress開発のお役に立てたなら何よりです！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="wp-block-paragraph">それでは、最後までご覧いただきありがとうございました！</p>



<p class="wp-block-paragraph">当ブログではWordpressやWeb制作、PHPやLaravelなどのWebアプリに関する情報を発信しています。ご興味のある方はほかの記事もご覧いただけるとうれしいです！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kekenta-it-blog.com/wp-output-csv-btn-post-list/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Python】フォルダ内にあるすべてのCSVファイルを結合する【ソースコード】</title>
		<link>https://kekenta-it-blog.com/python-merge-csv/</link>
					<comments>https://kekenta-it-blog.com/python-merge-csv/#respond</comments>
		
		<dc:creator><![CDATA[ケケンタ]]></dc:creator>
		<pubDate>Thu, 05 Dec 2024 06:12:29 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Chardet]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[Pandas]]></category>
		<guid isPermaLink="false">https://kekenta-it-blog.com/?p=12533</guid>

					<description><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2024/12/eye-catch__python-merge-csv__12533-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>この記事ではPythonとそのライブラリであるPandas・Chardetを使用して 指定フォルダ内にあるすべてのCSVファイルをひとつに結合する方法 をご紹介します。 必要なツール・ライブラリのインストール方法やソース [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://kekenta-it-blog.com/wp-content/uploads/2024/12/eye-catch__python-merge-csv__12533-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p class="wp-block-paragraph">この記事では<strong>Pythonとそのライブラリである<span class="swl-inline-color has-swl-deep-02-color">Pandas</span>・<span class="swl-inline-color has-swl-deep-02-color">Chardet</span>を使用して</strong></p>



<p class="has-text-align-center is-style-big_kakko_box wp-block-paragraph"><strong><span class="swl-marker mark_yellow">指定フォルダ内にあるすべてのCSVファイルをひとつに結合する方法</span></strong></p>



<p class="wp-block-paragraph">をご紹介します。</p>



<p class="wp-block-paragraph"><strong>必要なツール・ライブラリのインストール方法やソースコード、具体的な使用方法</strong>を画像つきで丁寧に解説しています。</p>



<p class="wp-block-paragraph">今回ご紹介するソースコードを使用すれば、<strong><span class="swl-marker mark_yellow">「指定したフォルダ内に入れてあるCSVファイル」は、それらのディレクトリ構造に関係なく、すべてひとつのファイルに結合することが可能</span></strong>です。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>ぜひご活用いただければ何よりです！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h2 class="wp-block-heading">【事前準備】必要ソフト・ライブラリのインストール</h2>



<p class="wp-block-paragraph">本章では以下のインストール方法をそれぞれ解説します。</p>



<ol class="wp-block-list is-style-num_circle -list-under-dashed">
<li>Python</li>



<li>pip（パッケージ管理ツール）</li>



<li>Pandas（ライブラリ）</li>



<li>Chardet（ライブラリ）</li>
</ol>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>もし上記の中で、<strong><span class="swl-marker mark_orange">インストールが済んでいないもの</span></strong>があれば、以下よりご紹介する方法でインストールを完了しましょう。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h3 class="wp-block-heading" id="anc-python-install">① Pythonのインストール</h3>



<div class="swell-block-step" data-num-style="circle">
<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">公式ドキュメントからインストーラをダウンロードする</div><div class="swell-block-step__body">
<p class="is-style-bg_stripe wp-block-paragraph"><a href="https://www.python.org/">公式サイト</a>からインストーラをダウンロードします。</p>


<div class="wp-block-image is-style-shadow size_s">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="494" src="https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_installer_download-1024x494.png" alt="Pythonのインストーラをダウンロード" class="wp-image-12554" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_installer_download-1024x494.png 1024w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_installer_download-300x145.png 300w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_installer_download-768x371.png 768w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_installer_download.png 1249w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Pythonのインストーラをダウンロード</figcaption></figure>
</div>


<p class="is-style-icon_pen wp-block-paragraph">■ 公式サイトURL：<a href="https://www.python.org/">https://www.python.org/</a></p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">インストーラにしたがってPythonをインストールする</div><div class="swell-block-step__body">
<p class="wp-block-paragraph"><strong>インストーラをダブルクリック</strong>します。</p>



<p class="wp-block-paragraph">すると、インストーラが起動するので<strong>「Add python.exe to PATH」にチェックを入れます。</strong></p>



<p class="is-style-icon_info wp-block-paragraph">「Add python.exe to PATH」にチェックを入れ忘れるとさらにひと手間かかることになるため、<strong><span class="swl-marker mark_orange">必ずチェックを入れ忘れていないかご確認下さい。</span></strong></p>


<div class="wp-block-image is-style-shadow size_s">
<figure class="aligncenter size-full"><img decoding="async" width="656" height="405" src="https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_installer.png" alt="Pythonのインストーラ起動直後の画面" class="wp-image-12558" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_installer.png 656w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_installer-300x185.png 300w" sizes="(max-width: 656px) 100vw, 656px" /><figcaption class="wp-element-caption">Pythonのインストーラ起動直後の画面</figcaption></figure>
</div>


<p class="has-text-align-center wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGQ9Ik0yMDEuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMDYuNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiI+PC9wYXRoPjwvc3ZnPg==)" data-icon="FasAngleDown" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span></p>



<p class="wp-block-paragraph">インストールが完了するまで待機します。</p>


<div class="wp-block-image is-style-shadow size_xs">
<figure class="aligncenter size-full"><img decoding="async" width="820" height="506" src="https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_install_progress.png" alt="Pythonのインストール中" class="wp-image-12557" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_install_progress.png 820w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_install_progress-300x185.png 300w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_install_progress-768x474.png 768w" sizes="(max-width: 820px) 100vw, 820px" /><figcaption class="wp-element-caption">Pythonのインストール中</figcaption></figure>
</div>


<p class="has-text-align-center wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGQ9Ik0yMDEuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMDYuNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiI+PC9wYXRoPjwvc3ZnPg==)" data-icon="FasAngleDown" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span></p>



<p class="wp-block-paragraph">以下のような画面になったらインストールは完了です。</p>


<div class="wp-block-image is-style-shadow size_xs">
<figure class="aligncenter size-full"><img decoding="async" width="820" height="506" src="https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_install_finish.png" alt="Pythonのインストール完了" class="wp-image-12556" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_install_finish.png 820w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_install_finish-300x185.png 300w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_install_finish-768x474.png 768w" sizes="(max-width: 820px) 100vw, 820px" /><figcaption class="wp-element-caption">Pythonのインストール完了</figcaption></figure>
</div>

<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>Closeボタンで閉じてしまってOKです！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div></div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">Pythonがインストールできていることを確認する</div><div class="swell-block-step__body">
<p class="wp-block-paragraph"><strong>Windows PowerShell</strong>や<strong>ターミナル</strong>で以下のコマンドを実行します。</p>



<p class="wp-block-paragraph">Pythonのバージョンが表示されれば、無事にインストールは完了しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>python --version</code></pre></div>



<figure class="wp-block-image size-full size_s"><img decoding="async" width="853" height="457" src="https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_confirm_install.png" alt="Pythonのインストール確認" class="wp-image-12559" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_confirm_install.png 853w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_confirm_install-300x161.png 300w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/python_confirm_install-768x411.png 768w" sizes="(max-width: 853px) 100vw, 853px" /><figcaption class="wp-element-caption">Pythonのインストール確認</figcaption></figure>
</div></div>
</div>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h3 class="wp-block-heading">② pipのインストール</h3>



<p class="is-style-icon_pen wp-block-paragraph">前節の<a href="#anc-python-install">Pythonのインストール</a>の手順で「<strong>Add python.exe to PATH</strong>」にチェックを入れてインストールをした場合、自動的にpipも使用できるようになっています。</p>



<div class="swell-block-capbox cap_box"><div class="cap_box_ttl"><span><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMzIgNDYuNUgxNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTJoMTZjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyek00MS43IDE1LjlDNDEuMyAxMyA0MCAxMC4zIDM4LjIgOCAzNC41IDMuMiAyOSAuOCAyMy4xIDEgMTQgMS40IDYuNSA4LjkgNiAxOGMtLjMgNiAyLjQgMTEuNyA3LjIgMTUuNC41LjQuOC45LjggMS41djEuNmMwIDIuMiAxLjggNCA0IDRoMTJjMi4yIDAgNC0xLjggNC00VjM1YzAtLjYuMy0xLjIuOS0xLjcgNS4zLTQgOC0xMC42IDYuOC0xNy40em0tNy4xIDEuN2gtLjNjLS43IDAtMS4zLS41LTEuNS0xLjItLjctMy4yLTMuMi01LjctNi40LTYuMy0uOC0uMS0xLjQtLjktMS4yLTEuN3MuOS0xLjQgMS43LTEuMmM0LjQuOCA4IDQuMiA4LjkgOC42LjEuOC0uNCAxLjYtMS4yIDEuOHoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsLightbulb" data-id="0" aria-hidden="true" class="swl-inline-icon"> </span><strong>pipがインストールされているか確認する方法</strong></span></div><div class="cap_box_content">
<p class="is-style-icon_good wp-block-paragraph">以下のコマンドを実行してpipのバージョンが表示されればインストールされています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>pip --version</code></pre></div>
</div></div>



<p class="wp-block-paragraph">この節では、<strong><span class="swl-marker mark_orange">Pythonのインストールが済んでいるけどpipが使用できない</span></strong>という方向けのインストール方法をご紹介します。</p>



<p class="has-text-align-center wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjxwYXRoIGQ9Ik0yMDEuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDIyNCAzMDYuNyA4Ni42IDE2OS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiI+PC9wYXRoPjwvc3ZnPg==)" data-icon="FasAngleDown" data-id="1" aria-hidden="true" class="swl-inline-icon"> </span></p>



<div class="swell-block-step" data-num-style="circle">
<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">get-pip.pyファイルをダウンロードする</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">以下のリンクから<strong>get-pip.py</strong>を取得します。</p>



<p class="is-style-bg_stripe wp-block-paragraph"><a href="https://bootstrap.pypa.io/get-pip.py">https://bootstrap.pypa.io/get-pip.py</a></p>



<p class="is-style-icon_good wp-block-paragraph">保存先はお好きな分かりやすい場所でOKです。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p><strong><span class="swl-marker mark_yellow">リンクをクリックしてもページが開かれるだけの場合</span></strong>は、<strong>以下の手順</strong>でファイルをダウンロードすることが可能です。<br><br><strong>１．リンクを右クリック<br>２．「名前を付けてリンク先を保存」をクリック</strong></p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div></div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">get-pip.pyを配置したディレクトリ上でコマンドを実行</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">get-pip.pyを配置したディレクトリ上で以下のコマンドを実行します。</p>



<div class="hcb_wrap u-mb-ctrl u-mb-20"><pre class="prism line-numbers lang-plain"><code>python get-pip.py</code></pre></div>



<p class="wp-block-paragraph">例えば、ファイルを「デスクトップ」に保存したなら、ターミナル上で「デスクトップ」へ移動し、上記のコマンドを実行します。</p>



<p class="is-style-balloon_box wp-block-paragraph"><strong>デスクトップへ移動する（Windowsの場合）</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>cd C:\Users\ユーザー名フォルダ\OneDrive\デスクトップ</code></pre></div>


<div class="wp-block-image is-style-shadow size_s">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="561" src="https://kekenta-it-blog.com/wp-content/uploads/2024/12/move-to-desktop-1024x561.png" alt="デスクトップへ移動" class="wp-image-12595" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/12/move-to-desktop-1024x561.png 1024w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/move-to-desktop-300x164.png 300w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/move-to-desktop-768x421.png 768w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/move-to-desktop.png 1114w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">デスクトップへ移動</figcaption></figure>
</div></div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">pipがインストールされたか確認する</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">以下のコマンドを実行してpipがインストールされているか確認します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>pip --version</code></pre></div>


<div class="wp-block-image is-style-shadow size_s">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="492" src="https://kekenta-it-blog.com/wp-content/uploads/2024/12/pip-confirm-install-1024x492.png" alt="pipのインストール確認" class="wp-image-12596" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/12/pip-confirm-install-1024x492.png 1024w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/pip-confirm-install-300x144.png 300w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/pip-confirm-install-768x369.png 768w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/pip-confirm-install.png 1318w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">pipのインストール確認</figcaption></figure>
</div></div></div>
</div>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h3 class="wp-block-heading">③ Pandas・Chardetのインストール</h3>



<p class="is-style-bg_stripe wp-block-paragraph">ライブラリは<strong>pip</strong>を使用することで簡単にインストール可能です。</p>



<p class="wp-block-paragraph">以下のコマンドを実行しましょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>pip install pandas</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>pip install chardet</code></pre></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/11/kekenta-icon-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/11/kekenta-icon-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>以上で<strong>必要なソフトやライブラリのインストールは完了</strong>です！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">【ソースコード】複数のCSVファイルをひとつにまとめる</h2>



<p class="is-style-bg_stripe wp-block-paragraph">早速ですが、以下が<strong>複数のCSVファイルをひとつのCSVファイルにまとめるソースコード</strong>です。</p>



<div class="hcb_wrap anc-source-code"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import os
import pandas
import chardet
from datetime import datetime

def detect_encoding(file_path):
    with open(file_path, &#39;rb&#39;) as file:
        result = chardet.detect(file.read())
    return result[&#39;encoding&#39;]

def merge_csv_files(root_folder, output_folder):
    # 出力フォルダが存在しない場合は新規作成
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
        print(f&quot;&#39;{output_folder}&#39;ディレクトリを新規作成しました。&quot;)
    
    all_files = []
    
    # 再帰的にフォルダを探索し、CSVファイルのリストを作成
    for root, dirs, files in os.walk(root_folder):
        for file in files:
            if file.endswith(&#39;.csv&#39;):
                all_files.append(os.path.join(root, file))
    
    # CSVファイルを読み込み、データフレームに結合
    dataframes = []
    for file in all_files:
        encoding = detect_encoding(file)
        df = pandas.read_csv(file, encoding=encoding)
        dataframes.append(df)
    
    merged_df = pandas.concat(dataframes, ignore_index=True)
    
    # 現在日時を取得し、ファイル名に追加
    now = datetime.now()
    timestamp = now.strftime(&quot;%Y%m%d_%H%M%S&quot;)
    output_file = os.path.join(output_folder, f&quot;{timestamp}_merge.csv&quot;)
    
    # 結合したデータフレームを新しいCSVファイルにUTF-8エンコーディングで保存
    merged_df.to_csv(output_file, index=False, encoding=&#39;utf-8-sig&#39;)

# CSV格納ディレクトリ
root_folder = &#39;./target_csv_files&#39;
# 結合ファイル保存先ディレクトリ
output_folder = &#39;./merged&#39;
merge_csv_files(root_folder, output_folder)</code></pre></div>



<h3 class="wp-block-heading">ポイント</h3>



<p class="wp-block-paragraph"><strong><span class="swl-marker mark_yellow">ソースコードのポイント</span></strong>は以下のとおりです。</p>



<div class="swell-block-capbox cap_box"><div class="cap_box_ttl"><span><span data-icon="LsLightbulb" data-id="0" style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMzIgNDYuNUgxNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTJoMTZjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyek00MS43IDE1LjlDNDEuMyAxMyA0MCAxMC4zIDM4LjIgOCAzNC41IDMuMiAyOSAuOCAyMy4xIDEgMTQgMS40IDYuNSA4LjkgNiAxOGMtLjMgNiAyLjQgMTEuNyA3LjIgMTUuNC41LjQuOC45LjggMS41djEuNmMwIDIuMiAxLjggNCA0IDRoMTJjMi4yIDAgNC0xLjggNC00VjM1YzAtLjYuMy0xLjIuOS0xLjcgNS4zLTQgOC0xMC42IDYuOC0xNy40em0tNy4xIDEuN2gtLjNjLS43IDAtMS4zLS41LTEuNS0xLjItLjctMy4yLTMuMi01LjctNi40LTYuMy0uOC0uMS0xLjQtLjktMS4yLTEuN3MuOS0xLjQgMS43LTEuMmM0LjQuOCA4IDQuMiA4LjkgOC42LjEuOC0uNCAxLjYtMS4yIDEuOHoiPjwvcGF0aD48L3N2Zz4=)" aria-hidden="true" class="swl-inline-icon"> </span><strong>ソースコードのポイント</strong></span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-num_circle -list-under-dashed">
<li>各CSVファイルの保存形式を自動的に読み取り、適切な形式で結合保存可能<br>（日本語の文字化けも防止）</li>



<li>出力フォルダを作成し忘れても自動作成される</li>



<li>CSVファイルを再帰的に検出するため、結合対象のCSVファイル群を同じ階層に取り出さなくても使用可能</li>
</ul>
</div></div>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h3 class="wp-block-heading">ディレクトリ構造</h3>



<p class="is-style-bg_stripe wp-block-paragraph">このソースコードを実際に使用する際は、<strong>ディレクトリ構造</strong>が重要になってきます。</p>



<p class="wp-block-paragraph">具体的には、<strong><span class="swl-marker mark_yellow">以下３つのファイル・ディレクトリは同じ階層に設置する</span></strong>必要があります。</p>



<ol class="wp-block-list -list-under-dashed is-style-num_circle">
<li>実行ファイル（pyファイル）</li>



<li>結合したいCSVファイル群を格納するディレクトリ</li>



<li>結合後のCSVファイルを格納するディレクトリ</li>
</ol>



<p class="wp-block-paragraph"><strong><span class="swl-marker mark_yellow">階層構造のイメージ図</span></strong>がこちらです。</p>



<p class="has-text-align-center is-style-balloon_box wp-block-paragraph"><strong>ソースコードを正しく使用するためのディレクトリ構造</strong></p>


<div class="wp-block-image is-style-shadow">
<figure class="aligncenter size-full"><img decoding="async" width="787" height="593" src="https://kekenta-it-blog.com/wp-content/uploads/2024/12/merge_csv_program_diretory_arch.jpg" alt="CSVファイル結合プログラム使用時のディレクトリ構造" class="wp-image-12597" srcset="https://kekenta-it-blog.com/wp-content/uploads/2024/12/merge_csv_program_diretory_arch.jpg 787w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/merge_csv_program_diretory_arch-300x226.jpg 300w, https://kekenta-it-blog.com/wp-content/uploads/2024/12/merge_csv_program_diretory_arch-768x579.jpg 768w" sizes="(max-width: 787px) 100vw, 787px" /><figcaption class="wp-element-caption">CSVファイル結合プログラム使用時のディレクトリ構造</figcaption></figure>
</div>

<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>上記を踏まえた上で、実際にプログラムを使用するための準備をひとつずつ進めていきましょう！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="is-style-balloon_box wp-block-paragraph"><span style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMjQgMUMxMS4zIDEgMSAxMS4zIDEgMjRzMTAuMyAyMyAyMyAyMyAyMy0xMC4zIDIzLTIzUzM2LjcgMSAyNCAxem0wIDExLjJjMS45IDAgMy41IDEuNiAzLjUgMy41cy0xLjYgMy41LTMuNSAzLjUtMy41LTEuNi0zLjUtMy41IDEuNi0zLjUgMy41LTMuNXptNSAyMi42YzAgLjYtLjQgMS0xIDFoLThjLS42IDAtMS0uNC0xLTF2LTJjMC0uNi40LTEgMS0xaDEuNXYtNmwtMS44LTIuNGExIDEgMCAwIDEgLjgtMS42aDVjLjYgMCAxIC40IDEgMXY5SDI4Yy42IDAgMSAuNCAxIDF2MnoiPjwvcGF0aD48L3N2Zz4=)" data-icon="LsInfo" data-id="0" aria-hidden="true" class="swl-inline-icon"> </span><strong>「パス」のことをよく理解できていない場合はこちらをご覧ください</strong></p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type2" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2024/04/eye-catch__css-path-how-to-write__79-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://kekenta-it-blog.com/css-path-how-to-write/">【HTML】パスとは？CSSが反映されない原因｜相対パスと絶対パス【初心者】</a>
						<span class="p-blogCard__excerpt">CSSが上手く反映されない…… とお困りの方へに向けて、この記事ではCSS読み込みの基本となるパスについて詳しく解説していきます。   この記事で分かること パスとは何か&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h3 class="wp-block-heading">使用方法</h3>



<div class="swell-block-step is-style-default" data-num-style="circle">
<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">「root_folder」にひとつにまとめたいCSVファイルを格納するためのディレクトリ名を指定する</div><div class="swell-block-step__body">
<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code># CSV格納ディレクトリ
root_folder = &#39;./target_csv_files&#39;</code></pre></div>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">指定したディレクトリを作成し、CSVファイルを配置する</div><div class="swell-block-step__body">
<p class="wp-block-paragraph"><strong>STEP１</strong>で指定したディレクトリ（<code class="dir_name">target_csv_files</code>）を任意の場所に作成し、その中にひとつにまとめたいCSVファイル群を配置します。</p>



<p class="is-style-icon_good wp-block-paragraph">このとき、<strong>CSVファイルのディレクトリ階層が分かれてしまっていても問題ありません。</strong></p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">「output_folder」にひとつにまとめられたCSVファイルの保存先ディレクトリ名を指定する</div><div class="swell-block-step__body">
<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code># 結合ファイル保存先ディレクトリ
output_folder = &#39;./merged&#39;</code></pre></div>



<p class="wp-block-paragraph">こうすることで、ひとつにまとめられて新規作成されたCSVファイルは<code class="dir_name">merged</code>ディレクトリ内に生成されるようになります。</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">ソースコードを記述したpyファイルを作成する</div><div class="swell-block-step__body">
<p class="wp-block-paragraph"><a href="#anc-source-code">ソースコード</a>を丸ごとコピーし、pyファイルに貼りつけます。</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">pyファイルを実行する</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">「root_folder」に指定したディレクトリと同じ階層にpyファイルを配置します。</p>



<p class="wp-block-paragraph">そして、以下のコマンドでpyファイルを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>python ファイル名.py</code></pre></div>
</div></div>
</div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/11/kekenta-icon-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/11/kekenta-icon-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>以上の手順により、実際に複数のCSVファイルをひとつにまとめることができます！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h2 class="wp-block-heading">もしエラーが発生したら……</h2>



<p class="wp-block-paragraph">もしも<strong><span class="swl-marker mark_orange">エラーが発生した場合</span></strong>は、以下の点をご確認下さい。</p>



<div class="swell-block-capbox cap_box" data-colset="col1"><div class="cap_box_ttl"><span><span data-icon="LsAlert" data-id="0" style="--the-icon-svg: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgd2lkdGg9IjFlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNNDcgMzcuOSAyNy41IDQuMWMtLjctMS4zLTItMi0zLjUtMnMtMi43LjctMy41IDJMMSAzNy45Yy0uNyAxLjMtLjcgMi43IDAgNCAuNyAxLjMgMiAyIDMuNSAyaDM5LjFjMS40IDAgMi43LS43IDMuNS0yIC42LTEuMy42LTIuNy0uMS00ek0yMS41IDE3LjVjMC0xLjQgMS4xLTIuNSAyLjUtMi41czIuNSAxLjEgMi41IDIuNXYxMGMwIDEuNC0xLjEgMi41LTIuNSAyLjVzLTIuNS0xLjEtMi41LTIuNXYtMTB6TTI0IDM4Yy0xLjcgMC0zLTEuMy0zLTNzMS4zLTMgMy0zIDMgMS4zIDMgMy0xLjMgMy0zIDN6Ij48L3BhdGg+PC9zdmc+)" aria-hidden="true" class="swl-inline-icon"> </span><strong>エラーが発生したときの確認事項</strong></span></div><div class="cap_box_content">
<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li><strong>Python</strong>がインストールされているか</li>



<li><strong>pip</strong>がインストールされているか</li>



<li><strong>Pandas</strong>・<strong>Chardet</strong>がインストールされているか</li>



<li><strong><span class="swl-inline-color has-swl-deep-02-color">結合したいCSVファイル群を配置したディレクトリ名</span></strong>と<strong><span class="swl-inline-color has-swl-deep-03-color">ソースコードのroot_folderで指定したディレクトリ名</span></strong>が一致しているか</li>



<li><strong><span class="swl-inline-color has-swl-deep-02-color">結合後のCSVファイル保存先ディレクトリ名</span></strong>と<strong><span class="swl-inline-color has-swl-deep-03-color">ソースコードのoutput_folderで指定したディレクトリ名</span></strong>が一致しているか</li>



<li><strong>実行ファイル（pyファイル）</strong>や<strong>CSVファイル群の格納ディレクトリ</strong>、<strong>結合後のCSVファイルの保存先ディレクトリ</strong>が同じ階層にあるか</li>
</ul>
</div></div>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4374558503914683"
     crossorigin="anonymous"></script>
<!-- ディスプレイ【横長】 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4374558503914683"
     data-ad-slot="9744298852"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



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



<p class="wp-block-paragraph">以上がPythonで<strong><span class="swl-marker mark_yellow">指定フォルダ内にあるすべてのCSVファイルをひとつに結合する方法</span></strong>のご紹介でした。</p>



<p class="wp-block-paragraph">今回ご紹介したソースコードについては当然ながらご自由にお使いいただいて大丈夫です。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="gray"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://kekenta-it-blog.com/wp-content/uploads/2023/07/キリッ-150x150.jpg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ケケンタ</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>ご自身の環境やご状況に合わせて適宜 修正・調整してご活用いただければと思っています！</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="wp-block-paragraph">また、もし解説でわかりづらい箇所があればX（旧：Twitter）や当記事のコメント欄へメッセージをいただけますと幸いです。</p>



<p class="wp-block-paragraph">それでは最後までご覧いただきありがとうございました！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kekenta-it-blog.com/python-merge-csv/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
