【2026年7月最新】JavaScriptの文字列分割・切り出し完全ガイド|substr・substring・sliceの違いとバグを防ぐ書き方
この記事の内容
「JavaScriptで文字列の一部を切り出したいけど、substrとsubstringとsliceって結局何が違うの?」——コードを書いていて一度はこの疑問にぶつかった方は多いはずです。
この3つのメソッドは、どれも「文字列の一部を取り出す」という似たような見た目の機能を持っています。しかし、マイナス値を渡したときの挙動や開始位置が終了位置より後ろだったときの動きが、メソッドごとに大きく異なります。この違いを知らずにコードを書くと、「想定外の文字列が返ってくる」「特定のデータだけ処理が崩れる」といったバグを生みやすいのが実情です。
この記事では、substr・substring・sliceそれぞれの正確な挙動を実例コード付きで整理した上で、charAt・splitとの使い分け、実務で頻発するバグパターン、そして非エンジニアの方でもClaude Codeを使えばこうした文字列処理のコードを自分で書かずに生成・修正できるという実践的な活用法まで、順を追って解説します。
この記事を最後まで読むと、次の8つが明確になります。
01 QUICK ANSWER 結論:まず何を使えばいいかの早見表 迷ったら基本はsliceでOK、その理由を先に示す
細かい違いに入る前に、結論から示します。新しくコードを書くなら基本的にsliceを使うのが最も安全です。理由は後述しますが、substrは非推奨(deprecated)扱いであり、substringはマイナス値や開始・終了位置の逆転時の挙動が直感に反しやすいためです。
| メソッド | 構文 | マイナス値 | 開始>終了のとき | 現在の位置づけ |
|---|---|---|---|---|
| substr | str.substr(開始, 文字数) | 末尾から数える | (該当なし・第2引数は文字数) | 非推奨(新規利用は非推奨) |
| substring | str.substring(開始, 終了) | 0に変換される | 自動的に入れ替わる | 現役だが挙動に注意 |
| slice | str.slice(開始, 終了) | 末尾から数える | 空文字を返す | 推奨(最も直感的で安全) |
📚 用語解説
メソッド(method):ある値(ここでは文字列)に対して「何らかの処理をしてください」と命令する機能のこと。文字列.メソッド名(引数)という形で呼び出します。Excelでいう関数(SUM関数など)に近いイメージで、対象データの後ろに「.」でつないで呼び出すのがJavaScriptの書き方の特徴です。
📚 用語解説
引数(ひきすう / パラメータ):メソッドを呼び出すときに渡す「条件」や「材料」のこと。substr(開始位置, 文字数)であれば「開始位置」と「文字数」が引数にあたります。引数を変えることで同じメソッドでも異なる結果を得られます。
本記事の3メソッドの中で唯一「非推奨」の扱いを受けていないのはsliceとsubstringですが、挙動が直感的で予測しやすいのはsliceです。「とりあえず文字列の一部を切り出したい」場面では、まずsliceを使う判断で問題ありません。substringはあとから読む人が混乱しやすいため、使うとしても挙動をコメントに明記することをおすすめします。
02 SUBSTR METHOD 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文字取り出す、という動きになります。
MDN Web Docsなど公式のドキュメントでは、substrメソッドは「レガシー機能」として非推奨扱いになっています。廃止される予定はまだ明言されていませんが、ECMAScript仕様の「Annex B(付録B)」という、ブラウザの互換性維持のためだけに残されている扱いの機能です。新しくコードを書く場合は、後述するsliceの利用が推奨されています。
とはいえ、既存のコードやチュートリアル、社内の古いスクリプトの中にはsubstrがまだ多く残っています。読めるようになっておくことは重要ですが、これから新しく書くコードではsliceかsubstringに置き換えるのが実務上のセオリーです。
03 SUBSTRING METHOD 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はエラーを出さずに「それらしい結果」を返してしまいます。これが原因で「なぜか意図しない文字列が返ってくる」というバグが発生し、原因調査に時間がかかるケースが実務では少なくありません。
また、マイナス値を渡した場合も、substr・sliceのように「末尾から数える」動きにはならず、すべて0として扱われます。この点もsubstrやsliceとの大きな違いであり、3つを混同してコードを書くとバグの温床になります。
04 SLICE METHOD 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の自動反転よりも直感的で予測しやすいとされる理由です。「意図しない範囲を計算してしまった場合に、想定外の文字列ではなく空文字が返る」ため、バグに気づきやすいという実務上のメリットがあります。
「ファイル名の拡張子を除いた末尾3文字」「電話番号の下4桁」など、末尾からの相対位置で切り出したい場面では、slice(-N)が最も簡潔に書けます。substrでも同様の書き方はできますが、substrは非推奨のためsliceを使う習慣をつけておくと安心です。
配列にも同名のArray.prototype.slice()メソッドがあり、こちらも同じ考え方(マイナス値は末尾から、開始>終了は空配列)で動作します。文字列と配列で挙動の一貫性があるという点も、sliceが推奨される理由の一つです。
05 HEAD TO HEAD 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); // ""(空文字。反転しない)
| 入力パターン | substr | substring | slice |
|---|---|---|---|
| 通常範囲 (2, 6) | "vaScri"(文字数指定) | "vaSc" | "vaSc" |
| マイナス値 (-4) | 末尾から4文字 | 0として扱う(結果が変わる) | 末尾から4文字 |
| 開始>終了 (6, 2) | 第2引数は文字数のため別意味 | 自動反転する | 空文字を返す |
| 現在の推奨度 | 非推奨 | 注意して使用 | 推奨 |
substrの第2引数は「終了位置」ではなく「文字数」です。substring・sliceの第2引数(終了位置)と混同してコードを書き換えると、切り出される文字数がずれるバグにつながります。3つを混在させたコードは特にレビュー時に見落としやすいポイントです。
06 CHARAT METHOD 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投稿など絵文字を含むテキストを処理する際に見落とされがちな注意点です。
07 SPLIT METHOD 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(",")
["菅澤","山崎","田中"]
1件ずつ加工・出力
08 BUG PATTERNS 【独自】実務でよくあるバグパターンと防ぎ方 文字列切り出し処理でありがちな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("")); // "こんにちは😀"(絵文字が壊れない)
ユーザー投稿やチャットなど絵文字が入力される可能性のあるテキストを切り出す場合は、通常の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"("."が無いのに全体が返る=バグ)
09 GENAI CASE STUDY 【独自】GENAI社内でのコード生成とClaude Code活用実例 コードが書けない社員でも文字列処理を任せられる体制
ここでは、弊社(株式会社GENAI)が実際にClaude Codeをどのように業務のコード生成・スクリプト整備に活用しているかを、実データを交えて紹介します。
| 項目 | 内容 |
|---|---|
| 契約プラン | Claude Max 20x(月$200 / 約30,000円) |
| 利用開始 | 2025年後半〜 |
| 開発領域での用途 | WordPress/LP制作、業務スクリプトの書き捨て、既存コードのリファクタリング |
| 担当者 | エンジニア専任者を置かず、非エンジニアの社員が指示文だけで運用 |
弊社では、開発(WordPress・LP制作・スクリプトの書き捨て)を含む社内のあらゆる業務にClaude Codeを絡めています。文字列処理のような細かいロジックも例外ではなく、「都度数時間の作業がその場で数分に短縮される」という肌感で運用しています。
本記事の削減時間・効果は弊社の肌感ベースの数値であり、業種・業態・担当者のスキルによって変動します。「Max 20xプランを全社で回すとどの程度まで使い倒せるか」の参考情報としてご覧ください。
特に文字列処理のような「ルールは単純だが、境界値やマイナス値の考慮が漏れやすい」処理は、非エンジニアが自力で正確に書くのが難しい領域です。従来であれば、こうした細かい処理のたびにエンジニアへ依頼するか、ネット上のサンプルコードを不安なままコピーして使うしかありませんでした。
Claude Codeを使えば、「この文字列からこの部分を取り出したい」という日本語の要件を伝えるだけで、境界値・マイナス値・絵文字混入といった落とし穴まで考慮したコードが生成されます。社内でエンジニアが手薄な時間帯でも、業務が止まらない体制を作れている点が、実務上の大きなメリットです。
10 AI ASSIST 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点さえ伝われば、この記事で解説したような境界値の考慮が入った、実務レベルのコードが返ってきます。
用意する
入力例をいくつか
用意しておく
要件を伝える
入力形式・異常値の
扱いを日本語で指示
実行して確認
複数の入力パターンで
動作を確認する
組み込む
WordPress/GAS等
実運用へ反映
Claude Codeが生成するコードは高い精度ですが、業務データに特有の境界値(全角混在、桁数不足、空文字、絵文字)は事前に伝えないと考慮漏れが起きることもあります。生成後は「通常データ」「空文字」「異常に短いデータ」「絵文字入りデータ」の4パターン程度で動作確認する習慣をつけると安心です。
11 CONCLUSION まとめ メソッドの違いを理解した上で、書く作業はAIに任せる選択肢もある
この記事では、JavaScriptの文字列切り出しに使われるsubstr・substring・sliceの違いから、charAt・splitとの使い分け、実務で頻発するバグパターン、そしてClaude Codeを使った効率化までを整理しました。最後にポイントを振り返ります。
文字列切り出しのメソッドは一見地味ですが、正確に理解していないと業務システムの細かいバグにつながりやすい領域です。「違いを理解した上で、実際にコードを書く作業はAIに任せる」という組み合わせが、非エンジニアの方にとって最も現実的な向き合い方だと弊社では考えています。
文字列処理を含む業務のコード化・自動化を、AI鬼管理が一緒に設計します
substr・substring・sliceのような細かい仕様の違いを覚えなくても、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を使う、と整理すると迷いません。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




