$30 off During Our Annual Pro Sale. View Details »

Salesforce Functions (Java)で 実装はどう変わるか

CLB
July 01, 2022

Salesforce Functions (Java)で 実装はどう変わるか

Salesforce Functions の実装を試しました。
・ライブラリーの使用方法
・並列実行

CLB

July 01, 2022
Tweet

More Decks by CLB

Other Decks in Programming

Transcript

  1. Salesforce functions (Java)

    実装はどう変わるか
    Sato Ryo

    View Slide

  2. Hello!
    Sato Ryoです。(左はクレオです。)
    仕事:
    ´ バックエンド( 業務処理の開発担当) です。
    ´ Salesforce 歴 2.5 年くらいの初⼼者です。
    趣味:
    • ネコ
    • キャンプ
    @altyjp

    View Slide

  3. Salesforce functions GA 🎉
    https://developer.salesforce.com/docs/platform/functions/overview

    View Slide

  4. Java版の資料は少ない
    Node.js 版についてはいくつか資料がありますが、
    Java版は資料が少ないように思います。
    ´ クイックスタートガイド
    ´ https://developer.salesforce.com/docs/platform/functions/guide/create-function.html
    ´ しょっさん(Salesforce の中の⼈)のブログ記事
    ´ https://zenn.dev/sho7650/articles/f1b0c096847277
    →Java 版を利⽤して気になった事を
    検証していきたいと思います。

    View Slide

  5. お品書き
    ´ ライブラリってどうなってるの︖
    ´ 並列処理はできる︖効果ある︖
    なお、実際のソースコードは以下にあります。
    是⾮お試しください。
    https://github.com/altyjp/Trying-SF-functions
    注意事項︓
    問題により実際のFunctions へのデプロイができなかったため、
    本発表における実⾏時間などの値はローカル環境(MacBookAir 2018, Core i5, 8GB RAM)での実⾏結果を利⽤しております。
    あくまで参考結果としてご覧ください。

    View Slide

  6. ライブラリってどうなってるの︖
    ´ Java で function を作成すると左記のようなファ
    イルが⽣成されます。
    ´ Mavenを利⽤しているので、pom.xml に使いたい
    ライブラリを記載することで利⽤する事ができます。

    View Slide

  7. ライブラリが利⽤できるメリット
    ´ Apexではcsvなどを扱うライブラリ
    が無いため
    ⾃前で処理が必要になる。
    ´ ライブラリを利⽤することで
    安全かつ効率的にコーディング可
    能。
    // opencsv で書き出す。
    beanToCsv.write(accounts);
    // 出⼒
    LOGGER.info(writer.toString());
    // Account を Csv にする。
    for(Account acc : accountList){
    String accountId = acc.Id;
    String accountName = acc.Name;
    // ⾃前で組み⽴てが必要
    String csvRow = '"' + accountId +
    '","' + accountName + '"';
    csvStr.add(csvRow);
    }
    System.debug(csvStr);
    LibrarysampleFunction.java
    withoutLibrary.apex

    View Slide

  8. 並列実⾏は利⽤できる︖
    効果は︖

    View Slide

  9. Apexでは並列処理を実装できないので
    ´ 重い処理でもforを利⽤しないといけない。
    // 1000から5999までの素数を⾒つける
    for (Integer num : intList){
    Boolean isPrime = true;
    for (Integer i = 2; i < num; i++) {
    if (Math.mod(num, i) == 0){
    isPrime = false;
    break;
    }
    }
    // System.LimitException: Apex CPU time limit exceeded(10s以上)
    if (isPrime) {
    System.debug(num);
    }
    }
    processList.apex

    View Slide

  10. Functions なら重い処理も爆速
    ´ parallelStreamを利⽤して、複数のスレッドで処理を分散可能。
    ´ 重い処理も⽐較にならない速度で実⾏できます。
    ちなみに以下の処理、どのくらいの時間で終わると思いますか︖
    // 1000から5999までの素数を⾒つける。
    intList.parallelStream()
    .filter(n -> isPrime(n))
    .forEach(System.out::println);
    ParallelexecutionFunction.java

    View Slide

  11. まとめ
    ´ ライブラリを利⽤することで安全かつ効率的に実装が⾏える。
    ´ 特にCSVやyamlなどテキストデータを処理する場合。
    ´ 他にはエクセル(.xlsx)などのこれまで対応できなかったバイナリファイルなども。
    ´ 重い処理も並列実⾏で⾼速に実⾏できる。
    ´ これにより、今までガバナ制限によって不可能だった処理も
    1トランザクションで実⾏可能になるかもしれない。

    View Slide

  12. Thank you!

    View Slide