Googleスプレッドシートにフリガナを自動で書き込むGASスクリプト
- 作成日 2025.04.22
- Google Apps Script

Yahoo! Japanの形態素解析APIを活用し、スプレッドシート上の氏名などに対応するフリガナ(半角カタカナ)を自動で書き込むGoogle Apps Scriptです。対象の列を指定すれば、対応する列に読み仮名が一括で出力されます。API連携・文字変換・エラーハンドリングの実装も含まれており、実務での利用にも対応できます。
目次
全体構成と処理の流れ
const CLIENT_ID = 'dj0xxxxxxxxxxxxxxxxxxxxxxxxx'; // Client ID
const URL = 'https://jlp.yahooapis.jp/MAService/V2/parse?appid=' + CLIENT_ID;
function writeFuriganaToSheets() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
processSheet(ss.getSheetByName('決済代金'), 7, 'G', 'O');
processSheet(ss.getSheetByName('施設'), 7, 'F', 'P');
}
スプレッドシート対象範囲の処理
function processSheet(sheet, startRow, nameCol, furiganaCol) {
const lastRow = sheet.getLastRow();
const nameRange = sheet.getRange(nameCol + startRow + ':' + nameCol + lastRow);
const names = nameRange.getValues();
const result = [];
for (let i = 0; i < names.length; i++) {
let name = names[i][0];
if (!name || typeof name !== 'string') {
result.push(['']);
continue;
}
name = name.replace(/ /g, ' ');
const res = yahooAnalysis(name);
const json = JSON.parse(res.getContentText());
if (!json.result || !json.result.tokens) {
result.push(['']);
continue;
}
const readings = json.result.tokens.map(token => token[1]).filter(Boolean).join('');
const halfKana = hiraganaToHalfWidthKatakana(readings);
result.push([halfKana]);
}
sheet.getRange(furiganaCol + startRow + ':' + furiganaCol + (startRow + result.length - 1)).setValues(result);
}
Yahoo! JAPANの形態素解析APIを呼び出す関数
function yahooAnalysis(queryText) {
const headers = {
'Content-Type': 'application/json',
};
const payload = {
'id': 'furigana-req',
'jsonrpc': '2.0',
'method': 'jlp.maservice.parse',
'params': {
'q': queryText
}
};
const options = {
'method': 'post',
'headers': headers,
'payload': JSON.stringify(payload),
'muteHttpExceptions': true
};
return UrlFetchApp.fetch(URL, options);
}
ひらがなを半角カタカナに変換する処理
function hiraganaToHalfWidthKatakana(input) {
const katakana = input.replace(/[\u3041-\u3096]/g, ch =>
String.fromCharCode(ch.charCodeAt(0) + 0x60)
);
return toHalfWidthKatakana(katakana);
}
全角カタカナを半角カタカナに変換する処理
function toHalfWidthKatakana(str) {
const kanaMap = {
'ガ': 'ガ', 'ギ': 'ギ', 'グ': 'グ', 'ゲ': 'ゲ', 'ゴ': 'ゴ',
'ザ': 'ザ', 'ジ': 'ジ', 'ズ': 'ズ', 'ゼ': 'ゼ', 'ゾ': 'ゾ',
'ダ': 'ダ', 'ヂ': 'ヂ', 'ヅ': 'ヅ', 'デ': 'デ', 'ド': 'ド',
'バ': 'バ', 'ビ': 'ビ', 'ブ': 'ブ', 'ベ': 'ベ', 'ボ': 'ボ',
'パ': 'パ', 'ピ': 'ピ', 'プ': 'プ', 'ペ': 'ペ', 'ポ': 'ポ',
'ヴ': 'ヴ',
'ア': 'ア', 'イ': 'イ', 'ウ': 'ウ', 'エ': 'エ', 'オ': 'オ',
'カ': 'カ', 'キ': 'キ', 'ク': 'ク', 'ケ': 'ケ', 'コ': 'コ',
'サ': 'サ', 'シ': 'シ', 'ス': 'ス', 'セ': 'セ', 'ソ': 'ソ',
'タ': 'タ', 'チ': 'チ', 'ツ': 'ツ', 'テ': 'テ', 'ト': 'ト',
'ナ': 'ナ', 'ニ': 'ニ', 'ヌ': 'ヌ', 'ネ': 'ネ', 'ノ': 'ノ',
'ハ': 'ハ', 'ヒ': 'ヒ', 'フ': 'フ', 'ヘ': 'ヘ', 'ホ': 'ホ',
'マ': 'マ', 'ミ': 'ミ', 'ム': 'ム', 'メ': 'メ', 'モ': 'モ',
'ヤ': 'ヤ', 'ユ': 'ユ', 'ヨ': 'ヨ',
'ラ': 'ラ', 'リ': 'リ', 'ル': 'ル', 'レ': 'レ', 'ロ': 'ロ',
'ワ': 'ワ', 'ヲ': 'ヲ', 'ン': 'ン',
'ァ': 'ァ', 'ィ': 'ィ', 'ゥ': 'ゥ', 'ェ': 'ェ', 'ォ': 'ォ',
'ャ': 'ャ', 'ュ': 'ュ', 'ョ': 'ョ', 'ッ': 'ッ',
'ー': 'ー', '。': '。', '、': '、', '・': '・', '「': '「', '」': '」', ' ': ' '
};
return str.split('').map(ch => kanaMap[ch] || ch).join('');
}
フリガナ取得時に発生しうるエラーと条件
// nameが空文字列または非文字列の場合、空白を挿入してスキップ
if (!name || typeof name !== 'string') {
result.push(['']);
continue;
}
// APIのレスポンスが無効(tokensが存在しない)場合も空白でスキップ
if (!json.result || !json.result.tokens) {
result.push(['']);
continue;
}
サンプル入力と出力例
// 例:G列に「山田 太郎」、F列に「東京大学」と入力されている場合
// 出力(O列・P列)→ ザンダ タロウ、トウキョウダイガク(半角カタカナ)
APIキーに関する注意
Yahoo!デベロッパーセンターから取得したアプリケーションID(CLIENT_ID)をコード中に記述しています。個人利用・公開利用の際は、利用規約に従ってAPIキーの取り扱いを行ってください。
-
前の記事
The command syntax is incorrect の解決方法 2025.04.22
-
次の記事
MySQLのエラー『Can’t Drop Database; Database Doesn’t Exist』の解決方法 2025.04.22
コメントを書く