カスタマイン最終兵器「JavaScriptを実行する」を使ってみる

# はじめに
ｲｼｲｹﾝﾀﾛｳです塗装用のハケとローラーを作ってる会社の兼業情シスです

![刷毛.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/c25c85cd-5081-d0ae-cb5f-42b5dfd0cf7a.jpeg)
![ローラー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/793db282-45f5-4139-c913-015ee6904778.jpeg)

認定資格は5つ全冠 & サイボウズ公認 kintone エバンジェリストです
![資格ロゴ統合.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/0e015ed4-9992-2c06-0bce-d34b7d2fc62c.png)

高度情報処理国家資格は全冠まで（ずっと）あと1コ
![情報処理技術者試験.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/8c7b38b5-54b2-0a14-3c58-0bf00f81125c.png)

# Qiita1年ぶり！
- [カスタマインアドベントカレンダー](https://qiita.com/advent-calendar/2023/customine)の1日目の記事です
- [前回もアドベントカレンダー](https://qiita.com/kentaro1sh11/items/414c9bbbe65e1e6ea826)でした（年イチw
- note書こうかなとも思ったんですが、カレンダー自体ががQiitaなのでこっちにした
- で、せっかくQiitaならJS絡めようと最終兵器「JavaScriptを実行する」書きます！
- あたりまえですがまぁなんでもできるすごいコですホント

https://docs-customine.gusuku.io/ja/actions/other/run_javascript/

:::note alert
**お客様が作成された JavaScript の内容に関しては、弊社サポートの範囲外とさせていただきます。** です！！！ご留意ください！！！
:::

# 使い方は2つだけ！
- 「return」を書いて他のアクションに値を渡せます
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/08fe654a-d9c2-2197-9b18-332f76980bb5.png)
- 「customine\[アクション番号\]」で他のアクションの結果を使えます
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/5761804d-c44a-c296-0ae5-6ac040eea005.png)

# どんな風に使ってるの？
### ランダム
- 実は意外なことにカスタマインにはrandom関数無いんですよね
- （[ランダム文字列生成](https://docs-customine.gusuku.io/ja/actions/other/generate_random_string/)はあるけどちょっと違う）
- 抽選アプリで使ってます
- 100番アクションに応募数が入ってる前提です

```javascript
return Math.floor(Math.random()*customine[100]);
```

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/96399410-cf9b-ea56-41af-a32d6f8afc7e.png)

- 0以上1未満の乱数に100番アクションの結果を乗じて切り捨てています
- 100番アクションの結果を100とすると、0～99の中からランダムな数字を取り出してくれます
- 以下参考情報です

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/random

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/floor

### デコード
- [エンコードはできる](https://docs-customine.gusuku.io/ja/functions/encodeuri/)んだけど、デコードはいまのところできません
- 検索ワード分析アプリで使ってます
- 準備として [Cybozu CDN の encoding.js](https://cybozu.dev/ja/kintone/sdk/library/cybozu-cdn/#library) を「JavaScript / CSSでカスタマイズ」画面にリンク設定しておきます

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/4b8ac69f-3094-5884-cead-d1c904036949.png)

- 200番アクションで検索キーワードフィールドを含むレコードを取得してる前提です

```javascript
return Encoding.convert(Encoding.urlDecode(customine[200].検索キーワード.value),{type:'string'})
```
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/a47ade57-ebd4-85e6-ecce-023f1584acdd.png)

- 検索キーワードフィールドの値をデコードして文字列に変換しています
- 以下参考情報です

https://github.com/polygonplanet/encoding.js#url-encodedecode

# カスタマインで「やってはいけないあのこと」も・・・！
- なんとレコードの削除もできちゃいます！
- 推奨してるワケじゃないよ！やってみるなら自己責任でね！
- アプリID300のアプリの、レコード番号400と401を削除したいときはこんなかんじ

```javascript
kintone.api(kintone.api.url('/k/v1/records.json', true), 'DELETE',  {app: 300, ids: [400, 401]});
```

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105085/6ebc2cd9-4376-a622-8d3d-ac50803a2d9c.png)

- 簡単すぎてヤバいです
- もちろん削除したレコードは元に戻せないよ！しつこいけど自己責任で！
- 以下参考情報です（ホントやってみるのは熟読してからね！

https://cybozu.dev/ja/kintone/docs/rest-api/records/delete-records/

# おわりに
- 月刊ｲｼｲｹﾝﾀﾛｳ12月増刊です
- いつものは別途[きったんベントカレンダー](https://note.com/kentaro1sh11/n/nce55a01fb664)に書いてます
- レコード削除は書かないほうが良かったかな失敗したかな？
- どうしてこれだけ「return」を書かなくていいのかを理解できるなら使っていい気がする
- そしてQiitaはやっぱりカロリー使うね疲れた
- あ、いま気づいた初日なのに最終兵器のこと書いてるｗゴメンｗ