Google Spreadsheets 漢字に読み仮名（ひらがな・カタカナ）を付けるカスタム関数を作った

![convert_hiragana_katakana_custom_function_google_spreadsheets.gif](https://qiita-image-store.s3.amazonaws.com/0/6368/8e971bb8-3dad-f528-ffd2-f02d222d64e8.gif "convert_hiragana_katakana_custom_function_google_spreadsheets.gif")

## これはなに？
いわゆるMicrosoft Excelで言うところの`PHONETIC`関数です。
漢字を含むテキスト・セルを指定することで、読み仮名を出力することができます。読み仮名はひらがなのふりがなでもカタカナのフリガナでも大丈夫です。

典型的な利用シーンとしては、住所録で氏名の読み仮名を自動で（それなりに）ふりたい、というシーンがあります。ちょうど年賀状シーズンの住所録でふりがなが必要になったりしていると思いますが、ローカルのExcelではなくGoogleスプレッドシートで管理している方も多いでしょう。Excelには`PHONETIC`関数があるのにGoogleスプレッドシートには同様の機能が無いのです。

## 機能
- 漢字を含むテキスト（セル）をひらがなへ変換 `=HIRAGANA(input)`
- 漢字を含むテキスト（セル）をカタカナへ変換 `=KATAKANA(input)`
- フラグで変換先（ひらがな/カタカナ）を指定して変換 `=KANA(input, flag)`

## 使い方
このカスタム関数は[gooラボのひらがな化API](https://labs.goo.ne.jp/api/2015/338/)を利用しています。そのため、gooラボでのアプリケーションIDの発行とGoogle Spreadsheetsへのカスタム関数登録の2ステップで使えるようになります。

1. gooラボ アプリケーションID発行
2. Google Spreadsheetsへカスタム関数登録

### gooラボ アプリケーションID発行
[gooラボAPI利用登録ページ](https://labs.goo.ne.jp/apiregister/)へアクセスし、利用規約をよく読んだ上で登録を行います（登録にはGitHubアカウントが必要です）。
![goolab_apiregister.jpg](https://qiita-image-store.s3.amazonaws.com/0/6368/93b62e94-bd54-bf41-f0bb-0b6cfc32ee30.jpeg "goolab_apiregister.jpg")

GitHubの認証画面が表示されるのでAuthorizeボタンを押します。
![github_authorize.jpg](https://qiita-image-store.s3.amazonaws.com/0/6368/e221bc1b-4801-9e90-5095-e99044f96e66.jpeg "github_authorize.jpg")

登録が完了すると、アプリケーションIDが発行されて画面に表示されるのでコピーしておきます。
![goolab_applicationid.jpg](https://qiita-image-store.s3.amazonaws.com/0/6368/44941436-a6e8-1b98-5acd-aeed1aac0170.jpeg "goolab_applicationid.jpg")

この手順は、一度だけ実行すれば二度目以降は不要になります。

### Google Spreadsheetsへカスタム関数登録
続いて、実際にGoogleスプレッドシート上で各カスタム関数を使えるようにします。

まず、適当な[Google スプレッドシート](https://docs.google.com/spreadsheets/)を開きます。新規作成でも構いません。今回のカスタム関数は利用するスプレッドシート（Excelで言うところのBook）毎に利用設定が必要ですのでご注意下さい。
![google_spreadsheets.png](https://qiita-image-store.s3.amazonaws.com/0/6368/eb61de6d-919e-6406-e30c-cd29858221dc.png "google_spreadsheets.png")

次に、メニューバーの「ツール」から「スクリプト エディタ」を選択します。
![google_spreadsheets_script_editor.jpg](https://qiita-image-store.s3.amazonaws.com/0/6368/85235b43-88c4-3e7a-705e-83fbe6a2feb6.jpeg "google_spreadsheets_script_editor.jpg")

すると、下図のような画面が開きます。別サービスに移動したように見えますが心配いりません。
![google_app_script_console.png](https://qiita-image-store.s3.amazonaws.com/0/6368/5b97ffd6-cfc9-420e-3440-974d4a86316c.png "google_app_script_console.png")

以下のように記載されている部分を選択して削除してから、後述のスクリプトをコピー＆ペーストしてください。

```javascript
function myFunction() {

}
```

上記を削除して、下記をコピー＆ペーストします。

```javascript
var perform = function(output_type, sentence) {
  var endpoint = "https://labs.goo.ne.jp/api/hiragana";
  var payload = {
    "app_id": "ここにgooラボアプリケーションIDをペースト",
    "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;
};

/**
 * Convert Japanese KANJI to HIRAGANA by goo LAB API.
 *
 * @param {string} input The value of cell to convert.
 * @return The converted value that HIRAGANA.
 * @customfunction
 * @author Noriaki UCHIYAMA (twitter: @noriaki)
 */
function HIRAGANA(input) {
  return perform("hiragana", input);
}

/**
 * Convert Japanese KANJI to KATAKANA by goo LAB API.
 *
 * @param {string} input The value of cell to convert.
 * @return The converted value that KATAKANA.
 * @customfunction
 * @author Noriaki UCHIYAMA (twitter: @noriaki)
 */
function KATAKANA(input) {
  return perform("katakana", input);
}

/**
 * Convert Japanese KANJI to HIRAGANA/KATAKANA by goo LAB API.
 *
 * @param {string} input The value of cell to convert.
 * @param {boolean} output_type The flag of convert type. TRUE: HIRAGANA, FALSE: KATAKANA.
 * @return The converted value that specified in output_type param.
 * @customfunction
 * @author Noriaki UCHIYAMA (twitter: @noriaki)
 */
function KANA(input, output_type) {
  output_type = output_type ? "hiragana" : "katakana";
  return perform(output_type, input);
}
```

さらに1箇所だけ修正します。下図の反転選択されている部分を、先ほど発行したgooラボアプリケーションIDで置き換えます。
![google_app_script_console_pasted.jpg](https://qiita-image-store.s3.amazonaws.com/0/6368/6e7cc027-b085-2096-a4d5-a64e1b453d86.jpeg "google_app_script_console_pasted.jpg")

英数字の羅列のアプリケーションIDをペーストするとこんな感じです（自身のアプリケーションIDは非公開情報なので一部マスクしています）。
![google_app_script_console_pasted_applicationid.jpg](https://qiita-image-store.s3.amazonaws.com/0/6368/301c7df3-327d-8a74-49f5-15e87cb64ace.jpeg "google_app_script_console_pasted_applicationid.jpg")

「ファイル」→「保存」（または`Ctrl+S`/`Command+S`）すると、下図のようにプロジェクト名を聞いてくるので、適当な名前を付けて「OK」をクリックします（デフォルト名称のままでもOKです）。
![google_app_script_project_name.png](https://qiita-image-store.s3.amazonaws.com/0/6368/43f65ad3-1d71-5501-16f6-1a41058a5159.png "google_app_script_project_name.png")

おめでとうございます。これで完了です。

利用方法は冒頭のGIFをご覧いただくと分かるかと思いますので再掲しておきますね。
![convert_hiragana_katakana_custom_function_google_spreadsheets.gif](https://qiita-image-store.s3.amazonaws.com/0/6368/8e971bb8-3dad-f528-ffd2-f02d222d64e8.gif "convert_hiragana_katakana_custom_function_google_spreadsheets.gif")

別のスプレッドシートで利用する時は、gooラボアプリケーションID入りのコードを直接コピー＆ペーストすれば、ほとんどの手順が省略でき、「スクリプトエディタを開く」→「アプリケーションID入りのコードをペーストして保存」だけでOKですね。

簡単ですが[Google Apps Script](http://qiita.com/advent-calendar/2015/gas)の利用例として、皆さま良いGoogleスプレッドシート生活を！！


## 参考情報
- [gooラボのひらがな化API](https://labs.goo.ne.jp/api/2015/338/)
- [gooラボのAPI利用方法](https://labs.goo.ne.jp/apiusage/)
- [Custom Functions in Google Sheets  |  Apps Script  |  Google Developers](https://developers.google.com/apps-script/guides/sheets/functions)