Excelであれば「=PHONETIC(セル)」関数が定番ですが、スプレッドシートで同じ関数を使っても漢字がそのまま返ってきてしまい、ふりがなを取得できません。
そこで活躍するのが、Google Apps Script(GAS)から日本語形態素解析サービス「よみたんAPI」を呼び出すカスタム関数「GetPhonetic」です。
この記事では、スプレッドシートでPHONETIC関数が機能しない理由をはじめ、GASカスタム関数の仕組み、シート上の呼び出し数式「=IF(ISERROR(C36),””, GetPhonetic(C36,”k”))」の役割、さらに公式サイト「よみたんv2」の利用規約や利用上の注意点、実務で安全に運用するための改善策まで詳しく解説します。
スプレッドシートでPHONETIC関数が使えない理由
Excelを使ってきた方がGoogleスプレッドシートで最も戸惑いやすいのが、「PHONETIC関数」の挙動の違いです。
ExcelのPHONETIC関数は、ユーザーが日本語入力(IME)でキーボードを叩いて漢字変換したときの「入力時の読み仮名履歴」をセルのメタデータとして内部に記録しています。そのため、関数を適用するだけで入力時のふりがなをそのまま取り出すことができます。
一方、Googleスプレッドシートには「入力時のIME履歴をセルに保持する仕組み」が存在しません。互換性のために「PHONETIC」という関数名自体は用意されているものの、メタデータが存在しないため、指定したセルのテキスト(漢字)がそのまま返ってきてしまいます。
また、Excelであっても「Webサイトからコピー&ペーストした文字列」や「CSVファイルからインポートした名簿データ」にはIMEの入力履歴が存在しないため、PHONETIC関数を使っても漢字のまま表示されてしまうという共通の課題があります。
図解:Excelとスプレッドシートにおけるふりがな取得の根本的な仕組みの違い
この課題をスマートに解決するのが、Web上でテキストを解析して読み仮名を返してくれる外部API(よみたんAPI)をGAS経由で呼び出す手法です。外部の形態素解析エンジンが漢字を解析するため、コピペデータやインポートデータであっても高精度に読み仮名を取得できます。
よみたんAPIの公式サイトと基本情報
今回活用している「よみたん」は、日本語形態素解析エンジン「MeCab(和布蕪)」およびIPA辞書をベースに、難しい漢字や人名、地名、英単語などの読み仮名を検索・取得できるWebサービスおよびWeb APIです。
- 公式サイト:よみたんv2 – よみがな検索システム(公式)
- API仕様書:よみたんAPI v2 使用方法・ドキュメント
- 運営元:HARMONICOM(ハーモニコム)様
- 開発支援:HARMONICOM PIXIV FANBOX
運営者のハーモニコム様によって個人開発・運営されており、検索ログ等で誤変換しやすい漢字や人名などを手作業でユーザー辞書に追加登録(65万語以上追加登録済み)するなど、非常に丁寧なメンテナンスが行われている貴重なサービスです。
よみたんAPIを利用する際の規約と注意点
よみたんAPIは原則無料で利用できる大変ありがたいサービスですが、外部サービスに依存するため、利用規約やマナー、技術的な注意点をしっかりと押さえておく必要があります。
- 「よみたん」と同様のサービスに転用することは禁止されています。
- Webサイトやアプリで利用する場合は、「よみたんAPI」を使用していることを明記する必要があります。
- 規約が遵守されない場合や過度な負荷をかけた場合、アクセス制限が実施されることがあります。
1. サーバー負荷への配慮(個人運営サービスへのマナー)
よみたんAPIは大手クラウド企業のような巨大サーバーではなく、個人開発者様が自前でサーバーを運用・維持されています。
そのため、スプレッドシートで数千行〜数万行のセルに関数を一気に適用して短時間に大量のリクエストを送信すると、サーバーに多大な負荷がかかり、サービス停止やIP制限につながる恐れがあります。
変換は必要な分ずつ行い、取得後は速やかに「値貼り付け」を行ってリクエストを停止させるのが最低限のマナーです。
2. 読み仮名の精度と免責事項
日本語の人名や地名は同じ漢字でも複数の読み方が存在するため(例:「角田」=つのだ/かくた、「東海林」=しょうじ/とうかいりん等)、機械的な形態素解析では100%正しい読みになるとは限りません。
公的文書や顧客名簿などに使用する場合は、必ず目視での確認や修正を行う前提で運用してください。なお、公式の利用規約においても「不具合等が発生しても当方は一切責任を負いません」と明記されています。
3. 送りがなを含めることで精度向上
動詞や形容詞などを解析させる場合、漢字単体ではなく送りがなまで含めて渡すことで、MeCabの品詞判定が正確になり読みの精度が向上します。
GASカスタム関数「GetPhonetic」のコードと仕組み
今回取り上げるGASコードは以下の通りです。
スプレッドシートのセルから直接呼び出せるカスタム関数として実装されています。
/**
* 指定された文字列の読みがなを返却します。
* @param {string} word 日本語文字列
* @param {string} kquery "h" ひらがな / "k" カタカナ
* @return {string} 変換後の文字列
* @customfunction
*/
function GetPhonetic(word, kquery = "h") {
// よみたんAPIに「かな」の読みがなを要求
let url = "https://yomi-tan.jp/api/yomi.php?ic=UTF-8&oc=UTF-8&k=" + kquery + "&n=3&t=" + word;
// よみたんAPIの応答から1個目を取得
let phonetic = UrlFetchApp.fetch(url).getContentText().split(",")[0];
return phonetic;
}
このスクリプトの各要素の仕組みを詳しく見ていきましょう。
カスタム関数を定義するJSDocコメント(@customfunction)
コード冒頭の「/** … */」で囲まれた部分はJSDocと呼ばれるコメントです。
その中にある「@customfunction」という記述があることで、Googleスプレッドシートが「この関数はセルから直接呼び出せるカスタム関数である」と認識します。
セルで「=Get」と入力した際に関数候補が表示され、引数のヘルプが表示されるようになります。
引数の受け取り(word と kquery)
第1引数の「word」には、ふりがなを取得したい対象のセル(漢字文字列)が渡されます。
第2引数の「kquery = “h”」には初期値が設定されています。引数を省略した場合は自動的に「”h”(ひらがな)」となり、「”k”」を渡すと「カタカナ」で返却されます。
よみたんAPIへのリクエストURL生成
コード内では、APIのエンドポイントに対してパラメータを付与してURLを作成しています。
- ic=UTF-8:入力文字コード
- oc=UTF-8:出力文字コード
- k=h または k=k:取得したい読みの種類(h=ひらがな、k=カタカナ)
- n=3:取得候補の件数
- t=変換したい文字列:対象の日本語テキスト
外部通信と第1候補の抽出
「UrlFetchApp.fetch(url)」によってGASからAPIサーバーへGETリクエストを送信し、「getContentText()」でレスポンス(CSV形式の文字列)を受け取ります。
同音異義語などで複数の候補がある場合、カンマ区切り(例: トウキョウ,トウケイ)で返ってくるため、「.split(“,”)[0]」で先頭の第1候補を取り出してセルに返しています。
図解:GetPhonetic関数の処理ステップと実務で押さえるべきポイント
現行の「よみたんAPI v2」に対応した最新のGASコード
公式サイト「よみたんAPI v2」では、新しいエンドポイントとJSON形式のレスポンスが提供されています。
これから新しく導入する場合は、URLエンコード対応も含めた以下の「v2対応版」のコードを使用するのがおすすめです。
/**
* よみたんAPI v2を使用して指定された文字列の読みがなを返却します。
* @param {string} word 日本語文字列
* @param {string} kana "h" ひらがな / "k" カタカナ
* @return {string} 変換後の文字列
* @customfunction
*/
function GetPhoneticV2(word, kana = "h") {
if (!word) return "";
// 特殊文字やスペース対策としてURLエンコードを実施
let encodedText = encodeURIComponent(word);
let url = "https://yomitan.harmonicom.jp/api/v2/yomi?ic=UTF8&oc=UTF8&kana=" + kana + "&num=1&text=" + encodedText;
try {
let response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
let json = JSON.parse(response.getContentText());
// JSONレスポンスの yomi 配列から先頭を取得
if (json && json.yomi && json.yomi.length > 0) {
return json.yomi[0];
}
return "";
} catch (e) {
return "";
}
}
スプレッドシート上での呼び出し数式の意味
シート側で記述されている以下の数式について解説します。
=IF(ISERROR(C36),"", GetPhonetic(C36,"k"))
この数式は、「C36セルの漢字文字列からカタカナのフリガナを取得し、エラーが発生した場合は空白セルにする」という安全処理を行っています。
- GetPhonetic(C36, “k”):C36セルの値をAPIに送り、カタカナ(”k”)でフリガナを取得します。
- ISERROR(C36):参照先のC36セルが「#N/A」や「#REF!」「#VALUE!」などのエラー状態になっていないかを判定します。
- IF(…, “”, …):参照先がエラーの場合は空白(””)を出力してエラーの伝播を防ぎ、正常な値であればGetPhoneticを実行します。
実務でより安全に使うための3つの改善ポイント
提示されたコードと数式はシンプルで非常に分かりやすいですが、実際の業務現場で大量のデータ(数百〜数千行)を処理する際には、以下の3つのポイントを意識することでトラブルを防げます。
1. URLエンコード(encodeURIComponent)の追加
元のコードでは「”&t=” + word」のように文字列をそのままURLに結合しています。
人名や会社名にスペース(全角・半角)や記号(&、#、スラッシュ等)が含まれているとURLの構造が壊れてしまい、APIエラーの原因になります。
前述のv2コードのように「encodeURIComponent()」を通すことで、記号混じりのデータでも安全に通信できます。
2. 空白セルへの無駄なAPI通信を防ぐ数式
「=IF(ISERROR(C36),””, GetPhonetic(C36,”k”))」では、C36が空欄の場合、ISERRORはFALSEと判定されるため、空文字のままAPIが呼ばれてしまいます。
未入力行に対する不要なリクエストを防ぐため、スプレッドシート側では以下のように「空白判定」を組み合わせるのがおすすめです。
# 空白セルを除外し、エラー時も空欄にする実務向け数式
=IF(C36="", "", IFERROR(GetPhonetic(C36, "k"), ""))
3. GASクォータ制限とAPIサーバー保護のための「値貼り付け」
Google Apps Scriptの「UrlFetchApp」には、1日あたりの呼び出し上限(無料アカウントで20,000回/日)があります。
また、スプレッドシートのカスタム関数はシートを開くたびに全行が再計算される性質があります。
開くたびにAPIを呼び出すと、GASの上限オーバーになるだけでなく、よみたんのAPIサーバーに対しても無駄な連続負荷をかけることになってしまいます。
- 関数を入力してふりがなを一括取得する
- 結果のセル列をすべてコピーする(Ctrl + C / Cmd + C)
- 同じ場所に「特殊貼り付け → 値のみ貼り付け(Ctrl + Shift + V / Cmd + Shift + V)」を実行する
数式から「静的な値」に変換しておくことで、以降はシートを開いてもAPI通信が一切発生せず、動作も軽快になります。
スプレッドシートへの導入手順
ご自身のスプレッドシートに導入する手順はわずか3ステップです。
- Apps Scriptエディタを開く:スプレッドシート上部メニューの「拡張機能」から「Apps Script」を選択します。
- コードを貼り付けて保存:エディタ内にコードを貼り付け、保存アイコン(フロッピーマーク)を押します。
- シート上で関数を入力:スプレッドシートに戻り、セルに「=GetPhonetic(参照セル, “k”)」と入力するだけで完了です。
まとめ
- スプレッドシートにはIME変換履歴メタデータがないため、標準のPHONETIC関数ではふりがなを取得できない
- 「よみたんAPI」を活用したGASカスタム関数を使うことで、コピペやインポートデータでも漢字の読み仮名を自動取得できる
- よみたんAPIは個人開発(HARMONICOM様)で提供されている貴重なサービスのため、規約遵守とサーバー負荷への配慮が不可欠
- 現行の「よみたんAPI v2」ではJSON形式でレスポンスが提供されており、URLエンコードを組み合わせることで安定して利用可能
- ふりがな取得後は「値のみ貼り付け」を行って再計算リクエストを停止させるのが実務上のマナーかつベストプラクティス
名簿や顧客リストのフリガナ入力は手作業で行うと多くの時間を要します。
便利な外部サービスへの感謝と配慮を忘れずに、GASとAPIを活用したスマートな業務効率化を進めていきましょう。
