【GASぷちテク】Google Apps Scriptで日本語にフリガナをふる方法

## はじめに
みなさんは、ExcelのPHONETIC関数をご存知でしょうか？
PHONETIC関数は、特定のセルの日本語文字列のルビを抽出する関数です。
名簿を作成する場合など、フリガナを別セルに記述したいときに重宝します。
ただ、PHONETIC関数はセルに直接入力した文字列からしかルビを抽出できず、他のファイル等からコピペした文字列のルビは抽出できません。これはルビがIMEの変換情報から作成されるため、その他の入力方法だとルビ情報が作成されないことが原因です。
これでは、Excel以外で管理していた名簿からフリガナをふりたい場合は、結局手入力をするしかありません。

このような問題を解決する方法として、今回はGoogle Apps Script（以下、GAS）と日本語文字列をひらがな／カタカナに変換する、gooラボの「ひらがな化API」を用いて、既に入力済の日本語文字列にフリガナをふる方法をご紹介します。

## ひらがなAPIとは
ひらがなAPIは、gooラボが提供するAPIで、日本語文字列をひらがな、またはカタカナに変換するAPIです。
※「ひらがなAPI」という名称なのに「カタカナ」にも変換できるのはユニークですね。
https://labs.goo.ne.jp/api/jp/hiragana-translation/

## gooラボ APIの使い方
gooラボのAPIを利用するには、事前の利用登録が必要です。
詳細は[公式の利用手順](https://labs.goo.ne.jp/apiusage/)をご覧ください。ここでは要点だけ説明します。

### GitHubアカウントを登録をする
gooラボのAPIを利用するには、[GitHub](http://www.github.com)のアカウントが必要です。GitHubアカウントをお持ちでない方は、先にGitHubのアカウントを登録してください。

### アプリケーションIDを発行する
GitHubのアカウントができたら、APIを使用する際に必要なアプリケーションIDを発行します。アプリケーションIDは、アプリケーションがAPIを使用する際の認証に使用されます。[API利用登録ページ](https://labs.goo.ne.jp/jp/apiregister/)から発行します。

## Google Spread Sheet上の日本語にフリガナをふる
それでは具体的なやり方を説明します。
今回は名簿を作成することをイメージして、Google Spread SheetにGASのスクリプトを作成して利用する方式にします。

### GASでひらがなに変換するスクリプトを作成する 
まずは、Google Spread Sheetを起動し、GASを作成します。[ツール] > [スクリプトエディタ]を選択し、GASのエディタを開きます。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f34333333302f36343163393635612d616164612d656534662d396361372d6463353039343663663639302e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/43330/e6aecb1d-0211-c7a2-a4a1-32c3497eb2c2.png)

エディタが開いたら、フリガナを求めるスクリプトを書いていきます。

```javascript:フリガナ作成処理
var perform = function(output_type, sentence) {
  var endpoint = "https://labs.goo.ne.jp/api/hiragana";  // ①
  var payload = {                                        
    "app_id": "XXXXXXXXXXXXXXXXXXXXXXXXX",               // ②  　
    "sentence": sentence,                                // ③
    "output_type": output_type                           // ④
  };
  var options = {
    "method": "post",
    "payload": payload
  };

  var response = UrlFetchApp.fetch(endpoint, options);   // ⑤
  var response_json = JSON.parse(response.getContentText());
  return response_json.converted;
};
```

フリガナを作成する関数「perform」を作成しました。
ひらがなAPIは「ひらがな」「カタカナ」の両方に変換できるため、「変換後形式 output_type("hiragana" or "katakana")」「変換したい文字列：sentence」の2つを引数として得るようにします。

この関数の役割は、「gooラボのひらがなAPIを使用して、引数で指定された文字列を、同じく引数で与えられた形式に変換し、その結果を文字列として返却すること」です。
GASからひらがなAPIを使用するには、GASのUrlFetchAppクラスを使ってひらがなAPIにリクエストを送信します。ソース中の①がAPIのリクエストURLを、②〜④でリクエストパラメータを設定しています。リクエストパラメータの内容と、perform関数内で使用する値の関係を下表に示します。

| 項目 | 設定値 |
| --- | --- |
| app_id | [API利用登録ページ](https://labs.goo.ne.jp/jp/apiregister/)で発行したアプリケーションID<br>（ソース中の②） |
| sentence | 変換したい文字列<br>（引数：sentenceが該当。ソース中の③） |
| output_type | 変換後の形式<br>（引数：output_typeが該当。ソース中の④） |

リクエストURL、リクエストパラメータを定義できたら、UrlFetchApp.fetchを使用してひらがなAPIと通信し、変換後の結果を得ます。（ソース中の⑤）
※本来であればエラー処理が必要ですが、説明の本筋ではないので割愛しています。

perform関数をスプレッドシートから直接してもいいのですが、使用者にわかりやすく、「ひらがな変換関数」「カタカナ変換関数」を別途を用意します。

```javascript:ひらがな変換関数
function getHiragana(input) {
  return perform("hiragana", input);
}
```

```javascript:カタカナ変換関数
function getKatakana(input) {
  return perform("katakana", input);
}
```

ひらがな変換関数／カタカナ変換関数はスプレッドシートから呼び出す際のインターフェースの役目であり、変換処理そのものはperform関数に委譲する形式にします。

## 作成したスクリプトを使ってみる。
それでは、作成した「ひらがな変換関数」、「カタカナ変換関数」を使用して、日本語文字列を変換してみます。使い方は簡単で、セルで下図のように関数を使用するだけです。

```script:ひらがな変換関数の使い方
=getHiragana(A1)
```

```script:カタカナ変換関数の使い方
=getKatakana(A1)
```

<img width="308" alt="スクリーンショット 2018-12-02 19.38.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/43330/ba1b134d-5ea5-21e0-2395-20d49a80c3e0.png">


### 日本語（漢字） → ひらがな／カタカナへの変換
まずは各関数を使用して、漢字をひらがな、カタカナに変換してみましょう。
A列が「変換対象」、B列が「ひらがな変換」、C列が「カタカナ変換」です。
<img width="629" alt="スクリーンショット 2018-12-02 19.46.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/43330/4d9f3ef7-b32e-8b68-f066-88d7f7389bd0.png">
それぞれ、正しく変換できていますね。

### 日本語（漢字以外） → ひらがな／カタカナへの変換
漢字以外も試したいと思います。
<img width="629" alt="スクリーンショット 2018-12-02 19.51.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/43330/d76d2f1c-91c7-14f8-17f3-69e502a86257.png">
漢字とひらがな／カタカナを混ぜた文字列を変換させてみました。きれいにひらがな、カタカナに変換されていますね。
この処理でわかることは、「ひらがなをひらがなに変換」、「カタカナをカタカナに変換」はそのまま出力されます。

### アルファベット → ひらがな／カタカナへの変換
アルファベットはどうでしょうか？
<img width="627" alt="スクリーンショット 2018-12-03 0.19.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/43330/1568aa64-1070-4fbd-4f68-b87a844f5eca.png">
きちんと変換していますね。しかも半角／全角共に同じ結果です。

単純なアルファベットでしたが、今度は英字を含む単語を変換してみます。
<img width="686" alt="スクリーンショット 2018-12-03 0.33.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/43330/d7b4d6f4-8599-d003-e4b7-d2253a5e13ba.png">
読み仮名で変換してくれています！これはすごい。
「かむ おん べびー」が若干残念な変換になったのはご愛嬌ですね。

### 数字 → ひらがなの変換
最後に数字を変換してみます。
<img width="768" alt="スクリーンショット 2018-12-03 0.39.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/43330/700935a6-7294-d6da-9ef5-1d8e7afe0424.png">
アルファベット同様に、日本語での読みに変換しています。ただし、よくよく見てみると、２点特徴的な変換をしています。
１つ目は、1行目の「１００」を「ひゃく**てんぜろ**」と変換していることです。これはセルの値が数値型の場合にこのような変換をされます。挙動から推測するに、数値型のセル情報は実数型として扱われているのかもしれません。それであればこの結果には納得です。とはいえ、そもそもセルに数字しか無いのにひらがなに変換することはないと思いますので、使う分には問題ないでしょう。
２つ目は、４行目の「2020」を「にせんに**じゅー**」と変換していることです。発音としては１００歩譲って許容できますが、文章としては「にせんに**じゅう**」が表現としては正しいでしょう。文章のフリガナをふるような場合は、注意が必要かもしれません。

## さいごに
Google Apps ScriptとgooラボのひらがなAPIを使用して、ひらがな／カタカナのフリガナをふる方法をご紹介してきました。これで、突然名簿のフリガナをふる仕事を依頼されても大丈夫ですね！
筆者は職業柄、検索システムの開発に関わることがよくあります。そのとき、必ずといってあるのが「名前検索」と「カナ検索」でした。Apache Solrや、昨今の高精度な検索サービスを利用できれば、名称からフリガナを自動的に判断してくれますが、古典的な手段では「名前」と「フリガナ」の情報をデータベースに持ち、検索クエリを作成するという手段をとっていました。これまでは半ば諦めて手入力でフリガナを作成していましたが、この方法を知ってからは圧倒的に簡単な作業ですばやく終わらせることができています。おかげで「簡単だが手間のかかる仕事」の一つが解決できました。
似たようなことで苦労をされている方は、ぜひ試してみてください。