【お知らせ】ブログを引っ越しします
ブログを引っ越すことにしました。
これからは、こちらに記事を投稿していく予定です。
このブログに投稿した記事も、情報を更新してこちらに再度投稿する予定です。
よろしくお願いします!
kyomo-lowcode.tech
未完了で期限が3日前で自分が割り当てられているPlannerタスク一覧をお知らせする

はじめに
この記事は、Microsoft Power Automate Advent Calendar 2024 12月11日担当分の記事です。
qiita.com
Plannerでタスク管理をしていて、タスクの期限が近づいたらTeamsで通知できるようにしたいという相談がありました。
以前Microsoft To Doで似たような記事を出しましたが、今回はPlannerバージョンを紹介します!
yuri365lily.hatenablog.com
こんな感じで、未完了で、期限が3日前で、自分が割り当てられているPlannerタスク一覧をTeamsでお知らせするフローになります。

フロー全体図

用意するもの
Plannerプラン
今回は自分が割り当てられているタスクすべてを対象としています。(プランは複数あってもOK)

フロー作成手順
1.Recurrence
Power Automateを開き「作成」→「スケジュール済みクラウドフロー」をクリックします。

任意のフロー名と開始日を設定します。
毎日フローを実行させたいので、繰り返し間隔は、1日とします。
「作成」をクリックします。

フローの作成画面になったら、以下を設定します。
Time Zone:(UTC+9:00)大阪、札幌、東京
At These Hours:フローを実行したい時間
At These Minutes:フローを実行したい分

2.マイタスクを一覧表示する
+をクリックし、「アクションの追加」よりPlannerの「マイタスクを一覧表示する」アクションを選択します。
このアクションで設定することはありません。

3.アレイのフィルター処理
+をクリックし、「アクションの追加」よりData Operationの「アレイのフィルター処理」アクションを選択します。
アクションが見つからない場合は、「ランタイム」を「組み込み」にして検索してください。
以下を設定します。
From:動的なコンテンツ(稲妻マーク)より、「マイタスクを一覧表示する」の「値」
「詳細設定モードで編集」をクリックします。

Filter Query:以下の式を貼り付けてください。
@and(
less(item()?['percentComplete'], 100),
and(
not(empty(item()?['dueDateTime'])),
greaterOrEquals(ticks(item()?['dueDateTime']), ticks(addDays(utcNow(), 3))),
less(ticks(item()?['dueDateTime']), ticks(addDays(utcNow(), 4)))
)
)
上記の式で未完了、期限が設定されている、期限が3日前のタスクを絞り込むことができます。
4.選択
+をクリックし、「アクションの追加」よりData Operationの「選択」アクションを選択します。
アクションが見つからない場合は、「ランタイム」を「組み込み」にして検索してください。
以下を設定します。
From:動的なコンテンツ(稲妻マーク)より、「アレイのフィルター処理」の「値」
Map:
キー1:何もいれません
値1:・
キー2:タスク名
値2:動的なコンテンツより「アレイのフィルター処理」の「値 タイトル」
キー3:期限日時
値3:以下式を設定
if(equals(item()?['dueDateTime'], null), '', formatDateTime(item()?['dueDateTime'],'yyyy/MM/dd'))
上記の式で期限日時をyyyy/MM/dd形式にしています。

5.HTMLテーブルの作成
+をクリックし、「アクションの追加」よりData Operationの「HTMLテーブルの作成」アクションを選択します。
アクションが見つからない場合は、「ランタイム」を「組み込み」にして検索してください。
以下を設定します。
From:動的なコンテンツより「選択」の「Output」

6.作成
+をクリックし、「アクションの追加」よりData Operationの「作成」アクションを選択します。
アクションが見つからない場合は、「ランタイム」を「組み込み」にして検索してください。
以下を設定します。
<a href = "Plannerのリンク">Plannerでタスクを確認する</a>

※Teamsに投稿するときにPlannerのリンクをつけたいだけなので、このアクションは必須ではありません。
7.チャットまたはチャネルでメッセージを投稿する
+をクリックし、「アクションの追加」よりTeamsの「チャットまたはチャネルでメッセージを投稿する」アクションを選択します。
以下を設定します。
投稿者:フローボット
投稿先:フローボットとチャットをする
Recipient:自分のメールアドレス
メッセージ:
未完了のタスク一覧をお知らせします。
動的なコンテンツより「HTMLテーブルの作成」の「Output」
動的なコンテンツより「作成」の「出力」

以上で、フローの作成は完了です。
実行してみる
毎日決まった時間に、未完了で、期限が3日前で、自分が割り当てられているPlannerタスク一覧がTeamsに投稿されます。

終わりに
今回はマイタスクすべてを取得しましたが、2個目のアクションを「タスクを一覧表示します」に変えることで、特定のプランだけを指定することも可能です。
他の人に割り当てられたタスクも通知する方法を調べていますが、わかったら共有したいと思います!
Formsに回答した人に添付ファイル付きのメールを送る(複数添付ファイルも可)

はじめに
「社内セミナーの申し込みフォームなどをFormsで作成し、回答者に添付ファイル付きのメールを送りたい。」
という相談がありました。
Outlookのメールの送信アクションは、デフォルトで1つのファイルしか添付できませんが、複数ファイルを送りたいときもあるかと思います。
今回は、Formsに回答した人に添付ファイル付きメールを送るフローの作り方を紹介します!
フロー全体図

用意するもの
Formsアンケート
回答者にメールを送付させたいFormsアンケートをご準備ください。
今回はサンプルとしてテンプレートのFormsアンケートを用意します。

SharePointドキュメントライブラリ
ご自身のOneDrive Businessのフォルダを指定することもできますが、今回はSharePointドキュメントライブラリにします。
1.任意のSharePointサイトより「サイトコンテンツ」→左上の「+新規」→「ドキュメントライブラリ」をクリックします。

2.「空のライブラリ」をクリックします。

3.ドキュメントライブラリの名前を決めて「作成」をクリックします。
ここでは「Attachments」という名前にします。

4.ドキュメントライブラリが作成されたら、メールに添付させたいファイルを格納します。
ここでは、3種類のファイルを格納します。
複数ファイル格納していますが、1ファイルだけでもフローは動きます。

以上で準備は完了です。
フロー作成手順
1.新しい応答が送信されるとき
Power Automateを開き「作成」→「自動化したクラウドフロー」をクリックします。
任意のフロー名をつけて、トリガーを「新しい応答が送信されるとき」にして「作成」をクリックします。

以下を指定します。
フォームID:事前準備で作成したアンケート

2.応答の詳細を取得する
+をクリックし、「アクションの追加」より「応答の詳細を取得する」アクションを選択します。
アクションが見つからない場合は、検索ボックスで「Forms」と検索してください。
以下を指定します。
フォームID:トリガーで指定したアンケートID
応答ID:動的なコンテンツ(稲妻マーク)より「新しい応答が送信されるとき」の「応答ID」

3.変数を初期化する
+をクリックし、「アクションの追加」より「変数を初期化する」アクションを選択します。
アクションが見つからない場合は、検索ボックスで「変数」と検索してください。
以下を指定します。
Name:ここでは「添付ファイル」とします。(好きな名前でOK)
Type:Array

4.ファイルの取得(プロパティのみ)
+をクリックし、「アクションの追加」より「ファイルの取得(プロパティのみ)」アクションを選択します。
アクションが見つからない場合は、検索ボックスで「SharePoint」と検索してください。
以下を指定します。
サイトのアドレス:SharePointドキュメントライブラリがあるアドレス
ライブラリ名:事前に作成したドキュメントライブラリ

5.ファイルコンテンツの取得
+をクリックし、「アクションの追加」より「ファイルコンテンツの取得」アクションを選択します。
アクションが見つからない場合は、検索ボックスで「SharePoint」と検索してください。
以下を指定します。
サイトのアドレス:SharePointドキュメントライブラリがあるアドレス
ファイル識別子:動的なコンテンツ(稲妻マーク)より「ファイルの取得(プロパティのみ)」の「識別子」


ここで、自動でFor eachアクションが追加されます。
6.配列変数に追加
For each内の+をクリックし、「アクションの追加」より「配列変数に追加」アクションを選択します。
アクションが見つからない場合は、検索ボックスで「変数」と検索してください。
以下を指定します。
Name:添付ファイル(3のアクションでつけた名前)
Value:
{
"Name": "@{items('For_each')?['{FilenameWithExtension}']}",
"ContentBytes": @{body('ファイル_コンテンツの取得')}
}
7.メールの送信(V2)
+をクリックし、「アクションの追加」より「メールの送信(V2)」アクションを選択します。
アクションが見つからない場合は、検索ボックスで「Outlook」と検索してください。
以下を指定します。
宛先:動的なコンテンツ(稲妻マーク)より「応答の詳細を取得する」の「Responders' Email」
件名:自由なもの
本文:自由なもの
詳細パラメーターを「すべて表示」にして、「添付ファイル」のTマークをクリックします。

動的なコンテンツ(稲妻マーク)より「変数」の「添付ファイル」を指定します。


以上で、フローの作成は完了です。
実行してみる
実際にFormsアンケートを回答してみると、、
フローが実行されて、複数ファイルが添付されたメールが回答者(私)に届きました!

おわりに
「メールの送信(V2)」アクションで動的に添付ファイルを指定することで、複数ファイルを添付することができます。
フローで指定しているのはドキュメントライブラリの場所だけなので、添付するファイルが変わってもフローをメンテナンスする必要がないのは便利ですね。
Launch関数でTeamsのメッセージリンクを起動したときに、直接Teamsアプリを開くようにする方法

はじめに
この記事は、Power Apps Advent Calendar 2023]シリーズ2 12月17日担当分の記事です。
TeamsのメッセージリンクをSharePointリストに格納し、Power Appsでアプリを作ったとき、ボタンをつけてワンタップで該当のメッセージに飛べるようにする。
ということをよくやるのですが、ある時、ユーザーさんにこう言われたことがありました。
「ボタンをクリックすると、毎回Microsoft Teamsを開きますか?とブラウザが開くので、直でTeamsアプリが開くようにしてほしいのですが、、」

確かに!!
ということで、今回はPower AppsからTeamsリンクを開いたときに、直でTeamsアプリが開くようにする方法をご紹介します。
Before
今までどうなっていたか?をサンプルデータを用いて紹介します。
Teamsメッセージ
チャネルメッセージをSharePointリストに格納したいとします。
今回はサンプルなので超シンプルにしています。

SharePointリスト
今回は、タイトル(1行テキスト)とMessage Link(ハイパーリンク)列を作成しました。


Power Automateクラウドフロー
フローは、チャネルに新しいメッセージが投稿されたら、メッセージの詳細を取得し、
上記のSharePointリストに格納させています。
これにより、TeamsのメッセージリンクをSharePointリストに格納することができます。

Power Appsキャンバスアプリ
画面に垂直ギャラリーを配置し、データソースは上記で作成したShrarePointリストにしています。
ギャラリー内に画像を配置し、OnSelectプロパティに以下を設定していました。
Launch(ThisItem.'Message Link')

Launch関数を用いて、SharePointリストのハイパーリンク列を起動し、Teamsの該当するメッセージに飛ぶことを想定していました。
learn.microsoft.com
しかし、①Power Appsでボタンを押す→②WebでTeamsが開く→③Teamsアプリが開く
という順番になっていました。

After
OnSelectプロパティを以下に変えることで解決しました。
Launch(Substitute(ThisItem.'Message Link',"https://teams.microsoft.com","msteams:"))

Substitute関数を使用して、["https://teams.microsoft.com"]を["msteams:"]に変更しました。
learn.microsoft.com
これをすることで、ボタンをタップしたときに、一瞬WebでTeamsが起動するのですが、
「Microsoft Teams(work or school)を開く」を一度クリックすれば、それ以降は直接Teamsアプリが開くようになります。

さいごに
Power Automateで取得したTeamsリンクをブラウザを経由せずに直接アプリで開く方法のご紹介でした。
今年はあまりブログを投稿できませんでした、、最近DataverseやAI Builderについて触り始めたので、その辺の記事も書けたらと思っています。
Power Apps Advent Calendar2回目の参加でした!良いお年を!
SharePointリストの複数行テキストをTeamsに投稿したときに改行させる方法

はじめに
SharePointリストに項目を作成したとき、Teamsチャネルに投稿するフローを作っていた時の話です。
複数行テキスト列に改行を入れた状態で送信したのに、Teamsチャネルには改行なしで投稿されてしまうことに気づきました。
SharePointリストでは改行ありで作成されるのに、

Teamsには改行なしで投稿されてしまいます。

今回は、Teamsにも改行ありで投稿されるようにする方法をご紹介します。
フロー全体図

やり方
項目が作成されたとき、チャットまたはチャネルで投稿するシンプルなフローをスタートとして説明します。

SharePointリストは、「タイトル」列と「Comment」という複数行テキスト列を使っています。

1.作成
「項目が作成されたとき」トリガーの下に「データ操作」の「作成」アクションを追加します。
「作成」アクションはもう一個使うので、わかりやすく「作成:改行」という名前にしています。
入力のところに、改行を設定します。

2.作成
「作成:改行」アクションの下に同じく「データ操作」の「作成」アクションを追加します。
こちらもわかりやすく「作成:置換」という名前にしていますが、名前を付ける付けないはおまかせします。
入力のところに、以下を設定します。
replace(triggerOutputs()?['body/Comment'],outputs('作成:改行'),'<br>')
※triggerOutputs()?['body/Comment']の部分は、動的なコンテンツより複数行テキスト列の列名を選択しています。

replace関数を使うことで、複数行テキストの改行をhtmlの改行タグに置換させます。
replace関数についてはこちらのブログがわかりやすく解説されておりましたので、共有いたします。
blog-tips.sekenkodqx.jp
3.チャットまたはチャネルでメッセージを投稿する
最後に、「Message」に手順2で作成した動的コンテンツの「出力」を含めたら完了です。

フローを実行すると、以下のようにTeamsにも改行ありで投稿されます。

SharePointリストをPower BIでPlannerっぽく可視化する

はじめに

この記事は、Power BI Advent Calendar 2022 カレンダー2の 12月16日(金)担当分の記事です。
私はよく業務でSharePointリストを使っているのですが、プロジェクトの進捗管理もリストを用いて行うことがあります。
そこで、SharePointリストをPower BIで可視化できたら面白そう!と思い、Power BIを触り始めました。
タスク管理ツールとして、MS製品に「Microsoft Planner」というものがあると思いますが、メンバーごとに割り振られているタスクの数を可視化できる機能がありますよね。

これをSharePointリストを可視化したときにもできたらいいな!と思いチャレンジしたところ、上手くできずに躓いてしまいました。
(初めからPlannerを使えという話はナシでお願いします笑 リストの方が列をカスタマイズできるので便利な時もあるのです(*´ω`))
今回は、PlannerのグラフみたいにSharePointリストを可視化する方法がわかったので、共有したいと思います!
用意するもの
Power BIレポート作成手順
4.Power Queryエディターで列を展開
今回の本題がここになります。
Power Queryエディターが開くので、User列を確認しましょう。
「Table」となっているので、このままでは使えません。

なので、User列の右にある「展開」マークをクリックして、「title」にチェックをして「OK」をクリックします。

すると、User列が展開されて、ユーザー名が表示されるようになります。
また、プロジェクト名が割り当てられたユーザー分、表示されるようになります。
これでレポートを作成できる準備ができました。
左上の「閉じて適用」をクリックします。

5.レポート作成
視覚化メニューから「積み上げ横棒グラフ」を選択し、以下画像のようにセットするとユーザーごとにグラフが表示されるようになります。
Planner っぽいグラフになりましたね!

さいごに
SharePointリストをPower BIでPlannerっぽく可視化する方法の紹介でした。
Power BI初学者のため、大した記事を書けなかったかもしれませんが、念願のQiita Advent Calendar にPower Automate/Power Apps/Power BIで参加できてよかったです!
■Power Automate Advent Calendar 2022の記事
yuri365lily.hatenablog.com
■Power Apps Advent Calendar 2022の記事
yuri365lily.hatenablog.com
今年はブログを開設して、勉強会に参加と色々Powerな活動をできた年でした。
来年はもっとPowerな一年にできるように頑張ります!
皆様良いお年を!
Teamsチャネルに投稿されたメッセージをSharePointリストに格納する

はじめに
この記事は、Power Automate Advent Calendar 2022 カレンダー2の 12月10日(土)担当分の記事です。
Teamsを使っていて、参加しているチームが多くてどこにどのメッセージがあったかわからなくなる時はありませんか?
Power Automateを使ってチャネルに投稿されたメッセージをリストに格納すれば、後で一覧で確認/検索もできるのではとふと思いました。

また、フローを複製することで、別チームのメッセージも同じリストに格納することができます。
メッセージに添付されたファイルもリストの「添付ファイル」列に格納することができます。
更にリストに格納するときに、アイテムごとに固有のアクセス権を付与することで、自分が参加しているチームに投稿されたアイテムしか表示しないこともできます。
※リストのアイテムごとに固有のアクセス権を付与できるのは5,000件までです。

今回は、これらの機能をPower Automateで自動化したので、作り方を紹介します!
フロー全体図

このフローは、以下を想定しています。
・Teamsチャネルに投稿されたメッセージと添付ファイル、リンクをSharePointリストに格納
・アイテムごとに個別(チーム別)のアクセス権を付与
用意するもの
SharePointリスト
以下のような列を作成してください。
赤枠の部分が新たに作成した列になります。それ以外は規定列です。
チーム列は、どこのチームから投稿されたかわかりやすくするためにチーム名が記載された選択肢列としました。

私は以下のように列を並び替えました。「添付ファイル」も規定列です。

フロー作成手順
1.チャネルに新しいメッセージが追加されたとき
Power Automateを開き「作成」>「自動化したクラウドフロー」をクリックします。
トリガーに「Microsoft Teams」の「チャネルに新しいメッセージが追加されたとき」を選択し、以下を指定します。
チームID:SharePointリストに格納したいチームID
チャネル:SharePointリストに格納したいチームのチャネル

2.メッセージ詳細を取得する
「+新しいステップ」から「Microsoft Teams」の「メッセージ詳細を取得する」アクションを選択し、以下を指定します。
メッセージ:動的なコンテンツより「チャネルに新しいメッセージが追加されたとき」の「メッセージID」
メッセージの種類:チャネル
チーム:トリガーで指定したチームID
チャネル:トリガーで指定したチャネル

3.条件
「+新しいステップ」から「組み込み」の「コントロール」>「条件」アクションを選択し、以下を指定します。
左辺:動的なコンテンツより「メッセージ詳細を取得する」の「本文コンテンツ」
次の値に等しくない
右辺:systemEventMessageを画像のように入力してください

この条件アクションは、たまにチャネルに投稿していないのに空白のアイテムが作成されるときがあり、その正体がsystemEventMessageだったため、回避するために入れています。
systemEventMessageは、チャネルの追加などのTeamsのイベントのことを指しており、イベントをきっかけにフローがトリガーされてしまうケースが過去に何回かありました。
systemEventMessageに関する詳細情報は、以下リンクを参考ください。
learn.microsoft.com
4.以下はいの場合「Htmlからテキスト」
「+新しいステップ」から「Content Conversion」の「Htmlからテキスト」アクションを選択し、以下を指定します。
動的なコンテンツより「メッセージ詳細を取得する」の「本文 コンテンツ」

Htmlからテキストに変換させることで、後にSharePointリストに格納するときに綺麗なテキストが入ります。
5.項目の作成
「+新しいステップ」から「SharePoint」の「項目の作成」アクションを選択し、以下を指定します。
サイトのアドレス:SharePointリストがあるアドレス
リスト名:事前に作成したSharePointリスト
Title:動的なコンテンツより「チャネルに新しいメッセージが追加されたとき」の「メッセージ件名」
投稿日時:動的なコンテンツより「チャネルに新しいメッセージが追加されたとき」の「メッセージcreatedDateTime」
Teamsで見る:動的なコンテンツより「メッセージ詳細を取得する」の「メッセージリンク」
本文:動的なコンテンツより「Htmlからテキスト」の「プレーンテキスト」
チームValue:任意の選択肢
投稿者Claims:動的なコンテンツより「チャネルに新しいメッセージが追加されたとき」の「メッセージfromユーザーdisplayName」

6.アイテムまたはファイルの共有を停止します
「+新しいステップ」から「SharePoint」の「アイテムまたはファイルの共有を停止します」アクションを選択し、以下を指定します。
サイトのアドレス:SharePointリストがあるアドレス
リストまたはライブラリ名:事前に作成したSharePointリスト
ID:動的なコンテンツより「項目の作成」の「ID」

アイテムごとに個別のアクセス権を付与させるため、このアクションでアクセス権の停止を行います。
7.アイテムまたはフォルダーへのアクセス権の付与
「+新しいステップ」から「SharePoint」の「アイテムまたはフォルダーへのアクセス権の付与」アクションを選択し、以下を指定します。
サイトのアドレス:SharePointリストがあるアドレス
リストまたはライブラリ名:事前に作成したSharePointリスト
ID:動的なコンテンツより「項目の作成」の「ID」
受信者:チームのメールアドレス
ロール:Can View
受信人への通知:いいえ

受信者で指定したチームに属している人にアイテムのアクセス権が付与されます。
※注意点
SharePointリストのアイテムごとに個別のアクセス権を付与していますが、付与できるのは5,000件までになっています。
5,000件を超えるアイテムをリストに格納される場合はご注意ください。
8.Apply to each
「+新しいステップ」から「組み込み」の「コントロール」>「それぞれに適用する」アクションを選択し、以下を指定します。
動的なコンテンツより「チャネルに新しいメッセージが追加されたとき」の「メッセージ添付ファイル」

9.パスによるファイルコンテンツの取得
Apply to each内で「+新しいステップ」から「SharePoint」の「パスによるファイルコンテンツの取得」アクションを選択し、以下を指定します。
サイトのアドレス:SharePointリストがあるアドレス
ファイルのパス:Shared Documents/チャネル名/Item(‘Apply_to_each’)?[‘name’]

ここでは、添付ファイルがチャネル直下にあることを前提にしています。
10.添付ファイルの追加
Apply to each内で「+新しいステップ」から「SharePoint」の「添付ファイルの追加」アクションを選択し、以下を指定します。
サイトのアドレス:SharePointリストがあるアドレス
リスト名:事前に作成したリスト
ID:動的なコンテンツより「項目の作成」の「ID」
ファイル名:式よりItem(‘Apply_to_each’)?[‘name’]
ファイルコンテンツ:動的なコンテンツより「パスによるファイルコンテンツの取得」の「ファイルコンテンツ」

おまけ
SharePointリスト書式設定1:行をコンパクトに表示する
格納したTeamsメッセージが長文だと、標準では縦長の行になり見づらくなってしまいます。そこで、列の書式設定を用いて「本文」列をコンパクトに表示させます。

1.「本文」列を左クリックし、「列の設定」>「この列の書式設定」をクリックします。

2.「詳細モード」をクリックします。

3.JSONの編集画面になるので、以下に置き換えます。
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/column-formatting.schema.json",
"elmType": "div",
"style": {
"display": "block",
"max-height": "10px",
"padding": "11px 0",
"overflow": "hidden"
},
"txtContent": "@currentField"
}
これを行うと、複数行テキスト列がだいたい3行までの表示になるので、リスト全体がコンパクトに表示されておすすめです!
SharePointリスト書式設定1:ハイパーリンク列をアイコンにする
メッセージリンクがハイパーリンク列に格納されるのですが、そのままだと長いURLが格納されてしまいます。
代替テキストに変えるという方法もありますが、せっかくならアイコン表示にしちゃいましょう。

1.「Teamsで見る」列を左クリックし、さきほどと同じ手順でJSONの編集画面に行き、以下に置き換えます。
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "a",
"style": {
"text-decoration": "none",
"font-size": "25px",
"margin": "0 auto"
},
"attributes": {
"iconName": "TeamsLogo",
"target": "_blank",
"href": "=@currentField"
}
}
ちなみに、"iconName"の「"TeamsLogo"」の部分を変えると他のアイコンになります。
アイコン一覧は以下のサイトを参考ください。
www.flicon.io
これで、ハイパーリンク列がTeamsアイコンになり、Teamsアイコンをクリックすると該当メッセージに飛ぶことができます。
さいごに
私の部署では、グループ会社さんや派遣さんがいるため、業務連絡用のチームが複数あります。
(プライベート/共有チャネルは使っていません)
いずれか1つだけの参加であれば問題ないのですが、すべてのチームに参加していたため、どこにどのメッセージがあるかわからなくなることが多々ありました。
複数ある業務連絡用のチームのメッセージをひとつのリストに格納したら、一覧で表示することができて結構便利なのでは?と思い、今回のフローを作成しました。
他にもいい使い方はあると思うので、よかったら作ってみてください!



