313 Views
July 20, 24
スライド概要
酒と業務効率化をこよなく愛するオヤジ、武器はMicrosoft365一択だったけどノーコードもステキ!PowerPlatformで業務効率化が究極に進んだ世の中が理想。半ランク上(笑)のPowerAppsオジサンを目指します。好きなものは競馬、プロレス。
夢はAIに乗せて 2023/9/9 dai365
自己紹介 名前 dai365(最近ネットに実名が掲載されました(笑)) 年齢 50 趣味 酒、競馬、プロレス 2022年3月くらいからPowerAppsにハマり、職場でアプリたくさん 作ってたら、デジタルシフトのリーダーになってしまい、現在は月2 くらいのペースで業務のお悩みに基づく相談会を開催しています。
スキルのレベル へっぽこですいません 3年前 Excelのvlookup関数くらい 2年前 VBAを始める、For Nextくらい 1年半前 PowerApps始める 思いのほかPowerAppsにハマり、 要領マニュアル検索アプリ、運転日報アプリ、保存文書入出庫アプリ、 日程調整アプリ、法務契約書相談アプリ等々を職場でリリース(笑) 半ランク上のアプリ作りを目指している
まず初めに 本日お話しする内容は、個人利用目的であり 商用利用や権利侵害を目的としたものではありません。 1ファンの⾧年のをたまたまPowerAppsを使って具現化したものだと いう点にご理解をお願いいたします。
この登壇を決意したキッカケ(無茶?) 前回#6にて、しょぼいビンゴカードゲームで登壇させていただき その後、【JPPGB】ゲーム作成コンテスト #0の凄まじい内容に驚愕 大賞を受賞したヨウセイさんの「青春を溶かしたパチスロ」 という言葉に感銘を受ける。 そう、私にとっての「青春を溶かした」ものとは?
そう、それはプロレス 何を隠そう、プロレスファン歴40年超(笑) 所持しているプロレス動画は2,800ファイル、4TB、全て動画化 (ちなみにビデオ300本、DVD1500枚あった) 実家には週刊プロレス、週刊ゴング他4,000冊が眠る 生まれも育ちも北海道だが、プロレス見たさに関東の大学へ進学 結果、4年間で54回観戦 今から30年前の新日本プロレスG1両国7連戦は完全制覇した そして、夏といえばG1クライマックスの季節
プロレスの魅力って何? 力道山に始まり、馬場、猪木と受け継がれた日本のプロレス そこには選手の離合集散が幾度も繰り広げられた。 なぜレスラー達は団体を旗揚げし、そしてまた離散するのか? それは誰もがトップに立ちたいという野望があるからである デビューしながらに将来のエースを確約された者 ⾧年に渡って負け役(ジョバー)を任されてきた者 誰しもが日の当たる世界を目指して闘う そしてそこにはジェラシーと裏切りが、人間そのものな世界 それがプロレス
7月15日夜(ゲームコンテスト終了後) 大いに盛り上がったゲームコンテストの夜 みんなすごいなあ~、自分も何か作ってみたいなあ~ 作るならプロレスのゲームだよなあ~ と思い立つ まずはG1クライマックスの季節も近いし、リーグ戦出来ねえかな と思いながらパワスロを回す
リーグ戦って対戦表必要だよね 対戦表ってどうやって作るんだよ~ ギャラリー使うよなあ、きっと・・・・ と途方に暮れていた私の脳裏に、JPPGB#6の光景が ふらりさん、Gallery in Galleryで座標マップとか作ってた なあ・・・ https://www.docswell.com /s /fworlddocs /5YWMW92023-06-24-155843#p7 よし、まずはやってみますか!!
レスラー選んで、ボタン押したらリーグ戦のカード決定!! あれだけ苦手にしていた配列のはずなのに・・・・・ やはりプロレスゲームを作りたい力が何かを生んでいるのか??
まず、基本形が完成 レスラー選択⇒レスラーマスターから10人選ぶ、ボタン押す ギャラリーにリーグ戦の試合が表示される 10人だと10×9/2=45試合 *座標でやったのでフィルターで余計な試合を省ける のちにこれでは物足りなくなる・・・
さあ、対戦だ!! まあ、試合はGallery〇〇.Selectedでいけちゃうよね さてはて、勝敗どうやって決めよう・・・・・ パラメーターもいいけど、絶対偏るよなあ・・・・ たぶん、天龍とか最強にしちゃう気しかしない(笑)
ここで思い出したのが 私の特技というか趣味は、大人の工作という名の写経(笑) このころもyoutubeでギークフジワラさんのチャンネルで作成していた プライベートChatGPTがあった https://www.youtube.com/watch?v=jERrUWTm7nA それに春先にOpenAIのAPI叩いて遊んでたしなあ このときはQiitaで益森さんの記事参考にしたよなあ https://qiita.com/Takashi_Masumori/items/96b9e0f1590762fd6f ad でもなあプロンプトとかよくわかんねえしなあ・・・
まずは普通にChatGPTに投げてみた Few-shot Learningっていうのかふむふむ・・・ 俺はプロレスマニア、例文ならいくらでも作れるぞ(笑)
まあ、結果帰ってきますよね、普通に 接続も春先に作ったお遊びコネクタとフローもあるし、いけるだろ
みなさんのおかげです。ホント もしくは こんな50のオジサンがこんなことできるの、Youtubeや皆様のおかげです
何気に苦労した気がするのが星取表
先ほども言ったようにこのリーグ戦は座標でやってます。
つまり1-2の対角は2-1
1-2が〇なら2-1は✕、これを格納しないと点数出せない
UpdateIf(colCard,cell=Text(GalleryMatch.Selected.PositionY & "-" &
GalleryMatch.Selected.PositionX),{result:winner,detail:detail2},cell=Text(Gallery
Match.Selected.PositionX & "-" &
GalleryMatch.Selected.PositionY),{result:winner,detail:detail2})
とコレクションに結果と試合詳細を戻してあげて
*最初Patchでやったけど挙動が安定しなかったのでUpdateIfに変更した。
CountRows(Filter(colCard,result=ThisItem.name))これを数えれば勝ち点2
いや、だからGPTなんだから結果は返ってくるって ここでハタと気づきます。 勝敗判定どうやってやんのよ?・・・と リーグ戦だよ、星取表作りたいよね?得点もわかるようにしたいよね? と悩んだ結果 UpdateContext({winner:Right(Label8.Text,Len(Label8.Text)Find("★",Substitute(Label8.Text,":","★",Len(Label8.Text)Len(Substitute(Label8.Text,":","")))))} 勝者:〇〇と最後にGPTに出力させて、そこを抜き出して変数に格納 なんというエクセル風味な解決方法 たまーにおかしな挙動するときあるけど、まあ愛嬌(笑)
ふう、できたできた 正直、これだけでもプロレスファンにとっては十分に遊べます 実際、完成した夜、思い切り時間溶かしました(笑)
いや、ここまでできたんだからさ・・・ 出戻りガツオさんがText to Speechとかやってたなあ、あれやってみたいなあ・・・ https://qiita.com/DEmodoriGatsuO/items/37ee57af6fa62e4a7831 でもなあ、出来るかなあ、やれるかなあ・・・ということでチャレンジ!! フロー自体は難なく完成 がしかし、応答が音声?? どうやんのこれ 思わず出戻りガツオさんにDM ありがとうございました!! この格納が難敵でした(笑)
試合結果も出来た、さあ次は うーん、もっと雰囲気出したいなあ、やっぱさプロレスはテーマ曲だよ!! どうせ個人利用しかしないし、ということで プロレスファンは季節ごとに身体が反応する曲があります またイントロを聞くだけで血がたぎる曲があります これ搭載してから、余計に時間溶けるようになりましたね(笑) 聞いちゃうんですよ、ずっと
ちなみに登場するレスラーはというと 初期段階では歴代IWGP、三冠、GHCのメジャー3大タイトルの歴代王者としていた。(60人ちょい) がしかし、そんなものでは飽き足らずに、すぐに180人に拡大(笑) これにより力道山以降の主要レスラーはほぼ網羅 たぶん、現役選手よりも物故者のほうが多い プロレスファンはそれを「あの世プロレス」と呼び、夢のカードを夢想する
いや、これシングルリーグだけじゃもったいない 最初はシングルのリーグ戦しか作ってなかったんですね でもこれ全部終わらせるのに45試合やるんですね(セーブ機能作れよ、おい) 通勤時間にやると、マジ時間溶けます(笑)、優勝決まるまでやっちゃうやつです もっとライトに楽しみたいときってありますよね ということでシングル戦とタッグ戦追加!! とここで初めてメニュー必要じゃね?となる
実装してみたかったんですよ、このメニュー ハイ、またまた大人の工作です とある土曜日のことです。何気にYoutube見てたら、Akiraさんがライブやってるじゃないですかあ 見ちゃいましたよ、ずっと https://www.youtube.com/watch?v=5vEkFcDWZRE&t=2186s と同時に即座に写経開始(笑) やってみたかったんですよねえ、ギャラリーで作るメニュー
増え続けるやりたいこと
シングルリーグ戦に始まり、シングル、タッグと実装
ここまできたらタッグリーグ戦でしょお!!
これがねえ、配列苦手おじさんはしばし考えましたよ(笑)
Clear(coltagleague);
Collect(coltagselect,FirstN(Shuffle(Filter(WreslerMST,IsBlank(team))),20));
ForAll(Sequence(10,1,1),Collect(coltagleague,{name:First(coltagselect).name & "・" &
Index(coltagselect,2).name,subname:First(coltagselect).subname & "・" &
Index(coltagselect,2).subname,name1:First(coltagselect).name,name2:Index(coltagselect
,2).name});Remove(coltagselect,First(coltagselect));Remove(coltagselect,First(coltagsele
ct)));Clear(coltagselect)
20人選んで、タッグ組ませて、2人消して、またタッグ組ませるを10回
最初Sequence(10,1,1)が書けずに10回書いたことはナイショ(笑)
プロレスにはさ、こういうのもある シングルリーグ戦に始まり、シングル、タッグ、タッグリーグ戦も実装 次何にしようかなあ~ あ!!試練の10番勝負作ろ(軽っ) というノリで試練の10番勝負も完成 相手だけ変えたい場合にも対応(笑)
時は1988年8月8日、横浜文化体育館 この年、4月に飛龍革命が勃発し、当時IWGP王者は藤波辰巳 猪木は背水の陣で弟子である藤波に挑む 実況はすでにプロレス実況を離れていた古舘伊知郎 真夏の酷暑の中、試合はなんと60分フルタイム引き分けに 試合後、猪木を⾧州が肩車、猪木の目には涙が光っていた・・・ このテレビ中継のラストに流れたのが、この名曲 35年前のあの日、藤波は猪木を60分独り占めにした・・・ プロレスとはつくづく記憶のスポーツ ということでMemorialコーナー設置
やりたいことがそこにはあった・・・ 7月26日、私はとあるコミュニティに初参加します。 そうです。おうじゃさんといっしょです!! https://oujasan-to-issho.connpass.com/event/290808/ ここでVoiceVoxというものの存在を知ってしまいます(笑) https://voicevox.hiroshiba.jp/ 18番を指定(指名?)すると、そこには・・・・ いやあ、頑張りましたよ、このときは https://koruneko.hatenablog.com/entry/2023/04/17/022837 コルネさんの記事も参考にしつつ
なんとか実装
機能拡張というか、マニアックな方向に・・・ かつてプロレスの興業があると、電柱にポスターが貼られていました。 ハイ、昭和の時代の光景です。 ですが、あのポスターを見ると、わくわくしたものでした。 特に好きだったのが、世界最強タッグ決定リーグ戦のポスターでした。 うーん、こういう機能がプロレスゲームには欲しいよなあとか思いながら作成(笑)
ここで使ったのは、メニューと同じく 基本的にギャラリー使うんですが 表示したい場合と、そうじゃない場合がある 要はテーブルにそれを指定してあげればいいんですね
試合終わった後って、取材するよなあ・・・ 既に満載なんですが、寝る前になると次から次へと妄想が湧いてきます 今回はやはりAI搭載がウリなので、もう一ひねりしたいところです。(いやもう十分だろ) 試合が終わったら、控室でプロレス専門誌記者が取材しますよね。 ハイ、インタビュー機能を実装してみました(笑)
さて、どうやった 意外と簡単にそれっぽくできました。 勝者と試合概要は対戦画面ですでにあるので、それを使ってロールプレイ風にプロンプトを投げる 後楽園ホールの控室
プロレスといえば東スポ!! さらに、寝る前になると次から次へと妄想が湧いてきます 今回はやはりAI搭載がウリなので、もう一ひねりしたいところです。(いやもうホントにいいだろ) プロレスといえば東スポです。 あの衝撃的な見出しにワクワクしたものです。 東スポ作るには、見出しと記事が必要です。
さて、どうやった 私の今回のやり方だと、プロンプトに対する回答は常にコレクションのFirstにあります。 ということはコレクションを表示させたままだと、プロンプトを複数投げると、変わってしまいます。 ということはどこかに格納してそれを表示させる必要があります。 上が見出しを作成して、格納。下が記事を作成して、格納。 新聞出来たら、表示するって算段です。
当然のことですが、マスター管理も必要 すでにレスラーの数ふくれあがってるんですが・・・マスター管理メニューも作りましょう ということで再び益森さんの記事にお世話になりました。 https://qiita.com/Takashi_Masumori/items/a1c0f6f557605b91a596 まあ、サクっとできたんですが、アレ?これ新規登録ないのかあ じゃあ作るか、と思ったときにまた思い出してしまうんですね・・・余計なことを
灯台下暗し 8月5日のことです。土曜日と言えば「気ままに勉強会」です。 この日は、いつもお世話になっていて、また今回のきっかけともなったヨウセイさんの登壇。 内容はさすがの内容。 ところが、私が驚いたのは最後に実演したcsv取り込みフロー 界隈の方々が驚愕したことにも驚きましたが それよりなにより、「あ、このアプリ買ったじゃん、会社で。持ってるし(笑)」 半年前に部下が欲しいと言ったので言われるままに買わせていただいたんですね。 当時は読解など無理でしたが、今見てみると・・・ふむふむ、こういうことね
ちなみにヨウセイさんとは 昨年の春ごろ、FacebookのJapan Power Apps User groupにて 当時、初学者の私はしょーもない質問を何度も書き込む それに懇切丁寧に答えてくれたのがヨウセイさん 昨年の秋ごろ、何か恩返しがしたいと思い、所属されている会社にメール(仕事として) そこから仕事でもお付き合いが始まり、技術指導を受けること数回 そのたびに、ワンランク上のアプリ開発を教えていただいております。 本当にいつもお世話になりっぱなしです。
まあ最小限アップできればいいかな 元のフローで何をやってるかを解析して 不要な部分は削って、必要な部分は修正
まあ、もういいでしょう、このへんで(笑) シングルマッチ タッグマッチ シングルリーグ戦 • 選手選択して対戦、VoiceVox搭載 • 選手選択して対戦 • 選手選択して対戦、星取表、インタビュー タッグリーグ戦 • 選手選択して対戦、星取表、最強タッグポスター 試練の10番勝負 • 選手選択して対戦、VoiceVox搭載 異種格闘技戦 メモリアル マスター管理 • 選手選択して対戦、VoiceVox搭載、東スポ • 選手画像パターン、名シーンパターン • 一覧から訂正削除、CSVアップロード機能
BGM、めっちゃこだわりました(笑) Top • 炎のファイター Menu • Childs Anthem シングルマッチ • NTVスポーツテーマ タッグマッチ • カクトウギのテーマ シングルリーグ戦 • G1クライマックスのテーマ タッグリーグ戦 • 世界最強タッグ決定リーグ戦のテーマ(オリンピア) 試練の10番勝負 • スカイハイ 異種格闘技戦 メモリアル マスター管理 • UWFメインテーマ • 旅姿6人衆
お盆明け、なんかやり始めたぞ、また(笑) いや、だってさ登壇9月9日(土)でしょ、まだ3週間あるじゃん(笑) もう一ひねりしないと、皆さん納得してくれませんよ・・・ やるなら徹底的にでしょ、という心の声が聞こえてきた ということでMemorialコーナー拡充!!! なんといっても私には2800ファイルの過去動画がある!! なんか切り出し始めちゃったよ、時間溶ける溶ける
プロレスラーって活舌悪いんですよね 動画切り出したらmp3化は楽勝なので、じゃやってみましょうか 今度はSpeech to Textの実装です。(もはやバカ) しかも春先にRezaさんのyoutubeみながらコネクタ作ってあったし (いや、ちゃんとAzure使えよ、とツッコミたくなる)
うーん新キャラ作りたいときもあるよなあ 今回のテーマは生成AI搭載がウリです。(いやもういいってホント) マスターにNewって作ったよな、あれGenerateにすっか ということでGPT画面も追加
生成AIって文字だけじゃないよなあ せっかくゲーム作ったんだからロゴ欲しいよなあ いや、俺デザインセンスないし(笑) ということでLeonard.AI使ってみました なんとなく週刊ゴング創刊号に見えるのは、気のせい?
リーグ戦の闘う順番、巡業風にしたいよなあ
10人参加ですと公式戦は45試合
ただ並べるだけじゃ面白くない
やっぱ、興行巡業風に並べてみたい!!
ということで、組み合わせ順を追加
ClearCollect(colindex,{id:1,cell:"1-2",location:1},{id:2,cell:"3-4",location:1},{id:3,cell:"5-6",location:1},{id:4,cell:"7-8",location:1},{id:5,cell:"910",location:1},{id:6,cell:"1-3",location:2},{id:7,cell:"2-4",location:2},{id:8,cell:"5-7",location:2},{id:9,cell:"6-10",location:2},{id:10,cell:"89",location:2},{id:11,cell:"1-4",location:3},{id:12,cell:"2-5",location:3},{id:13,cell:"3-8",location:3},{id:14,cell:"6-9",location:3},{id:15,cell:"710",location:3},{id:16,cell:"1-5",location:4},{id:17,cell:"2-6",location:4},{id:18,cell:"3-10",location:4},{id:19,cell:"4-8",location:4},{id:20,cell:"79",location:4},{id:21,cell:"1-6",location:5},{id:22,cell:"2-7",location:5},{id:23,cell:"3-9",location:5},{id:24,cell:"4-5",location:5},{id:25,cell:"810",location:5},{id:26,cell:"1-7",location:6},{id:27,cell:"2-9",location:6},{id:28,cell:"3-5",location:6},{id:29,cell:"4-10",location:6},{id:30,cell:"68",location:6},{id:31,cell:"1-8",location:7},{id:32,cell:"2-3",location:7},{id:33,cell:"4-9",location:7},{id:34,cell:"5-10",location:7},{id:35,cell:"67",location:7},{id:36,cell:"1-9",location:8},{id:37,cell:"2-10",location:8},{id:38,cell:"3-6",location:8},{id:39,cell:"4-7",location:8},{id:40,cell:"58",location:8},{id:41,cell:"1-10",location:9},{id:42,cell:"2-8",location:9},{id:43,cell:"3-7",location:9},{id:44,cell:"4-6",location:9},{id:45,cell:"59",location:9});
ベタにやりました(笑)、いい方法あったら教えてください
うーん、リーグ戦消化したら必ず課金かぁ リーグ戦には正直消化試合というものがある。 スキップモードもしくは自動モード欲しいよなあ(いやだからこれは遊びだよね(笑)) ということでしばし思案 単純にランダムに勝敗ってやつですね、まあ時短にはなります。 なんですが、これだけで進行すると、マジつまらない 改めてAIの付加価値を思い知る。
いや、つまらんって言ったよね、あんた 消化試合をポチポチするのにすら飽きてきて(おい!!) うーん、一括消化してえよなあとかすぐに思う怠惰な私 じゃあ作るよ、作ればいいんでしょ、と半日 意外とこれ試行錯誤しましたねえ・・・数学苦手なんですよ、マジで 気に入らない結果は即座に塗り替えるwww
じゃあ最後にお見せしますね ここまでの話でおわかりのように、このゲーム権利関係は一切考慮しておりません。 なので、永遠に私の個人遊戯となります。(笑) とはいえ、ホントに作ったの?とか疑われないように、チラリとお見せしますね。
このゲーム、プロレスファンはどう楽しい? 夢のカードが死ぬほど実現するので、時間が溶けまくる 特にリーグ戦のランダムボタンは大会の妄想をものすごく膨らませる。 たまに超豪華メンバーになったリーグ戦は思わず開催してしまう 優勝が気になるので、優勝者確定するまでやってしまう(セーブ作れよ、おい) *なのでスキップボタン実装した(笑) メモリアルメニューで延々と想い出にふけりながら旅姿6人衆を聞いてしまう 類似事例で、ずっとオリンピア、ずっとUWFメインテーマとかもある(笑) 動画無限ループはさらにヤバい。 検証と通勤時間に遊んでいたらOpenAIの請求が
やればできるけど、時間溶けるからやらない機能 すでに機能的には満腹気味なので今回はやらないんですが また気が向いたら追加搭載する(かも)しれない機能 ・対戦方式の拡充 ⇒柔道方式の勝ち抜き戦、イリミネーションマッチ、トーナメント等 ・タイトル戦機能 ⇒シングルはなんとなくイメージ浮かんだけど、タッグめんどそう ・試合概要の精度向上 ⇒週プロやゴングをadd your dataにぶち込んで・・・(もはやバカ) ・選手セレクトでテーマ曲⇒だから~権利関係がさあ ・対戦履歴を考慮した回答⇒一応履歴は残してあるけど、どうでもいいんじゃね
おわりに まさか7月15日に作り始めたときにここまでのゲームが完成するとは思わなかった。 毎週末というか毎晩(笑)、大人の工作をしてものすごく楽しかった。 人生50歳を迎えて、こんなものを作れるようになるとは・・・PowerAppsすげー そして改めて、界隈の方々に感謝申し上げます。 様々な知見を日ごろから発信していただいて本当にありがとうございます。 私は、この程度のスキルですので、真似しかできませんが、組み合わせればこんなことが 出来た!!ということで本日の登壇を閉めさせていただきます。 ご清聴ありがとうございました。
Special Thanks ふらりさん ギークフジワラさん 益森貴士さん 出戻りガツオさん Akiraさん おうじゃさん コルネさん ヨウセイさん RezaDorraniさん 本当にありがとうございます。