<?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>初心者 &#8211; まったりエンジニア</title>
	<atom:link href="https://javeo.jp/tag/%E5%88%9D%E5%BF%83%E8%80%85/feed/" rel="self" type="application/rss+xml" />
	<link>https://javeo.jp</link>
	<description>ほどほどレベルのプログラミング</description>
	<lastBuildDate>Sun, 31 May 2026 01:16:29 +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://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2-32x32.png</url>
	<title>初心者 &#8211; まったりエンジニア</title>
	<link>https://javeo.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Claude Code 設定ファイル早見表 役割と場所</title>
		<link>https://javeo.jp/claude-code-config-files-guide/</link>
					<comments>https://javeo.jp/claude-code-config-files-guide/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Sun, 24 May 2026 14:24:53 +0000</pubDate>
				<category><![CDATA[AI・Claude]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[Claude Code]]></category>
		<category><![CDATA[CLAUDE.md]]></category>
		<category><![CDATA[初心者]]></category>
		<category><![CDATA[設定ファイル]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=4060</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/05/claude-thumbnail-1024x538.png" class="webfeedsFeaturedVisual" /></p>Claude Codeを触っていると次々に登場する設定ファイル(CLAUDE.md・settings.json・AGENT.md・SKILL.mdなど)を、保存場所と役割で一覧化した早見表記事です、微調整目線で抑えたい初心者〜中級者向けにまとめました]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/05/claude-thumbnail-1024x538.png" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<p class="wp-block-paragraph">Claude Codeを触り始めると、いつの間にかホームディレクトリやプロジェクトに <strong><span class="marker-under">見慣れないファイルが増えていく</span></strong>のに気づきますよね</p>



<p class="wp-block-paragraph"><code>CLAUDE.md</code> <code>settings.json</code> <code>AGENT.md</code> <code>SKILL.md</code> <code>.mcp.json</code> ……名前は見たことがあるけど、「どれを触ると何が変わるのか」が把握しきれていない、という方は多いんじゃないでしょうか</p>



<p class="wp-block-paragraph">この記事では、Claude Codeを使うときに登場する <strong><span class="marker-under">主要な設定ファイル(.md含む)を一覧化</span></strong>して、保存場所と役割をまとめます</p>



<p class="wp-block-paragraph">「Claudeが勝手に作るけど、いざ触る場面で慌てたくない」「自分用に微調整したい」という人が、早見表的に開いて参照できるような構成にしました</p>



<p class="wp-block-paragraph">拡張機構の全体像については<a href="https://javeo.jp/claude-code-extensions-basics/">Claude Codeの拡張機構入門(基礎編)</a>、用語の整理は<a href="https://javeo.jp/claude-glossary-beginner/">Claudeを始める前に知っておきたい用語集</a>で扱っているので、ベースから入りたい方はそちらと合わせてどうぞ</p>



<figure class="wp-block-image size-large"><a href="https://javeo.jp/wp-content/uploads/2026/05/2026-05-24_23h27_38.png"><img decoding="async" width="1024" height="538" src="https://javeo.jp/wp-content/uploads/2026/05/2026-05-24_23h27_38-1024x538.png" alt="" class="wp-image-4064" srcset="https://javeo.jp/wp-content/uploads/2026/05/2026-05-24_23h27_38-1024x538.png 1024w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-24_23h27_38-300x158.png 300w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-24_23h27_38-150x79.png 150w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-24_23h27_38-768x403.png 768w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-24_23h27_38.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h2 class="wp-block-heading">まず知っておきたい全体像と継承ルール</h2>



<p class="wp-block-paragraph">細かいファイル一覧に入る前に、大枠の地図を頭に入れておきましょう</p>



<p class="wp-block-paragraph">Claude Codeの設定は、大きく <strong>2つの軸</strong>で整理できます</p>



<ol style="background-color:#f3fafe80" class="wp-block-list has-background">
<li><strong>場所の軸</strong>:ユーザー全体(<code>~/.claude/</code>)とプロジェクト個別(<code>&lt;project&gt;/.claude/</code>)</li>



<li><strong>役割の軸</strong>:指示(Markdown)と挙動制御(JSON)と拡張機構(Markdown+YAML)</li>
</ol>



<p class="wp-block-paragraph">※ <code>~/</code> はホームディレクトリの省略表記で、Windowsなら <code>C:\Users\&lt;ユーザー名&gt;\</code>、Mac/Linuxなら <code>/Users/&lt;ユーザー名&gt;/</code> や <code>/home/&lt;ユーザー名&gt;/</code> に読み替えてください</p>



<p class="wp-block-paragraph">つまり同じ <code>settings.json</code> でも <strong>「どこに置くか」で適用範囲が変わる</strong>し、同じ「Markdownの指示書」でも <code>CLAUDE.md</code> と <code>SKILL.md</code> と <code>AGENT.md</code> で読まれ方が違うわけです</p>



<h3 class="wp-block-heading">設定ファイルの階層イメージ</h3>



<p class="wp-block-paragraph">典型的な配置を図にするとこんな感じになります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang="directory-tree"><code>~/.claude/                          ← ユーザー全体(全プロジェクト共通)
├── CLAUDE.md                       全体共通の指示
├── settings.json                   全体共通の挙動制御
├── skills/&lt;name&gt;/SKILL.md          個人スキル
└── projects/&lt;project&gt;/memory/
    ├── MEMORY.md                   メモリー目次
    └── &lt;topic&gt;.md                  個別メモリー

&lt;project&gt;/                          ← プロジェクト個別
├── CLAUDE.md                       プロジェクト指示
├── CLAUDE.local.md                 ローカル専用指示(gitignore)
├── README.md                       一般ドキュメント(間接参照)
├── .env                            認証情報(gitignore)
├── .gitignore                      バージョン管理除外
├── .mcp.json                       MCPサーバー登録
└── .claude/
    ├── settings.json               プロジェクト共有設定
    ├── settings.local.json         ローカル専用設定(gitignore)
    ├── rules/&lt;name&gt;.md             特定パス限定指示
    ├── skills/&lt;name&gt;/SKILL.md      プロジェクト固有スキル
    ├── agents/&lt;name&gt;/AGENT.md      サブエージェント定義
    └── hooks/&lt;script&gt;              Hookスクリプト本体</code></pre></div>



<p class="wp-block-paragraph">このツリーが頭に入っていると、<strong>「あ、これはユーザー全体に効くやつだな」「これはプロジェクト固有か」</strong>がすぐ判断できるようになります</p>



<h3 class="wp-block-heading">継承ルールの基本</h3>



<p class="wp-block-paragraph">同じ役割のファイルが複数の階層に置かれているとき、どれが優先されるかは役割ごとにルールがあります</p>



<figure class="wp-block-table"><table><thead><tr><th>ファイル種別</th><th>合体方式</th><th>優先順位</th></tr></thead><tbody><tr><td><code>CLAUDE.md</code> ファミリー</td><td>連結(全部読まれる)</td><td>近い階層が後で追記、<code>CLAUDE.local.md</code>が最優先</td></tr><tr><td><code>settings.json</code> ファミリー</td><td>マージ(キーごと上書き)</td><td>Managed &gt; CLI flag &gt; Local &gt; Project &gt; User</td></tr><tr><td><code>SKILL.md</code></td><td>独立(個別)</td><td>同名なら project が user を上書き</td></tr><tr><td><code>AGENT.md</code></td><td>独立(個別)</td><td>同名なら project が user を上書き</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ここでとくに重要なのが、<strong><span class="bold-red"><span class="marker-under">CLAUDE.md は上書きではなく『連結』される</span></span></strong>という点です</p>



<p class="wp-block-paragraph">ユーザー全体の <code>CLAUDE.md</code> と、プロジェクトの <code>CLAUDE.md</code> と、サブディレクトリの <code>CLAUDE.md</code> があったら、全部まとめて1つの巨大な指示書としてClaudeに渡されるイメージです</p>



<p class="wp-block-paragraph">なので「上書きされるはずだから雑に書いておけばいい」みたいな運用は通用しません、書いたものは全部効いてくるので注意しましょう</p>



<h2 class="wp-block-heading">プロジェクト指示・コンテキスト系</h2>



<p class="wp-block-paragraph">ここからカテゴリ別に <strong>主要な設定ファイル</strong>を見ていきます、まずは <strong>Claudeに「こういう方針で動いて」と伝える系</strong>のファイルです</p>



<p class="wp-block-paragraph">このカテゴリは触る頻度が一番高いので、優先的に押さえておきたいところになります</p>



<h3 class="wp-block-heading">CLAUDE.md(グローバル)|全プロジェクト共通の指示書</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>場所</strong>:<code>~/.claude/CLAUDE.md</code></li>



<li><strong>形式</strong>:Markdown</li>



<li><strong>触る頻度</strong>:高め(自分の好みが固まってきたら追記)</li>
</ul>



<p class="wp-block-paragraph">個人として「どのプロジェクトでも同じように動いてほしい」内容を書く場所です</p>



<p class="wp-block-paragraph">たとえば「日本語で返答してね」「コミットメッセージは英語のconventional commitsで」「pythonは仮想環境を有効化してから実行して」みたいな、自分のスタンダードを宣言するイメージになります</p>



<p class="wp-block-paragraph">注意点として、ここに書いた内容はすべてのプロジェクトのコンテキストに毎回入るので、肥大化するとトークン消費が増えます、本当に共通の事項だけにとどめるのが運用のコツです</p>



<h3 class="wp-block-heading">CLAUDE.md(プロジェクト)|プロジェクトごとの指示書</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>場所</strong>:<code>&lt;project&gt;/CLAUDE.md</code></li>



<li><strong>形式</strong>:Markdown</li>



<li><strong>触る頻度</strong>:高め(プロジェクトの方針を整理するたびに追記)</li>
</ul>



<p class="wp-block-paragraph">プロジェクトごとに違う情報を書く場所で、<strong><span class="marker-under">設定ファイルの中で一番触る機会が多い</span></strong>のがここになります</p>



<p class="wp-block-paragraph">使っているフレームワーク・ディレクトリ構成のクセ・命名規則・テストの走らせ方・このプロジェクト特有の禁止事項など、「新人が入ってきたら最初に渡したい資料」に近いものを書くイメージです</p>



<p class="wp-block-paragraph">複数階層に置けるのもポイントで、ルートに置いた <code>CLAUDE.md</code> に加えて、サブディレクトリ(たとえば <code>backend/</code> や <code>frontend/</code>)にも個別の <code>CLAUDE.md</code> を置けば、その配下にいるときだけ追加で読まれます</p>



<p class="wp-block-paragraph">大規模プロジェクトで役割ごとに指示を分割したい場合に効いてくる仕組みです</p>



<h3 class="wp-block-heading">CLAUDE.local.md|gitignore対象のローカル指示</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>場所</strong>:<code>&lt;project&gt;/CLAUDE.local.md</code></li>



<li><strong>形式</strong>:Markdown</li>



<li><strong>触る頻度</strong>:中(自分用メモを置きたいとき)</li>
</ul>



<p class="wp-block-paragraph">名前のとおり自分のローカル環境専用の指示書です、Gitで共有したくない個人メモを書く場所になります</p>



<p class="wp-block-paragraph">たとえば「自分の検証用APIキーはここに置いてある」「個人的にこのプロジェクトで試している実験設定はこれ」みたいな、チームに共有する必要がない情報を書きます</p>



<p class="wp-block-paragraph">このファイルは継承順で最後に追記される=<strong><span class="marker-under">実質一番優先される</span></strong>仕組みになっているので、プロジェクトのデフォルト動作を自分だけ一時的に変えたいときにも便利です</p>



<p class="wp-block-paragraph">ただし忘れずに <code>.gitignore</code> に <code>CLAUDE.local.md</code> を入れておかないと、うっかりコミットしてしまうことがあるので注意しましょう</p>



<h3 class="wp-block-heading">rules/ ディレクトリ|特定パスに限定した指示</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>場所</strong>:<code>&lt;project&gt;/.claude/rules/&lt;name&gt;.md</code></li>



<li><strong>形式</strong>:Markdown + YAML frontmatter</li>



<li><strong>触る頻度</strong>:低〜中(細かい運用が固まってきたら作る)</li>
</ul>



<p class="wp-block-paragraph"><code>CLAUDE.md</code> が「全体方針」なら、こちらは <strong><span class="marker-under">『この種類のファイルを触るときだけのルール』</span></strong>を書く場所です</p>



<p class="wp-block-paragraph">frontmatterで <code>paths</code> を指定して、たとえば <code>**/*.test.ts</code> にマッチするファイルを開いているときだけ「テストはVitestで」「モックは最小限に」みたいなルールを発動させられます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-markdown" data-lang="rules/testing.md"><code>---
paths:
  - &quot;**/*.test.ts&quot;
  - &quot;**/*.spec.ts&quot;
---

このプロジェクトのテストは Vitest を使う

- describe / it ではなく test() の単独形式
- モックは vi.mock() で最小限に
- スナップショットテストは原則使わない</code></pre></div>



<p class="wp-block-paragraph"><code>CLAUDE.md</code> がどんどん肥大化してきたら、役割ごとに rules/ へ分割していくのが整理のコツになります</p>



<h3 class="wp-block-heading">README.md|間接的に参照される一般ドキュメント</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>場所</strong>:<code>&lt;project&gt;/README.md</code></li>



<li><strong>形式</strong>:Markdown</li>



<li><strong>触る頻度</strong>:低(リポジトリの説明用)</li>
</ul>



<p class="wp-block-paragraph">これはClaude専用ファイルではないですが、Claudeはプロジェクトを開いたとき初回探索で <code>README.md</code> を読みに行く傾向があるので、ここにプロジェクト概要・セットアップ手順・ディレクトリ構成などを書いておくと初手の理解が早くなります</p>



<p class="wp-block-paragraph">「Claude専用に書く」のではなく <strong>『普通のドキュメントを充実させると、結果としてClaudeも賢く動く』</strong>という考え方が分かりやすいかもしれません</p>



<h2 class="wp-block-heading">全体設定・挙動制御系</h2>



<p class="wp-block-paragraph">続いて、Claude Codeの <strong>挙動そのものを制御する</strong>設定ファイル群です、ここはMarkdownではなくJSONで書く世界になります</p>



<h3 class="wp-block-heading">settings.json の3階層</h3>



<p class="wp-block-paragraph"><code>settings.json</code> は3つの階層に置けて、それぞれ役割が違います</p>



<figure class="wp-block-table"><table><thead><tr><th>階層</th><th>場所</th><th>用途</th></tr></thead><tbody><tr><td>User(全体)</td><td><code>~/.claude/settings.json</code></td><td>個人の全プロジェクト共通設定</td></tr><tr><td>Project(共有)</td><td><code>&lt;project&gt;/.claude/settings.json</code></td><td>チームで共有したい設定、Gitに含める</td></tr><tr><td>Local(個別)</td><td><code>&lt;project&gt;/.claude/settings.local.json</code></td><td>ローカル専用、gitignore対象</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">この3つは <strong>マージされる</strong>仕組みで、優先順位は <strong>Managed &gt; CLI flag &gt; Local &gt; Project &gt; User</strong> の順になっています(Managedは企業デプロイ向けで、個人運用ではあまり意識しなくてOK)</p>



<p class="wp-block-paragraph">つまり同じキーがあれば Local が Project を、Project が User を上書きする形になります</p>



<h3 class="wp-block-heading">settings.json の主要フィールド</h3>



<p class="wp-block-paragraph">知っておくと役立つフィールドをピックアップして整理しました</p>



<figure class="wp-block-table"><table><thead><tr><th>フィールド</th><th>役割</th><th>触る場面</th></tr></thead><tbody><tr><td><code>permissions</code></td><td>ツール利用ルール(allow / deny / ask の3区分)</td><td>危険な操作を制限したい</td></tr><tr><td><code>env</code></td><td>環境変数の設定</td><td>共通パス・APIキー名などを宣言したい</td></tr><tr><td><code>hooks</code></td><td>イベント駆動の自動処理</td><td>ツール実行前後に自動で何か走らせたい</td></tr><tr><td><code>autoMemoryEnabled</code></td><td>自動メモリーを有効化するか</td><td>メモリー機能を切り替えたい</td></tr><tr><td><code>model</code></td><td>デフォルトモデル指定</td><td>Sonnet/Opusなどを使い分けたい</td></tr><tr><td><code>effort</code></td><td>リソース配分(計算量目安)</td><td>軽い作業と重い作業を分けたい</td></tr><tr><td><code>skillOverrides</code></td><td>スキルの有効化/無効化</td><td>特定スキルを一時的に止めたい</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">とくに <code>permissions</code> は <strong><span class="marker-under">セキュリティの要</span></strong>になる部分で、ここで <code>deny</code> リストを整えるかどうかで安心感がガラッと変わります</p>



<p class="wp-block-paragraph">具体的な書き方は<a href="https://javeo.jp/claude-code-security-beginner/">Claude Code Desktop初心者向けセキュリティの記事</a>で詳しく扱っているので、合わせて読むと理解が深まります</p>



<h3 class="wp-block-heading">最小サンプル|settings.json の中身</h3>



<p class="wp-block-paragraph">とりあえず書き始めるなら、こんな感じの構造から入るのが分かりやすいです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-lang="settings.json"><code>{
  &quot;permissions&quot;: {
    &quot;allow&quot;: [
      &quot;Read&quot;,
      &quot;Glob&quot;,
      &quot;Grep&quot;
    ],
    &quot;deny&quot;: [
      &quot;Bash(rm -rf *)&quot;,
      &quot;Bash(git push --force *)&quot;
    ],
    &quot;ask&quot;: [
      &quot;Edit&quot;,
      &quot;Write&quot;
    ]
  },
  &quot;env&quot;: {
    &quot;PYTHONIOENCODING&quot;: &quot;utf-8&quot;
  },
  &quot;autoMemoryEnabled&quot;: true,
  &quot;model&quot;: &quot;claude-sonnet&quot;
}</code></pre></div>



<figure class="wp-block-image size-large"><a href="https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h54_30.png"><img decoding="async" width="1024" height="537" src="https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h54_30-1024x537.png" alt="" class="wp-image-4025" srcset="https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h54_30-1024x537.png 1024w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h54_30-300x157.png 300w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h54_30-150x79.png 150w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h54_30-768x403.png 768w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h54_30.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">このファイルは <strong>慣れるまでコピペで始める</strong>のが現実的、Claude公式ドキュメントや既存サンプルを土台にして、自分のプロジェクトに合わせて少しずつ削ったり足したりするのが良い感触です</p>



<h3 class="wp-block-heading">hooks フィールド|自動処理の宣言場所</h3>



<p class="wp-block-paragraph"><code>settings.json</code> 内の <code>hooks</code> フィールドは、イベント駆動の自動処理を宣言する場所です</p>



<p class="wp-block-paragraph">「ツールを使う前にこのスクリプトを走らせて」「セッション開始時にこれを実行して」みたいな指定をJSONで書きます、スクリプト本体は別ファイル(<code>.claude/hooks/&lt;name&gt;</code>)に置くのが一般的です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-lang="hooks部分"><code>{
  &quot;hooks&quot;: {
    &quot;PreToolUse&quot;: [
      {
        &quot;matcher&quot;: &quot;Bash&quot;,
        &quot;hooks&quot;: [
          {
            &quot;type&quot;: &quot;command&quot;,
            &quot;command&quot;: &quot;~/.claude/hooks/check-dangerous.sh&quot;
          }
        ]
      }
    ]
  }
}</code></pre></div>



<p class="wp-block-paragraph">主なイベントは <code>SessionStart</code> <code>UserPromptSubmit</code> <code>PreToolUse</code> <code>PostToolUse</code> <code>Stop</code> あたりで、機械的に確実に走らせたい処理がある場合に使います</p>



<p class="wp-block-paragraph">初心者向けには優先度低めで、Claude Codeに慣れて「定型処理を自動化したい」と感じたタイミングで触り始めれば十分だと思います</p>



<h2 class="wp-block-heading">拡張機構系|サブエージェントとスキル</h2>



<p class="wp-block-paragraph">Claude Codeを <strong>自分用に拡張する</strong>仕組みで使われるファイル群です、ここからは中級者向けの色が濃くなってきます</p>



<h3 class="wp-block-heading">AGENT.md|サブエージェントの定義ファイル</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>場所</strong>:<code>&lt;project&gt;/.claude/agents/&lt;name&gt;/AGENT.md</code></li>



<li><strong>形式</strong>:Markdown + YAML frontmatter</li>



<li><strong>触る頻度</strong>:中(サブエージェントを使う運用なら必須)</li>
</ul>



<p class="wp-block-paragraph">サブエージェント(Subagent)を1個1個「こういう仕事をする専門係」として定義するファイルです</p>



<p class="wp-block-paragraph">frontmatterで <code>name</code> <code>description</code> <code>tools</code> <code>model</code> などを指定し、本文にはそのエージェントが守るべき行動指針を自然言語で書きます</p>



<p class="wp-block-paragraph">たとえば「コードレビュー専用エージェント」「リサーチ専用エージェント」みたいに役割を分けて、メインのClaudeセッションから委譲できる仕組みです</p>



<p class="wp-block-paragraph">frontmatterの主要フィールドは次のような構成です</p>



<figure class="wp-block-table"><table><thead><tr><th>フィールド</th><th>役割</th></tr></thead><tbody><tr><td><code>name</code></td><td>エージェント識別名</td></tr><tr><td><code>description</code></td><td>このエージェントが何をするか(呼び出し判定に使われる)</td></tr><tr><td><code>tools</code></td><td>使えるツールの限定リスト(セキュリティの要)</td></tr><tr><td><code>model</code></td><td>使用モデル指定</td></tr><tr><td><code>maxTurns</code></td><td>最大ターン数(暴走防止)</td></tr><tr><td><code>permissionMode</code></td><td>権限チェックの強さ(ask / allow / deny)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">サブエージェントを使うと <strong><span class="marker-under">メインのコンテキストを汚さずに重いタスクを処理</span></strong>できるので、大規模プロジェクトで効いてきます</p>



<h3 class="wp-block-heading">SKILL.md|スキル定義ファイル</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>場所(個人)</strong>:<code>~/.claude/skills/&lt;name&gt;/SKILL.md</code></li>



<li><strong>場所(プロジェクト)</strong>:<code>&lt;project&gt;/.claude/skills/&lt;name&gt;/SKILL.md</code></li>



<li><strong>形式</strong>:Markdown + YAML frontmatter</li>



<li><strong>触る頻度</strong>:中(よく使う作業をテンプレ化したくなったら作る)</li>
</ul>



<p class="wp-block-paragraph">スキル(Skill)は「よく使う指示パターンをまとめてClaudeに覚えさせる」仕組みで、その本体ファイルが <code>SKILL.md</code> になります</p>



<p class="wp-block-paragraph">frontmatterで <code>name</code> <code>description</code> <code>when_to_use</code> <code>allow-tools</code> <code>user-invocable</code> などを指定して、本文にスキルが実行すべき手順や注意事項を書きます</p>



<p class="wp-block-paragraph">呼び出し方法は3パターンあって、以下のように整理できます</p>



<figure class="wp-block-table"><table><thead><tr><th>トリガー</th><th>発動条件</th><th>主な用途</th></tr></thead><tbody><tr><td>自動</td><td>Claudeが <code>description</code> を読んで「これだ」と判断</td><td>常用するタスク全般</td></tr><tr><td>手動</td><td>ユーザーが <code>/skill-name</code> と入力</td><td>明示的に呼びたいワークフロー</td></tr><tr><td>パストリガー</td><td>frontmatterの <code>paths</code> にマッチするファイルを開いたとき</td><td>ファイル種別ごとの自動ロード</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">個人スキルはホームディレクトリ、プロジェクト固有スキルはプロジェクト内に置けるので、『どこに置くか』で誰と共有するかを分けられます</p>



<h3 class="wp-block-heading">commands/ ディレクトリ|レガシー扱いの旧コマンド機構</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>場所</strong>:<code>&lt;project&gt;/.claude/commands/&lt;name&gt;.md</code></li>



<li><strong>状態</strong>:Skills(SKILL.md)に統合され、新規利用は非推奨</li>
</ul>



<p class="wp-block-paragraph">以前はカスタムスラッシュコマンドを <code>commands/&lt;name&gt;.md</code> として置く方式がありましたが、2026年5月現在は <strong>Skills(SKILL.md)に統合</strong>されています</p>



<p class="wp-block-paragraph">過去の記事やGitHubのサンプルで <code>commands/</code> 配下の <code>.md</code> を見かけることがありますが、新規に作るならSKILL.md側で書くのがおすすめです</p>



<p class="wp-block-paragraph">SKILL.mdの <code>user-invocable: true</code> を指定すれば、これまで通り <code>/コマンド名</code> でユーザー側から呼び出せる挙動が再現できます</p>



<h2 class="wp-block-heading">連携・運用系|外部接続とメモリー</h2>



<p class="wp-block-paragraph">続いて、<strong>Claude Codeの外側</strong>とつなげるための設定ファイルや、長期的な情報を覚えておくためのファイル群です</p>



<h3 class="wp-block-heading">.mcp.json|MCPサーバーの登録</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>場所(プロジェクト)</strong>:<code>&lt;project&gt;/.mcp.json</code></li>



<li><strong>場所(ユーザー)</strong>:<code>~/.claude.json</code> の <code>mcpServers</code> フィールド</li>



<li><strong>形式</strong>:JSON</li>



<li><strong>触る頻度</strong>:中(MCPサーバーを追加するたびに編集)</li>
</ul>



<p class="wp-block-paragraph">MCP(Model Context Protocol)サーバーの接続情報を書く場所です</p>



<p class="wp-block-paragraph">「WordPressに投稿するMCPサーバー」「データベース操作のMCPサーバー」みたいな外部連携を増やすたびに、ここに登録していくイメージになります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-lang=".mcp.json"><code>{
  &quot;mcpServers&quot;: {
    &quot;wordpress&quot;: {
      &quot;command&quot;: &quot;python&quot;,
      &quot;args&quot;: [&quot;./wp_mcp_server.py&quot;],
      &quot;env&quot;: {
        &quot;WP_BASE_URL&quot;: &quot;https://example.com&quot;
      }
    }
  }
}</code></pre></div>



<p class="wp-block-paragraph">ポイントは <strong><span class="marker-under">user scope と project scope の2階層に置ける</span></strong>こと、共通で使うMCPはユーザー側、プロジェクト固有のMCPはプロジェクト側、と振り分けると整理しやすいです</p>



<h3 class="wp-block-heading">.env|認証情報・APIキー</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>場所</strong>:<code>&lt;project&gt;/.env</code></li>



<li><strong>形式</strong>:<code>KEY=VALUE</code> のテキスト</li>



<li><strong>触る頻度</strong>:中(認証情報を追加するたびに編集)</li>
</ul>



<p class="wp-block-paragraph">Claude専用というわけではないものの、Claude Codeで外部APIや独自MCPサーバーを使うとき、認証情報の置き場として頻出します</p>



<p class="wp-block-paragraph">パスワード・APIキー・アクセストークンなど <strong><span class="bold-red"><span class="marker-under">原則Gitには上げない情報</span></span></strong>をここに集約しておきましょう</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang=".env"><code>WP_BASE_URL=https://example.com
WP_USERNAME=admin
WP_APP_PASSWORD=xxxx xxxx xxxx xxxx</code></pre></div>



<p class="wp-block-paragraph"><code>.gitignore</code> に <code>.env</code> を入れておくのは運用上の鉄則になります、忘れるとGitHubに認証情報が漏れる事故につながります</p>



<h3 class="wp-block-heading">MEMORY.md / 個別 memory|プロジェクト固有の長期記憶</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>場所</strong>:<code>~/.claude/projects/&lt;project&gt;/memory/MEMORY.md</code> と <code>&lt;topic&gt;.md</code></li>



<li><strong>形式</strong>:Markdown</li>



<li><strong>触る頻度</strong>:中(自動で書き換わる、手動編集は最小限)</li>
</ul>



<p class="wp-block-paragraph">Claude Codeの自動メモリー機能が、会話の中で得た情報をプロジェクト固有の知識として書き出していくファイル群です</p>



<p class="wp-block-paragraph"><code>MEMORY.md</code> が目次で、トピック別の個別ファイル(<code>user_profile.md</code> <code>project_context.md</code> など)が実体として並ぶ構造になっています</p>



<p class="wp-block-paragraph">基本的にClaudeが自分で書き換える領域なので、頻繁に手で編集する場所ではないですが、「ここに書かれた情報を見直したい」とか「明らかに古い情報が残っている」みたいなときに開いて整えるのは有効です</p>



<p class="wp-block-paragraph"><code>settings.json</code> の <code>autoMemoryEnabled</code> でメモリー機能の有効/無効を切り替えられるので、邪魔ならOFFにする選択肢もあります</p>



<h3 class="wp-block-heading">.gitignore|バージョン管理から外したいファイル</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>場所</strong>:<code>&lt;project&gt;/.gitignore</code></li>



<li><strong>形式</strong>:テキスト(パターン1行ずつ)</li>



<li><strong>触る頻度</strong>:中(新しい設定ファイルを増やすたびに点検)</li>
</ul>



<p class="wp-block-paragraph">Claude専用ではなくGit本来のファイルですけど、Claude Code関連のファイルを増やすたびに点検すべき場所として外せません</p>



<p class="wp-block-paragraph">Claude Code関連で <code>.gitignore</code> に入れておきたい代表的なパターンはこんな感じです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-text" data-lang=".gitignore"><code># Claude Code ローカル専用ファイル
.env
CLAUDE.local.md
.claude/settings.local.json

# 必要に応じて
.claude/cache/
*.log</code></pre></div>



<p class="wp-block-paragraph">逆にチームで共有したい設定(<code>.claude/settings.json</code> <code>.claude/agents/</code> <code>.claude/skills/</code> <code>.mcp.json</code> など)は <strong><span class="marker-under">.gitignoreに入れない</span></strong>のが原則になります、ここをきれいに分けておけば運用がぐっと安定します</p>



<h2 class="wp-block-heading">プラグイン系|こういうのもあるよ</h2>



<p class="wp-block-paragraph">最後に、ちょっと発展形としてプラグイン系のファイルも紹介しておきます、こちらは <strong>中級〜上級者向け</strong>の領域なので、初心者の方は「こういうのもあるんだな」程度で大丈夫です</p>



<h3 class="wp-block-heading">plugin.json|プラグインのマニフェスト</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>場所</strong>:<code>&lt;plugin-root&gt;/.claude-plugin/plugin.json</code></li>



<li><strong>形式</strong>:JSON</li>



<li><strong>触る頻度</strong>:低(プラグインを自作するなら必須)</li>
</ul>



<p class="wp-block-paragraph">Claude Codeのプラグインを1つのパッケージとして配布するときに、そのマニフェスト情報を書くファイルです</p>



<p class="wp-block-paragraph">プラグイン名・バージョン・作者・含まれているスキルやエージェントの一覧などを記述します</p>



<h3 class="wp-block-heading">プラグイン同梱のskills / agents / hooks</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>場所</strong>:<code>&lt;plugin-root&gt;/skills/</code> <code>agents/</code> <code>hooks/</code> 配下</li>



<li><strong>形式</strong>:Markdown / JSON</li>



<li><strong>触る頻度</strong>:低(プラグイン開発者向け)</li>
</ul>



<p class="wp-block-paragraph">プラグインに同梱される拡張機能の本体ファイル群です、プラグインをインストールすると、ここのファイルがあたかも自分が書いたかのようにClaude Codeから読み込まれる仕組みになっています</p>



<p class="wp-block-paragraph">Hooksをまとめた <code>hooks/hooks.json</code> もこの中に置かれることがあって、ユーザー側の <code>settings.json</code> を汚さずに自動処理を配布できる利点があります</p>



<h2 class="wp-block-heading">まとめ|どこから手を付けるか</h2>



<p class="wp-block-paragraph">ここまでで主要な設定ファイルを一通り見てきましたが、『結局どこから触ればいいの?』という疑問が残るかもしれません</p>



<p class="wp-block-paragraph">個人的にはClaude Codeを始めた人の流れとして、以下の順番で触っていくのが <strong>無理なく押さえやすい</strong>と思っています</p>



<ol style="background-color:#f3fafe80" class="wp-block-list has-background">
<li><strong>CLAUDE.md(プロジェクト)</strong>:何はなくともプロジェクトの方針をここに書く、最も触る頻度が高い</li>



<li><strong>settings.json + .gitignore + .env</strong>:権限と認証情報を整える、セキュリティの土台になる</li>



<li><strong>CLAUDE.md(グローバル)</strong>:全プロジェクトで共通の好みが固まってきたら追加</li>



<li><strong>SKILL.md</strong>:同じ指示を何度も書いていることに気づいたらテンプレ化、Markdown1ファイルで始められる</li>



<li><strong>.mcp.json</strong>:外部サービスと連携したくなったら登録、公式コネクタから始めるのが現実的</li>



<li><strong>AGENT.md</strong>:重いタスクが増えてきて、メインコンテキストを汚したくなくなったら導入</li>



<li><strong>rules/ + hooks</strong>:プロジェクト固有の運用が固まってきた段階で整理、運用熟練者向け</li>
</ol>



<p class="wp-block-paragraph">大切なのは『全部を一気に触ろうとしない』こと、Claude Codeはハーネス層が広いので、いきなり全カテゴリを整えようとすると確実に挫折します</p>



<p class="wp-block-paragraph"><strong><span class="bold-red"><span class="marker-under">困りごとが出てきたら、その時点で関連ファイルを1つだけ触る</span></span></strong>、ぐらいのペースが結果的に長続きすると思います</p>



<h3 class="wp-block-heading">早見表|主要ファイル一覧</h3>



<p class="wp-block-paragraph">最後にもう一度、この記事で扱った主要ファイルを1枚の早見表として整理しておきます、ブックマークしてリファレンス的に使ってもらえると嬉しいです</p>



<figure class="wp-block-table"><table><thead><tr><th>カテゴリ</th><th>ファイル名</th><th>場所</th><th>役割</th></tr></thead><tbody><tr><td>指示</td><td><code>CLAUDE.md</code>(ユーザー)</td><td><code>~/.claude/</code></td><td>全プロジェクト共通指示</td></tr><tr><td>指示</td><td><code>CLAUDE.md</code>(プロジェクト)</td><td><code>&lt;project&gt;/</code></td><td>プロジェクト固有指示</td></tr><tr><td>指示</td><td><code>CLAUDE.local.md</code></td><td><code>&lt;project&gt;/</code></td><td>ローカル専用指示(gitignore)</td></tr><tr><td>指示</td><td><code>rules/&lt;name&gt;.md</code></td><td><code>&lt;project&gt;/.claude/rules/</code></td><td>特定パス限定の指示</td></tr><tr><td>挙動制御</td><td><code>settings.json</code></td><td>3階層(User / Project / Local)</td><td>権限・環境変数・Hooks等</td></tr><tr><td>拡張</td><td><code>SKILL.md</code></td><td><code>~/.claude/skills/</code> または <code>&lt;project&gt;/.claude/skills/</code></td><td>スキル定義</td></tr><tr><td>拡張</td><td><code>AGENT.md</code></td><td><code>&lt;project&gt;/.claude/agents/</code></td><td>サブエージェント定義</td></tr><tr><td>連携</td><td><code>.mcp.json</code></td><td><code>&lt;project&gt;/</code> または <code>~/.claude.json</code></td><td>MCPサーバー登録</td></tr><tr><td>連携</td><td><code>.env</code></td><td><code>&lt;project&gt;/</code></td><td>認証情報(gitignore必須)</td></tr><tr><td>メモリー</td><td><code>MEMORY.md</code> + 個別<code>.md</code></td><td><code>~/.claude/projects/&lt;project&gt;/memory/</code></td><td>長期記憶</td></tr><tr><td>運用</td><td><code>.gitignore</code></td><td><code>&lt;project&gt;/</code></td><td>バージョン管理除外</td></tr><tr><td>プラグイン</td><td><code>plugin.json</code></td><td><code>&lt;plugin-root&gt;/.claude-plugin/</code></td><td>プラグインマニフェスト</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">各ファイルの細かい使い方は<a href="https://javeo.jp/claude-code-extensions-basics/">Claude Codeの拡張機構入門(基礎編)</a>や<a href="https://javeo.jp/claude-howto-beginner/">Claudeの使い方を初心者向けに解説した記事</a>でも触れているので、深掘りしたい部分があれば合わせて読んでみてください</p>



<p class="wp-block-paragraph">Claude Codeはまだまだ進化中で、設定ファイルの種類や役割も少しずつ変わっていく可能性があります、この早見表も折を見て追記していく予定なので、また覗きに来てもらえると嬉しいです</p>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/claude-code-config-files-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Claudeを始める前に知っておきたい用語集</title>
		<link>https://javeo.jp/claude-glossary-beginner/</link>
					<comments>https://javeo.jp/claude-glossary-beginner/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Sat, 23 May 2026 07:26:08 +0000</pubDate>
				<category><![CDATA[AI・Claude]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[初心者]]></category>
		<category><![CDATA[用語集]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=4036</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/05/claude-thumbnail-1024x538.png" class="webfeedsFeaturedVisual" /></p>Claudeを使い始めた方向けに、AI周辺でよく出てくる用語38個をやさしくまとめました。LLM・プロンプト・MCP・Claude Codeなど、なんとなく聞くけど説明しにくい用語を辞書代わりにどうぞ]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/05/claude-thumbnail-1024x538.png" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<p class="wp-block-paragraph">Claudeを使い始めると「ハルシネーション」「コンテキストウィンドウ」「MCP」みたいな用語が当たり前のように記事に出てきて、なんとなく分かるけど聞かれると説明しにくい、ということが結構ありませんか</p>



<p class="wp-block-paragraph">この記事は、Claudeを始めた方向けに <strong>AI記事を読むときによく出てくる用語38個</strong>をやさしくまとめた辞書代わりのページです</p>



<p class="wp-block-paragraph">頭から読んでもいいですし、知らない用語に出会ったときにブックマークから戻ってくる使い方でもOKです</p>



<p class="wp-block-paragraph">Claude自体の基本的な使い方は<a href="https://javeo.jp/claude-howto-beginner/">Claudeの使い方を初心者向けに解説した記事</a>でまとめているので、まだ触ったことがない方はそちらから読むと入りやすいです</p>



<p class="wp-block-paragraph">セクションは4つに分けています</p>



<ol style="background-color:#f3fafe80" class="wp-block-list has-background">
<li>AIの世界の基本ワード(8語)</li>



<li>AIとのやりとりで出てくる言葉(12語)</li>



<li>Claudeの製品・機能名(12語)</li>



<li>Claude独自の考え方・モード(6語)</li>
</ol>



<h2 class="wp-block-heading">1. AIの世界の基本ワード</h2>



<p class="wp-block-paragraph">まずは大枠を押さえるための基本8語です、Claudeに限らずAI関連の話を読むなら必ず出てくる用語ばかり</p>



<h3 class="wp-block-heading">AI / 人工知能</h3>



<p class="wp-block-paragraph"><strong>人間がやっていた知的な作業を、コンピュータにやらせる技術全般</strong>を指す広い言葉です</p>



<p class="wp-block-paragraph">音声認識・自動翻訳・画像認識・自動運転・チャットボットなど、すべてAIに含まれます</p>



<p class="wp-block-paragraph">普段ニュースで聞く「AI」は、後述する「生成AI」を指していることが多いです</p>



<h3 class="wp-block-heading">生成AI(Generative AI)</h3>



<p class="wp-block-paragraph"><strong>何かを生み出すタイプのAI</strong>で、文章・画像・音声・コードなど人間が作っていたものをAI自身が作ってくれます</p>



<p class="wp-block-paragraph">Claude / ChatGPT / Gemini / Midjourney / Sora などはすべて生成AIです、2022年ごろから一気に話題になったジャンル</p>



<h3 class="wp-block-heading">LLM(大規模言語モデル)</h3>



<p class="wp-block-paragraph"><strong>大量の文章を学習して言葉を扱えるようになったAIの中身</strong>です、Large Language Modelの略</p>



<p class="wp-block-paragraph">ChatGPTやClaudeの裏で動いているのがこのLLMで、生成AIの中でも「文章系」を担当する存在です</p>



<p class="wp-block-paragraph">「Claude」というのはサービスや製品の名前で、その裏で動く頭脳がLLM、というイメージを持つと整理しやすいです</p>



<h3 class="wp-block-heading">機械学習・ディープラーニング</h3>



<p class="wp-block-paragraph"><strong>AIに「学習」をさせる仕組みの総称</strong>が機械学習、その中でも特に賢く学習させる方法がディープラーニング(深層学習)です</p>



<p class="wp-block-paragraph">ざっくり言えば <strong>AIの賢さの源泉</strong>になっている部分、ここがあるおかげで人間が一つひとつルールを書かなくてもAIが自分でパターンを見つけて答えられるようになりました</p>



<h3 class="wp-block-heading">ニューラルネットワーク</h3>



<p class="wp-block-paragraph"><strong>人間の脳の神経細胞のつながり方を模した計算の仕組み</strong>です、ディープラーニングの中身の構造</p>



<p class="wp-block-paragraph">「層」が深く重なっているからディープ(深層)ラーニング、と呼ばれます</p>



<p class="wp-block-paragraph">細かい仕組みを知らなくても使うぶんには問題なし、「AIは脳の真似をした計算をしてる」とざっくり押さえれば十分</p>



<h3 class="wp-block-heading">マルチモーダル</h3>



<p class="wp-block-paragraph"><strong>文章だけでなく、画像・音声・動画など複数の形式を扱えるAI</strong>のことです</p>



<p class="wp-block-paragraph">ClaudeもChatGPTも、PDFや画像をアップロードして「これ要約して」と頼める時代になりましたが、これがマルチモーダルの恩恵です</p>



<p class="wp-block-paragraph">逆に文章しか扱えない初期のAIは「シングルモーダル」と呼ばれます(あまり使わない言葉ですが)</p>



<h3 class="wp-block-heading">AIエージェント</h3>



<p class="wp-block-paragraph">「質問に答える」だけでなく <strong>自分で考えて手順を踏みながら作業を進めてくれるAI</strong>のことです</p>



<p class="wp-block-paragraph">たとえば「来週の出張の準備をして」と頼んだら、ホテルを調べ、新幹線を予約し、リマインダーを設定し、必要な資料をまとめる、までを一連で進めてくれるイメージ</p>



<p class="wp-block-paragraph">2026年現在、最も注目されているAIの方向性で、ClaudeのCowork機能もこの流れの中にあります</p>



<h3 class="wp-block-heading">バイブコーディング</h3>



<p class="wp-block-paragraph"><strong>「こういう感じのアプリを作って」とノリ(vibe)でAIに頼んで、AIにコードを書いてもらうスタイル</strong>のことです</p>



<p class="wp-block-paragraph">非IT職でも、プログラミング知識ゼロでアプリやツールが作れる時代になった象徴的な言葉</p>



<p class="wp-block-paragraph">実際にバイブコーディングでWindowsアプリを作ってみた話は<a href="https://javeo.jp/vibecoding-challenge/">こちらの記事</a>でまとめているので、雰囲気が気になる方は覗いてみてください</p>



<h2 class="wp-block-heading">2. AIとのやりとりで出てくる言葉</h2>



<p class="wp-block-paragraph">Claudeなど生成AIを使う上で、ほぼ毎回出てくる12語です、ここを押さえると記事を読むスピードが一気に上がります</p>



<h3 class="wp-block-heading">プロンプト</h3>



<p class="wp-block-paragraph"><strong>AIに対する指示文・質問文</strong>のことです、要するに「あなたが入力欄に打ち込む文章」</p>



<p class="wp-block-paragraph">「○○について教えて」「この文章を要約して」みたいな依頼すべてがプロンプトです</p>



<h3 class="wp-block-heading">プロンプトエンジニアリング</h3>



<p class="wp-block-paragraph"><strong>AIから望む答えを引き出すために、プロンプトを工夫する技術</strong>です</p>



<p class="wp-block-paragraph">「あなたはプロのコピーライターです」みたいに役割を与えたり、「ステップごとに考えて」と指示したり、出力例を見せたり、いろんなテクニックがあります</p>



<p class="wp-block-paragraph">同じAIでも頼み方ひとつで結果が大きく変わるので、知っておくと得な技術です</p>



<h3 class="wp-block-heading">システムプロンプト</h3>



<p class="wp-block-paragraph"><strong>会話全体に対する役割設定や前提条件をAIに伝える、特別なプロンプト</strong>です</p>



<p class="wp-block-paragraph">たとえば「あなたは丁寧語で答える秘書です」「コードを書くときは必ずコメントを入れて」みたいに、会話のたびに毎回伝えなくていい指示をまとめておく場所</p>



<p class="wp-block-paragraph">ClaudeのProjects機能やChatGPTの「カスタム指示」がこれに相当します</p>



<h3 class="wp-block-heading">ハルシネーション</h3>



<p class="wp-block-paragraph"><strong>AIが事実と違うことを、もっともらしく言ってしまう現象</strong>のことです、いわゆる「AIの嘘」</p>



<p class="wp-block-paragraph">固有名詞・日付・数字・出典など、具体的な情報ほどハルシネーションが起きやすいので、AIの回答を鵜呑みにせず裏取りする習慣が大事です</p>



<p class="wp-block-paragraph">「ハルシネーション=幻覚」という英単語が語源、AIが見えないものを見えているように答えてしまうイメージから来ています</p>



<h3 class="wp-block-heading">トークン</h3>



<p class="wp-block-paragraph"><strong>AIが文章を扱うときの単位</strong>で、ざっくり「単語の切れ端」みたいなもの</p>



<p class="wp-block-paragraph">日本語だと <strong>1文字あたり1〜2トークン</strong>くらいが目安で、文字数とほぼ比例して考えればOK</p>



<p class="wp-block-paragraph">料金やレスポンスの長さの上限はトークン数で決まることが多いので、「だいたい何文字くらいで何トークン」を意識すると使い勝手が良くなります</p>



<h3 class="wp-block-heading">コンテキストウィンドウ</h3>



<p class="wp-block-paragraph"><strong>AIが一度に覚えていられる会話の長さ</strong>のことです</p>



<p class="wp-block-paragraph">このウィンドウからあふれた古いやり取りはAIが忘れてしまうので、長い会話が続くと「さっき言ったこと忘れてる?」みたいな現象が起きます</p>



<p class="wp-block-paragraph">Claudeは <strong>20万トークン</strong>(約数十万字)と業界最大級のコンテキストウィンドウを持っていて、長い書類を読ませる用途に強い特徴があります</p>



<h3 class="wp-block-heading">ファインチューニング</h3>



<p class="wp-block-paragraph"><strong>既存のAIに追加データを学ばせて、特定の用途に特化させる</strong>ことです</p>



<p class="wp-block-paragraph">「医療用語に強いAIにする」「自社の社内文書スタイルで答えるAIにする」など、土台のAIを自分用にカスタマイズする使い方</p>



<p class="wp-block-paragraph"><strong>プロンプトで指示を工夫するのとは別次元</strong>で、AI自体の中身を変える話なので、開発者向けの上級者向けテーマです</p>



<h3 class="wp-block-heading">RAG(検索拡張生成)</h3>



<p class="wp-block-paragraph">Retrieval-Augmented Generationの略で、<strong>AIが回答するときに、外部のデータベースや文書を検索して参考にする仕組み</strong>です</p>



<p class="wp-block-paragraph">ファインチューニングがAI自体を作り変えるのに対し、RAGは <strong>AIに「カンペ」を渡して回答させる</strong>イメージ</p>



<p class="wp-block-paragraph">社内マニュアルを参照しながら答える社内向けチャットボットなど、業務利用でいま一番伸びている方式です</p>



<h3 class="wp-block-heading">アライメント</h3>



<p class="wp-block-paragraph"><strong>AIの振る舞いを、人間の意図や価値観に沿わせる</strong>取り組みのことです</p>



<p class="wp-block-paragraph">「人を傷つけることを答えない」「危険な情報を出さない」「指示にちゃんと従う」みたいな、AIを「役立つけど安全」にするための調整全般を指します</p>



<p class="wp-block-paragraph">ClaudeをつくるAnthropicは <strong>このアライメント研究を重視している会社</strong>として知られていて、後述のConstitutional AIなどはその代表例です</p>



<h3 class="wp-block-heading">思考の連鎖(Chain of Thought)</h3>



<p class="wp-block-paragraph"><strong>AIに「順を追って考えて」と指示することで、答えの精度を上げるテクニック</strong>です、略してCoTとも呼ばれます</p>



<p class="wp-block-paragraph">計算問題や論理的な質問で、いきなり答えだけ出させるよりも「ステップごとに考えて」と頼んだ方が正答率が上がる、という発見からきています</p>



<p class="wp-block-paragraph">Claudeなど最近のAIは内部で自動的に思考の連鎖をする能力が上がっていて、後述の「拡張思考」もこの考え方の発展形です</p>



<h3 class="wp-block-heading">推論(Inference)</h3>



<p class="wp-block-paragraph"><strong>AIが答えを生成する処理そのもの</strong>を指します</p>



<p class="wp-block-paragraph">「学習(training)」が事前にAIを賢くする工程なのに対して、「推論(inference)」は実際に質問に答える本番動作のこと</p>



<p class="wp-block-paragraph">クラウドサービスの料金は「推論にかかる計算コスト」が大半なので、「推論コスト」という言葉も覚えておくとAI関連の経済ニュースが理解しやすくなります</p>



<h3 class="wp-block-heading">API</h3>



<p class="wp-block-paragraph"><strong>プログラムからAIを直接呼び出すための窓口</strong>のことです、Application Programming Interfaceの略</p>



<p class="wp-block-paragraph">普段の使い方(Webやアプリのチャット画面で会話する)とは別に、自分で作ったプログラムからAIを呼べる仕組みで、自動化や独自アプリの開発に使われます</p>



<p class="wp-block-paragraph">「OpenAI API」「Claude API」のように、各社が提供しています、ニュースで「APIで連携」と聞いたら「プログラム同士をつないでる」と思えばOK</p>



<h2 class="wp-block-heading">3. Claudeの製品・機能名</h2>



<p class="wp-block-paragraph">ここからはClaude特有の用語に入ります、製品ラインナップと主要機能の12語</p>



<h3 class="wp-block-heading">Anthropic(アンソロピック)</h3>



<p class="wp-block-paragraph"><strong>Claudeを開発しているAI企業の名前</strong>です</p>



<p class="wp-block-paragraph">2021年にOpenAI(ChatGPTを作った会社)の元メンバーが設立した会社で、特に「AIの安全性」に重きを置いた研究で知られています</p>



<p class="wp-block-paragraph">GoogleやAmazonと提携していて、企業向けにも幅広く採用されています</p>



<h3 class="wp-block-heading">Opus / Sonnet / Haiku(3つのモデル)</h3>



<p class="wp-block-paragraph">Claudeには <strong>用途別に3つのモデル</strong>があって、賢さと速さのバランスで使い分けます</p>



<figure class="wp-block-table"><table><thead><tr><th>モデル</th><th>特徴</th><th>向いている用途</th></tr></thead><tbody><tr><td><strong>Opus</strong></td><td>最高性能、賢いが少し遅い</td><td>複雑な分析・本格的なコーディング</td></tr><tr><td><strong>Sonnet</strong></td><td>バランス型、日常使いの主力</td><td>大半の作業はこれで十分</td></tr><tr><td><strong>Haiku</strong></td><td>軽量・高速、お手頃</td><td>サクッと聞きたい・大量処理</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">俳句の形式(短い・中くらい・長い)から名前が取られていて、SonnetとHaikuは日本人にも馴染みのある単語ですね</p>



<h3 class="wp-block-heading">claude.ai(Web版)</h3>



<p class="wp-block-paragraph"><strong>ブラウザでClaudeを使うときのアドレス</strong>です、claude.aiにアクセスして会話するスタイル</p>



<p class="wp-block-paragraph">あとで出てくる「Claude Code Desktop」が専用アプリ版なのに対して、こちらはブラウザだけで完結する手軽な使い方</p>



<p class="wp-block-paragraph">初心者はまずWeb版から触ってみるのが手っ取り早いです</p>



<h3 class="wp-block-heading">料金プラン(Free / Pro / Max)</h3>



<p class="wp-block-paragraph">Claudeには <strong>3段階の個人向け料金プラン</strong>があります</p>



<figure class="wp-block-table"><table><thead><tr><th>プラン</th><th>料金</th><th>主な特徴</th></tr></thead><tbody><tr><td>Free</td><td>無料</td><td>Sonnet・Haikuを制限付きで利用可</td></tr><tr><td>Pro</td><td>月$22前後</td><td>使用量5倍、Opusも利用可、年間払いで割引</td></tr><tr><td>Max</td><td>月$110〜$220</td><td>Proの5〜20倍の使用量、Claude Codeをガッツリ使う人向け</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">料金は2026年5月時点のもの、為替やプラン改定で変動する可能性ありなので最新情報は公式サイトでどうぞ</p>



<h3 class="wp-block-heading">Artifacts(アーティファクト)</h3>



<p class="wp-block-paragraph"><strong>Claudeが作ったコード・文書・図表を、サイドパネルにプレビュー表示してくれる機能</strong>です</p>



<p class="wp-block-paragraph">「HTMLとCSSでランディングページを作って」と頼むと、その場でレンダリングされて見れるとか、コードや長文がチャットの流れに埋もれず独立したエディタのように扱える、というメリットがあります</p>



<p class="wp-block-paragraph">2024年あたりから本格化した機能で、Claudeの強みのひとつ</p>



<h3 class="wp-block-heading">Projects(プロジェクト)</h3>



<p class="wp-block-paragraph"><strong>テーマや用途ごとに会話とファイルを一つのまとまりで管理できる機能</strong>です</p>



<p class="wp-block-paragraph">「ブログ執筆用」「業務マニュアル用」「副業の経理用」のようにプロジェクトを分けておくと、それぞれの中ではClaudeが前提条件を覚えた状態で会話できるので、毎回同じ前置きを書かなくて済みます</p>



<p class="wp-block-paragraph">プロジェクトごとに <strong>システムプロンプト(前述)を登録</strong>できるのもポイント、ProプランやMaxプランで使えます</p>



<h3 class="wp-block-heading">Claude Code Desktop</h3>



<p class="wp-block-paragraph"><strong>Claudeのデスクトップアプリ版で、ローカルファイルを直接読み書きしながら作業できる開発者向けモード</strong>です</p>



<p class="wp-block-paragraph">普通のWeb版Claudeに対して、Claude Code Desktopは <strong>自分のPCのファイルやフォルダを直接いじれる</strong>のが大きな違い</p>



<p class="wp-block-paragraph">プログラミングだけでなく、ファイル整理やドキュメント作成にも使えるパワフルなツールですが、それだけにセキュリティ対策も大事になります</p>



<h3 class="wp-block-heading">コネクタ(Connectors)</h3>



<p class="wp-block-paragraph"><strong>ClaudeをGoogle DriveやSlackなど外部サービスと公式に連携させる仕組み</strong>です</p>



<p class="wp-block-paragraph">2026年から無料プランでも一部使えるようになり、「Google DriveのドキュメントをClaudeから直接読む」みたいな使い方が普通にできるようになりました</p>



<p class="wp-block-paragraph">後述の「MCP」が自作の連携を作る仕組みなのに対し、コネクタは <strong>Anthropic公式が用意した既製の連携</strong>、という違いがあります</p>



<h3 class="wp-block-heading">ファイルアップロード</h3>



<p class="wp-block-paragraph">Claudeのチャット入力欄から <strong>PDF・Word・Excel・画像などのファイルをそのまま渡せる機能</strong>です</p>



<p class="wp-block-paragraph">「このPDFを3行で要約」「このExcelの傾向を読み取って」みたいに頼めば、長文資料も一発で整理してくれます</p>



<p class="wp-block-paragraph">無料プランでも使えるので、Claudeを試すならまずファイル要約を体験するのがおすすめ</p>



<h3 class="wp-block-heading">MCP(Model Context Protocol)</h3>



<p class="wp-block-paragraph"><strong>AIに外部サービスを操作させるための共通言語(規格)</strong>で、Anthropicが提唱しています</p>



<p class="wp-block-paragraph">MCPに対応した「MCPサーバー」を作っておけば、ClaudeがWordPressに記事を投稿したり、データベースを参照したり、自由に外部とやりとりできるようになります</p>



<p class="wp-block-paragraph">2026年現在 <strong>AIエージェント業界の標準規格になりつつある</strong>注目技術で、これからますます重要になる用語です</p>



<h3 class="wp-block-heading">Skills(スキル)</h3>



<p class="wp-block-paragraph"><strong>Claudeに特定の作業手順を「スキル」として覚えさせる機能</strong>です</p>



<p class="wp-block-paragraph">「PowerPointを作るときのフォーマット」「議事録のまとめ方」みたいな繰り返しの作業手順を、スキルとして登録しておけば、毎回手順を伝えなくても同じ品質でこなしてくれます</p>



<p class="wp-block-paragraph">2026年に登場した比較的新しい機能で、これから活用法が広がる予定</p>



<h3 class="wp-block-heading">Cowork(コワーク)</h3>



<p class="wp-block-paragraph"><strong>ClaudeがあなたのPC画面を実際に操作してくれるエージェント機能</strong>です</p>



<p class="wp-block-paragraph">「このフォルダの資料から提案書を作って」と目的を伝えると、ファイルを自分で開いて、読んで、まとめる、までを自律的にこなしてくれるイメージ</p>



<p class="wp-block-paragraph">Desktop版限定の機能で、AIエージェントの考え方を実現した代表的な実装</p>



<h2 class="wp-block-heading">4. Claude独自の考え方・モード</h2>



<p class="wp-block-paragraph">最後に、Claude記事を読んでいると出てくる独特の考え方やモード名を6個</p>



<h3 class="wp-block-heading">拡張思考(Extended Thinking)</h3>



<p class="wp-block-paragraph">Claudeに <strong>「じっくり考えてから答えてね」と頼める特殊なモード</strong>です</p>



<p class="wp-block-paragraph">通常は即座に答えるところ、拡張思考をONにすると、内部で何段階かに分けて推論してから答えを出してくれます、正答率や論理性が大きく上がる代わりに少し時間がかかります</p>



<p class="wp-block-paragraph">難しい数学問題・複雑なコーディング・長文の論理チェックなどで使うと効果的</p>



<h3 class="wp-block-heading">Plan Mode(プランモード)</h3>



<p class="wp-block-paragraph">Claude Code Desktopで使える <strong>「いきなり作業せず、まず手順だけ提示してね」というモード</strong>です</p>



<p class="wp-block-paragraph">大きな変更や、初めての作業のときに使うと「想定外の動きをされる事故」を防げます</p>



<p class="wp-block-paragraph">Shift+Tabキーでモード切替できます</p>



<h3 class="wp-block-heading">自動モード</h3>



<p class="wp-block-paragraph">Claude Code Desktopで <strong>「安全な操作は自動で進めてOK、危険なものはちゃんと止めてね」というバランスモード</strong>です</p>



<p class="wp-block-paragraph">後述の「許可をバイパス」と混同されがちですが、こちらは <strong>denyルールを守る安全な方</strong>です</p>



<p class="wp-block-paragraph">慣れてきて毎回の確認が面倒になってきたら、これを選ぶのがおすすめ</p>



<h3 class="wp-block-heading">許可をバイパス</h3>



<p class="wp-block-paragraph">Claude Code Desktopの <strong>「すべての権限チェックを無視して動作させるモード」</strong>です</p>



<p class="wp-block-paragraph">名前のとおりすべての安全ガードを外すため、設定したdenyルールも無効化されます、原則に有効化しないのが鉄則</p>



<p class="wp-block-paragraph">「自動モード」と名前が似ているので混同注意、こちらは <strong>危険な方</strong>です</p>



<h3 class="wp-block-heading">Constitutional AI(憲法AI)</h3>



<p class="wp-block-paragraph"><strong>Anthropicが独自に開発した、AIに「憲法」のような原則を覚えさせて安全に振る舞わせる学習方法</strong>です</p>



<p class="wp-block-paragraph">「人間に害を与えない」「正直であれ」みたいな原則をAIに守らせる仕組みで、Claudeが <strong>「安全性が高い」と評価される根拠</strong>のひとつ</p>



<p class="wp-block-paragraph">ChatGPTのRLHF(人間のフィードバックで学習)と並ぶ、代表的なアライメント技術</p>



<h3 class="wp-block-heading">ツール使用(Tool use)</h3>



<p class="wp-block-paragraph"><strong>AIが自分で外部のツールを呼び出して使う仕組み</strong>です、Function callingとも呼ばれます</p>



<p class="wp-block-paragraph">「電卓を使って計算する」「Web検索する」「カレンダーを開く」など、AI単体ではできない作業を、必要に応じて外部ツールに任せる仕組みで、AIエージェントの中核的な技術</p>



<p class="wp-block-paragraph">MCPやコネクタ・Coworkなどの機能はすべて、このツール使用の発展形と言えます</p>



<h2 class="wp-block-heading">まとめ|まずは使いながら覚えるのが一番</h2>



<p class="wp-block-paragraph">用語38個、お疲れさまでした</p>



<p class="wp-block-paragraph">全部を最初から覚える必要はなくて、Claudeを触りながら「あ、これさっき記事で出てきた言葉だ」と紐づけていくのが一番自然な覚え方です</p>



<p class="wp-block-paragraph">個人的に <strong>最初に押さえると一気に世界が広がる5つ</strong>をピックアップするとしたら、こんな感じ</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>LLM</strong> 〜 AIの中身、これだけで会話の解像度が上がる</li>



<li><strong>プロンプト</strong> 〜 自分が打つ文章の正式名称、聞き方を変えると結果が変わる</li>



<li><strong>ハルシネーション</strong> 〜 AIの嘘、必ず裏取りする習慣の根拠</li>



<li><strong>コンテキストウィンドウ</strong> 〜 「忘れられた」現象の正体</li>



<li><strong>AIエージェント / MCP</strong> 〜 今後数年のAI話題の中心、ここから外れた話題はあまり出てこない</li>
</ul>



<p class="wp-block-paragraph">用語が分かるようになると、AI関連のニュースや記事を読むストレスがぐっと減るので、ぜひこのページをブックマークしておいて、知らない言葉に出会ったときに戻ってきてください</p>



<p class="wp-block-paragraph">Claudeの始め方は<a href="https://javeo.jp/claude-howto-beginner/">こちらの記事</a>に、バイブコーディングでアプリを作った話は<a href="https://javeo.jp/vibecoding-challenge/">こちら</a>にまとめてあるので、合わせてどうぞ</p>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/claude-glossary-beginner/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VBAでJSONを扱う方法 VBA-JSONの使い方</title>
		<link>https://javeo.jp/vba-json/</link>
					<comments>https://javeo.jp/vba-json/#comments</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Fri, 22 May 2026 23:00:00 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[初心者]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=111</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/05/vba-json-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>ExcelVBAでJSONを扱うなら定番ライブラリ「VBA-JSON」がおすすめです、JsonConverter.basの導入から参照設定、ParseJsonでのパース、ConvertToJsonでの生成、配列やネストへのアクセスまで初心者向けにまとめました]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/05/vba-json-1024x538.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<p class="wp-block-paragraph">「VBAでJSONを読み込みたいんだけど、標準機能だとどうにもならない…」と手が止まっていませんか？</p>



<p class="wp-block-paragraph">結論から言うと、<strong><span class="swl-marker mark_yellow">ExcelVBAでJSONを扱うなら「VBA-JSON」という定番ライブラリを入れるのが一番ラク</span></strong>です</p>



<p class="wp-block-paragraph">やることはシンプルで、<code>JsonConverter.bas</code> というファイルを1つ取り込んで、参照設定を1つ入れるだけ、あとは <code>ParseJson</code> でJSONを読み込んで、<code>ConvertToJson</code> でJSONを書き出せます</p>



<p class="wp-block-paragraph">この記事では、VBA-JSONの導入から実際の使い方(パース・生成・配列やネストへのアクセス・ループ処理)まで、初心者の方にも分かるように順を追って解説していきます、つまずきポイントとFAQ、AIにコードを書いてもらうコツもまとめているので、必要なところだけ拾い読みでも大丈夫です</p>



<h2 class="wp-block-heading">VBAでJSONを扱うなら VBA-JSON が定番</h2>



<p class="wp-block-paragraph">まず大前提として、<strong>VBAには標準でJSONを扱う機能がありません</strong></p>



<p class="wp-block-paragraph">Excelには CSV を読む機能はあっても、JSONをそのまま「項目ごとに取り出す」みたいなことは素のVBAだとできないんですよね</p>



<p class="wp-block-paragraph">そこで使うのが、オープンソースのライブラリ「<strong>VBA-JSON</strong>」です</p>



<p class="wp-block-paragraph">GitHubの <a href="https://github.com/VBA-tools/VBA-JSON" target="_blank" rel="noopener noreferrer">VBA-tools/VBA-JSON</a> で公開されていて、JSON界隈ではかなり知られた定番です、最新は <code>v2.3.1</code> で、WindowsのExcelでもMacのExcelでも動きます</p>



<p class="wp-block-paragraph">使う関数は基本的にこの2つだけ覚えればOKです</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li><strong>ParseJson</strong> … JSON文字列を、VBAで扱えるデータ(Dictionary / Collection)に変換する(=読み込む)</li>



<li><strong>ConvertToJson</strong> … VBAのデータを、JSON文字列に変換する(=書き出す)</li>
</ul>



<p class="wp-block-paragraph">「読み込む」と「書き出す」の往復、これだけです、難しそうに見えて中身はシンプルなので安心してください</p>



<h2 class="wp-block-heading">VBAでJSONを扱う場面はどんなとき？</h2>



<p class="wp-block-paragraph">そもそも「ExcelでJSONなんて使うの？」と思うかもしれませんが、最近のWeb APIはJSONで返ってくるのがほぼ標準なので、意外と日常業務の中で出番があります</p>



<p class="wp-block-paragraph">たとえばこんなケースです</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li>為替レートや天気予報のWeb APIを叩いてExcelに取り込む</li>



<li>WebサービスからダウンロードしたデータをVBAで集計する</li>



<li>取引先のシステムとJSON形式でデータをやり取りする</li>



<li>WordPressや社内システムのREST APIを操作する</li>
</ul>



<p class="wp-block-paragraph">VBA-JSONを使えるようになると、<strong>Excel完結の作業に外部データを取り込める幅</strong>が一気に広がります、普段の集計シートに「最新のデータを自動で引っ張ってくる」ような仕組みを足せるイメージですね</p>



<p class="wp-block-paragraph">実際にWeb APIへリクエストを送ってJSONを受け取る流れは、<a href="https://javeo.jp/ebay-api-request/" target="_blank" rel="noopener noreferrer">eBay APIにVBAでリクエストを送る方法を解説した記事</a>でも具体例を扱っているので、API連携をやってみたい方はあわせてどうぞ</p>



<h2 class="wp-block-heading">そもそもJSONって何？という人向けの基礎</h2>



<p class="wp-block-paragraph">「JSONって言葉は聞くけど、よく分かってない」という方のために、ここで一度ざっくり整理しておきます、もう分かってる方は読み飛ばしてOKです</p>



<p class="wp-block-paragraph">JSON(<strong>J</strong>ava<strong>S</strong>cript <strong>O</strong>bject <strong>N</strong>otation)は、テキストベースのデータ交換フォーマットです</p>



<p class="wp-block-paragraph">Web APIからデータを取得するとき、他システムとのデータやり取りなど、いろんな場面で使われています、軽量で人間にも機械にも読みやすいのが特徴ですね</p>



<h3 class="wp-block-heading">JSONの基本構造と記述ルール</h3>



<p class="wp-block-paragraph">細かいルールはいくつかありますが、まず押さえておきたいのはこのあたりです</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li>項目名は「&#8221;」(ダブルクォーテーション)で囲む</li>



<li>文字列も「&#8221;」(ダブルクォーテーション)で囲む</li>



<li>数値は小数点を含めてそのまま表記(クォーテーション不要)</li>



<li>真偽値(Boolean)は「true」「false」のどちらか ※小文字、「&#8221;」は付けない</li>



<li>Null値は「null」 ※小文字、「&#8221;」は付けない</li>



<li>「[ ]」で囲んだ配列の中も、上記と同じルール</li>
</ul>



<p class="wp-block-paragraph">形としては「<code>"キー": 値</code>」のセットが基本で、複数のデータを <code>{ }</code> で囲んだものを「オブジェクト」、順序のあるデータの並びを <code>[ ]</code> で囲んだものを「配列」と呼びます</p>



<p class="wp-block-paragraph">このあたりの言葉は、VBA-JSONを使うときに何度も出てくるので、なんとなく頭に入れておくと後がスムーズです</p>



<h3 class="wp-block-heading">JSONのサンプルをExcelの表で考えてみる</h3>



<p class="wp-block-paragraph">JSONはCSVほど一目で分かる形式じゃないので、サンプルと一緒に見方を説明します、この記事ではずっとこのデータを例に進めていきます</p>



<p class="wp-block-paragraph">たとえばこんなJSON形式のデータがあるとして</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-lang="JSON"><code>[{&quot;name&quot;:&quot;Javeo&quot;,&quot;birthdate&quot;:{&quot;year&quot;:2000,&quot;month&quot;:1,&quot;day&quot;:1},&quot;height&quot;:180,&quot;weight&quot;:70,&quot;favorite_foods&quot;:[&quot;Meat&quot;,&quot;Vegetables&quot;],&quot;glasses&quot;:true},{&quot;name&quot;:&quot;Javelin&quot;,&quot;birthdate&quot;:{&quot;year&quot;:2002,&quot;month&quot;:2,&quot;day&quot;:2},&quot;height&quot;:150,&quot;weight&quot;:null,&quot;favorite_foods&quot;:[&quot;Sweets&quot;],&quot;glasses&quot;:false}]</code></pre></div>



<p class="wp-block-paragraph">一行だと分かりづらいので、整形するとこうなります(VSCodeなどのエディタで簡単に整形できます)</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-lang="JSON"><code>[
  {
    &quot;name&quot;: &quot;Javeo&quot;,
    &quot;birthdate&quot;: {
      &quot;year&quot;: 2000,
      &quot;month&quot;: 1,
      &quot;day&quot;: 1
    },
    &quot;height&quot;: 180,
    &quot;weight&quot;: 70,
    &quot;favorite_foods&quot;: [
      &quot;Meat&quot;,
      &quot;Vegetables&quot;
    ],
    &quot;glasses&quot;: true
  },
  {
    &quot;name&quot;: &quot;Javelin&quot;,
    &quot;birthdate&quot;: {
      &quot;year&quot;: 2002,
      &quot;month&quot;: 2,
      &quot;day&quot;: 2
    },
    &quot;height&quot;: 150,
    &quot;weight&quot;: null,
    &quot;favorite_foods&quot;: [
      &quot;Sweets&quot;
    ],
    &quot;glasses&quot;: false
  }
]</code></pre></div>



<p class="wp-block-paragraph">これをExcel的に表にすると、こんなイメージになります</p>



<figure class="wp-block-table is-all-centered"><table><tbody><tr><th rowspan="2">name</th><th colspan="3">birthdate</th><th rowspan="2">height</th><th rowspan="2">witght</th><th colspan="2" rowspan="2">favorite_foods</th><th rowspan="2">glasses</th></tr><tr><th>year</th><th>month</th><th>day</th></tr><tr><td>javeo</td><td>2000</td><td>1</td><td>1</td><td>180</td><td>70</td><td>Meat</td><td>Vegetables</td><td>true</td></tr><tr><td>Javelin</td><td>2002</td><td>2</td><td>2</td><td>150</td><td></td><td>Sweets</td><td></td><td>false</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">つまりJSONをざっくり言うと、<strong>項目と値が対になっていて、「{ }」が階層を、「[ ]」が配列のデータ群を表している</strong>と思えばOKです</p>



<p class="wp-block-paragraph">この「JaveoとJavelinの2人分のデータ」を、これからVBA-JSONで取り出していきます</p>



<h2 class="wp-block-heading">VBA-JSONの導入手順(2026年版)</h2>



<p class="wp-block-paragraph">ここが一番大事なパートです、導入でつまずく人が多いので、順番にやっていきましょう</p>



<p class="wp-block-paragraph">やることは大きく分けて2つ、<strong><span class="swl-marker mark_yellow">「JsonConverter.basのインポート」と「参照設定」</span></strong>だけです</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"><strong>ライブラリのダウンロード</strong></div><div class="swell-block-step__body">
<p class="wp-block-paragraph">GitHubの<a href="https://github.com/VBA-tools/VBA-JSON" target="_blank" rel="noreferrer noopener">VBA-tools/VBA-JSON</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"><strong>ファイルを探す</strong></div><div class="swell-block-step__body">
<p class="wp-block-paragraph">ページ内にある「<code>JsonConverter.bas</code>」をダウンロード</p>



<p class="wp-block-paragraph">※何年も更新されていませんが、文字列を分解するだけのプログラムで特に改良点がないってだけなので気にせずどうぞ</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"><strong>VBAへのインポート</strong></div><div class="swell-block-step__body">
<p class="wp-block-paragraph">VBAで使えるようにするにはVBEの画面でインポートするだけ</p>



<div class="wp-block-media-text is-stacked-on-mobile"><figure class="wp-block-media-text__media"><a href="https://javeo.jp/wp-content/uploads/2022/02/image-6.png"><img decoding="async" width="298" height="398" src="https://javeo.jp/wp-content/uploads/2022/02/image-6.png" alt="" class="wp-image-159 size-full" srcset="https://javeo.jp/wp-content/uploads/2022/02/image-6.png 298w, https://javeo.jp/wp-content/uploads/2022/02/image-6-225x300.png 225w" sizes="(max-width: 298px) 100vw, 298px" /></a></figure><div class="wp-block-media-text__content">
<p class="wp-block-paragraph">プロジェクトエクスプローラー<br>右クリック→「ファイルのインポート」</p>
</div></div>



<p class="wp-block-paragraph">もしくは「JsonConverter.bas」をプロジェクトエクスプローラーへドラッグ&amp;ドロップでもOK</p>



<figure class="wp-block-image size-full"><a href="https://javeo.jp/wp-content/uploads/2022/02/VBA-JSONをインポート.gif"><img decoding="async" width="868" height="474" src="https://javeo.jp/wp-content/uploads/2022/02/VBA-JSONをインポート.gif" alt="" class="wp-image-167"/></a></figure>
</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">Microsoft Scripting Runtime に参照設定する</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">VBA-JSONを動かすには参照設定が要ります</p>



<p class="wp-block-paragraph">VBA-JSONは内部で「Dictionary」という、キーと値をセットで扱うデータの入れ物を使っています、このDictionaryをそのまま書くスタイル(早期バインディングと言います)で動かすために、<strong><span class="swl-marker mark_yellow">Microsoft Scripting Runtime への参照設定が必要</span></strong>になります</p>



<p class="wp-block-paragraph">設定はVBEのメニューからで、手順はこうです</p>



<ol style="background-color:#f8fbfd" class="wp-block-list -list-under-dashed has-background">
<li>VBEのメニューで「ツール → 参照設定」を開く</li>



<li>一覧から「<code>Microsoft Scripting Runtime</code>」を探す</li>



<li>チェックボックスにチェックを入れて「OK」を押す</li>
</ol>



<p class="wp-block-paragraph">これを忘れると、コードを実行したときに「ユーザー定義型は定義されていません」というエラーが出ます、後ろのFAQでも触れますが、この参照設定はかなりの確率でハマるので先に済ませておくのがおすすめです</p>
</div></div>
</div>



<h3 class="wp-block-heading">Mac の Excel で使う場合</h3>



<p class="wp-block-paragraph">MacのExcelには Microsoft Scripting Runtime が無いので、参照設定の代わりに同じ作者の「<strong>VBA-Dictionary</strong>」というライブラリを一緒に入れます</p>



<p class="wp-block-paragraph"><a href="https://github.com/VBA-tools/VBA-Dictionary" target="_blank" rel="noopener noreferrer">VBA-tools/VBA-Dictionary</a> から <code>Dictionary.cls</code> をダウンロードして、JsonConverter.bas と同じようにインポートすればOKです、WindowsとMacの両方で動かしたいときも、参照設定ではなくこのVBA-Dictionaryを使う形にしておくと安心ですね</p>



<p class="wp-block-paragraph">ここまでできたら準備は完了です、いよいよ実際にJSONを扱っていきます</p>



<h2 class="wp-block-heading">ParseJson でJSONを解析(パース)してみる</h2>



<p class="wp-block-paragraph">JSON形式のテキストを、VBAで扱えるデータ構造(DictionaryやCollection)に変換することを「<strong>解析(パース)</strong>」と言います</p>



<p class="wp-block-paragraph">このパースが、<code>ParseJson</code> 関数を使えば<strong>たった一行で完了</strong>します</p>



<p class="wp-block-paragraph">まずはWeb APIからJSONを取ってきてパースする、いちばんよくある形のサンプルです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>&#39; /// 事前準備 ///
&#39; VBEの [ツール] &gt; [参照設定] から下記にチェックを入れる
&#39; ・Microsoft Scripting Runtime   (Dictionary用、VBA-JSONに必須)
&#39; ・Microsoft XML, v6.0           (APIを叩く場合)
Sub GetJsonData()
    Dim http As Object
    Dim jsonText As String
    Dim parsedData As Object &#39; 解析後のデータ格納用

    &#39; Web APIからJSONデータを取得(例)
    Set http = CreateObject(&quot;MSXML2.XMLHTTP&quot;)
    http.Open &quot;GET&quot;, &quot;https://javeo.jp/wp-json/test/v1/data&quot;, False
    http.send
    jsonText = http.responseText

    &#39; ここがVBA-JSONの本体、JSONを解析
    Set parsedData = ParseJson(jsonText)

    &#39; 解析したデータをデバッグ出力
    Debug.Print &quot;名前: &quot; & parsedData(1)(&quot;name&quot;)
    Debug.Print &quot;身長: &quot; & parsedData(1)(&quot;height&quot;)

    Set http = Nothing
    Set parsedData = Nothing
End Sub</code></pre></div>



<p class="wp-block-paragraph">長く見えるかもしれませんが、VBA-JSONを使っている箇所は、結局このたった一行だけです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>Set parsedData = ParseJson(jsonText)</code></pre></div>



<p class="wp-block-paragraph">この一行を通すことで、最初のサンプルにあった「長いただの文字列」が、<code>parsedData(1)("name")</code> といった具合に<strong>要素を指定してデータを取り出せる構造</strong>に変わります</p>



<p class="wp-block-paragraph">APIを使わず、手元の文字列をそのままパースして試すこともできます、まずは動きを確かめたいときはこちらが手っ取り早いです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>Sub ParseSample()
    Dim jsonText As String
    Dim parsedData As Object

    &#39; 動作確認用に文字列を直接用意
    jsonText = &quot;[{&quot;&quot;name&quot;&quot;:&quot;&quot;Javeo&quot;&quot;,&quot;&quot;height&quot;&quot;:180}]&quot;

    Set parsedData = ParseJson(jsonText)

    Debug.Print parsedData(1)(&quot;name&quot;) &#39; → Javeo
    Debug.Print parsedData(1)(&quot;height&quot;) &#39; → 180
End Sub</code></pre></div>



<p class="wp-block-paragraph">VBAの中で「&#8221;」を書くときは「&#8221;&#8221;」と2つ重ねる必要があるので、そこだけ少し読みづらいですが、やっていることは「文字列をパースして取り出す」だけです</p>



<h2 class="wp-block-heading">パースしたJSONから値を取り出す(配列・オブジェクト・ネスト)</h2>



<p class="wp-block-paragraph">ここがVBA-JSONを使ううえで一番つまずきやすく、そして一番大事なところです</p>



<p class="wp-block-paragraph">ポイントは、<strong>パース後のデータが「Dictionary」と「Collection」の2種類に化けている</strong>という点です</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li>JSONの「{ }」(オブジェクト)→ <strong>Dictionary</strong> になる(キー名で取り出す)</li>



<li>JSONの「[ ]」(配列)→ <strong>Collection</strong> になる(番号で取り出す)</li>
</ul>



<p class="wp-block-paragraph">この区別さえ分かれば、あとは指定の仕方が決まります、サンプルの「JaveoとJavelinのデータ」を例に、ひとつずつ見ていきましょう</p>



<h3 class="wp-block-heading">配列(Collection)は番号で取り出す</h3>



<p class="wp-block-paragraph">サンプルのJSONは全体が「[ ]」で囲まれた配列なので、パース直後の <code>parsedData</code> はCollectionになっています</p>



<p class="wp-block-paragraph">Collectionは「何番目」という番号(インデックス)で要素を取り出します、<strong>VBAのCollectionは1番から始まる</strong>のがポイントで、0番からじゃないので注意です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>&#39; 1人目(Javeo)のデータを取り出す
Set firstPerson = parsedData(1)

&#39; 2人目(Javelin)のデータを取り出す
Set secondPerson = parsedData(2)</code></pre></div>



<h3 class="wp-block-heading">オブジェクト(Dictionary)はキー名で取り出す</h3>



<p class="wp-block-paragraph">取り出した1人分のデータ(<code>parsedData(1)</code>)は「{ }」のオブジェクトなので、こちらはDictionaryです</p>



<p class="wp-block-paragraph">Dictionaryは番号ではなく、<strong>キー名(項目名)を指定して</strong>値を取り出します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>&#39; 1人目の名前と身長
Debug.Print parsedData(1)(&quot;name&quot;)   &#39; → Javeo
Debug.Print parsedData(1)(&quot;height&quot;) &#39; → 180

&#39; 真偽値もそのまま取れる
Debug.Print parsedData(1)(&quot;glasses&quot;) &#39; → True</code></pre></div>



<p class="wp-block-paragraph"><code>parsedData(1)("name")</code> は「配列の1番目(Collection)→ その中のnameキー(Dictionary)」という読み方になります、カッコが連続するのは、この2段階を一気に書いているからなんですね</p>



<h3 class="wp-block-heading">ネスト(入れ子)は同じ要領でつなげる</h3>



<p class="wp-block-paragraph">サンプルの <code>birthdate</code> は、中にさらに <code>year / month / day</code> を持つ「入れ子のオブジェクト」です、こういうネストも、考え方は同じでカッコをつなげるだけです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>&#39; 1人目の生年月日(birthdateの中のyear)
Debug.Print parsedData(1)(&quot;birthdate&quot;)(&quot;year&quot;)  &#39; → 2000
Debug.Print parsedData(1)(&quot;birthdate&quot;)(&quot;month&quot;) &#39; → 1

&#39; 配列の中の値(favorite_foodsの1個目)
Debug.Print parsedData(1)(&quot;favorite_foods&quot;)(1) &#39; → Meat</code></pre></div>



<p class="wp-block-paragraph">コツは、<strong><span class="swl-marker mark_yellow">「{ }が来たらキー名」「[ ]が来たら番号」をJSONの形に合わせて交互に書いていく</span></strong>だけ、整形したJSONを見ながら指でたどると間違えにくいです</p>



<h3 class="wp-block-heading">ループでまとめて処理する</h3>



<p class="wp-block-paragraph">実際の業務では「全員分をシートに書き出す」みたいに、繰り返し処理(ループ)で回すことがほとんどです</p>



<p class="wp-block-paragraph">配列(Collection)は <code>For Each</code> でぐるっと回せます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>Sub WriteToSheet()
    Dim parsedData As Object
    Dim person As Object
    Dim i As Long

    Set parsedData = ParseJson(jsonText) &#39; jsonTextは取得済みとする

    i = 1
    &#39; 配列の要素(1人分のデータ)を1件ずつ取り出す
    For Each person In parsedData
        Cells(i, 1).Value = person(&quot;name&quot;)
        Cells(i, 2).Value = person(&quot;height&quot;)
        Cells(i, 3).Value = person(&quot;birthdate&quot;)(&quot;year&quot;)
        i = i + 1
    Next person
End Sub</code></pre></div>



<p class="wp-block-paragraph">キー名が分からないオブジェクトを総当たりで見たいときは、<code>.Keys</code> でキー一覧を回す手もあります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>Dim key As Variant
&#39; 1人目のオブジェクトのキーと値を全部出す
For Each key In parsedData(1).Keys
    Debug.Print key & &quot; = &quot; & parsedData(1)(key)
Next key</code></pre></div>



<p class="wp-block-paragraph">ここまでで「読み込む(パース)」側はバッチリです、配列は番号・オブジェクトはキー名、これさえ押さえれば、たいていのJSONは取り出せます</p>



<h2 class="wp-block-heading">ConvertToJson でVBAのデータをJSONに変換(生成)</h2>



<p class="wp-block-paragraph">今度は逆方向、つまりVBAのDictionaryやCollectionから<strong>JSON文字列を作る(生成する)</strong>パターンです、こちらは <code>ConvertToJson</code> 関数を使います</p>



<p class="wp-block-paragraph">「VBAで作ったデータをAPIに送りたい」「JSON形式でファイルに保存したい」みたいなときに出番があります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>Sub CreateJsonString()
    Dim postData As Object
    Dim skillsCollection As Collection
    Dim jsonString As String

    &#39; データを格納する親オブジェクトを準備
    Set postData = CreateObject(&quot;Scripting.Dictionary&quot;)

    &#39; 基本的なキーと値を追加
    postData(&quot;name&quot;) = &quot;鈴木 一郎&quot;
    postData(&quot;age&quot;) = 25

    &#39; 配列用のオブジェクトを「Collection」で準備
    Set skillsCollection = New Collection

    &#39; Collectionにデータを追加
    skillsCollection.Add &quot;Word&quot;
    skillsCollection.Add &quot;PowerPoint&quot;

    &#39; 親オブジェクトにCollectionを追加
    postData.Add &quot;skills&quot;, skillsCollection

    &#39; DictionaryをJSON文字列に変換
    jsonString = ConvertToJson(postData)

    &#39; 結果をイミディエイトウィンドウに出力
    Debug.Print jsonString
    &#39; 想定される出力: {&quot;name&quot;:&quot;鈴木 一郎&quot;,&quot;age&quot;:25,&quot;skills&quot;:[&quot;Word&quot;,&quot;PowerPoint&quot;]}

    &#39; オブジェクトの解放
    Set postData = Nothing
    Set skillsCollection = Nothing
End Sub</code></pre></div>



<p class="wp-block-paragraph">ポイントは、<strong><span class="swl-marker mark_yellow">JSONの「{ }」はDictionary、「[ ]」はCollectionで組み立てる</span></strong>という点です、パースのときと逆の対応関係になっているだけなので、慣れると自然に書けるようになります</p>



<p class="wp-block-paragraph">この <code>jsonString</code> をWeb APIに送信(POSTなど)すれば、VBAで作ったデータをサーバーに送れます</p>



<h3 class="wp-block-heading">改行付きで見やすく出力したいとき</h3>



<p class="wp-block-paragraph">デフォルトのままだと、生成されるJSONは改行なしの一行になります、人が読む用にきれいに整形したいときは、<code>Whitespace</code> オプションを付けます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>&#39; インデント2つ分で改行を入れて整形
jsonString = ConvertToJson(postData, Whitespace:=2)</code></pre></div>



<p class="wp-block-paragraph">ファイルに保存して中身を確認したいときなんかは、こちらのほうが見やすくておすすめです</p>



<h2 class="wp-block-heading">VBA-JSONを使わずにJSONを扱う方法(JScript)</h2>



<p class="wp-block-paragraph">ここまでVBA-JSONをおすすめしてきましたが、「ライブラリを追加したくない」「配布先でインポートさせるのが面倒」というケースもありますよね</p>



<p class="wp-block-paragraph">そういうときの代替案として、<strong>Windows標準のJScriptエンジンを使ってJSONをパースする方法</strong>もあるので紹介しておきます</p>



<p class="wp-block-paragraph">JScriptはWindowsに最初から入っているスクリプト実行の仕組みで、これを <code>ScriptControl</code> という部品から呼び出すと、JavaScriptの <code>JSON.parse</code> をVBAから間接的に使えます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>Sub ParseByJScript()
    Dim sc As Object
    Dim jsonText As String
    Dim parsed As Object

    jsonText = &quot;{&quot;&quot;name&quot;&quot;:&quot;&quot;Javeo&quot;&quot;,&quot;&quot;height&quot;&quot;:180}&quot;

    &#39; JScriptエンジンを用意
    Set sc = CreateObject(&quot;ScriptControl&quot;)
    sc.Language = &quot;JScript&quot;

    &#39; JavaScriptのJSON.parseで解析
    Set parsed = sc.Eval(&quot;(&quot; & jsonText & &quot;)&quot;)

    &#39; プロパティ名で値を取り出す
    Debug.Print parsed.name   &#39; → Javeo
    Debug.Print parsed.height &#39; → 180
End Sub</code></pre></div>



<p class="wp-block-paragraph">この方法のメリットは、外部ライブラリのインポートが要らないことです</p>



<p class="wp-block-paragraph">ただ、いくつか弱点もあって、正直なところ常用にはVBA-JSONのほうが向いています</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li><code>ScriptControl</code> は32bit版のOfficeでしか動かない(64bit版では別の書き方が必要)</li>



<li>取り出した値の扱い(配列やネスト)がVBA-JSONより少しクセがある</li>



<li>Macでは使えない</li>
</ul>



<p class="wp-block-paragraph">なので個人的には、<strong><span class="swl-marker mark_yellow">基本はVBA-JSON、どうしてもライブラリを足せない事情があるときだけJScript</span></strong>という使い分けがおすすめです</p>



<h2 class="wp-block-heading">VBA-JSONのよくあるつまずき・FAQ</h2>



<p class="wp-block-paragraph">VBA-JSONでハマりやすいポイントを、質問形式でまとめておきます、エラーが出たらまずここを確認してみてください</p>



<h3 class="wp-block-heading">「ユーザー定義型は定義されていません」と出る</h3>



<p class="wp-block-paragraph">これは <strong><span class="swl-marker mark_yellow">参照設定の漏れ</span></strong>がほぼ原因です</p>



<p class="wp-block-paragraph">VBA-JSONはDictionaryを使うので、WindowsのExcelなら「ツール → 参照設定」で <code>Microsoft Scripting Runtime</code> にチェックが入っているか確認してください、入っていなければチェックを入れて保存し、もう一度実行すれば直ります</p>



<p class="wp-block-paragraph">MacのExcelの場合は、前述のVBA-Dictionary(<code>Dictionary.cls</code>)を取り込んでいるかを確認しましょう</p>



<h3 class="wp-block-heading">「KeyNotFoundError」のようなエラーが出る</h3>



<p class="wp-block-paragraph">これは、<strong>JSONに存在しないキー名を指定して取り出そうとした</strong>ときに出るエラーです</p>



<p class="wp-block-paragraph">キー名のタイプミス、大文字小文字の違い、そもそもそのキーが無いJSONだった、あたりが定番の原因ですね</p>



<p class="wp-block-paragraph">このエラーはハマりやすいので、原因の切り分けと対処法を <a href="https://javeo.jp/vba-json-error/" target="_blank" rel="noopener noreferrer">VBA-JSONでKeyNotFoundErrorが発生するときの対処をまとめた記事</a> で別途くわしく解説しています、同じエラーで止まっている方はそちらをどうぞ</p>



<h3 class="wp-block-heading">日本語が文字化けする</h3>



<p class="wp-block-paragraph">Web APIから取得したJSONの日本語が文字化けする場合は、<strong>文字コードの取り違え</strong>が原因のことが多いです</p>



<p class="wp-block-paragraph">多くのAPIはUTF-8で返してくるので、<code>responseText</code> をそのまま使うとShift_JIS環境で化けることがあります、その場合は <code>responseBody</code>(バイト列)を取得して、UTF-8として読み直すと直ります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>Dim stream As Object
Set stream = CreateObject(&quot;ADODB.Stream&quot;)
stream.Open
stream.Type = 1               &#39; バイナリ
stream.Write http.responseBody
stream.Position = 0
stream.Type = 2               &#39; テキスト
stream.Charset = &quot;UTF-8&quot;       &#39; UTF-8として読み直す
jsonText = stream.ReadText
stream.Close</code></pre></div>



<h3 class="wp-block-heading">キーがあるか分からないとき、どう書けばいい？</h3>



<p class="wp-block-paragraph">キーが存在するか不安なときは、取り出す前に <code>.Exists</code> でチェックすると安全です(Dictionaryの機能です)</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>If parsedData(1).Exists(&quot;weight&quot;) Then
    Debug.Print parsedData(1)(&quot;weight&quot;)
Else
    Debug.Print &quot;weightキーはありません&quot;
End If</code></pre></div>



<p class="wp-block-paragraph">これを挟んでおくと、キーが無いJSONが来てもエラーで止まらずに処理を続けられます</p>



<h2 class="wp-block-heading">VBA-JSONの活用例</h2>



<p class="wp-block-paragraph">導入と使い方が分かったところで、「で、実際どんなことに使えるの？」というイメージを少し具体的にしておきます</p>



<p class="wp-block-paragraph">いちばん多いのは、やはり <strong><span class="swl-marker mark_yellow">Web APIのレスポンス(JSON)をパースしてシートに展開する</span></strong>パターンです、為替レート・天気・在庫情報みたいな「外部の最新データ」をExcelに自動で取り込めると、手作業のコピペがまるごと無くなります</p>



<p class="wp-block-paragraph">たとえばフリマやECのAPIを叩いて、出品データや売上をExcelに集計する、みたいな使い方ですね、APIへリクエストを送る具体的な書き方は <a href="https://javeo.jp/ebay-api-request/" target="_blank" rel="noopener noreferrer">eBay APIにVBAでリクエストを送る方法の記事</a> にまとめているので、JSONパースと組み合わせると一通りの流れがつかめます</p>



<p class="wp-block-paragraph">逆に <code>ConvertToJson</code> 側だと、VBAで組み立てたデータをJSONにして、メール本文やAPIのリクエストボディに載せる、といった使い方ができます、VBAから自動でメールを送る仕組みは <a href="https://javeo.jp/vba-gmail-send/" target="_blank" rel="noopener noreferrer">VBAでGmailを送信する方法の記事</a> で扱っているので、データ生成と通知を組み合わせたい方はあわせてどうぞ</p>



<p class="wp-block-paragraph">そもそもVBA自体がはじめてで「Dim とか For Each の書き方からあやしい…」という方は、先に <a href="https://javeo.jp/vba-beginner-001/" target="_blank" rel="noopener noreferrer">VBA入門の記事</a> で基礎をさらっておくと、この記事のコードもぐっと読みやすくなると思います</p>



<h2 class="wp-block-heading">AIにVBA-JSONのコードを書いてもらうコツ</h2>



<p class="wp-block-paragraph">最近はClaudeやChatGPTにVBAコードを書いてもらう人も増えてきました、もちろんVBA-JSONを使ったコードも、頼めば書いてくれます</p>



<p class="wp-block-paragraph">ただ、AIにそのまま「VBAでJSONをパースして」と頼むと、<strong>意図しない実装を返してくる</strong>ことがあるんですよね</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li>VBA-JSONを使わず、自前のJSON解析関数をゼロから書こうとする</li>



<li>参照設定の前提がズレていて、そのままだと動かないコードを返す</li>



<li>標準機能だけで無理やり読もうとして、やたら長いコードになる</li>
</ul>



<p class="wp-block-paragraph">こうしたズレを避けるには、依頼するときに次のような前提を明示するのがおすすめです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-lang="AIへの依頼例"><code>VBAで○○のJSONデータをパースするコードを書いてほしい
前提:
- VBA-JSON(JsonConverter.bas)を導入済み
- ParseJson の戻り値を Dictionary / Collection として直接扱う
- 参照設定は Microsoft Scripting Runtime を入れている前提
- 配列は番号、オブジェクトはキー名でアクセスする形で</code></pre></div>



<p class="wp-block-paragraph">エラーが出たときも、コードとエラーメッセージをまとめて貼り付ければ、AIが原因と対処をだいたい提示してくれます、自分でハマる時間がかなり減らせるので、これは活用しない手はないです</p>



<p class="wp-block-paragraph">ClaudeでVBAコードを書いてもらう基本的な流れは <a href="https://javeo.jp/claude-howto-beginner/" target="_blank" rel="noopener noreferrer">Claudeの使い方を初心者向けに解説した記事</a> にまとめているので、AIにコードを頼むのが初めての方は、そちらから読むとスムーズだと思います</p>



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



<p class="wp-block-paragraph">VBA-JSONを使えば、これまでVBAでは扱いにくかったJSONが、ぐっと身近になります</p>



<p class="wp-block-paragraph">導入のポイントはこの2つだけです</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li><code>JsonConverter.bas</code> をVBEにインポートする</li>



<li><code>Microsoft Scripting Runtime</code> に参照設定する(Macは VBA-Dictionary)</li>
</ul>



<p class="wp-block-paragraph">使い方も、覚える関数は2つだけです</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li><strong>JSONを読み込むなら <code>ParseJson</code></strong>(配列は番号、オブジェクトはキー名で取り出す)</li>



<li><strong>JSONを書き出すなら <code>ConvertToJson</code></strong>(「{ }」はDictionary、「[ ]」はCollectionで組む)</li>
</ul>



<p class="wp-block-paragraph">この導入2ステップと関数2つさえ押さえれば、Web APIとの連携をはじめ、VBAでできることの幅がかなり広がります</p>



<p class="wp-block-paragraph">まずは手元の短いJSONを <code>ParseJson</code> に通して、<code>Debug.Print</code> で1個取り出してみるところから始めると、感覚がつかみやすいと思います</p>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/vba-json/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Claude Code Desktop初心者向けセキュリティ5選</title>
		<link>https://javeo.jp/claude-code-security-beginner/</link>
					<comments>https://javeo.jp/claude-code-security-beginner/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Thu, 21 May 2026 12:59:32 +0000</pubDate>
				<category><![CDATA[AI・Claude]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[初心者]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=4016</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/05/claude-thumbnail-1024x538.png" class="webfeedsFeaturedVisual" /></p>Claude Code Desktopを始める非IT職向けに、最初にやっておきたいセキュリティ対策をまとめました。設定ファイルの書き方から秘密情報の守り方、危険な操作の防ぎ方まで、初心者向けにやさしく解説します]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/05/claude-thumbnail-1024x538.png" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<p class="wp-block-paragraph">Claude Code Desktopを使い始めるとき、最初にぶつかる不安が「これって、勝手にファイル消されたりしないの？」「うっかりパスワード漏らさない？」という疑問じゃないでしょうか</p>



<p class="wp-block-paragraph">結論から言うと、<strong>初期設定でちゃんと枠を作っておけば、かなり安心して使える</strong>ようになります</p>



<p class="wp-block-paragraph">この記事では、Claude Code Desktopを始める非IT職の方向けに <strong>最初の15分でやっておきたい最低限のセキュリティ対策</strong>を5つにまとめました</p>



<p class="wp-block-paragraph">難しいプログラミング知識は不要、コピペで使える設定例も載せています</p>



<p class="wp-block-paragraph">Claude自体の基本的な使い方は<a href="https://javeo.jp/claude-howto-beginner/">Claudeの使い方を初心者向けに解説した記事</a>でまとめているので、まずそちらから読むとスムーズです</p>



<figure class="wp-block-image size-large"><a href="https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h58_59.png"><img decoding="async" width="1024" height="713" src="https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h58_59-1024x713.png" alt="" class="wp-image-4026" srcset="https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h58_59-1024x713.png 1024w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h58_59-300x209.png 300w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h58_59-150x104.png 150w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h58_59-768x534.png 768w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h58_59.png 1345w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h2 class="wp-block-heading">なぜClaude Code Desktopにセキュリティ対策が必要なのか</h2>



<p class="wp-block-paragraph">Claude Code Desktopはとても便利で、自分の代わりにファイルを読んだり、コードを書いたり、PCの中で色々な作業をしてくれます</p>



<p class="wp-block-paragraph">でも裏を返すと、<strong>そこまでの権限をAIに渡している</strong>ということでもあります</p>



<p class="wp-block-paragraph">もし何も設定せずに使っていると、たとえばこんなリスクがあります</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li>うっかり大事なファイルを削除されてしまう</li>



<li>WordPressのパスワードがコードに書き込まれてGitHubに公開される</li>



<li>「やり直して」と言ったらgitの履歴が一気に消える</li>



<li>悪意のあるWebサイトを読み込んで、変な指示に従ってしまう</li>
</ul>



<p class="wp-block-paragraph">怖い話に聞こえるかもしれませんが、これは <strong>初期設定をちゃんとやれば、ほぼ全部防げる話</strong>です</p>



<p class="wp-block-paragraph">Claude Code Desktopのセキュリティは、ざっくり次の3層構造で守ります</p>



<ol style="background-color:#f3fafe80" class="wp-block-list has-background">
<li><strong>権限設定（settings.json）</strong>:「これはやらせない」を機械的に決める</li>



<li><strong>プロジェクト指示（CLAUDE.md）</strong>：「こういう方針で動いてね」とAIにお願いする</li>



<li><strong>運用のルール</strong>：パスワードはコードに書かない、確認してからコミットするなど</li>
</ol>



<p class="wp-block-paragraph">本記事ではこの3層を、ひとつずつ整えていきます</p>



<h2 class="wp-block-heading">対策1：設定ファイル「settings.json」の場所と用語を理解する</h2>



<p class="wp-block-paragraph">まずはClaude Code Desktopの本丸、<strong>権限を決める設定ファイル</strong>について理解します</p>



<h3 class="wp-block-heading">設定ファイルは3か所ある</h3>



<p class="wp-block-paragraph">Claude Code Desktopの権限設定は <code>settings.json</code> というJSONファイルに書きます、場所は次の3つです</p>



<figure class="wp-block-table"><table><thead><tr><th>ファイル</th><th>場所</th><th>適用範囲</th></tr></thead><tbody><tr><td><code>~/.claude/settings.json</code></td><td>ユーザーフォルダ直下の <code>.claude</code> フォルダ内（Windowsなら <code>C:\Users\ユーザー名\.claude\</code>）</td><td>すべてのプロジェクトに共通</td></tr><tr><td><code>.claude/settings.json</code></td><td>各プロジェクトフォルダ内</td><td>そのプロジェクトのみ（チーム共有可）</td></tr><tr><td><code>.claude/settings.local.json</code></td><td>各プロジェクトフォルダ内</td><td>そのプロジェクトのみ（自分専用、共有しない）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">個人ブログ運営のような自分1人の作業なら、まずは <code>~/.claude/settings.json</code>（ユーザーフォルダ共通）に基本ルールを書いておけばOKです</p>



<p class="wp-block-paragraph">ちなみに「JSONファイルを編集するのは怖い」という方は、<strong>Claudeに頼んで編集してもらうのが一番楽</strong>です、「<code>~/.claude/settings.json</code> に○○の設定を追加して」とお願いすればClaude Code Desktop自身がやってくれます</p>



<h3 class="wp-block-heading">用語：allow / ask / deny / Bash とは</h3>



<p class="wp-block-paragraph">権限設定では、Claudeにやらせる操作を3つの態度に分けます</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong>allow（許可）</strong>：何も聞かずに実行してOK、安全な作業に使う</li>



<li><strong>ask（確認）</strong>：実行する前に「やってもいい？」と一度聞いてくる</li>



<li><strong>deny（拒否）</strong>:機械的に実行を止める、最強の鍵</li>
</ul>



<p class="wp-block-paragraph">そして「Bash」というのは、<strong>Claudeが裏で実行するコマンド（プログラム命令）</strong>のことです</p>



<p class="wp-block-paragraph">自分で直接打つわけではなく、Claudeに「○○して」とお願いしたときに <strong>Claudeが必要に応じて使う仕組み</strong>、と思っておけば十分です</p>



<p class="wp-block-paragraph">たとえば <code>Bash(rm *)</code> と書くと「Claudeが <code>rm</code> という削除コマンドを使おうとする操作」を指します</p>



<p class="wp-block-paragraph">ファイル操作なら <code>Read</code>（読み込み）、<code>Edit</code>（編集）、<code>Write</code>（書き込み）といった種類もあります</p>



<p class="wp-block-paragraph">このあと出てくる設定例を見るとイメージ湧くと思います</p>



<h2 class="wp-block-heading">対策2：秘密の情報（パスワード・APIキー）を守る3ステップ</h2>



<p class="wp-block-paragraph">WordPressのパスワードや各種APIキー、こういう <strong>秘密情報の漏えい</strong>はClaude Code Desktop利用時の事故で一番起きやすいトラブルです</p>



<p class="wp-block-paragraph">守り方は3ステップで完結します</p>



<h3 class="wp-block-heading">ステップ1：秘密情報は「.envファイル」に集約する</h3>



<p class="wp-block-paragraph"><code>.env</code>（ドット・イー・エヌ・ブイ）というファイル名で、プロジェクトフォルダの中に作ります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-lang=".env"><code>WP_BASE_URL=https://example.com
WP_USERNAME=admin
WP_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx</code></pre></div>



<p class="wp-block-paragraph">ポイントは <strong>パスワードやAPIキーを直接コードに書かない</strong>、そして <strong>このファイルだけにまとめておく</strong>こと</p>



<p class="wp-block-paragraph">コードからはこのファイルを読み込むようにしておけば、後でパスワードを変えるときも <code>.env</code> を書き換えるだけで済みます</p>



<h3 class="wp-block-heading">ステップ2：「.gitignore」でGitに含めない</h3>



<p class="wp-block-paragraph"><code>.gitignore</code>（ドット・ギット・イグノア）はGitに <strong>「このファイルは管理しないでね（=GitHubにもアップしないでね）」</strong>と伝えるためのリストです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-lang=".gitignore"><code>.env
.env.local
.env.*
/secrets/</code></pre></div>



<p class="wp-block-paragraph">これを入れておくと、うっかり <code>git add</code> や <code>git push</code> しても <code>.env</code> はGitHubに送信されません</p>



<p class="wp-block-paragraph">逆にこれを忘れて公開リポジトリにパスワードを上げると <strong>数分以内にbotが拾って悪用</strong>されることもあるくらいなので、最初に入れておくのを強く推奨します</p>



<h3 class="wp-block-heading">ステップ3：settings.jsonでClaudeに読ませない</h3>



<p class="wp-block-paragraph">最後に、Claude自身が <code>.env</code> や秘密鍵を読まないように <code>settings.json</code> でブロックします</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-lang="settings.json"><code>{
  &quot;respectGitignore&quot;: true,
  &quot;permissions&quot;: {
    &quot;deny&quot;: [
      &quot;Read(.env)&quot;,
      &quot;Read(.env.*)&quot;,
      &quot;Read(./secrets/**)&quot;,
      &quot;Read(./**/*.pem)&quot;,
      &quot;Read(./**/*.key)&quot;,
      &quot;Read(./**/id_rsa)&quot;,
      &quot;Read(./**/credentials.json)&quot;,
      &quot;Read(~/.ssh/**)&quot;,
      &quot;Read(~/.aws/credentials)&quot;
    ]
  }
}</code></pre></div>



<p class="wp-block-paragraph">こうしておけば <strong>「.envの中身を見せて」とお願いしてもClaude側でブロック</strong>されます</p>



<p class="wp-block-paragraph">リストには <code>.env</code> 系のほかに、<code>.pem</code> や <code>.key</code> といった<strong>秘密鍵ファイル</strong>、SSH接続用の <code>id_rsa</code>、Googleサービスで使われる <code>credentials.json</code>、SSH鍵フォルダやAWS認証情報フォルダなど、各種認証ファイルをまとめて拒否しています</p>



<p class="wp-block-paragraph">うっかり「.envを開いて」「秘密鍵見せて」みたいなことが起きても、ここで止まる仕組みです</p>



<p class="wp-block-paragraph">1行目の <code>"respectGitignore": true</code> はちょっと違うタイプの設定で、<strong><code>.gitignore</code> に書いたファイルをClaudeのファイル選択画面から自動的に除外する</strong>機能を有効にします</p>



<p class="wp-block-paragraph">ステップ2で <code>.gitignore</code> に登録した <code>.env</code> などが、そもそもClaudeの目に触れる場面を減らせる効果があります（デフォルトで <code>true</code> ですが、明示しておくと意図が伝わって安心です）</p>



<h3 class="wp-block-heading">「.claudeignore」は公式じゃないので使わない</h3>



<p class="wp-block-paragraph">古い記事や一部のSNSで「<code>.claudeignore</code> というファイルを置けば除外できる」という情報を見かけますが、これは <strong>2026年5月時点でAnthropic公式にはサポートされていません</strong></p>



<p class="wp-block-paragraph">Claude自身が「<code>.claudeignore</code> がある」と幻覚を起こすケースまであるくらいで、書いても効かないので注意</p>



<p class="wp-block-paragraph">除外設定は <strong><code>settings.json</code> の <code>permissions.deny</code> でやる</strong>のが正解です</p>



<figure class="wp-block-image size-large"><a href="https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h54_30.png"><img decoding="async" width="1024" height="537" src="https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h54_30-1024x537.png" alt="" class="wp-image-4025" srcset="https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h54_30-1024x537.png 1024w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h54_30-300x157.png 300w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h54_30-150x79.png 150w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h54_30-768x403.png 768w, https://javeo.jp/wp-content/uploads/2026/05/2026-05-21_21h54_30.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h2 class="wp-block-heading">対策3：危険な操作からプロジェクトを守る</h2>



<p class="wp-block-paragraph">次は「やられたら困る」コマンド系の防御です</p>



<p class="wp-block-paragraph">自分が直接打つわけではないですが、<strong>Claudeが裏でやろうとする操作を制限する</strong>設定です</p>



<h3 class="wp-block-heading">最低限denyしておきたいコマンド</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-lang="settings.json"><code>{
  &quot;permissions&quot;: {
    &quot;deny&quot;: [
      &quot;Bash(rm -rf*)&quot;,
      &quot;Bash(git reset --hard*)&quot;,
      &quot;Bash(git push --force*)&quot;,
      &quot;Bash(git push -f*)&quot;,
      &quot;Bash(DROP TABLE*)&quot;,
      &quot;Bash(DELETE FROM*)&quot;
    ],
    &quot;ask&quot;: [
      &quot;Bash(git push*)&quot;,
      &quot;Bash(rm*)&quot;
    ]
  }
}</code></pre></div>



<p class="wp-block-paragraph">それぞれが何を防ぐのかは下の表を見てください</p>



<figure class="wp-block-table"><table><thead><tr><th>コマンド</th><th>何をするもの</th><th>なぜ怖い</th></tr></thead><tbody><tr><td><code>rm -rf</code></td><td>ファイルやフォルダを問答無用で削除</td><td>誤って全データが消える</td></tr><tr><td><code>git reset --hard</code></td><td>Gitのコミットを巻き戻す</td><td>数時間の作業が一瞬で消える</td></tr><tr><td><code>git push --force</code></td><td>強制でGitHubに上書き</td><td>共同編集者の作業を消す可能性</td></tr><tr><td><code>DROP TABLE</code></td><td>データベースのテーブル削除</td><td>顧客データ・記事データが消える</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">「自分はそんなコマンド打たないから関係ないかも」と思うかもしれませんが、<strong>Claudeに「整理して」「やり直して」とお願いした時に裏でこれらが動く可能性</strong>があります</p>



<p class="wp-block-paragraph">表の上3つは個人ブログ運営でも普通に出てくる話なので、特に押さえておきたいところです</p>



<h3 class="wp-block-heading">便利だけど危険な設定</h3>



<p class="wp-block-paragraph">Claude Code Desktopの設定画面に <strong>「バイパス権限モードを許可」</strong>というトグルがあります</p>



<figure class="wp-block-image size-large"><a href="https://javeo.jp/wp-content/uploads/2026/05/image-2.png"><img decoding="async" width="1024" height="538" src="https://javeo.jp/wp-content/uploads/2026/05/image-2-1024x538.png" alt="" class="wp-image-4014" srcset="https://javeo.jp/wp-content/uploads/2026/05/image-2-1024x538.png 1024w, https://javeo.jp/wp-content/uploads/2026/05/image-2-300x158.png 300w, https://javeo.jp/wp-content/uploads/2026/05/image-2-150x79.png 150w, https://javeo.jp/wp-content/uploads/2026/05/image-2-768x403.png 768w, https://javeo.jp/wp-content/uploads/2026/05/image-2.png 1198w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">名前のとおり <strong>すべての権限チェック（denyやaskを含む）をバイパスして、Claudeを中断なく動作させる</strong>ための設定です</p>



<p class="wp-block-paragraph">確かにlintエラーの修正やボイラープレートコード生成のような「安全と判断できる繰り返し作業」を快適にこなせる便利な機能で、画面の説明文にもそういった用途が書かれています</p>



<p class="wp-block-paragraph">ただし同じ画面に <strong>「データ損失、システム破損、またはデータ流出（プロンプトインジェクション攻撃など）を引き起こす可能性」</strong>と明記されているとおり、リスクのほうがはるかに大きい設定です</p>



<p class="wp-block-paragraph">この設定をONにすると、画面下のモード切替メニューに <strong>「許可をバイパス」モード</strong>が選択肢として現れる仕組みで、OFFの間は同じ位置にグレーアウトで表示されています</p>



<p class="wp-block-paragraph">つまり <strong>このトグル自体が、危険モードを使えるかどうかの鍵</strong>になっているわけです、<strong>ONにしないことを強く推奨します</strong></p>



<p class="wp-block-paragraph">慣れて油断したタイミングほど事故が起きるので、面倒さよりリスクのほうが圧倒的に大きいです</p>



<p class="wp-block-paragraph">「毎回確認が面倒だから」と感じる場合は、代わりに <strong>「自動モード」を選ぶのがおすすめ</strong>です</p>



<p class="wp-block-paragraph">参考までに、画面下のモード切替メニューの中身はこんな感じです</p>



<figure class="wp-block-table"><table><thead><tr><th>モード</th><th>動作</th></tr></thead><tbody><tr><td>許可を確認</td><td>デフォルト、すべての操作で確認</td></tr><tr><td>編集を承認</td><td>ファイル編集だけ自動承認</td></tr><tr><td>プランモード</td><td>計画を提示してOK後に実行</td></tr><tr><td><strong>自動モード</strong></td><td>denyを守りつつ自動進行（慣れたらこれがおすすめ）</td></tr><tr><td>許可をバイパス</td><td>deny含めて全スキップ（前述のトグルをONにしない限り選べない）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">自動モードは <strong>denyルールは守りつつ、多くの操作を自動進行してくれる</strong>モードなので、ガードレールを保ったまま快適に使えるバランスの良い選択肢になります</p>



<h2 class="wp-block-heading">対策4：CLAUDE.mdで「お願いごと」を伝える</h2>



<p class="wp-block-paragraph">権限設定だけでなく、もう一段の保険として <code>CLAUDE.md</code> というファイルにルールを書いておきます</p>



<h3 class="wp-block-heading">CLAUDE.mdの位置づけ</h3>



<p class="wp-block-paragraph"><code>CLAUDE.md</code> はプロジェクトフォルダの直下に置く <strong>Claudeへの常時指示書</strong>です</p>



<p class="wp-block-paragraph">Claude Code Desktopが起動するたびに自動で読み込まれて、会話中の判断のベースになります</p>



<p class="wp-block-paragraph">ただし注意点として、<code>CLAUDE.md</code> はあくまで <strong>「お願いベース」</strong>です</p>



<p class="wp-block-paragraph"><code>settings.json</code> のdenyのように機械的にブロックされる強制力はなく、Claudeが「これは例外的にやってもいいかな」と判断することもあります</p>



<p class="wp-block-paragraph">なので <strong>機械的に止めたいことは <code>settings.json</code> のdenyに書く</strong>、<strong>方針として伝えたいことは <code>CLAUDE.md</code> に書く</strong>、というすみ分けで考えてください</p>



<h3 class="wp-block-heading">コピペで使えるCLAUDE.mdテンプレート</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-markdown" data-lang="CLAUDE.md"><code># プロジェクト方針

## 秘密情報の扱い
- APIキー・パスワードは原則 `.env` ファイルに入れる、コードに直接書かない
- `.env` の中身を画面に表示しない（cat や echo で出さない）
- ID・パスワードらしき文字列を見つけたら、コードに書く前に私に確認する

## ファイル操作
- ファイル削除は私の明示的な指示があるまでしない
- 削除する場合も、まず削除対象のリストを見せて確認を取ってから実行する

## Git操作
- main / master ブランチへの直接コミット・pushはしない、原則として別ブランチで作業する
- `git push` する前に「pushしていいですか？」と一度確認する

## 動作確認
- コードを変更したあとは、動作確認の手順を提示する
- 確認が取れていない変更を「完了」と報告しない</code></pre></div>



<p class="wp-block-paragraph">このテンプレを <code>CLAUDE.md</code> として保存して、プロジェクトフォルダに置くだけでOKです</p>



<p class="wp-block-paragraph">自分の運用に合わせて項目を増やしたり、文言を調整したりして使ってください</p>



<h3 class="wp-block-heading">ID・パスワードの自動検知について</h3>



<p class="wp-block-paragraph">「コードに秘密情報を入れようとしたら自動で止めてほしい」というニーズはよくあるのですが、<strong>Claude Code Desktop単体ではそういう自動検知機能はありません</strong></p>



<p class="wp-block-paragraph">上のテンプレに含めた「ID・パスワードらしき文字列を見つけたら確認する」という指示で <strong>ある程度は</strong>気づいてもらえます</p>



<p class="wp-block-paragraph">ただし完璧ではないので、本格的に防ぎたい場合は <strong>Gitleaks</strong> や <strong>truffleHog</strong> といった専用ツールを併用するのが本筋になります（これは中級者向けなので別記事で扱います）</p>



<h2 class="wp-block-heading">対策5：もう一歩進んだ安全策（＋α編）</h2>



<p class="wp-block-paragraph">ここまでの4つで最低限の防御はできているので、ここから先は <strong>慣れてきたら追加で検討するもの</strong>として軽く紹介します</p>



<h3 class="wp-block-heading">Plan Modeで事前確認</h3>



<p class="wp-block-paragraph">Claude Code Desktopには「Plan Mode」というモードがあります</p>



<p class="wp-block-paragraph">これを有効にすると、Claudeは <strong>実行する前に「こういう手順でやろうと思います」という計画だけを提示</strong>してくれて、こちらがOKを出すまで実際の作業には進みません</p>



<p class="wp-block-paragraph">大きな変更や、初めての種類の作業のときには特におすすめです、Shift+Tabキーで切り替えられます</p>



<h3 class="wp-block-heading">Hooksで自動チェック</h3>



<p class="wp-block-paragraph">「Hooks」は <strong>Claudeが何かする前後に自動で動く小さなスクリプト</strong>を仕込む機能です</p>



<p class="wp-block-paragraph">たとえば「Claudeがコマンドを実行する直前に、危ないキーワードが含まれていたらブロックする」といった自動チェックを差し込めます</p>



<p class="wp-block-paragraph">スクリプトを書く知識が必要になるので、これは本格的に運用したくなってきた頃の選択肢として覚えておく感じでOKです</p>



<h3 class="wp-block-heading">サンドボックスで隔離する</h3>



<p class="wp-block-paragraph">「サンドボックス」は <strong>Claudeが触れる範囲を仮想的な囲いの中だけに制限する</strong>仕組みです</p>



<p class="wp-block-paragraph">万一おかしな動きをしても、囲いの外には影響しないので安心度が一段上がります</p>



<p class="wp-block-paragraph">ただし設定するにはDockerなどの専門ツールが必要で、非IT職の方やバイブコーディング的にサクッと使いたい方には少しハードルが高めです</p>



<p class="wp-block-paragraph">「権限設定とCLAUDE.mdだけだとちょっと不安、もう一段固めたい」と感じたら検討する選択肢、くらいの位置づけで覚えておけば十分です</p>



<h2 class="wp-block-heading">おまけ｜実はこれ全部Claudeに頼めます</h2>



<p class="wp-block-paragraph">ここまで読んで「いろいろ設定があって面倒そう」と感じた方、安心してください</p>



<p class="wp-block-paragraph">実はこの記事で紹介した設定、<strong>ほとんどClaude Code Desktop自身にお願いできます</strong>、JSONファイルの編集なんて普段やらない人には腰が引ける作業ですが、AIに頼めば数分で全部終わります</p>



<h3 class="wp-block-heading">Claudeに頼めること</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><code>settings.json</code> への <code>deny</code> や <code>respectGitignore</code> の追加</li>



<li><code>.gitignore</code> の作成と中身の追加</li>



<li><code>CLAUDE.md</code> のテンプレート作成</li>



<li><code>.env.example</code>（認証情報の枠だけ）の作成</li>
</ul>



<h3 class="wp-block-heading">コピペで使える依頼テンプレート</h3>



<p class="wp-block-paragraph">たとえばこんな感じで頼めばOKです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-lang="Claudeへの依頼例"><code>このプロジェクトのセキュリティ初期設定をしてほしい

1. ~/.claude/settings.json に以下を追加
   - &quot;respectGitignore&quot;: true
   - .env や秘密鍵系（.pem / .key / id_rsa / credentials.json）の Read を deny

2. このプロジェクトに .gitignore を作って次を追加
   - .env / .env.local / .env.*
   - /secrets/

3. このプロジェクトに CLAUDE.md を作って次の方針を書く
   - 秘密情報の扱い（APIキー・パスワードは .env に集約、コードに直書きしない）
   - ファイル削除は明示的な指示があるまでしない
   - git push 前に確認を取る

4. .env.example を作って必要な環境変数の枠（値は空でOK）を用意

設定内容はそれぞれ私に提示してから書き込んでね</code></pre></div>



<p class="wp-block-paragraph">最後の <strong>「設定内容はそれぞれ私に提示してから書き込んでね」</strong>がポイントです、変な設定が紛れ込まないよう一度確認できます</p>



<h3 class="wp-block-heading">自分でやる必要があるもの</h3>



<ul style="background-color:#FFFFDC80" class="wp-block-list has-background">
<li><strong><code>.env</code> の実際の値（パスワード・APIキー）</strong>：Claudeに値を入れさせると架空の文字列で埋めてしまうことがあるので、自分でコピペするのが安全</li>



<li><strong>「バイパス権限モードを許可」トグル</strong>：GUI設定なのでClaudeでは触れない、デフォルトOFFなので「触らない」だけでOK</li>
</ul>



<h3 class="wp-block-heading">それでも理屈を先に学ぶべき理由</h3>



<p class="wp-block-paragraph">ここまで読んで「Claudeに頼めるなら、この記事を最初から読まなくてもよかったのでは?」と思うかもしれません</p>



<p class="wp-block-paragraph">でも実は、記事で紹介した <strong>「何のために何をやっているか」が分かっていることが大事</strong>です</p>



<p class="wp-block-paragraph">Claudeも完璧ではないので、頼んだ内容と微妙に違う設定が出てくることもあります、そのとき <strong>「想定通りか」を自分の目で確認できる</strong>のは、ここまで読んだ人だけの強みです</p>



<p class="wp-block-paragraph">逆に「中身わからないけど全部任せた」状態だと、おかしな設定が混ざっていても気付けません</p>



<p class="wp-block-paragraph">記事の知識 + Claudeへの依頼、この組み合わせが一番安全で速いやり方になります</p>



<h2 class="wp-block-heading">まとめ｜最初の15分でやる5つの設定</h2>



<p class="wp-block-paragraph">長くなりましたが、要点を整理するとこんな感じです</p>



<ol style="background-color:#f3fafe80" class="wp-block-list has-background">
<li><strong>settings.json</strong>で権限設定の仕組みを理解する（allow / ask / deny）</li>



<li>秘密情報は<strong>.env + .gitignore + settings.jsonのdeny</strong>の3段構えで守る</li>



<li><strong>rm -rf や git push &#8211;force などClaudeが裏で使う危険な操作</strong>をdenyに登録する</li>



<li><strong>CLAUDE.md</strong>でAIへの方針（お願いごと）を明文化する</li>



<li>慣れてきたら<strong>Plan Mode・Hooks・サンドボックス</strong>などで一段守りを固める</li>
</ol>



<p class="wp-block-paragraph">ポイントは <strong>「機械的に止めたいこと」と「方針として伝えたいこと」をきっちり分ける</strong>こと</p>



<p class="wp-block-paragraph">前者は <code>settings.json</code> のdenyで機械的にブロック、後者は <code>CLAUDE.md</code> でお願い、この使い分けができれば最低限のガードレールは整います</p>



<p class="wp-block-paragraph">そして個人的に大事だと思うのが、<strong>「設定したから安心」じゃなくて、変更内容は毎回ちゃんと自分でレビューする</strong>こと</p>



<p class="wp-block-paragraph">AIが書いたコードや実行しようとする操作を、最後に自分の目で確認する習慣を持っておくと、設定の網を抜けた問題にも気付けます</p>



<p class="wp-block-paragraph">Claude Code Desktopはとても強力なツールなので、安全に使う枠組みを最初に作っておけば、長く快適に付き合えると思います</p>



<p class="wp-block-paragraph">Claude自体の基本的な使い方は<a href="https://javeo.jp/claude-howto-beginner/">こちらの記事</a>で解説しているので、まだの方はぜひ合わせてどうぞ</p>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/claude-code-security-beginner/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【VBA入門】変数と定数を徹底解説</title>
		<link>https://javeo.jp/variables-constants/</link>
					<comments>https://javeo.jp/variables-constants/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Sun, 31 Aug 2025 07:48:53 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[EXCEL]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[初心者]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=3520</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2025/08/VBA入門-1-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>変数 変数とは 変数が何かというとその名の通り&#8221;中身が変わる数（値）&#8221;のことを指します 計算結果や文字列、オブジェクトなどを一時的に格納して利用しますがExcel作業に例えると、セルに値を入力して [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2025/08/VBA入門-1-1024x538.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<div class="wp-block-cocoon-blocks-info-box block-box info-box">
<p class="wp-block-paragraph">VBAに限らずプログラミングにおいて変数と定数は基礎中の基礎</p>



<p class="wp-block-paragraph">言語によって細々ルールがありますがVBAでのルールや注意点をまとめていきます</p>
</div>



<h2 class="wp-block-heading">変数</h2>



<h3 class="wp-block-heading">変数とは</h3>



<p class="wp-block-paragraph">変数が何かというとその名の通り&#8221;中身が<strong><span class="marker-under">変</span></strong>わる<strong><span class="marker-under">数</span></strong>（値）&#8221;のことを指します</p>



<p class="wp-block-paragraph">計算結果や文字列、オブジェクトなどを一時的に格納して利用しますがExcel作業に例えると、セルに値を入力して必要なときに参照するイメージに近いです</p>



<h3 class="wp-block-heading">変数を使う目的</h3>



<p class="wp-block-paragraph">変数を使う一番の目的は、&#8221;<strong><span class="marker-under">プログラムの中で扱う値を一時的に記憶し、再利用できるようにすること</span></strong>&#8220;です</p>



<p class="wp-block-paragraph">もし変数を使わずに直接セルや数値を書き込むだけだと、同じ処理を繰り返すときに毎回手直しが必要になり、コードの柔軟性が失われます</p>



<p class="wp-block-paragraph">変数を使うことで以下のメリットがあります</p>



<ul class="wp-block-list has-watery-green-background-color has-background">
<li><strong>処理の効率化</strong>：一度計算した値を保存し、繰り返し利用できる</li>



<li><strong>保守性の向上</strong>：変更が必要な場合、変数の値を変えるだけで済む</li>



<li><strong>可読性の向上</strong>：意味のある名前をつけることで、コードを読んだ人が目的を理解しやすい</li>



<li><strong>一時的なデータ保持</strong>：途中計算の結果やフラグ（条件判定用のTrue/Falseなど）を保持する</li>
</ul>



<h3 class="wp-block-heading">変数の書き方</h3>



<p class="wp-block-paragraph">VBAで変数を宣言する場合の基本形は&#8221;<span class="marker-under">Dim 変数名 As データ型</span>&#8220;です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim score As Integer
Dim name As String</code></pre></div>



<ul class="wp-block-list has-watery-green-background-color has-background">
<li>Dim … 変数を宣言するためのキーワード</li>



<li>変数名 … 値を格納する箱の名前　※後述の命名規則を要確認</li>



<li>データ型 … その変数にどの種類のデータを入れるか指定</li>
</ul>



<h3 class="wp-block-heading">変数の命名規則</h3>



<p class="wp-block-paragraph">VBAは柔軟なプログラムなので実は日本語を変数名にすることもできます・・・が、一般的には英語で書きますし他の言語では受け入れられないのがほぼなのでまずは英語で書きましょう</p>



<p class="wp-block-paragraph">そしてVBAで多く使われるのは<strong><span class="marker-under">キャメルケース</span></strong>でハンガリアン記法の利用もボチボチ</p>



<p class="wp-block-paragraph">他がNGってわけでもないですが一般的な記述にすることで可読性と保守性が上がるのでなるべく合わせましょう</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim targetRow As Long   &#39; ---キャメルケース
Dim lngRow As Long      &#39; ---ハンガリアン記法
Dim target_row As Long  &#39; ---スネークケース 
Dim TargetRow As Long   &#39; ---パスカルケース
Dim 対象行 As Long       &#39; ---日本語は非推奨</code></pre></div>



<h3 class="wp-block-heading">変数のスコープ</h3>



<p class="wp-block-paragraph">変数にはスコープと言われる考え方がありまして、Dimの代わりに&#8221;<span class="marker-under"><strong>Private/Public</strong></span>&#8220;で宣言することで使える範囲が変わります</p>



<p class="wp-block-paragraph">範囲の考え方はおおきくわけて2つ</p>



<ul class="wp-block-list has-watery-green-background-color has-background">
<li>同一プロジェクト内（≒Excelファイル）でモジュールを跨いで利用することができるか・・・①②</li>



<li>同一モジュール内でプロシージャを跨いで利用できるか・・・③④</li>
</ul>



<figure class="wp-block-image size-large"><a href="https://javeo.jp/wp-content/uploads/2025/08/image-24.png"><img decoding="async" width="1024" height="538" src="https://javeo.jp/wp-content/uploads/2025/08/image-24-1024x538.png" alt="" class="wp-image-3522" srcset="https://javeo.jp/wp-content/uploads/2025/08/image-24-1024x538.png 1024w, https://javeo.jp/wp-content/uploads/2025/08/image-24-300x158.png 300w, https://javeo.jp/wp-content/uploads/2025/08/image-24-150x79.png 150w, https://javeo.jp/wp-content/uploads/2025/08/image-24-768x403.png 768w, https://javeo.jp/wp-content/uploads/2025/08/image-24.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h4 class="wp-block-heading">宣言する場所による違い（プロシージャ内外）</h4>



<p class="wp-block-paragraph">プロシージャ外で宣言すると同一モジュール内の全プロシージャで変数が利用できるようになり、変数の値はプロシージャを跨いでも保持されます</p>



<p class="wp-block-paragraph">プロシージャ内で宣言すると同一プロシージャの中だけで利用できるようになります</p>



<figure class="wp-block-table"><table><thead><tr><th>修飾子</th><th>スコープ</th></tr></thead><tbody><tr><td><code>プロシージャ内</code></td><td>そのプロシージャだけ</td></tr><tr><td><code>プロシージャ外</code></td><td>そのモジュールの全プロシージャ</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">メモ</span></div><div class="tab-caption-box-content block-box-content box-content">
<p class="wp-block-paragraph">変数は同一範囲内で重複して宣言することはできません</p>



<p class="wp-block-paragraph">なのでプロシージャ外で宣言した変数名はプロシージャ内でもう一度宣言することはできませんが、プロシージャ内で宣言するのであれば適用範囲で重複しないのでプロシージャを跨げば同一名の変数を利用できます（紛らわしいので推奨はしませんが）</p>
</div></div>



<h4 class="wp-block-heading">プロシージャ外で宣言する場合のPrivete/Publicステートメント</h4>



<p class="wp-block-paragraph">プロシージャ外で宣言する場合はDimの代わりにPrivateとPublicも利用できます</p>



<figure class="wp-block-table"><table><thead><tr><th>修飾子</th><th>スコープ</th><th>他モジュールからアクセス</th></tr></thead><tbody><tr><td><code>Private</code></td><td>モジュール内限定</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 不可</td></tr><tr><td><code>Public</code></td><td>プロジェクト全体</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 可能</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">メモ</span></div><div class="tab-caption-box-content block-box-content box-content">
<p class="wp-block-paragraph">※Privete/Publicの宣言をしていない場合はPrivateが適用されます</p>
</div></div>



<h3 class="wp-block-heading">データ型について</h3>



<p class="wp-block-paragraph">変数は&#8221;文字&#8221;や&#8221;数字&#8221;などデータの型を指定することができます</p>



<p class="wp-block-paragraph">指定しないことも可能ですが、プログラムでは数字の100（ひゃく）と文字の100（いちぜろぜろ）は違うのでエラー・バグの温床になってしまうため原則指定します</p>



<h4 class="wp-block-heading">基本的なデータ型</h4>



<p class="wp-block-paragraph">まずは基本になる様々な&#8221;<span class="marker-under"><strong>値</strong></span>&#8220;を取り扱う時に指定するデータ型から</p>



<figure class="wp-block-table"><table><thead><tr><th>データ型</th><th>説明</th><th class="has-text-align-right" data-align="right">初期値</th><th>例</th><th class="has-text-align-center" data-align="center">使用頻度</th></tr></thead><tbody><tr><td>String</td><td>文字列</td><td class="has-text-align-right" data-align="right">&#8220;&#8221;</td><td><code>Dim name As String</code></td><td class="has-text-align-center" data-align="center">高</td></tr><tr><td>Long</td><td>大きな整数（約±20億）</td><td class="has-text-align-right" data-align="right">0</td><td><code>Dim population As Long</code></td><td class="has-text-align-center" data-align="center">高</td></tr><tr><td>Date</td><td>日付・時刻</td><td class="has-text-align-right" data-align="right">0:00:00</td><td><code>Dim today As Date</code></td><td class="has-text-align-center" data-align="center">高</td></tr><tr><td>Boolean</td><td>True/False</td><td class="has-text-align-right" data-align="right">False</td><td><code>Dim isActive As Boolean</code></td><td class="has-text-align-center" data-align="center">中</td></tr><tr><td>Double</td><td>小数を含む実数</td><td class="has-text-align-right" data-align="right">0</td><td><code>Dim price As Double</code></td><td class="has-text-align-center" data-align="center">低</td></tr><tr><td>Integer</td><td>整数（-32,768～32,767）</td><td class="has-text-align-right" data-align="right">0</td><td><code>Dim age As Integer</code></td><td class="has-text-align-center" data-align="center">低</td></tr><tr><td>Byte</td><td>0～255の整数</td><td class="has-text-align-right" data-align="right">0</td><td><code>Dim flag As Byte</code></td><td class="has-text-align-center" data-align="center">低</td></tr><tr><td>Currency</td><td>金額（小数点4桁まで）</td><td class="has-text-align-right" data-align="right">0</td><td><code>Dim salary As Currency</code></td><td class="has-text-align-center" data-align="center">激低</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Integerは使われるところをよく見かけますが、Longが上位互換みたいなものなので使う必要が無いって意味で使用頻度は&#8221;低&#8221;にしています</p>



<h4 class="wp-block-heading">オブジェクト型について</h4>



<p class="wp-block-paragraph">基本形と違って&#8221;値&#8221;ではなくデータの箱のようなものを格納するオブジェクト型がありまして、このオブジェクト型は何か一つのことを指すわけではなく&#8221;<strong>Workbook（ブック）</strong>&#8220;、&#8221;<strong>Worksheet（シート）</strong>&#8220;、&#8221;<strong>Range（セル）</strong>&#8220;などをまとめてオブジェクト型と呼びます</p>



<p class="wp-block-paragraph">種類は無数にあるのでここでは触れませんが、VBAを利用していれば嫌でも出会うので細かい話はサンプルプログラムの説明などで</p>



<p class="wp-block-paragraph">ちなみにオブジェクト型に代入するときはSetステートメントが必要なので利用時にはご注意を</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim name As String
Dim wb As Workbook

name = &#39;ジャベ雄&#39;
Set wb = Thisworkbook &#39; ---オブジェクトへの代入はSetから始める</code></pre></div>



<h4 class="wp-block-heading">なるべく使用を控えたいけど便利な万能データ型</h4>



<p class="wp-block-paragraph">データ型の冒頭で触れたデータ型を&#8221;指定しない&#8221;時に関連しますが、データ型の一つに万能型の&#8221;<strong><span class="marker-under">Variant</span></strong>&#8220;がありまして、指定しない場合はこの万能型が適用されます</p>



<p class="wp-block-paragraph">もう一つオブジェクト型なら何でも入る&#8221;<strong><span class="marker-under">Object</span></strong>&#8220;があります</p>



<p class="wp-block-paragraph">ObjectはVariantでも代用できないわけではないですが、なるべくデータ型は指定する思想があるので最低限使い分けはしたいところ</p>



<figure class="wp-block-table"><table><thead><tr><th>データ型</th><th>説明</th></tr></thead><tbody><tr><td>Variant</td><td>オブジェクト型も含め全てのデータ型になれる</td></tr><tr><td>Object</td><td>オブジェクト型なら何にでもなれる</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Variant型（データ型を指定しない）はなるべく避けたいとことですが、Arrayなど一部Variantでしか取り扱えない場合や、プログラムの中でどのデータ型になるかわからない場合があるので状況に応じて利用しましょう</p>



<h4 class="wp-block-heading">列挙型（Enum）とユーザー定義データ型（Type）</h4>



<p class="wp-block-paragraph">イレギュラー枠でEnumとTypeがありまして、EnumはLongの集合体、Typeは変数を束ねると考えるとしっくりきます</p>



<p class="wp-block-paragraph">これも奥が深いのでここでは紹介だけまでにして、サンプルソース置くのでこんなのもあるんだーぐらいでどうぞ</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Enum WeekDay
    Sunday      &#39; 0
    Monday      &#39; 1
    Tuesday     &#39; 2
    Wednesday   &#39; 3
    Thursday    &#39; 4
    Friday      &#39; 5
    Saturday    &#39; 6
End Enum

Sub ShowDay()
    MsgBox &quot;今日の曜日は: &quot; & WeekDay.Monday  &#39; 結果は「1」
End Sub</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Type Employee
    Name As String
    Age As Integer
    Salary As Double
End Type

Sub ShowEmployee()
    Dim emp As Employee
    emp.Name = &quot;田中 太郎&quot;
    emp.Age = 30
    emp.Salary = 5000000

    MsgBox &quot;氏名: &quot; & emp.Name & vbCrLf & _
           &quot;年齢: &quot; & emp.Age & vbCrLf & _
           &quot;給与: &quot; & emp.Salary & &quot;円&quot;
End Sub
</code></pre></div>



<h2 class="wp-block-heading">定数</h2>



<h3 class="wp-block-heading">定数とは</h3>



<p class="wp-block-paragraph">定数は&#8221;中身を<strong><span class="marker-under">定</span></strong>めたわる<strong><span class="marker-under">数</span></strong>（値）&#8221;のことを指します</p>



<p class="wp-block-paragraph">基本的な使い方は変数と同じですが違いがあるところだけピックアップします</p>



<h3 class="wp-block-heading">定数を使う目的</h3>



<p class="wp-block-paragraph">定数の目的は、<strong>決して変わらない値をプログラム中で安全に使うこと</strong>です</p>



<p class="wp-block-paragraph">例えば消費税率や基準日などをいつか一括で修正する可能性がある値は、後から修正するときに見落としやすく、バグの原因になります</p>



<p class="wp-block-paragraph">その他にも定数を使うことで以下のメリットがあります</p>



<ul class="wp-block-list has-watery-green-background-color has-background">
<li><strong>安全性の確保</strong>：プログラム実行中に誤って値を書き換えられる心配がない</li>



<li><strong>変更管理が容易</strong>：消費税率などを1か所変更すればプログラム全体に反映できる</li>



<li><strong>可読性の向上</strong>：「0.1」より「TAX_RATE」のような名前を使うことで意味が明確になる</li>



<li><strong>保守性の向上</strong>：長期的に見ても管理がしやすく、他人がコードを読んだときも理解しやすい</li>
</ul>



<h3 class="wp-block-heading">定数の書き方</h3>



<p class="wp-block-paragraph">VBAで定数を宣言する場合の基本形は&#8221;<span class="marker-under">Const 変数名 As データ型 = 値</span>&#8220;です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Const score As Integer = 100
Const name As String = &quot;ジャベ雄&quot;</code></pre></div>



<p class="wp-block-paragraph">変数と違って宣言と同時に値を決めてその後編集不可になります</p>



<h4 class="wp-block-heading">定数の命名規則</h4>



<p class="wp-block-paragraph">変数と同じように一般的に使われる命名規則がありまして、全て大文字のスネークケースで一見して意味が分かる単語を結合します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Const MAX_USER_COUNT As Integer = 100
Const DEFAULT_FONT_SIZE As Double = 12.5
Const API_ENDPOINT_URL As String = &quot;https://example.com/api&quot;</code></pre></div>



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



<p class="wp-block-paragraph">結構初歩の部分ですがまとめ始めるとなかなかのボリュームになってしまいました</p>



<p class="wp-block-paragraph">良くも悪くもシステムとしての制限がないので自分でやチームでルールを作って安定運用できるプログラム作成を心がけましょう！</p>


<p>[temp id=2]</p>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/variables-constants/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【VBA入門】今から始めるVBA</title>
		<link>https://javeo.jp/vba-beginner-001/</link>
					<comments>https://javeo.jp/vba-beginner-001/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Sat, 30 Aug 2025 09:52:53 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[EXCEL]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[初心者]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=2673</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2025/08/VBA入門-1-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>VBAを始める前に VBAを始める前にまずVBAの概要とExcelの準備です VBAとは VBA（Visual Basic for Applications）は、Microsoft 365・Office製品（Excel、 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2025/08/VBA入門-1-1024x538.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<div class="wp-block-cocoon-blocks-info-box block-box info-box">
<p class="wp-block-paragraph">皆さんプログラミングしていますか？</p>



<p class="wp-block-paragraph">プログラミングなんて簡単！・・とは言いませんが、これだけITが発展した現代においては一定の知識を持っていて損はないですし、業務効率の代名詞と言える&#8221;システム化&#8221;を担当するには必須レベル</p>



<p class="wp-block-paragraph">IT職ではない人でも身近でトライ＆エラーし放題、身に着けたスキルがすぐに活かせるEXCELとVBAがいいんじゃないかと言うことで今さらではありますがVBA入門を私なりにまとめます</p>
</div>



<h2 class="wp-block-heading">VBAを始める前に</h2>



<p class="wp-block-paragraph">VBAを始める前にまずVBAの概要とExcelの準備です</p>



<h3 class="wp-block-heading">VBAとは</h3>



<p class="wp-block-paragraph"><strong>VBA</strong>（<strong>V</strong>isual <strong>B</strong>asic for <strong>A</strong>pplications）は、Microsoft 365・Office製品（Excel、Accessなど）で使用できるプログラミング言語です</p>



<p class="wp-block-paragraph">よくVBAとマクロの違いみたいな話を見ますがマクロは機能名でVBAはその中身って感じで会話の中では同じものとして扱って大丈夫かなと</p>



<p class="wp-block-paragraph">VBAを使いこなせば、これまで何時間もかかっていた作業が<strong>ボタン一つで一瞬で終わる</strong>、なんてことも夢ではありません</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">VBAでできる作業例</span></div><div class="tab-caption-box-content block-box-content box-content">
<ul class="wp-block-list">
<li>定型的なメールの作成・送信</li>



<li>毎月のレポート作成</li>



<li>大量のデータ整形・転記</li>



<li>ブラウザを自動操作してエクセル情報の転記</li>
</ul>
</div></div>



<h3 class="wp-block-heading">開発者タブを表示しよう</h3>



<p class="wp-block-paragraph">ExcelでVBA始めるならまず開発タブを表示しましょう</p>



<p class="wp-block-paragraph">正直慣れるとVBEの画面は&#8221;<strong>Alt+F11</strong>&#8220;で開くしマクロは&#8221;<strong>Alt+F8</strong>&#8220;で実行しちゃうので使う頻度は減りますが最初はあったほうが便利です</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">開発者タブの表示手順</span></div><div class="tab-caption-box-content block-box-content box-content">
<ol style="border-radius:20px" class="wp-block-list">
<li>「ファイル」タブ → 「オプション」をクリック</li>



<li>「リボンのユーザー設定」を開く</li>



<li>右側の「メインタブ」の一覧から「開発」にチェックを入れ、「OK」をクリック</li>
</ol>
</div></div>



<figure class="wp-block-image size-large"><a href="https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1.png"><img decoding="async" width="1024" height="555" src="https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1-1024x555.png" alt="" class="wp-image-2680" srcset="https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1-1024x555.png 1024w, https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1-300x163.png 300w, https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1-150x81.png 150w, https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1-768x416.png 768w, https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1-1536x832.png 1536w, https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h2 class="wp-block-heading">VBAで押さえておきたい基本</h2>



<p class="wp-block-paragraph">VBAを学ぶ上で、最低限知っておきたい基本的な概念をいくつか紹介します</p>



<p class="wp-block-paragraph">最初は難しく感じるかもしれませんが、深堀は別でやりますので今は「こういうものがあるんだな」くらいの気持ちで読み進めてください</p>



<h3 class="wp-block-heading">変数と定数</h3>



<p class="wp-block-paragraph">プログラミングでは、データ（数値や文字列など）を一時的に保存しておくための「箱」のようなものを使いますが、この箱のことを<strong>変数</strong>や<strong>定数</strong>と呼びます</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">変数と定数について</span></div><div class="tab-caption-box-content block-box-content box-content">
<ul class="wp-block-list">
<li><strong>変数</strong>: 中身を自由に入れ替えられる箱</li>



<li><strong>定数</strong>: 一度入れたら中身を変えられない箱</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Sub test()
Const tax_rate As Double = 0.1 &#39;---税率
Dim price_excluding_tax As Long &#39;---税抜き価格
Dim price_including_tax As Long &#39;---税込み価格

price_excluding_tax = 1980
price_including_tax = price_excluding_tax * (1 + tax_rate)
Debug.Print (price_including_tax)
End Sub
</code></pre></div>
</div></div>



<h3 class="wp-block-heading">データ型</h3>



<p class="wp-block-paragraph">変数や定数には、どんな種類のデータを入れるかをあらかじめ決めておく必要があり、これを<strong>データ型</strong>と呼びます</p>



<p class="wp-block-paragraph">例えば、数値を扱うのか、文字を扱うのか、日付を扱うのか、といった区別です</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout" style="border-width:1px"><thead><tr><th>データ型</th><th>内容</th><th>例</th></tr></thead><tbody><tr><td>Long</td><td>整数</td><td>1, 100, -50</td></tr><tr><td>String</td><td>文字列</td><td>&#8220;こんにちは&#8221;, &#8220;Excel&#8221;</td></tr><tr><td>Date</td><td>日付・時刻</td><td>2025/08/30</td></tr><tr><td>Boolean</td><td>真偽値 (True/False)</td><td>True, False</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">条件分岐、ループ処理などのフロー制御</h3>



<p class="wp-block-paragraph">プログラムは基本的に上から下へ順番に実行されますが、<strong>フロー制御</strong>を使うことで状況に応じて処理の流れを変えることができます</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">フロー制御の例</span></div><div class="tab-caption-box-content block-box-content box-content">
<ul class="wp-block-list">
<li><strong>ループ処理 (For, Do Whileなど)</strong>: 同じ処理を何度も繰り返したい場合に使います<br>例えば「○○を10回繰り返す」「△△という条件が満たされるまで繰り返す」といった処理が可能です</li>



<li><strong>条件分岐 (If)</strong>: 「もし○○ならAの処理、そうでなければBの処理をする」というように、条件によって処理を分けます</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>&#39; A1～A10のセルの中で300以上の数字だったら文字を赤くする
Sub test()
Dim i As Long
For i = 1 To 10
    If Cells(i, 1).Value &gt;= 300 Then
        Cells(i, 1).Font.Color = RGB(255, 0, 0)
    End If
Next
End Sub</code></pre></div>
</div></div>



<h3 class="wp-block-heading">メインプロシージャとサブプロシージャ</h3>



<p class="wp-block-paragraph">VBAでは、一連の処理のまとまりを<strong>プロシージャ</strong>と呼びます</p>



<p class="wp-block-paragraph">機能や仕組みではなく、役割や考え方みたいな位置づけなので必ずしもこの二つが必要ってわけではなく簡単なプログラムならプロシージャー1つなんてことも多々ありますし、サブプロシージャーのさらにサブプロシージャーを作ったりすることもあります</p>



<p class="wp-block-paragraph">車でいうとメインプロシージャが車の組み立て、サブプロシージャーが各部品の作成のイメージですね</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">プロシージャーについて</span></div><div class="tab-caption-box-content block-box-content box-content">
<ul class="wp-block-list">
<li><strong>メインプロシージャ</strong>: 一連の処理を始めて完了させる主たるプログラム</li>



<li><strong>サブプロシージャ</strong>: 特定の処理（例えば、ボディを作る、エンジンを作る）を部品として独立させたプログラム※メインプロシージャから呼び出して使います</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Sub MainProcedure()
    Debug.Print (&quot;これがメインプロシージャーです&quot;)
    Call SubProcedure1
    Call SubProcedure2
End Sub
Sub SubProcedure1()
    Debug.Print (&quot;これがメインプロシージャー1です&quot;)
End Sub
Sub SubProcedure2()
    Debug.Print (&quot;これがメインプロシージャー2です&quot;)
End Sub

</code></pre></div>
</div></div>



<h3 class="wp-block-heading">可読性の重要性</h3>



<p class="wp-block-paragraph">VBAは自分だけでなく、他の人がコードを読む（または将来の自分が見返す）可能性もあります</p>



<p class="wp-block-paragraph">誰が見ても分かりやすい、<strong>可読性の高いコード</strong>を書くことは非常に重要です</p>



<h4 class="wp-block-heading">インデントについて</h4>



<p class="wp-block-paragraph"><strong>インデント</strong>とは、行頭の字下げのことで処理の塊（ブロック）を視覚的に分かりやすくするために行います</p>



<p class="wp-block-paragraph">If文やFor文などフロー制御の中の処理は、インデントを下げるのが一般的です</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">インデントについて</span></div><div class="tab-caption-box-content block-box-content box-content">
<p class="wp-block-paragraph">処理の塊で行頭にタブキーかスペース（一般的には半角スペース×4）を付けます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>&#39; 悪い例
If Range(&quot;A1&quot;).Value &gt; 10 Then
MsgBox &quot;10より大きいです&quot;
End If

&#39; 良い例
If Range(&quot;A1&quot;).Value &gt; 10 Then
    MsgBox &quot;10より大きいです&quot;
End If</code></pre></div>
</div></div>



<h4 class="wp-block-heading">変数などの命名規則について</h4>



<p class="wp-block-paragraph">変数やプロシージャの名前は、その役割がひと目で分かるように付けることが大切です</p>



<p class="wp-block-paragraph">例えば、&#8221;<code>a"</code>や&#8221;<code>b"</code>のような無意味な名前ではなく、<code>"userName"</code>（ユーザー名）や<code>"calculateTotalPrice"</code>（合計金額を計算する）のように一見して意味が分かるようにすることが望ましいです</p>



<p class="wp-block-paragraph">書き方にも規則性がありまして&#8221;定数は全て大文字にする&#8221;、&#8221;プレフィックスでデータ型を示す&#8221;、&#8221;単語を特定の文字で繋ぐ&#8221;などなど言語や時代によって変化はありますが少なくとも一つのプログラムの中では一貫したルールにすべきです</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">代表的な命名規則</span></div><div class="tab-caption-box-content block-box-content box-content">
<ul class="wp-block-list">
<li>キャメルケース</li>



<li>スネークケース</li>



<li>ケバブケース</li>
</ul>
</div></div>



<h3 class="wp-block-heading">モジュールの種類</h3>



<p class="wp-block-paragraph">VBAのコードを記述する場所を<strong>モジュール</strong>と呼びます</p>



<p class="wp-block-paragraph">モジュールにはいくつか種類がありますが、初心者がまず覚えておくべきなのは以下の2つです</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">モジュールについて</span></div><div class="tab-caption-box-content block-box-content box-content">
<ul class="wp-block-list">
<li><strong>標準モジュール</strong>: 一般的なプロシージャ（SubやFunction）を記述する、最も基本的なモジュールです</li>



<li><strong>クラスモジュール</strong>: 小規模なプログラムになりがちなVBAの世界では見かける頻度は低いですが、いわゆるオブジェクト指向という考え方に基づいたもので、より複雑で大規模なプログラムを作る際に役立ちます。</li>
</ul>
</div></div>



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



<p class="wp-block-paragraph">今回は、VBAの魅力とその基本的な概念についてお話ししました。最初は覚えることが多くて大変に感じるかもしれませんが、一つ一つは決して難しいものではありません。</p>



<p class="wp-block-paragraph">VBAを学ぶ最大のメリットは、<strong>日々の業務に直結するスキル</strong>であるということです。学習したことがすぐに実践で活かせ、成果が目に見えやすいので、モチベーションを維持しやすいのも特徴です。</p>



<p class="wp-block-paragraph">このブログでは、今後もVBAの具体的な書き方や便利なテクニックをどんどん紹介していきます。ぜひ、次回の記事もチェックして、退屈な繰り返し作業から解放され、より創造的な仕事に時間を使えるようになりましょう！<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>


<p>[temp id=2]</p>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/vba-beginner-001/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Selenium WebDriverWait の使い方と条件一覧</title>
		<link>https://javeo.jp/python_wait/</link>
					<comments>https://javeo.jp/python_wait/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Sat, 29 Jun 2024 23:00:00 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[スクレイピング]]></category>
		<category><![CDATA[初心者]]></category>
		<category><![CDATA[自動化]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=2385</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2024/06/python_wait-1-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>Seleniumでの待機は time.sleep より WebDriverWait + expected_conditions が確実です、基本の書き方から条件一覧、各関数の内部実装、2026年時点の注意点までまとめて解説します]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2024/06/python_wait-1-1024x538.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<p class="wp-block-paragraph">Seleniumでブラウザを自動操作していると、「要素がまだ読み込まれていなくてエラーになる」という場面によく出会います</p>



<p class="wp-block-paragraph">そんなとき <code>time.sleep()</code> で適当に待つ人も多いですが、これだと待ちすぎたり待ち足りなかったりで安定しないんですよね</p>



<p class="wp-block-paragraph">結論から言うと、<strong><span class="swl-marker mark_yellow">Seleniumの待機は time.sleep ではなく WebDriverWait と expected_conditions の組み合わせが確実</span></strong>です</p>



<p class="wp-block-paragraph">「条件が満たされたら、その瞬間に次へ進む」という待ち方ができるので、無駄もなければ取りこぼしもないんです</p>



<p class="wp-block-paragraph">この記事では <code>WebDriverWait</code> の基本の書き方から、条件を指定する <code>expected_conditions</code> の一覧、さらに各条件がSeleniumの内部でどう動いているかまで、じっくり解説していきます</p>



<p class="wp-block-paragraph">後半は全条件のリファレンスになっているので、「あの条件どう書くんだっけ」というときの辞書としても使ってくださいね</p>



<h2 class="wp-block-heading">WebDriverWait について</h2>



<p class="wp-block-paragraph"><code>WebDriverWait</code> は、指定した条件を満たすまで待機してくれる便利なモジュールです</p>



<p class="wp-block-paragraph">Seleniumでブラウザを操作するとき、特定の条件が整うまで待ちたいシーンってすごく多いんですよね</p>



<p class="wp-block-paragraph">そこで <code>time.sleep()</code> でxx秒待つようにすると、長すぎれば無駄が多く、短すぎればエラーになりがちで、けっこう雑なプログラムになってしまいます</p>



<p class="wp-block-paragraph">そういう意味で、<strong>WebDriverWait はほぼ必須レベル</strong>の存在だと思っています</p>



<p class="wp-block-paragraph">ちなみに経験上、WebDriverWait だけではうまくいかない場面もあって、最後に0.5秒ほど sleep を足してあげると処理が安定する気がします</p>



<p class="wp-block-paragraph">基本的なパターンはこちらです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>WebDriverWait(webdriver, タイムアウトまでの上限秒数).until(expected_conditionsで設定する条件)</code></pre></div>



<p class="wp-block-paragraph">実際にサンプルソースにすると、こんな感じになります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="sample" data-lang="Python"><code>from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException

driver = webdriver.Chrome()
driver.get(&#39;https://javeo.jp/practice_scraping/&#39;)
try:
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, &#39;#hoge&#39;)))
    print(&#39;条件を満たしました&#39;)
except TimeoutException:
    print(&#39;条件を満たせませんでした&#39;)
driver.quit()</code></pre></div>



<p class="wp-block-paragraph">import の書き方は <code>expected_conditions</code> を <code>EC</code> という別名で読み込むのが定番です、Selenium 4 でもこの書き方で問題なく動きます</p>



<p class="wp-block-paragraph">Pythonでは WebDriverWait と expected_conditions は今も標準・現役で、基本パターンはずっと変わっていません、安心して使えますよ</p>



<h3 class="wp-block-heading">なぜ time.sleep より良いのか</h3>



<p class="wp-block-paragraph">そもそも <code>time.sleep()</code> は「指定した秒数、問答無用で止まる」だけの処理です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import time
time.sleep(5)  # 5秒待つ</code></pre></div>



<p class="wp-block-paragraph">ネットワークが遅い日は5秒でも足りず、速い日は0.5秒で表示されているのに5秒待つ、みたいな無駄が出るんですね</p>



<p class="wp-block-paragraph">一方の WebDriverWait は、<strong><span class="swl-marker mark_yellow">条件が満たされた瞬間に次へ進む</span></strong>ので、無駄な待ち時間がありません</p>



<p class="wp-block-paragraph">とはいえ time.sleep も、デバッグ中にちょっと動きを止めて確認したいときなんかには便利なので、完全に使わないわけではないです</p>



<p class="wp-block-paragraph">「本番の待機には WebDriverWait、確認用にたまに sleep」くらいの距離感がちょうどいいと思います</p>



<h3 class="wp-block-heading">timeout と poll_frequency</h3>



<p class="wp-block-paragraph">WebDriverWait には、タイムアウトまでの秒数のほかに、チェックの間隔も指定できます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>wait = WebDriverWait(driver, timeout=10, poll_frequency=0.5)</code></pre></div>



<ul class="wp-block-list">
<li><code>driver</code>: WebDriverのインスタンス</li>



<li><code>timeout</code>: 最大待機秒数</li>



<li><code>poll_frequency</code>: チェックする間隔(秒)、省略すると0.5秒</li>
</ul>



<p class="wp-block-paragraph">つまり「10秒間、0.5秒ごとに条件をチェックする」という設定です</p>



<p class="wp-block-paragraph"><code>timeout</code> には <code>10</code> のような整数秒を渡すのが基本で、Pythonではこの数値指定で問題なく動きます、まずは整数秒で覚えてしまって大丈夫です</p>



<p class="wp-block-paragraph">ちなみにSelenium 4 以降は、待機時間を <code>datetime.timedelta</code> のような「期間オブジェクト」で扱う流れがあります(Java版などはすでに <code>Duration</code> 指定が中心です)</p>



<p class="wp-block-paragraph">Python版は今のところ整数秒でも普通に使えるので、ここは「将来的にはそういう流れもある」くらいの認識で十分だと思います</p>



<h2 class="wp-block-heading">expected_conditions について</h2>



<p class="wp-block-paragraph">WebDriverWait とセットで使うのが、この <code>expected_conditions</code> です</p>



<p class="wp-block-paragraph">結局のところ <strong>expected_conditions が肝心の条件部分</strong>で、WebDriverWait はその条件が正常終了 or True になるまで待つだけ、という仕様なんですね</p>



<p class="wp-block-paragraph">ただこの expected_conditions、良くも悪くも指定できる条件がかなり多くて、使いこなすには事前に把握しておきたいところ、ということでまとめてみました</p>



<p class="wp-block-paragraph">調べていて気づきましたが、思ったより多くの関数があって、利用シーンが謎なものもチラホラあります</p>



<p class="wp-block-paragraph">また、expected_conditions の返り値はいろいろありますが、WebDriverWait とセットで使うと、WebDriverWait の仕様上、返り値は正常終了時の値 or エラー(<strong><span class="swl-marker mark_yellow" style="color:#e8313b">TimeoutException</span></strong>)になります、try-except するときは注意してくださいね</p>



<h3 class="wp-block-heading">よく使う関数</h3>



<p class="wp-block-paragraph">まずは私が個人的によく使う・使えそうだと思う関数だけをまとめた表です、関数名をクリックすると下のリファレンスに飛べます</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>条件</th></tr></thead><tbody><tr><td><a href="#presence_of_element_located">presence_of_element_located</a></td><td>DOM上に存在しているか</td></tr><tr><td><a href="#visibility_of_element_located">visibility_of_element_located</a></td><td>画面上に表示されているか</td></tr><tr><td><a href="#invisibility_of_element_located">invisibility_of_element_located</a></td><td>画面上で非表示になっているか</td></tr><tr><td><a href="#element_to_be_clickable">element_to_be_clickable</a></td><td>画面上に表示されてかつ利用できる状態か</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">正直、最初はこの4つだけで大半のケースは何とかなります</p>



<h3 class="wp-block-heading">分類別の全関数一覧</h3>



<p class="wp-block-paragraph">続いて、ある程度グループ分けした全関数を、目次のように並べた表です</p>


<div class="c-scrollHint"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="both" class="wp-block-table is-style-regular"><table style="--table-width:800px;"><thead><tr><th>分類</th><th>関数</th><th>返値の型</th></tr></thead><tbody><tr><td rowspan="2">DOMで判定する<br>(画面上に見えているかは加味しない)</td><td><a href="#presence_of_element_located">presence_of_element_located</a></td><td>WebElement</td></tr><tr><td><a href="#presence_of_all_elements_located">presence_of_all_elements_located</a></td><td>List</td></tr><tr><td rowspan="6">画面上の表示・非表示で判定する</td><td><a href="#visibility_of">visibility_of</a></td><td>WebElement</td></tr><tr><td><a href="#visibility_of_element_located">visibility_of_element_located</a></td><td>WebElement</td></tr><tr><td><a href="#visibility_of_all_elements_located">visibility_of_all_elements_located</a></td><td>List</td></tr><tr><td><a href="#visibility_of_any_elements_located">visibility_of_any_elements_located</a></td><td>List</td></tr><tr><td><a href="#invisibility_of_element">invisibility_of_element</a></td><td>bool</td></tr><tr><td><a href="#invisibility_of_element_located">invisibility_of_element_located</a></td><td>bool</td></tr><tr><td rowspan="6">elementの状態で判定する</td><td><a href="#element_attribute_to_include">element_attribute_to_include</a></td><td>bool</td></tr><tr><td><a href="#element_located_selection_state_to_be">element_located_selection_state_to_be</a></td><td>bool</td></tr><tr><td><a href="#element_located_to_be_selected">element_located_to_be_selected</a></td><td>bool</td></tr><tr><td><a href="#element_selection_state_to_be">element_selection_state_to_be</a></td><td>bool</td></tr><tr><td><a href="#element_to_be_clickable">element_to_be_clickable</a></td><td>WebElement</td></tr><tr><td><a href="#element_to_be_selected">element_to_be_selected</a></td><td>bool</td></tr><tr><td rowspan="3">文字や要素の値で判定する</td><td><a href="#text_to_be_present_in_element">text_to_be_present_in_element</a></td><td>bool</td></tr><tr><td><a href="#text_to_be_present_in_element_attribute">text_to_be_present_in_element_attribute</a></td><td>bool</td></tr><tr><td><a href="#text_to_be_present_in_element_value">text_to_be_present_in_element_value</a></td><td>bool</td></tr><tr><td rowspan="2">ページタイトルで判定する</td><td><a href="#title_contains">title_contains</a></td><td>bool</td></tr><tr><td><a href="#title_is">title_is</a></td><td>bool</td></tr><tr><td rowspan="4">ページURLで判定する</td><td><a href="#url_changes">url_changes</a></td><td>bool</td></tr><tr><td><a href="#url_contains">url_contains</a></td><td>bool</td></tr><tr><td><a href="#url_matches">url_matches</a></td><td>bool</td></tr><tr><td><a href="#url_to_be">url_to_be</a></td><td>bool</td></tr><tr><td rowspan="2">ブラウザのウィンドウで判定する</td><td><a href="#number_of_windows_to_be">number_of_windows_to_be</a></td><td>bool</td></tr><tr><td><a href="#new_window_is_opened">new_window_is_opened</a></td><td>bool</td></tr><tr><td rowspan="2">frame要素・状態で判定する</td><td><a href="#frame_to_be_available_and_switch_to_it">frame_to_be_available_and_switch_to_it</a></td><td>bool</td></tr><tr><td><a href="#staleness_of">staleness_of</a></td><td>bool</td></tr><tr><td>アラートポップアップで判定する</td><td><a href="#alert_is_present">alert_is_present</a></td><td>Alert</td></tr><tr><td rowspan="3">複合条件にする</td><td><a href="#all_of">all_of</a></td><td>List</td></tr><tr><td><a href="#any_of">any_of</a></td><td>List</td></tr><tr><td><a href="#none_of">none_of</a></td><td>bool</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">では、ここから各関数を1つずつ詳しく見ていきます、内部のソースコードも引用しているので、挙動が気になる人はそちらもどうぞ</p>



<h4 id="presence_of_element_located" class="wp-block-heading">presence_of_element_located(locator: Tuple[str, str])</h4>



<p class="wp-block-paragraph">引数の locator が DOM に存在していれば、<strong><span class="swl-marker mark_yellow">返り値は該当した WebElement</span></strong>を返します(DOMなので画面上に見えるかどうかは問わない)</p>



<p class="wp-block-paragraph">内部的には find_element で locator の有無を確認しているだけです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="presence_of_element_located" data-lang="Python"><code>def presence_of_element_located(locator: tuple[str, str]) -&gt; Callable[[WebDriverOrWebElement], WebElement]:
    def _predicate(driver: WebDriverOrWebElement):
        return driver.find_element(*locator)

    return _predicate</code></pre></div>



<h4 id="presence_of_all_elements_located" class="wp-block-heading">presence_of_all_elements_located(locator: Tuple[str, str])</h4>



<p class="wp-block-paragraph">引数の locator が DOM に存在していれば、返り値は該当した全ての WebElement を返します(DOMなので画面上に見えるかどうかは問わない)</p>



<p class="wp-block-paragraph">待機するだけなら presence_of_element_located と同じですね</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="presence_of_all_elements_located" data-lang="Python"><code>def presence_of_all_elements_located(locator: tuple[str, str]) -&gt; Callable[[WebDriverOrWebElement], list[WebElement]]:
    def _predicate(driver: WebDriverOrWebElement):
        return driver.find_elements(*locator)

    return _predicate</code></pre></div>



<h4 id="visibility_of_element_located" class="wp-block-heading">visibility_of_element_located(locator: Tuple[str, str])</h4>



<p class="wp-block-paragraph">引数の locator が画面上に見えていれば、<strong><span class="swl-marker mark_yellow">返り値は該当した WebElement</span></strong>を返します</p>



<p class="wp-block-paragraph">実態は locator の有無確認と is_displayed() をしているだけです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>def visibility_of_element_located(
    locator: tuple[str, str],
) -&gt; Callable[[WebDriverOrWebElement], Union[Literal[False], WebElement]]:
    def _predicate(driver: WebDriverOrWebElement):
        try:
            return _element_if_visible(driver.find_element(*locator))
        except StaleElementReferenceException:
            return False

    return _predicate</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="_element_if_visible" data-lang="Python"><code>def _element_if_visible(element: WebElement, visibility: bool = True) -&gt; Union[Literal[False], WebElement]:
    return element if element.is_displayed() == visibility else False</code></pre></div>



<h4 id="visibility_of" class="wp-block-heading">visibility_of(element: WebElement)</h4>



<p class="wp-block-paragraph">引数の element が画面上に見えていれば、返り値は該当した WebElement を返します</p>



<p class="wp-block-paragraph">引数にした WebElement がそのまま返り値になるので、単純な待機処理としてしか使うことはなさそうですね</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="visibility_of" data-lang="Python"><code>def visibility_of(element: WebElement) -&gt; Callable[[Any], Union[Literal[False], WebElement]]:
    def _predicate(_):
        return _element_if_visible(element)

    return _predicate</code></pre></div>



<h4 id="visibility_of_all_elements_located" class="wp-block-heading">visibility_of_all_elements_located(locator: Tuple[str, str])</h4>



<p class="wp-block-paragraph">引数の locator が全て画面上に見えていれば、返り値は該当した全ての WebElement を返します</p>



<p class="wp-block-paragraph">ただし、locator が1つでも DOM 上に存在しないか非表示(hidden)になっていれば<strong>エラー</strong>になる絶妙仕様なので、使うことはあまりなさそうです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="visibility_of_all_elements_located" data-lang="Python"><code>def visibility_of_all_elements_located(
    locator: tuple[str, str],
) -&gt; Callable[[WebDriverOrWebElement], Union[list[WebElement], Literal[False]]]:
    def _predicate(driver: WebDriverOrWebElement):
        try:
            elements = driver.find_elements(*locator)
            for element in elements:
                if _element_if_visible(element, visibility=False):
                    return False
            return elements
        except StaleElementReferenceException:
            return False

    return _predicate</code></pre></div>



<h4 id="visibility_of_any_elements_located" class="wp-block-heading">visibility_of_any_elements_located(locator: Tuple[str, str])</h4>



<p class="wp-block-paragraph">引数の locator が画面上に見えていれば、返り値は該当した全ての WebElement を返します</p>



<p class="wp-block-paragraph">こちらは locator が DOM 上に存在しない場合のみ<strong>エラー</strong>になり、1つでも表示されていれば、表示されている WebElement を返してくれます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="visibility_of_any_elements_located" data-lang="Python"><code>def visibility_of_any_elements_located(locator: tuple[str, str]) -&gt; Callable[[WebDriverOrWebElement], list[WebElement]]:
    def _predicate(driver: WebDriverOrWebElement):
        return [element for element in driver.find_elements(*locator) if _element_if_visible(element)]

    return _predicate</code></pre></div>



<h4 id="invisibility_of_element_located" class="wp-block-heading">invisibility_of_element_located(locator: Union[WebElement, Tuple[str, str]])</h4>



<p class="wp-block-paragraph">visibility_of_element_located の逆で、DOM 上に見えてないことを検知してくれます</p>



<p class="wp-block-paragraph">DOM 上になければ True、DOM 上にあるけど非表示なら対象の WebElement を返してくれます、ローディング画面が消えるのを待つ、みたいなときに便利ですね</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="invisibility_of_element_located" data-lang="Python"><code>def invisibility_of_element_located(
    locator: Union[WebElement, tuple[str, str]],
) -&gt; Callable[[WebDriverOrWebElement], Union[WebElement, bool]]:
    def _predicate(driver: WebDriverOrWebElement):
        try:
            target = locator
            if not isinstance(target, WebElement):
                target = driver.find_element(*target)
            return _element_if_visible(target, visibility=False)
        except (NoSuchElementException, StaleElementReferenceException):
            # In the case of NoSuchElement, returns true because the element is
            # not present in DOM. The try block checks if the element is present
            # but is invisible.
            # In the case of StaleElementReference, returns true because stale
            # element reference implies that element is no longer visible.
            return True

    return _predicate</code></pre></div>



<h4 id="invisibility_of_element" class="wp-block-heading">invisibility_of_element(element: Union[WebElement, Tuple[str, str]])</h4>



<p class="wp-block-paragraph">実は <a href="#invisibility_of_element_located">invisibility_of_element_located</a> のシノニム(別名)です</p>



<p class="wp-block-paragraph">見ての通り、実は locator でも受け付けできて、<a href="#invisibility_of_element_located">invisibility_of_element_located</a> をそのまま返しているだけなんですね</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="invisibility_of_element" data-lang="Python"><code>def invisibility_of_element(
    element: Union[WebElement, tuple[str, str]],
) -&gt; Callable[[WebDriverOrWebElement], Union[WebElement, bool]]:
    return invisibility_of_element_located(element)</code></pre></div>



<h4 id="element_attribute_to_include" class="wp-block-heading">element_attribute_to_include(locator: Tuple[str, str], attribute_: str)</h4>



<p class="wp-block-paragraph">引数の locator が DOM 上に存在し、さらにそのタグの中に引数の attribute_ 属性があるかで照合します(それ以外はエラー)</p>



<p class="wp-block-paragraph">使い道としては、JavaScriptで要素が追加されるときぐらいですかね</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="element_attribute_to_include" data-lang="Python"><code>def element_attribute_to_include(locator: tuple[str, str], attribute_: str) -&gt; Callable[[WebDriverOrWebElement], bool]:
    def _predicate(driver: WebDriverOrWebElement):
        try:
            element_attribute = driver.find_element(*locator).get_attribute(attribute_)
            return element_attribute is not None
        except StaleElementReferenceException:
            return False

    return _predicate</code></pre></div>



<h4 id="element_located_selection_state_to_be" class="wp-block-heading">element_located_selection_state_to_be(locator: Tuple[str, str], is_selected: bool)</h4>



<p class="wp-block-paragraph">引数の locator が DOM 上に存在し、さらにその要素の選択状況と引数の is_selected が合っているかで判定を返してくれます</p>



<p class="wp-block-paragraph">locator が DOM 上に存在しないときはエラーになります</p>



<p class="wp-block-paragraph">チェックボックスやラジオボタンではない場合、そもそも選択の概念がないので is_selected() は False になります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="element_located_selection_state_to_be" data-lang="Python"><code>def element_located_selection_state_to_be(
    locator: tuple[str, str], is_selected: bool
) -&gt; Callable[[WebDriverOrWebElement], bool]:
    def _predicate(driver: WebDriverOrWebElement):
        try:
            element = driver.find_element(*locator)
            return element.is_selected() == is_selected
        except StaleElementReferenceException:
            return False

    return _predicate</code></pre></div>



<h4 id="element_located_to_be_selected" class="wp-block-heading">element_located_to_be_selected(locator: Tuple[str, str])</h4>



<p class="wp-block-paragraph">引数の locator が選択されている状態であるかで照合します</p>



<p class="wp-block-paragraph">is_selected() はあまり使う機会がないと思うんですよね</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="element_located_to_be_selected" data-lang="Python"><code>def element_located_to_be_selected(locator: tuple[str, str]) -&gt; Callable[[WebDriverOrWebElement], bool]:
    def _predicate(driver: WebDriverOrWebElement):
        return driver.find_element(*locator).is_selected()

    return _predicate</code></pre></div>



<h4 id="element_to_be_selected" class="wp-block-heading">element_to_be_selected(element: WebElement)</h4>



<p class="wp-block-paragraph"><a href="#element_located_to_be_selected">element_located_to_be_selected</a> の引数が locator から WebElement になった版です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="element_to_be_selected" data-lang="Python"><code>def element_to_be_selected(element: WebElement) -&gt; Callable[[Any], bool]:
    def _predicate(_):
        return element.is_selected()

    return _predicate</code></pre></div>



<h4 id="element_selection_state_to_be" class="wp-block-heading">element_selection_state_to_be(element: WebElement, is_selected: bool)</h4>



<p class="wp-block-paragraph"><a href="#element_to_be_selected">element_to_be_selected</a> で is_selected() == False が選べるようになっただけです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="element_selection_state_to_be" data-lang="Python"><code>def element_selection_state_to_be(element: WebElement, is_selected: bool) -&gt; Callable[[Any], bool]:
    def _predicate(_):
        return element.is_selected() == is_selected

    return _predicate</code></pre></div>



<h4 id="element_to_be_clickable" class="wp-block-heading">element_to_be_clickable(mark: Union[WebElement, Tuple[str, str]])</h4>



<p class="wp-block-paragraph">まず引数が mark(WebElement と locator のどちらでもOK)になっているのに好感が持てます<br>※全部そうしてほしい</p>



<p class="wp-block-paragraph">内部的には <strong><span class="swl-marker mark_yellow">visibility_of かつ is_enabled()</span></strong> なので、clickable という名前からチェックボックス向けのような印象を受けますが、input タグなどにも有効です(むしろこっちの方が利用頻度が高い)</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="element_to_be_clickable" data-lang="Python"><code>def element_to_be_clickable(
    mark: Union[WebElement, tuple[str, str]],
) -&gt; Callable[[WebDriverOrWebElement], Union[Literal[False], WebElement]]:
    # renamed argument to &#39;mark&#39;, to indicate that both locator
    # and WebElement args are valid
    def _predicate(driver: WebDriverOrWebElement):
        target = mark
        if not isinstance(target, WebElement):  # if given locator instead of WebElement
            target = driver.find_element(*target)  # grab element at locator
        element = visibility_of(target)(driver)
        if element and element.is_enabled():
            return element
        return False

    return _predicate</code></pre></div>



<h4 id="text_to_be_present_in_element" class="wp-block-heading">text_to_be_present_in_element(locator: Tuple[str, str], text_: str)</h4>



<p class="wp-block-paragraph">XPATHの [text()=&#8217;hoge&#8217;] を事前チェックできる感じです</p>



<p class="wp-block-paragraph">需要がありそうでなさそう、、、で、やっぱりありそうな関数です、「処理が完了しました」のような表示を待つときに便利ですよ</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="text_to_be_present_in_element" data-lang="Python"><code>def text_to_be_present_in_element(locator: tuple[str, str], text_: str) -&gt; Callable[[WebDriverOrWebElement], bool]:
    def _predicate(driver: WebDriverOrWebElement):
        try:
            element_text = driver.find_element(*locator).text
            return text_ in element_text
        except StaleElementReferenceException:
            return False

    return _predicate</code></pre></div>



<h4 id="text_to_be_present_in_element_value" class="wp-block-heading">text_to_be_present_in_element_value(locator: Tuple[str, str], text_: str)</h4>



<p class="wp-block-paragraph"><a href="#text_to_be_present_in_element">text_to_be_present_in_element</a> を text から value 属性に変えてみました、という関数です</p>



<p class="wp-block-paragraph">もともと微妙な需要だったのに、さらに下がってる気がします</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="text_to_be_present_in_element_value" data-lang="Python"><code>def text_to_be_present_in_element_value(
    locator: tuple[str, str], text_: str
) -&gt; Callable[[WebDriverOrWebElement], bool]:
    def _predicate(driver: WebDriverOrWebElement):
        try:
            element_text = driver.find_element(*locator).get_attribute(&quot;value&quot;)
            if element_text is None:
                return False
            return text_ in element_text
        except StaleElementReferenceException:
            return False

    return _predicate</code></pre></div>



<h4 id="text_to_be_present_in_element_attribute" class="wp-block-heading">text_to_be_present_in_element_attribute(locator: Tuple[str, str], attribute_: str, text_: str)</h4>



<p class="wp-block-paragraph"><a href="#text_to_be_present_in_element_value">text_to_be_present_in_element_value</a> を、value 以外の属性を選べるようにしてみました</p>



<p class="wp-block-paragraph">じゃあ <a href="#text_to_be_present_in_element_value">text_to_be_present_in_element_value</a> いらない・・・となりますね</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="text_to_be_present_in_element_attribute" data-lang="Python"><code>def text_to_be_present_in_element_attribute(
    locator: tuple[str, str], attribute_: str, text_: str
) -&gt; Callable[[WebDriverOrWebElement], bool]:
    def _predicate(driver: WebDriverOrWebElement):
        try:
            element_text = driver.find_element(*locator).get_attribute(attribute_)
            if element_text is None:
                return False
            return text_ in element_text
        except StaleElementReferenceException:
            return False

    return _predicate</code></pre></div>



<h4 id="title_is" class="wp-block-heading">title_is(title: str)</h4>



<p class="wp-block-paragraph">title との完全一致判定です</p>



<p class="wp-block-paragraph">title 自体ちょっと使いにくいのに、完全一致はなかなか難しい印象です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="title_is" data-lang="Python"><code>def title_is(title: str) -&gt; Callable[[WebDriver], bool]:
    def _predicate(driver: WebDriver):
        return driver.title == title

    return _predicate</code></pre></div>



<h4 id="title_contains" class="wp-block-heading">title_contains(title: str)</h4>



<p class="wp-block-paragraph">こちらは title の部分一致判定です</p>



<p class="wp-block-paragraph">完全一致よりは現実的だけど、やっぱり title で照合はしないと思います</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="title_contains" data-lang="Python"><code>def title_contains(title: str) -&gt; Callable[[WebDriver], bool]:
    def _predicate(driver: WebDriver):
        return title in driver.title

    return _predicate</code></pre></div>



<h4 id="url_contains" class="wp-block-heading">url_contains(url: str)</h4>



<p class="wp-block-paragraph">url の部分一致で判定します</p>



<p class="wp-block-paragraph">個人的には待機処理の条件に url はあまり使わないかなと思います、ただ、ボタンを押してページが切り替わるのを待ちたいときには出番がありますね</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="url_contains" data-lang="Python"><code>def url_contains(url: str) -&gt; Callable[[WebDriver], bool]:
    def _predicate(driver: WebDriver):
        return url in driver.current_url

    return _predicate</code></pre></div>



<h4 id="url_matches" class="wp-block-heading">url_matches(pattern: str)</h4>



<p class="wp-block-paragraph">こちらは url を正規表現で判定します</p>



<p class="wp-block-paragraph">URLにIDなどが含まれていて完全一致では指定しづらいとき、正規表現で柔軟に待てるのは便利ですね、ちなみに Selenium 4 で整理された比較的新しい条件です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="url_matches" data-lang="Python"><code>def url_matches(pattern: str) -&gt; Callable[[WebDriver], bool]:
    def _predicate(driver: WebDriver):
        return re.search(pattern, driver.current_url) is not None

    return _predicate</code></pre></div>



<h4 id="url_to_be" class="wp-block-heading">url_to_be(url: str)</h4>



<p class="wp-block-paragraph">url の完全一致で判定します</p>



<p class="wp-block-paragraph">遷移先のURLがきっちり決まっているときには使えますよ</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="url_to_be" data-lang="Python"><code>def url_to_be(url: str) -&gt; Callable[[WebDriver], bool]:
    def _predicate(driver: WebDriver):
        return url == driver.current_url

    return _predicate</code></pre></div>



<h4 id="url_changes" class="wp-block-heading">url_changes(url: str)</h4>



<p class="wp-block-paragraph">url の不一致で判定します、指定したURLから変わるまで待つ、という条件ですね</p>



<p class="wp-block-paragraph">クリック後にページが切り替わるのを待つ、みたいなときに自然に使えます、こちらも Selenium 4 系で整理された条件です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="url_changes" data-lang="Python"><code>def url_changes(url: str) -&gt; Callable[[WebDriver], bool]:
    def _predicate(driver: WebDriver):
        return url != driver.current_url

    return _predicate</code></pre></div>



<h4 id="number_of_windows_to_be" class="wp-block-heading">number_of_windows_to_be(num_windows: int)</h4>



<p class="wp-block-paragraph">ウィンドウ(=タブ)の数で照合します</p>



<p class="wp-block-paragraph">新しいタブが開くのを待ちたいとき以外は、出番が少なめかもしれません</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="number_of_windows_to_be" data-lang="Python"><code>def number_of_windows_to_be(num_windows: int) -&gt; Callable[[WebDriver], bool]:
    def _predicate(driver: WebDriver):
        return len(driver.window_handles) == num_windows

    return _predicate</code></pre></div>



<h4 id="new_window_is_opened" class="wp-block-heading">new_window_is_opened(current_handles: List[str])</h4>



<p class="wp-block-paragraph">新しいウィンドウができるまで待ってくれる、らしいです</p>



<p class="wp-block-paragraph">number_of_windows_to_be と用途は近いですが、開く前のウィンドウ数を渡しておけば、それより増えたかどうかで判定してくれます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="new_window_is_opened" data-lang="Python"><code>def new_window_is_opened(current_handles: list[str]) -&gt; Callable[[WebDriver], bool]:
    def _predicate(driver: WebDriver):
        return len(driver.window_handles) &gt; len(current_handles)

    return _predicate</code></pre></div>



<h4 id="frame_to_be_available_and_switch_to_it" class="wp-block-heading">frame_to_be_available_and_switch_to_it(locator: Union[Tuple[str, str], str])</h4>



<p class="wp-block-paragraph">指定の frame に移動できるまで待ちます</p>



<p class="wp-block-paragraph">待機処理としてより、switch_to.frame を安全にする使い方なら需要がありそうです、iframe を操作するときに役立ちますね</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="frame_to_be_available_and_switch_to_it" data-lang="Python"><code>def frame_to_be_available_and_switch_to_it(
    locator: Union[tuple[str, str], str, WebElement],
) -&gt; Callable[[WebDriver], bool]:
    def _predicate(driver: WebDriver):
        try:
            if isinstance(locator, Iterable) and not isinstance(locator, str):
                driver.switch_to.frame(driver.find_element(*locator))
            else:
                driver.switch_to.frame(locator)
            return True
        except NoSuchFrameException:
            return False

    return _predicate</code></pre></div>



<h4 id="staleness_of" class="wp-block-heading">staleness_of(element: WebElement)</h4>



<p class="wp-block-paragraph">なんでこんな名前になったのか、、実態は is_enabled だけです、要素が古くなる(DOMから削除される)のを検知できるので、ページ遷移の確認に便利ですね</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="staleness_of" data-lang="Python"><code>def staleness_of(element: WebElement) -&gt; Callable[[Any], bool]:
    def _predicate(_):
        try:
            # Calling any method forces a staleness check
            element.is_enabled()
            return False
        except StaleElementReferenceException:
            return True

    return _predicate</code></pre></div>



<h4 id="alert_is_present" class="wp-block-heading">alert_is_present()</h4>



<p class="wp-block-paragraph">アラートに遷移できるかを判定します</p>



<p class="wp-block-paragraph"><a href="#frame_to_be_available_and_switch_to_it">frame_to_be_available_and_switch_to_it</a> と同じく、待機処理としてより、switch_to.alert を安全にする使い方なら需要がありそうです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="alert_is_present" data-lang="Python"><code>def alert_is_present() -&gt; Callable[[WebDriver], Union[Alert, Literal[False]]]:
    def _predicate(driver: WebDriver):
        try:
            return driver.switch_to.alert
        except NoAlertPresentException:
            return False

    return _predicate</code></pre></div>



<h4 id="any_of" class="wp-block-heading">any_of(*expected_conditions: Callable[[D], T])</h4>



<p class="wp-block-paragraph">指定した複数の expected_conditions が、1つでも True になればOKという条件です</p>



<p class="wp-block-paragraph">「成功表示か、エラー表示の、どちらかが出るまで待つ」みたいな分岐に便利です、こちらも Selenium 4 で追加されました</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="any_of" data-lang="Python"><code>def any_of(*expected_conditions: Callable[[D], T]) -&gt; Callable[[D], Union[Literal[False], T]]:
    def any_of_condition(driver: D):
        for expected_condition in expected_conditions:
            try:
                result = expected_condition(driver)
                if result:
                    return result
            except WebDriverException:
                pass
        return False

    return any_of_condition</code></pre></div>



<h4 id="all_of" class="wp-block-heading">all_of(*expected_conditions: Callable[[D], Union[T, Literal[False]]])</h4>



<p class="wp-block-paragraph">こちらは指定した複数の expected_conditions が、全て True になればOKという条件です</p>



<p class="wp-block-paragraph">複数の条件をまとめてチェックしたいときに使います、any_of とセットで Selenium 4 で追加されました</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="all_of" data-lang="Python"><code>def all_of(
    *expected_conditions: Callable[[D], Union[T, Literal[False]]],
) -&gt; Callable[[D], Union[list[T], Literal[False]]]:
    def all_of_condition(driver: D):
        results: list[T] = []
        for expected_condition in expected_conditions:
            try:
                result = expected_condition(driver)
                if not result:
                    return False
                results.append(result)
            except WebDriverException:
                return False
        return results

    return all_of_condition</code></pre></div>



<h4 id="none_of" class="wp-block-heading">none_of(*expected_conditions: Callable[[D], Any])</h4>



<p class="wp-block-paragraph">こちらは指定した複数の expected_conditions が、1つも True にならなければOKという条件です</p>



<p class="wp-block-paragraph">「エラー表示が出ないまま処理が進んだか」を確かめたいときなんかに使えます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="none_of" data-lang="Python"><code>def none_of(*expected_conditions: Callable[[D], Any]) -&gt; Callable[[D], bool]:
    def none_of_condition(driver: D):
        for expected_condition in expected_conditions:
            try:
                result = expected_condition(driver)
                if result:
                    return False
            except WebDriverException:
                pass
        return True

    return none_of_condition</code></pre></div>



<h2 class="wp-block-heading">expected_conditions にない条件は lambda で自作できる</h2>



<p class="wp-block-paragraph">ここまで全関数を見てきましたが、「ちょうどいい条件がない」というケースもあります</p>



<p class="wp-block-paragraph">そんなときは、<code>until</code> に自作の関数(条件)を渡せます</p>



<p class="wp-block-paragraph">「driver を受け取って、満たされたら値を返す(満たされなければ False を返す)」関数を渡せばいいだけなので、<strong><span class="swl-marker mark_yellow">lambda でサクッと書ける</span></strong>んですね</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>from selenium.webdriver.common.by import By

# 要素のテキストが空でなくなるまで待つ自作条件
element = WebDriverWait(driver, 10).until(
    lambda d: d.find_element(By.ID, &quot;status&quot;) if d.find_element(By.ID, &quot;status&quot;).text != &quot;&quot; else False
)</code></pre></div>



<p class="wp-block-paragraph">expected_conditions に用意されていない細かい条件で待ちたいときは、この lambda 方式を覚えておくと一気に応用が利きます</p>



<p class="wp-block-paragraph">そもそも要素の取得自体に迷うときは、<a href="https://javeo.jp/selenium-find-element/" target="_blank" rel="noopener noreferrer">Seleniumで要素を取得する find_element の使い方</a>もあわせて読むと、待機とセットでスッキリ書けるようになりますよ</p>



<h2 class="wp-block-heading">WebDriverWait のよくあるエラーと注意点</h2>



<h3 class="wp-block-heading">TimeoutException が出る</h3>



<p class="wp-block-paragraph">指定した時間内に条件が満たされなかったときに出るエラーです</p>



<p class="wp-block-paragraph">一番よく見るエラーですね</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>from selenium.common.exceptions import TimeoutException

try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, &quot;main&quot;))
    )
except TimeoutException:
    print(&quot;要素が見つかりませんでした&quot;)</code></pre></div>



<p class="wp-block-paragraph">try-except で囲んで、タイムアウト時の処理を書いておくと安心です</p>



<p class="wp-block-paragraph">原因としては、<strong>セレクタが間違っている</strong>か、本当に表示まで時間がかかっているかのどちらかが多いです</p>



<h3 class="wp-block-heading">要素は見つかるのにクリックできない</h3>



<p class="wp-block-paragraph">presence では見つかるのに、いざクリックするとエラーになることがあります</p>



<p class="wp-block-paragraph">これは要素は存在するけど、まだ表示されていない・操作できない状態だからですね</p>



<p class="wp-block-paragraph">そういうときは <a href="#element_to_be_clickable">element_to_be_clickable</a> を使うと解決することが多いです</p>



<h3 class="wp-block-heading">暗黙的な待機と混ぜると危険</h3>



<p class="wp-block-paragraph">ここは2026年の今でも引っかかる人が多いポイントなので、しっかり押さえておきたいところです</p>



<p class="wp-block-paragraph">Seleniumには WebDriverWait(明示的な待機)とは別に、<code>implicitly_wait()</code> という「暗黙的な待機」もあります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>driver.implicitly_wait(10)  # 要素が見つかるまで最大10秒待つ(全体に適用)</code></pre></div>



<p class="wp-block-paragraph">これ自体は楽な仕組みなんですが、<code>WebDriverWait</code> と併用すると、待機時間が予期せず長くなることがあります</p>



<p class="wp-block-paragraph">これは<strong>両方の待機が重なってしまう</strong>からです</p>



<p class="wp-block-paragraph">例えば暗黙的な待機を10秒、明示的な待機を15秒に設定していると、タイムアウトが20秒後に起きる、といった予測しづらい挙動になることがあります</p>



<p class="wp-block-paragraph">Seleniumの公式ドキュメントでも、<strong><span class="swl-marker mark_yellow" style="color:#e8313b">暗黙的な待機と明示的な待機は混在させない</span></strong>ようにと、はっきり警告されています</p>



<p class="wp-block-paragraph">個人的には WebDriverWait に統一する派です、条件ごとに細かく待てて、挙動も読みやすいので</p>



<p class="wp-block-paragraph">こうした自動化スクリプトを実際に動かすときは、ログインや個人情報の扱いなど安全面の配慮も大切です、不安な方は<a href="https://javeo.jp/claude-code-security-beginner/" target="_blank" rel="noopener noreferrer">自動化を始める前に知っておきたい安全性の基本</a>もあわせて読んでみてくださいね</p>



<h2 class="wp-block-heading">あとがき</h2>



<p class="wp-block-paragraph">expected_conditions は、調べてみると知らないだけで多くの関数がありました</p>



<p class="wp-block-paragraph"><a href="#presence_of_element_located">presence_of_element_located</a> や <a href="#visibility_of_element_located">visibility_of_element_located</a> は有名ですが、<a href="#text_to_be_present_in_element">text_to_be_present_in_element</a> や <a href="#element_to_be_clickable">element_to_be_clickable</a> も有用そうで、今後活用してみたいと思います</p>



<p class="wp-block-paragraph">引数は Tuple 型の locator と WebElement 型の element、どちらでも対応できるパターンがありますが、どうせなら全部どちらにも対応できるパターンにしてほしいところです</p>



<p class="wp-block-paragraph">ポイントをまとめると、こんな感じです</p>



<ul class="wp-block-list">
<li>本番の待機は time.sleep ではなく WebDriverWait を使う</li>



<li>WebDriverWait は「条件が満たされるまで待つ」賢い待機</li>



<li>条件は expected_conditions で指定する</li>



<li>よく使うのは presence / visibility / clickable / invisibility あたり</li>



<li>足りない条件は lambda で自作できる</li>



<li>暗黙的な待機との併用は避ける</li>
</ul>



<p class="wp-block-paragraph">最初は <a href="#presence_of_element_located">presence_of_element_located</a> と <a href="#element_to_be_clickable">element_to_be_clickable</a> の2つだけ覚えておけば、だいたい何とかなります</p>



<p class="wp-block-paragraph">実際にPythonでスクレイピングを動かしてみたい方は、<a href="https://javeo.jp/python-scraping-netkeiba-1/" target="_blank" rel="noopener noreferrer">Pythonでnetkeibaをスクレイピングしてみた実例</a>もどうぞ、待機処理が実戦でどう効いてくるかイメージしやすいと思います</p>



<p class="wp-block-paragraph">あなたのSeleniumの自動化が、もっと安定して動くようになればうれしいです</p>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/python_wait/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
