【2026年7月最新】JavaScriptの文字列分割・切り出し完全ガイド|substr・substring・sliceの違いとバグを防ぐ書き方

【2026年7月最新】JavaScriptの文字列分割・切り出し完全ガイド|substr・substring・sliceの違いとバグを防ぐ書き方

「JavaScriptで文字列の一部を切り出したいけど、substrとsubstringとsliceって結局何が違うの?」——コードを書いていて一度はこの疑問にぶつかった方は多いはずです。

この3つのメソッドは、どれも「文字列の一部を取り出す」という似たような見た目の機能を持っています。しかし、マイナス値を渡したときの挙動開始位置が終了位置より後ろだったときの動きが、メソッドごとに大きく異なります。この違いを知らずにコードを書くと、「想定外の文字列が返ってくる」「特定のデータだけ処理が崩れる」といったバグを生みやすいのが実情です。

この記事では、substr・substring・sliceそれぞれの正確な挙動を実例コード付きで整理した上で、charAt・splitとの使い分け、実務で頻発するバグパターン、そして非エンジニアの方でもClaude Codeを使えばこうした文字列処理のコードを自分で書かずに生成・修正できるという実践的な活用法まで、順を追って解説します。

代表菅澤 代表菅澤
文字列の切り出しは地味に見えて、実務では住所の分割・電話番号のフォーマット変換・CSVデータの整形など、あらゆる場面で使う基本操作です。エンジニアでなくても「どのメソッドが何をするか」の勘所さえ押さえれば、AIに指示を出すときの精度が一気に上がります。
AI鬼管理山崎 AI鬼管理山崎
今日は各メソッドの違いを「暗記」ではなく「なぜそうなるか」の理屈で理解できるように整理します。最後まで読めば、バグの原因になりやすいポイントを先回りして避けられるようになるはずです。

この記事を最後まで読むと、次の8つが明確になります。

✔️substr・substring・sliceそれぞれの正確な構文と挙動の違い
✔️マイナス値を渡したときに3メソッドがそれぞれどう動くか
✔️substringの「自動反転」という特有の罠と回避方法
✔️charAtで1文字ずつ処理する場面での使いどころ
✔️splitで文字列を配列に分割する実務パターン(正規表現対応含む)
✔️実務で頻発するバグパターンとその防ぎ方
✔️弊社GENAIの実運用データに基づくコード生成の効率化事例
✔️Claude Codeに文字列処理コードを生成・修正させる具体的な指示の出し方
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理
📌 この記事の結論
【2026年7月最新】JavaScriptの文字列分割・切り出し完全ガイド|substr・substring・sliceの違いとバグを防ぐ書き方
JavaScriptのsubstr・substring・sliceの違いを徹底解説。マイナス値の挙動・substringの自動反転の罠・charAt/splitとの使い分け、実務でのバグ防止パターンまで、非エンジニアにも分かりやすいコード例で解説します。

01 結論:まず何を使えばいいかの早見表 迷ったら基本はsliceでOK、その理由を先に示す

細かい違いに入る前に、結論から示します。新しくコードを書くなら基本的にsliceを使うのが最も安全です。理由は後述しますが、substrは非推奨(deprecated)扱いであり、substringはマイナス値や開始・終了位置の逆転時の挙動が直感に反しやすいためです。

メソッド構文マイナス値開始>終了のとき現在の位置づけ
substrstr.substr(開始, 文字数)末尾から数える(該当なし・第2引数は文字数)非推奨(新規利用は非推奨)
substringstr.substring(開始, 終了)0に変換される自動的に入れ替わる現役だが挙動に注意
slicestr.slice(開始, 終了)末尾から数える空文字を返す推奨(最も直感的で安全)

📚 用語解説

メソッド(method):ある値(ここでは文字列)に対して「何らかの処理をしてください」と命令する機能のこと。文字列.メソッド名(引数)という形で呼び出します。Excelでいう関数(SUM関数など)に近いイメージで、対象データの後ろに「.」でつないで呼び出すのがJavaScriptの書き方の特徴です。

📚 用語解説

引数(ひきすう / パラメータ):メソッドを呼び出すときに渡す「条件」や「材料」のこと。substr(開始位置, 文字数)であれば「開始位置」と「文字数」が引数にあたります。引数を変えることで同じメソッドでも異なる結果を得られます。

💡 迷ったらslice一択でOK

本記事の3メソッドの中で唯一「非推奨」の扱いを受けていないのはsliceとsubstringですが、挙動が直感的で予測しやすいのはsliceです。「とりあえず文字列の一部を切り出したい」場面では、まずsliceを使う判断で問題ありません。substringはあとから読む人が混乱しやすいため、使うとしても挙動をコメントに明記することをおすすめします。

AI鬼管理山崎 AI鬼管理山崎
「非推奨」という言葉が出てきましたが、これはすぐに使えなくなるという意味ではありません。ブラウザは今後も動作をサポートし続けますが、仕様書から外れているため新規のコードでは避けるのが業界標準の考え方です。

02 substrメソッドの使い方と非推奨の理由 開始位置と文字数を指定するシンプルな構文

substrメソッドは、「開始位置」と「取り出す文字数」の2つの引数を指定して文字列を切り出すメソッドです。構文は以下の通りです。

// substrメソッドの基本構文
// str.substr(開始位置, 文字数)

const str = "JavaScriptプログラミング";

// 0番目から4文字取り出す
console.log(str.substr(0, 4));   // "Java"

// 4番目から6文字取り出す
console.log(str.substr(4, 6));   // "Script"

// 文字数を省略すると末尾まで取り出す
console.log(str.substr(4));      // "Scriptプログラミング"

// マイナス値を開始位置に指定すると「末尾から数える」
console.log(str.substr(-7, 7));  // "プログラミング"

特徴的なのは、開始位置にマイナス値を指定すると「文字列の末尾から数えた位置」として扱われる点です。substr(-7, 7)であれば「末尾から7文字目の位置」から7文字取り出す、という動きになります。

⚠️ substrは非推奨(deprecated)メソッドです

MDN Web Docsなど公式のドキュメントでは、substrメソッドは「レガシー機能」として非推奨扱いになっています。廃止される予定はまだ明言されていませんが、ECMAScript仕様の「Annex B(付録B)」という、ブラウザの互換性維持のためだけに残されている扱いの機能です。新しくコードを書く場合は、後述するsliceの利用が推奨されています。

とはいえ、既存のコードやチュートリアル、社内の古いスクリプトの中にはsubstrがまだ多く残っています。読めるようになっておくことは重要ですが、これから新しく書くコードではsliceかsubstringに置き換えるのが実務上のセオリーです。

代表菅澤 代表菅澤
弊社でも数年前のコードにsubstrが混在していることがあります。Claude Codeに「このファイル内のsubstrをsliceに置き換えて、挙動が変わらないことを確認して」と指示するだけで、安全な置き換え作業を任せられます。

03 substringメソッドと「自動反転」の罠 開始位置と終了位置を指定する、最も誤解されやすいメソッド

substringメソッドは、「開始位置」と「終了位置(その手前まで)」を指定して文字列を切り出します。

// substringメソッドの基本構文
// str.substring(開始位置, 終了位置)

const str = "JavaScriptプログラミング";

// 0番目から4番目の手前まで(インデックス0,1,2,3)
console.log(str.substring(0, 4));   // "Java"

// 終了位置を省略すると末尾まで
console.log(str.substring(4));      // "Scriptプログラミング"

// 【注意】開始位置に終了位置より大きい値を渡すと、自動で入れ替わる
console.log(str.substring(10, 4));  // "Script" ← (4, 10)として扱われる

// 【注意】マイナス値は自動的に0に変換される
console.log(str.substring(-5, 4));  // "Java" ← (0, 4)として扱われる

📚 用語解説

インデックス(添字):文字列や配列の中で、それぞれの文字・要素に振られた「番号」のこと。JavaScriptでは0番目から数え始めるのが決まりです。"JavaScript"という文字列であれば、J=0番目、a=1番目、v=2番目…という並びになります。人間の感覚である「1文字目、2文字目」と1つズレる点が初学者がつまずきやすいポイントです。

substringで最も注意すべき点が、「自動反転」と呼ばれる挙動です。substring(10, 4)のように、開始位置が終了位置より大きい値を渡すと、JavaScriptはエラーを出さずに黙って引数を入れ替えてsubstring(4, 10)として実行します。

⚠️ substringの自動反転はエラーにならないため気づきにくい

開始位置と終了位置を計算で動的に求めるようなコードで、計算結果が想定と逆転してしまった場合、substringはエラーを出さずに「それらしい結果」を返してしまいます。これが原因で「なぜか意図しない文字列が返ってくる」というバグが発生し、原因調査に時間がかかるケースが実務では少なくありません。

また、マイナス値を渡した場合も、substr・sliceのように「末尾から数える」動きにはならず、すべて0として扱われます。この点もsubstrやsliceとの大きな違いであり、3つを混同してコードを書くとバグの温床になります。

AI鬼管理山崎 AI鬼管理山崎
substringの自動反転は「親切機能」のように見えますが、実務では「エラーで気づける」方が安全なことが多いです。個人的には、動的に開始・終了位置を計算するコードではsubstringを避け、sliceを使うことをおすすめしています。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

04 sliceメソッドの使い方と実務での使い分け 配列のsliceと共通の考え方で扱える、最も推奨されるメソッド

sliceメソッドも「開始位置」と「終了位置(その手前まで)」を指定する点はsubstringと同じですが、マイナス値の扱いがsubstrと同じ「末尾から数える」方式である点が異なります。

// sliceメソッドの基本構文
// str.slice(開始位置, 終了位置)

const str = "JavaScriptプログラミング";

// 0番目から4番目の手前まで
console.log(str.slice(0, 4));    // "Java"

// マイナス値は「末尾から数えた位置」として扱われる
console.log(str.slice(-7));      // "プログラミング"
console.log(str.slice(-7, -3));  // "プログラ"

// 開始位置が終了位置より大きい場合は、自動反転せず空文字を返す
console.log(str.slice(10, 4));   // "" (空文字)

この「開始>終了のときに空文字を返す」という挙動が、substringの自動反転よりも直感的で予測しやすいとされる理由です。「意図しない範囲を計算してしまった場合に、想定外の文字列ではなく空文字が返る」ため、バグに気づきやすいという実務上のメリットがあります。

💡 末尾からN文字だけ取り出したいときはslice(-N)が便利

「ファイル名の拡張子を除いた末尾3文字」「電話番号の下4桁」など、末尾からの相対位置で切り出したい場面では、slice(-N)が最も簡潔に書けます。substrでも同様の書き方はできますが、substrは非推奨のためsliceを使う習慣をつけておくと安心です。

配列にも同名のArray.prototype.slice()メソッドがあり、こちらも同じ考え方(マイナス値は末尾から、開始>終了は空配列)で動作します。文字列と配列で挙動の一貫性があるという点も、sliceが推奨される理由の一つです。

代表菅澤 代表菅澤
sliceは文字列にも配列にも使えて挙動が一貫しているので、「とりあえずsliceを使っておけば大きく外さない」という感覚で覚えておくと実務で困りません。

05 3メソッドの挙動差を1つの入力で徹底比較 同じ引数を渡したときに何が違うのかを一覧で確認する

ここまで個別に見てきた挙動の違いを、同じ文字列・同じ引数で3メソッドすべてに渡した場合の結果として一覧化します。バグの原因になりやすいマイナス値と「開始>終了」のケースを中心に比較しています。

const str = "JavaScript";
//            0123456789  ← インデックス

// ケース1: 通常の範囲指定 str.〇〇(2, 6)
str.substr(2, 6);      // "vaScri"(2番目から6文字)
str.substring(2, 6);   // "vaSc"(2番目〜6番目手前)
str.slice(2, 6);       // "vaSc"(2番目〜6番目手前)

// ケース2: マイナス値 str.〇〇(-4)
str.substr(-4);        // "ript"(末尾から4文字)
str.substring(-4);     // "JavaScript"(0として扱われ全体になる)
str.slice(-4);         // "ript"(末尾から4文字)

// ケース3: 開始 > 終了 str.〇〇(6, 2)
str.substr(6, 2);      // "ri"(第2引数は「文字数」なので6番目から2文字)
str.substring(6, 2);   // "vaSc"(自動反転して(2,6)扱い)
str.slice(6, 2);       // ""(空文字。反転しない)
入力パターンsubstrsubstringslice
通常範囲 (2, 6)"vaScri"(文字数指定)"vaSc""vaSc"
マイナス値 (-4)末尾から4文字0として扱う(結果が変わる)末尾から4文字
開始>終了 (6, 2)第2引数は文字数のため別意味自動反転する空文字を返す
現在の推奨度非推奨注意して使用推奨
⚠️ 第2引数の意味がsubstrだけ異なる点に要注意

substrの第2引数は「終了位置」ではなく「文字数」です。substring・sliceの第2引数(終了位置)と混同してコードを書き換えると、切り出される文字数がずれるバグにつながります。3つを混在させたコードは特にレビュー時に見落としやすいポイントです。

AI鬼管理山崎 AI鬼管理山崎
この比較表を見ると分かる通り、同じような見た目の3つのメソッドでも、マイナス値と引数の逆転という2つの条件だけでここまで結果が変わります。名前が似ているからこそ、実務では「どれを使っているか」をコメントで明示する習慣が重要です。

06 charAtで1文字ずつ処理する方法 「範囲」ではなく「1文字」を扱いたいときの選択肢

substr・substring・sliceが「範囲」を切り出すメソッドであるのに対し、charAtは指定したインデックスの1文字だけを取得するメソッドです。

// charAtメソッドの基本構文
// str.charAt(インデックス)

const str = "JavaScript";

console.log(str.charAt(0));   // "J"
console.log(str.charAt(4));   // "S"

// ブラケット記法でも同様に1文字取得できる(現在はこちらもよく使われる)
console.log(str[0]);          // "J"
console.log(str[4]);          // "S"

// 範囲外のインデックスを指定した場合の違い
console.log(str.charAt(100)); // ""(空文字が返る)
console.log(str[100]);        // undefined(値が存在しないことを示す特殊な値)

// 繰り返し処理と組み合わせて1文字ずつ処理する
for (let i = 0; i < str.length; i++) {
  console.log(`${i}番目: ${str.charAt(i)}`);
}

📚 用語解説

undefined(アンディファインド):JavaScriptで「値が定義されていない」ことを示す特殊な値。エラーではありませんが、この値をそのまま文字列結合や計算に使うと"undefined"という文字列が混入したり、意図しない結果になったりします。charAtは範囲外アクセス時に空文字を返しますが、ブラケット記法[]はundefinedを返す点が実務上の分かれ目です。

現在ではブラケット記法(str[インデックス])で1文字を取得することも一般的ですが、範囲外アクセス時の挙動が異なる点には注意が必要です。charAtは空文字("")を返すのに対し、ブラケット記法はundefinedを返します。この違いを意識せずに条件分岐を書くと、想定外の分岐に入ってしまうことがあります。

💡 サロゲートペア(絵文字など)を扱うときは要注意

絵文字や一部の特殊な漢字は「サロゲートペア」と呼ばれる2つの文字コードの組み合わせで表現されており、charAtや通常のインデックスアクセスでは1文字として正しく扱えないことがあります。絵文字を含む文字列を扱う場合は、後述するArray.from(str)やスプレッド構文[...str]を使う方法が安全です。

📚 用語解説

サロゲートペア:絵文字や一部の特殊文字を表現するために、JavaScript内部で2つの文字コード(16ビット単位)を組み合わせて1文字を表す仕組み。charAtやstr[i]でアクセスすると、この2つの文字コードのうち片方だけを取得してしまい、文字化けのような表示になることがあります。SNS投稿など絵文字を含むテキストを処理する際に見落とされがちな注意点です。

Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

07 splitで配列に分割する方法 区切り文字や正規表現で文字列を配列にバラす

ここまでのメソッドは「文字列の一部を文字列として取り出す」ものでしたが、splitは区切り文字を基準に文字列全体を配列に分割するという異なる役割を持ちます。

// splitメソッドの基本構文
// str.split(区切り文字, 制限数)

const csv = "菅澤,山崎,田中,佐藤";

// カンマで分割して配列にする
const names = csv.split(",");
console.log(names);       // ["菅澤", "山崎", "田中", "佐藤"]
console.log(names.length); // 4

// 引数を省略すると分割せず配列1件にまとめる
console.log(csv.split());  // ["菅澤,山崎,田中,佐藤"]

// 空文字を渡すと1文字ずつ配列にする
console.log("Hello".split(""));  // ["H", "e", "l", "l", "o"]

// 第2引数で分割数を制限
console.log(csv.split(",", 2));  // ["菅澤", "山崎"]

// 正規表現で複数の区切り文字に対応する
const mixed = "東京 大阪,名古屋 福岡";  // 半角スペース・カンマ・全角スペースが混在
console.log(mixed.split(/[,\s ]+/));   // ["東京", "大阪", "名古屋", "福岡"]

📚 用語解説

正規表現(regular expression):文字列のパターンを一定のルールで表現する記法。「/[,\s ]+/」のように書くことで、「カンマ・半角スペース・全角スペースのいずれかが1回以上連続する箇所」をまとめて区切り文字として扱えます。1つの区切り文字しか指定できないsplitの弱点を、正規表現を使うことで解消できます。

splitはCSV形式のテキストを配列に変換したり、住所を都道府県・市区町村で分割したりと、実務で頻繁に使うメソッドです。第2引数で分割数を制限できる点や、正規表現を使えば複数種類の区切り文字に同時対応できる点も覚えておくと応用が効きます。

元の文字列
"菅澤,山崎,田中"
splitで区切る
.split(",")
配列になる
["菅澤","山崎","田中"]
forEach等で処理
1件ずつ加工・出力
✔️区切り文字を指定しないと配列1件(分割されない)になる
✔️空文字("")を区切り文字にすると1文字ずつの配列になる
✔️第2引数で最大の分割数を制限できる(超過分は切り捨てられる)
✔️複数の区切り文字に対応したい場合は正規表現を使う
✔️分割後に空要素(連続する区切り文字による"")が混ざることがあるため、filter(Boolean)等で除去するのが実務上の定石
代表菅澤 代表菅澤
splitとcharAt、substr系のメソッドは役割が違うので、「範囲で切り出したいのか」「区切り文字でバラしたいのか」を最初に整理してから選ぶのがコツです。混同すると余計なコードを書くことになります。

08 【独自】実務でよくあるバグパターンと防ぎ方 文字列切り出し処理でありがちな3つの落とし穴

ここからは、弊社が実際にコードレビューや業務システムの改修で目にしてきた、文字列切り出し処理でありがちなバグパターンを3つ紹介します。台本や教科書的な解説には出てこない、実務ならではの落とし穴です。

8-1. 全角・半角混在の文字数カウントのズレ

日本語の業務システムでは、住所や氏名の入力欄に全角・半角が混在することが珍しくありません。substr・substring・sliceはすべて「文字数」ベースでカウントしますが、見た目の横幅(全角2文字分、半角1文字分)とは一致しないため、「決まった文字数で切り詰めたら不自然な位置で文字列が途切れる」という不具合が起きがちです。

// 見た目の幅と文字数がズレる例
const name = "ヤマザキ Taro";  // 半角カナ+半角英字

// 単純に10文字で切ると、見た目の幅は文字数と一致しない
console.log(name.slice(0, 10));  // 見た目の横幅は想定よりも狭い

// 対策: 見た目の幅で揃えたい場合は、文字ごとに全角/半角判定して
// 幅を積算しながら切り出す関数を別途用意する必要がある
function sliceByWidth(str, maxWidth) {
  let width = 0;
  let result = "";
  for (const ch of str) {
    const w = /[\uFF61-\uFF9F\x20-\x7E]/.test(ch) ? 1 : 2; // 半角なら1、それ以外は2とみなす簡易判定
    if (width + w > maxWidth) break;
    width += w;
    result += ch;
  }
  return result;
}
⚠️ 文字数ベースの切り詰めは「見た目」を保証しない

「20文字で切り詰める」という要件は、全角・半角が混在する日本語データでは見た目の幅を保証しません。帳票やCSVエクスポートなど桁数が厳密に決まっている業務では、見た目の幅を計算するロジックを別途用意するか、切り詰め前にバリデーションで警告する設計が安全です。

8-2. 絵文字・特殊文字によるインデックスのズレ

前述のサロゲートペアの問題は、SNS連携機能やチャット機能を持つ業務システムで実際に発生しやすいバグです。ユーザーが入力した文字列に絵文字が含まれていると、charAtや単純なインデックスアクセスで文字が壊れて表示されることがあります。

// 絵文字を含む文字列で起きる問題
const text = "こんにちは😀元気です";

// 通常のslice/substringは絵文字を正しく1文字として扱えないことがある
console.log(text.length);  // 見た目の文字数より多くカウントされる(絵文字はコード単位で2つ分)

// 対策1: スプレッド構文で1文字ずつ正しく分解する
const chars = [...text];
console.log(chars.length);  // 見た目通りの文字数になる

// 対策2: Array.fromでも同様に正しく分解できる
const chars2 = Array.from(text);
console.log(chars2.slice(0, 6).join(""));  // "こんにちは😀"(絵文字が壊れない)
💡 絵文字を扱うなら[...str]かArray.fromを使う

ユーザー投稿やチャットなど絵文字が入力される可能性のあるテキストを切り出す場合は、通常のslice/substringではなく、スプレッド構文[...str]やArray.from(str)で配列化してからsliceする方法が安全です。多少コードは長くなりますが、文字化けを未然に防げます。

8-3. マイナス値の意図しない混入

計算式で開始位置や終了位置を動的に求めている場合、計算結果が意図せずマイナスになることがあります。前述の通り、substr・sliceは「末尾から数える」動きになり、substringは「0として扱われる」動きになるため、どのメソッドを使っているかによって全く違う結果になってしまいます。

// マイナス値混入の典型例
function getSuffix(str, keyword) {
  const idx = str.indexOf(keyword); // 見つからない場合は -1 が返る
  return str.slice(idx + 1);        // idxが-1のとき: slice(0) となり全体が返ってしまう
}

console.log(getSuffix("data.csv", "."));   // "csv"(正常)
console.log(getSuffix("data_csv", "."));   // "data_csv"("."が無いのに全体が返る=バグ)
✔️indexOf・search等、見つからない場合に-1を返すメソッドの戻り値をそのまま計算に使わない
✔️切り出し処理の前に、開始位置・終了位置が想定範囲(0以上、文字列長以内)かをチェックする
✔️全角・半角混在データは「文字数」と「見た目の幅」が違うことを前提に設計する
✔️絵文字を扱う可能性があるテキストは[...str]かArray.fromで配列化してから処理する
AI鬼管理山崎 AI鬼管理山崎
この3つのバグパターンに共通するのは、「普通のテストデータでは気づかない」という点です。日本語・絵文字・境界値(0や空文字)を含むテストケースを意図的に用意しておくことが、実務での事故を防ぐ一番の近道です。

09 【独自】GENAI社内でのコード生成とClaude Code活用実例 コードが書けない社員でも文字列処理を任せられる体制

ここでは、弊社(株式会社GENAI)が実際にClaude Codeをどのように業務のコード生成・スクリプト整備に活用しているかを、実データを交えて紹介します。

項目内容
契約プランClaude Max 20x(月$200 / 約30,000円)
利用開始2025年後半〜
開発領域での用途WordPress/LP制作、業務スクリプトの書き捨て、既存コードのリファクタリング
担当者エンジニア専任者を置かず、非エンジニアの社員が指示文だけで運用

弊社では、開発(WordPress・LP制作・スクリプトの書き捨て)を含む社内のあらゆる業務にClaude Codeを絡めています。文字列処理のような細かいロジックも例外ではなく、「都度数時間の作業がその場で数分に短縮される」という肌感で運用しています。

⚠️ 数値の注意書き

本記事の削減時間・効果は弊社の肌感ベースの数値であり、業種・業態・担当者のスキルによって変動します。「Max 20xプランを全社で回すとどの程度まで使い倒せるか」の参考情報としてご覧ください。

特に文字列処理のような「ルールは単純だが、境界値やマイナス値の考慮が漏れやすい」処理は、非エンジニアが自力で正確に書くのが難しい領域です。従来であれば、こうした細かい処理のたびにエンジニアへ依頼するか、ネット上のサンプルコードを不安なままコピーして使うしかありませんでした。

Claude Codeを使えば、「この文字列からこの部分を取り出したい」という日本語の要件を伝えるだけで、境界値・マイナス値・絵文字混入といった落とし穴まで考慮したコードが生成されます。社内でエンジニアが手薄な時間帯でも、業務が止まらない体制を作れている点が、実務上の大きなメリットです。

代表菅澤 代表菅澤
以前は「この文字列処理、ちょっとバグってるかも」という相談が週に何度か来ていましたが、Claude Codeに要件を伝えて生成・検証まで任せる運用にしてから、こうした細かい相談自体が激減しました。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

10 Claude Codeに文字列処理コードを書かせる方法 非エンジニアでも「要件を日本語で伝える」だけで正確なコードが手に入る

ここまで見てきた通り、substr・substring・sliceの違いや、charAt・splitとの使い分け、絵文字やマイナス値の落とし穴まですべてを正確に覚えて書くのは、非エンジニアの方にとって現実的ではありません。しかし、Claude Codeを使えば、この記事で紹介した注意点を踏まえたコードを自動で生成させることができます。

ユースケースClaude Codeへの指示例
特定の位置から文字を取り出す「この文字列の5文字目から10文字を取り出す処理を書いて。マイナス値が来た場合も安全に処理して。」
末尾N文字だけ取得「電話番号の下4桁だけを取り出す関数をJavaScriptで書いて。桁数が足りない場合はエラーではなく空文字を返して。」
CSV形式のテキストを分割「カンマ区切りのテキストを配列に分割する処理を書いて。空要素は除外して、前後の空白もトリムして。」
絵文字を含む文字列の安全な切り出し「絵文字が含まれる可能性があるテキストを先頭から3文字だけ安全に切り出す関数を書いて。」
// Claude Codeが生成するコード例のパターン
// (指示: 「電話番号の下4桁を取り出す。桁数が足りない場合は空文字を返す」)

function getLastFourDigits(phone) {
  const digitsOnly = phone.replace(/[^0-9]/g, ""); // ハイフン等を除去
  if (digitsOnly.length < 4) {
    return ""; // 桁数不足なら空文字(エラーを投げない安全設計)
  }
  return digitsOnly.slice(-4); // 末尾4桁をsliceで取得
}

console.log(getLastFourDigits("090-1234-5678")); // "5678"
console.log(getLastFourDigits("12"));             // ""(桁数不足)

この例のように、Claude Codeへの指示で重要なのは「入力データの形式」「異常値(桁数不足・マイナス値・空文字)が来たときの扱い」の2点を明確に伝えることです。この2点さえ伝われば、この記事で解説したような境界値の考慮が入った、実務レベルのコードが返ってきます。

処理したい文字列を
用意する

入力例をいくつか
用意しておく
Claude Codeに
要件を伝える

入力形式・異常値の
扱いを日本語で指示
生成コードを
実行して確認

複数の入力パターンで
動作を確認する
既存コードに
組み込む

WordPress/GAS等
実運用へ反映
💡 生成されたコードは必ず複数パターンでテストする

Claude Codeが生成するコードは高い精度ですが、業務データに特有の境界値(全角混在、桁数不足、空文字、絵文字)は事前に伝えないと考慮漏れが起きることもあります。生成後は「通常データ」「空文字」「異常に短いデータ」「絵文字入りデータ」の4パターン程度で動作確認する習慣をつけると安心です。

AI鬼管理山崎 AI鬼管理山崎
コードが書けるかどうかより、「何を入力したら、何が返ってきてほしいか」を具体的に言語化できるかどうかの方が、AIを使いこなす上ではよほど重要なスキルだと感じています。

11 まとめ メソッドの違いを理解した上で、書く作業はAIに任せる選択肢もある

この記事では、JavaScriptの文字列切り出しに使われるsubstr・substring・sliceの違いから、charAt・splitとの使い分け、実務で頻発するバグパターン、そしてClaude Codeを使った効率化までを整理しました。最後にポイントを振り返ります。

✔️substrは非推奨のため、新規コードでは基本的に使わない
✔️substringは開始>終了で自動反転する、マイナス値は0として扱われる
✔️sliceはマイナス値で末尾から数える、開始>終了では空文字を返す(最も推奨)
✔️charAtは1文字だけ取得、ブラケット記法との戻り値(空文字 vs undefined)の違いに注意
✔️splitは区切り文字(正規表現も可)で配列に分割する、範囲切り出しとは役割が異なる
✔️全角・半角混在、絵文字(サロゲートペア)、マイナス値の混入が実務での3大バグ要因
✔️Claude Codeに入力形式と異常値の扱いを伝えるだけで、境界値まで考慮したコードが生成できる

文字列切り出しのメソッドは一見地味ですが、正確に理解していないと業務システムの細かいバグにつながりやすい領域です。「違いを理解した上で、実際にコードを書く作業はAIに任せる」という組み合わせが、非エンジニアの方にとって最も現実的な向き合い方だと弊社では考えています。

代表菅澤 代表菅澤
弊社では「AI鬼管理」というサービスで、Claude Codeを使った業務のコード生成・自動化の設計から伴走まで支援しています。「エンジニアがいないけど、細かい処理を自動化したい」という方は、無料相談で具体的にお答えしますので、お気軽にどうぞ。

文字列処理を含む業務のコード化・自動化を、AI鬼管理が一緒に設計します

substr・substring・sliceのような細かい仕様の違いを覚えなくても、Claude Codeに要件を伝えるだけで実務レベルのコードが手に入ります。
弊社の実運用ノウハウをベースに、個別に導入設計のご相談を承ります。

AI鬼管理山崎 AI鬼管理山崎
「エンジニアがいない」「細かいスクリプトのために外注するほどでもない」という業務ほど、Claude Codeとの相性が良い領域です。まずは無料相談で、あなたの業務に当てはめられる範囲を一緒に見つけましょう。

NEXT STEP

この記事の内容を、あなたのビジネスで
実践してみませんか?

AI活用を自社で回せるようになりたい方へ

AI鬼管理

Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。

よくある質問

Q. substrとsubstringとsliceの一番の違いは何ですか?

A. 最大の違いはマイナス値を渡したときの挙動です。substrとsliceはマイナス値を「末尾から数えた位置」として扱いますが、substringはマイナス値を自動的に0に変換します。さらにsubstringは開始位置が終了位置より大きい場合に引数を自動で入れ替える「自動反転」という特有の動きをしますが、sliceは反転せず空文字を返します。この2点を押さえておけば、実務で混同するリスクを大きく減らせます。

Q. 結局どのメソッドを使えばいいですか?

A. 新しくコードを書く場合は基本的にsliceを使うのがおすすめです。substrは非推奨(deprecated)扱いのメソッドであり、新規利用は避けるべきとされています。substringは現役のメソッドですが、自動反転という直感に反する挙動があるため、動的に開始・終了位置を計算するコードでは特に注意が必要です。sliceはマイナス値・開始逆転のどちらも予測しやすい挙動のため、迷ったらsliceを選ぶという判断で問題ありません。

Q. なぜsubstrは非推奨なのですか?

A. substrはECMAScript(JavaScriptの仕様)の正式な仕様書ではなく、「Annex B(付録B)」というブラウザの後方互換性を保つためだけに定義されている項目に含まれているためです。今すぐ動かなくなるわけではありませんが、将来的な仕様変更やブラウザ間での挙動差のリスクを避けるため、新規コードではsliceやsubstringへの置き換えが推奨されています。

Q. charAtとブラケット記法(str[i])はどちらを使うべきですか?

A. どちらで1文字を取得しても基本的な結果は同じですが、範囲外のインデックスを指定したときの戻り値が異なります。charAtは範囲外の場合に空文字("")を返すのに対し、ブラケット記法はundefinedを返します。空文字とundefinedでは条件分岐やテンプレート文字列に組み込んだときの挙動が変わるため、範囲外アクセスの可能性がある処理ではこの違いを意識して選ぶ必要があります。

Q. 絵文字を含む文字列を正しく切り出すにはどうすればいいですか?

A. 絵文字の多くは「サロゲートペア」と呼ばれる2つの文字コードの組み合わせで表現されており、通常のslice・substring・charAtでは1文字として正しく扱えず文字化けのような結果になることがあります。安全に扱うには、スプレッド構文[...文字列]やArray.from(文字列)で配列に変換してから、配列のslice・sliceメソッドで処理する方法が推奨されます。

Q. Claude Codeに文字列処理のコードを書いてもらう場合、何を伝えればいいですか?

A. 最低限「どんな形式のデータを」「どこからどこまで取り出したいか」「想定外の値(桁数不足・マイナス値・空文字・絵文字混入など)が来たときにどう扱ってほしいか」の2〜3点を日本語で具体的に伝えるのが効果的です。この記事で紹介したような境界値の考慮漏れは、この情報が曖昧なときに起きやすいため、入力例をいくつか添えて伝えるとより精度の高いコードが得られます。

Q. splitとslice/substringの使い分けが分かりません。

A. 役割がそもそも異なります。slice・substring・substrは「文字列の中の指定した範囲を文字列として取り出す」ためのメソッドです。一方splitは「区切り文字を基準に文字列全体をバラバラの配列に分割する」ためのメソッドです。「特定の位置の一部分だけが欲しい」ならslice系、「カンマなどの区切りで全体を複数の要素に分けたい」ならsplitを使う、と整理すると迷いません。

AIAI鬼管理

AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。

会社名を入力してください
業種を選択してください
お名前を入力してください
※法人・事業用のメールアドレスでお願いします(Gmail等の個人用フリーメールは受付できません)
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年7月31日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。