Yappli Tech Blog

株式会社ヤプリの開発メンバーによるブログです。最新の技術情報からチーム・働き方に関するテーマまで、日々の熱い想いを持って発信していきます。

Zapierを使ってローマ字チェックを自動化する

ITグループの原口です。 最近3歳の長女がアナ雪2の影響で毎日クリストフばりにプロポーズしてくれるという、エブリデイ多幸感エンジニアをやっています。

この記事は ヤプリ Advent Calendar 2021 14日目に捧げる記事となります。

はじめに

Yappliでは新しく入社する方の情報は、本人から申請された情報(住所・氏名など)をベースにして進めています。

この申請情報にはローマ字も含まれるのですが、他の情報に比べて手作業によるチェックでは誤りの検出が非常に難しく、手戻りが発生することがありました。

そこでローマ字チェックを自動化し、不要な手戻りを撲滅させ、みんなが幸せになろうというのが多幸感エンジニアとしてのアプローチとなります。

3つのアプローチ

自動化はいつものようにZapierを使いますが、Zapierには大きく3つのアプローチがあります。

公式Appを利用

まず最初に、Zapierやサードパーティーから公開されているappやeventを利用して目的を達成できるか確認します。 今回のひらがなやカタカナからローマ字に変換し、本人申請情報が正しいかチェックするという処理には、残念ながら利用できるものがありませんでした。

Code by Zapierを利用

次に検討するのがZapier内にPythonやJavaScriptのコードを配置して処理を実行するアプローチです。 どちらも言語標準機能に加えて、HTTP Client/DataStoreの機能が備わっているので、ほとんどはこのアプローチで実現できます。

しかしながら言語標準機能を駆使しひらがな・カタカナからヘボン式に対応したローマ字変換という処理を自前で実装しメンテしていくことの工数から今回はこのアプローチは採用しませんでした。

参考: zapier.com zapier.com

Integrationを作成

今回採用したのがこのIntegration作成というアプローチです。 Zapierでは独自の処理をIntegrationすることができます。 前述のCode by Zapierとの違いは、npmで公開されているライブラリを含んだ形で処理が実装できる点にあります。 今回、ローマ字変換処理はnpmで公開されている jaconv で実現するためにこの方式を試してみました。

参考: zapier.com

Let's Integration

詳細は Zapierのドキュメント に記載があるため割愛しますが、以下の流れで進めていきます。 nodeに馴染みのある方であれば15分もあればサンプルをデプロイできると思います。

  1. node.jsインストール
  2. Zapier CLIインストール
  3. CLIでZapierにログイン
  4. CLIで初期化
  5. 処理を実装
  6. CLIでテスト
  7. CLIでPush(デプロイ)

参考: developer.zapier.com github.com

Code Sample

今回作成したコードのサンプル(一部抜粋)です。

index.js

const hepburn = require('./creates/hepburn');

const App = {
  version: require('./package.json').version,
  platformVersion: require('zapier-platform-core').version,

  beforeRequest: [],

  afterResponse: [],

  resources: {},

  triggers: {},

  searches: {},

  creates: {
    [hepburn.key]: hepburn
  }
};

module.exports = App;

creates/hepburn.js

const helper = require('./conv-helper');
module.exports = {
  key: 'hepburn',

  noun: 'Hepburn',
  display: {
    label: 'Convert Hepburn(Roman Alphabet)',
    description: 'Convert katakana to hepburn(roman alphabet).',
  },

  operation: {
    inputFields: [
      { key: 'target', required: true, type: 'string' }
    ],
    perform: async (z, bundle) => {
      return await helper.conv2hepburn(bundle.inputData.target);
    },
  },
};

creates/conv-helper.js

const conv = require('jaconv');
module.exports = class ConvHelper {
  static async conv2hepburn(target) {
    return {
      roman: conv.toHebon(conv.toHiragana(target)).toLowerCase()
    }
  }
}

Zapierで利用するには

CLIからPushしたIntegrationは、そのままではPrivateのため自分のアカウントでしか使用できませんが、特定ユーザーと共有することができます。

なおIntegrationをPublishして誰でも使えるようにする方法もありますが、公開するにはいくつか条件がありますので、企業内での利用であれば共有がおすすめです。

共有の詳細は こちら を参照してください。

実際の設定画面

今回作成したZapでは単一のInputを受け取りローマ字変換して返却しています。 f:id:cazziwork:20211214051628p:plain f:id:cazziwork:20211214051654p:plain

必要に応じて、入力値を複数フィールドで受け取ったり、戻り値をCapitalizeやUppercaseにするなど、処理は自由にカスタマイズすることができます。

まとめ

以上 Zapier Integrationのご紹介でした。 今回初めて作成してみましたが、CLIで生成するテンプレートには最初からテストコードが含まれていたり、公開前のValidation機能があったり、また英語ではありますがドキュメントも豊富にありますので、活用シーンが広げられるのではと思います。

当然、Zap標準機能で要件を満たせればそれがベストですし、CodeやWebhookなどZapierには非常に強力かつ便利な機能が備わっていますので、使い所は検討が必要ですが、今回のようにnpmで公開されているライブラリを活用したいといったシーンでは十分選択肢になると思います。

Zapierを使った効率化の参考になれば幸いです。