DataSpider開発Tipsその①～スクリプトを実行した日は第何週なのか？～

## はじめに

こんにちは！すぎもんです:grinning:

今回から【DataSpider開発Tips】編ということで、シリーズで記事を投稿していこうと思います！基本的な処理の作り方がベースとなりますが、皆さんが実現したい処理の部品となるようなロジックの基本的なつくり方や、考え方をお伝えできたらと思います。
DataSpider開発に長く従事されている方、まだDataSpiderを始めたばかりの方、これから始めようかなと興味がある程度の方も是非、ご一読いただけたら嬉しいです！

## 「日付」情報の活用
開発をしていく中で、日時情報はロジック内の一つの条件になったり、後続処理の一つのトリガーになったりと、様々なポイントで使う基本的かつ重要な値です。

もちろんDataSpiderにも、様々な「日付」関連のロジックアイコンがあります。
今回は開発Tips第一弾ということで、処理の部品として活用できるような日付計算ロジックを作っていこうと思います！

## 日曜日を起点にして「第何週か取得」する

今回は、DataSpiderのスクリプト実行時点の「現在日時」を取得して、「日曜日を起点にした場合に、現在日時が第何週なのか」の値を取得するスクリプトを作成してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/65a8eb98-e6a7-62d3-2425-ed1f8aceb28f.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6816690a-acc1-0083-d444-8a6aa889e018.png)

:::note info
DataSpiderでは、「曜日の取得」で、日曜日を起点に数値表現をします。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/87817ddf-13e0-490e-1ac4-f93f70419ef9.png)

今回は単純な日付計算ロジックのみの作成なので、Mapperの中で全てを完結させます。
Mainスクリプトからの呼び出しスクリプト（部品）として活用してみてください。

※デザイナ上で「メモ」を活用しスクリプト可読性を上げメンテナンスの円滑化もできます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/0d2dbba7-31fd-1645-b1bc-7413d8c3e0db.png)


## 早速作ってみよう（日曜起点で第何週目なのかを取得）

まずは、スクリプト内で使う変数を作成します。
最終的にこの変数に「何週目だったのか？」の値（数字）を格納します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/7e63cd73-c0e4-e003-4c8c-b267e5615719.png)
「Tips_1」というスクリプトに紐づく「スクリプト変数」が作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/73c7426b-5418-9ae3-9257-c40a28842f0c.png)


## 月初1日の曜日数値を取得

次に、スクリプト実行時点の「現在日時」を取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/4f909394-6ab5-f048-22d2-0f0d57469d0d.png)

アイコンがぱっと見た時に何の処理なのかわかるように「コメント」に説明を入力します。

:::note info
コメントの活用で、スクリプトの可読性を上げ、メンテナンスの円滑化！
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/37ecb0b4-b17e-3c8b-622d-f32775236b01.png)

次に、取得した現在日時「yyyyMMdd」を、「年(yyyy)＋月(MM)+01(固定)」に変換します。

:::note info
月初1日の曜日数値(1:日曜,2:月曜,3:火曜,4:水曜,5:木曜,6:金曜,7:土曜)が何かを取得します。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/733344ea-7739-e31c-6eac-c7cee63c9204.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b8983df6-ac18-50ec-0d84-fe4ce9ddc4c6.png)


次に、「曜日の取得」をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/75c06324-4f72-9b19-ed67-b8d59e6e386b.png)

:::note info
月初1日の曜日数値(1～7)が何か、を取得します。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6816690a-acc1-0083-d444-8a6aa889e018.png)
（実行時点が20220/09なので、2022/09/01は「木曜日」＝曜日数値は「5」です。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/c97a2f42-cedd-1616-13c6-5e9dbe6918ca.png)
＜この時点でわかっていること＞
スクリプト実行日時　　　　　　 　　　：　2022/09/22
月初1日の年月日　　　　　　　　 　　 ：　2022/09/01
月初1日の曜日の取得結果（数値）　　　：　5

## 現在日時の「日にち」を取得

次に、現在日時の「日の取得」をします。前述で月初1日の日時を固定しているのを後で合算するので、ここで「数値定数(1)」を「引き算」しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/532646f3-6217-dad0-e7c0-65a99611c3f3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/7ecac69f-d7f9-5182-a0f3-ddb33b51fa0b.png)

＜この時点でわかっていること＞
スクリプト実行日時　　　　　　 　　　：　2022/09/06
月初1日の年月日　　　　　　　　 　　 ：　2022/09/01
月初1日の曜日の取得結果（数値）　　　：　5
日の取得結果（数値）　　　　　　　　 ：　6　
※「日の取得」で得た値は月初「1」日と合算するので事前に固定「1」を引き算しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ab3353c9-0aaf-eaab-2e4b-08d70d44f08a.png)

:::note info
「第何週目なのか」を知りたいので【日曜日を起点にした数値（７）】で割ります。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/44cc6a0f-f94f-e9cc-9c1d-6f5f949e5311.png)

完成スクリプトはこちらです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/069a59cb-0942-5b14-50be-ce9763535692.png)

＜この時点でわかっていること＆想定する結果＞
スクリプト実行日時　　　　　　 　　　：　2022/09/06
月初1日の年月日　　　　　　　　 　　 ：　2022/09/01
月初1日の曜日の取得結果（数値）　　　：　5
日の取得結果（数値）から1引いた値 　 ：　5
## デバック実行で結果確認

2022年9月6日実行時点で、「１」の値を取得できました。（10÷7≒1）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1ea33df2-e9df-5288-5b9b-f093f0ca9c3a.png)
下記のカレンダーの通り、
「日曜日を起点」にして第「１」週であるという結果が得られました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/46602f42-2eb4-001b-a0a5-5ee12c4413f5.png)

:::note info
DataSpiderでは、曜日を数値定数で解釈してロジックを組まないといけません！
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6816690a-acc1-0083-d444-8a6aa889e018.png)
↑ヘルプに記載あるものですが、この曜日の数値表現をベースに考えてみてください。
## 最後に

いかがでしたでしょうか。第何週なのか、を取得するだけなのですが、DataSpiderならではの曜日の考え方もあり、少々独特なロジックになっていたかと思います。

是非これを一つの部品として、ご自身の作りたいものを実装してみてください！
このブログでは、今後も開発Tipsなどの様々なTopics記事も投稿していきたいと思います！
お読みいただきありがとうございました。それでは、また！