スキミー に ChatGPT を導入。より自然な会話を楽しめるようになりました。 #ChatGPT #OpenAI #Skimie

Skimie(スキミエ) は タスク管理 などの情報管理と ゲーミフィケーション を融合させた新しいかたちのサービスです。

そんなスキミエには「スキミー」というキャラクターを育成する機能があります。

スキミーについて

スキミーとは、さまざまな種類がいる対話型のチャットボットであり、成長させることもできます。

成長させると

  • 一定のレベルになると「進化」して姿が変わる

  • 成長させると強くなりさまざまなゲームで有利になる

などのギミックがあります。

ちなみに、ゲームにはバトル機能などがあります。バトルに挑戦するためにスキミーでパーティを構成して敵と戦って報酬を獲得することができます。

日々の仕事や勉強などの創作活動における「タスク管理」や「ナレッジ管理」などの実生活における作業をこなすことで、スキミーを成長させるための素材を獲得してそれをプライベートな時間などにゲームに繋げるというゲーミフィケーションです。

チャットの仕組み

スキミーは今までも会話することが可能でした。

ユーザーからのメッセージに対して、自然言語を認識してSkimieの機能(タスクの件数を表示したり、その他の情報を引き出したり)することができます。

そういった Skimie との機能連携については、厳密さが必要なため、これまで使ってきたAI(Dialogflow)を使って回答します。

より、自然で一般的な情報やキャラクターとの関係性に関する会話については、この度「ChatGPT」を採用してより楽しく会話できるようになりました。

スキミーの今後

スキミーとの会話によって、ユーザーとの関係性構築や、よりSkimieの世界観を知ってもらうための軸となるように実装して参ります。

ぜひ、スキミーとの会話をしていただき、日々の創作活動に

  • タスク管理などシステム的な機能

  • ゲーミフィケーションによる"ワクワク"

  • スキミーとの会話で更なる"ワクワク"

を取り入れて頂ければ幸いです。

3

Game Up Your Life.

Skimieアプリをダウンロードして、タスク管理をゲーム化しよう

Skimieは、仕事や勉強にゲーミフィケーションを取り入れ、モチベーションアップをサポートする情報管理サービスです。

新着記事

複数のPDFファイルを結合したい

最近、複数のPDFの資料を確認する作業があり、PDFを結合するサービスを探していました。検索すると、Webサービスを利用してオンラインでやる方法とツールをインストールする方法の2つがあるようです。今回は、ツールをインストールしてみました。見つけたツールCubePDF Pagehttps://www.cube-soft.jp/cubepdfpage/評判以下のサイトを参考にしました。ざっと読んでみると評価は良さそうな感じでした。https://www.itreview.jp/products/cubepdf-page/reviews感想利用方法がとてもシンプルで、特にマニュアルことなく利用ができました。注意点こちらのソフトをインストールすると、一緒に「CubeWidet」というソフトもインストールされるようです。こちらは、最小化してニュースが表示するようになり気になったのでアンインストールしました。補足こちら、pdfファイルの他にpngファイルでも同様の事ができないか試してみたところ対応できました!

ウェブサイトのパスワードをスマートに管理したい

色々なWebサービスを利用していると、パスワードの管理は困りませんか?最近、Googleで「Google パスワード マネージャー」というサービスがあることを知りました。パスワードを考えたり、メモしたり、管理したり、思い出したりするストレスから解放されるので、とても便利なサービスなので、ぜひ活用しましょう。公式サイトhttps://support.google.com/chrome/answer/95606?hl=JA&ref_topic=7438325サービス概要Chromeを利用して様々なサイトのパスワードを保存することができますパスワードの保存方法Chromeにて、ウェブサイトで新しいパスワードを入力すると、Chromeでパスワードを保存するかダイアログが表示されますので、こちらで [保存] をクリックするだけです。保存したパスワードの利用方法パスワード保存したウェブサイトのログインフォームを表示すると、自動的に入力されます。便利な点パスワードを覚える必要がないGoogleアカウントに連携しているため、スマホ・パソコンのどちらでもパスワード管理ができる操作がとても簡単

利用したECTの料金をすぐに確認する方法

利用したETCの料金をすぐに確認する方法を知っていますか?ETCのカードにもよるかもしれませんが、私の持っているETCカードではすぐに利用料金を確認することができません。そこで検索してみたところ、こんなサービスがありました。ETC利用照会サービスhttps://www.etc-meisai.jp/【サービス内容】こちらはETCカードで利用した走行の利用明細をネット上で確認することができます。【対象】ETCクレジットカード、ETCパーソナルカード及びETCコーポレートカードを持っている方サービス登録に必要な情報ETCカード番号メールアドレス過去のご利用年月日車両番号車載器管理番号【注意点】私の場合、「車載器管理番号」という物に馴染みがありませんでした。こちら、車検証と一緒に「ETC車載器セットアップ証明書」という紙を保管していて、そちらに記載がありました。

東京都のQRコード決済で10%還元キャンペーンが3/23(土)で早期終了

東京都のQRコード決済で10%還元キャンペーンが3/23(土)で早期終了のニュースがありました。この記事を書いているのが「3/21」なので、今日を入れて残り3日になります。3/31(日)までの予定だったので、8日早い終了になります。公式サイトhttps://kurashisupport.metro.tokyo.lg.jp/私は「PayPay」「auPAY」「d払い」「楽天Pay」の中で、「PayPay」がほとんどでしたが、どんな利用割合だったかきになりますね。10%のポイント還元でしたけど、利用店舗が多かったので結構利用した感じはありました。このようなキャンペーンを通して、キャッシュレス化がまた加速しますね。

大阪のお土産って何があるのだろう?

3/23と3/24で大阪に行く予定です。そこで、大阪のお土産について、調べてみました。『りくろーおじさんの店』の「チーズケーキ」と『551』の「豚まん」は、マストですね!楽しみです。私の周りからのお勧めりくろーおじさんの店 焼きたてチーズケーキhttp://www.rikuro.co.jp/551の豚まんhttps://www.551horai.co.jp/カールチーズあじhttps://qa.meiji.co.jp/faq/show/4301?category_id=1&site_domain=default辻利抹茶ラスクhttps://www.otabe.jp/view/category/ct223Web検索1/2(じゃらん.net)https://www.jalan.net/news/article/93846/喜ばれる大阪府のお土産19選!地元民「人気ランキング」&編集部おすすめを紹介01位 豚まん【551蓬莱】02位 焼きたてチーズケーキ【りくろーおじさんの店】03位 堂島ロール【モンシェール】04位 じゃがりこ たこ焼き味ソースマヨ風味【カルビー】05位 GRAND Calbee【カルビー】06位 みるく饅頭 月化粧【青木松風庵】07位 みたらし小餅【千鳥屋宗家】08位 茜丸 五色どらやき【茜丸本舗】09位 本千鳥さぶれ【千鳥屋宗家】10位 ひとくち餃子【点天】編集部おすすめお土産情報岩おこし・粟おこし【あみだ池大黒】大阪花ラング【あみだ池大黒】ポテトチップス 関西だししょうゆ【カルビー】手焼・しょう油味たこ焼【たこ昌】ふる里の味 とん蝶【御菓子司 絹笠】ええもんちぃ【五感】本千鳥饅頭【千鳥屋宗家】お好み焼せんべえ【大阪の味本舗】肉桂餅【八百源来弘堂】Web検索1/2(JR東海ツアーズ)https://travel.jr-central.co.jp/plan/area/osaka/omiyage/絶対外さない!大阪の定番お土産6選1.生乳の香りとコクを包み込んだケーキ 「堂島ロール」2.大阪土産の定番中の定番 「551蓬莱 豚まん」3.30年愛される大阪産(もん) 「千鳥屋宗家 みたらし小餅」4.このかたさが癖になる 「あみだ池大黒 岩おこし」5.行列も納得の美味しさ 「りくろーおじさんの店 焼きたてチーズケーキ」6.黒豆入りのマドレーヌ 「ええもんちぃ」ワンランク上の見た目と味!大阪のおしゃれなお土産6選1.プレミアムなポテトチップス 「グランカルビー」2.パティシエが考えた新しい大阪土産 「瓢月堂 たこパティエ」3.お花のカタチのラングドシャ 「あみだ池大黒 大阪花ラング」4.健康や美容を気遣う方へ 「KAGOME GREENS Catch the Rainbow 食べるスムージー」5.日本で作ったフランス伝統のお菓子 「カヌレ堂CANELÉ du JAPON カヌレ」6.大阪発の新しいチーズスイーツ 「ウメダチーズラボ クッキー」

TポイントがVポイントに変わる?

Tポイントを持っている人が多いので、気になっている人は多いのではないですかね?ただ、実際どうなるのか調べていない人が大半なのではないでしょうか。そんな中の一人の私が、調べてみました。参考サイトhttps://web.tsite.jp/vpoint/質問形式いつから変更されるの?→2024年4月22日Tカードは使えなくなるの?→そのまま利用ができる何かしないといけないの?→必要なしVポイントに変わると何がある?→利用できる店舗が増える(すき屋、なか卯、LOTTELIAなど)変更点は?→「Tポイント」アプリをアップデートすると、「VポイントPay」アプリに変更される(予定)感想Tポイントは、今までポイントカードだったが、「VポイントPay」としてQRコード決済できるようになると利用の仕方が変わるかも。後、TポイントからVポイントへの手続きが一番気になるポイントだったが、カードはそのまま、アプリはアップデートする事で、そのまま利用できるのであれば、とてもスムーズで良いと思いました。気になる点としては、TポイントはPayPayなどのアプリで連携しているので、そこは再設定など必要になるかが少し気になりました。

私の近所にある複数のスーパーのメリット・デメリットを書き出してみた

2024年3月12日に書いています。最近、色々なスーパーに足を運ぶことが多いので足で稼いだ情報を整理しています。私の通っているスーパーなので、他の店舗とサービスが違うかもしれません。最初に現状の推しを言っておくと「マルエツ」です。理由は、セルフレジや、Scan&Goなど、スーパーで一番不満になる「待ち時間」について、新しいサービスを早く導入して緩和をしようとしているからです。ただ利用頻度で言うと、「サミット」、「ハナマサ」を多く利用しています。候補5つ①マルエツ②ピーコック③サミット④まいばすけっと⑤ハナマサ①マルエツ【メリット】セルフレジが充実Scan&Goが導入されていて、スマホで商品バーコードをスキャンしてすぐに決済ができるヨーグルトの種類が多く比較的安いTポイントが付く ※Scan&Goのポイントと併用は不可冷凍食品が充実しているパンが充実している【デメリット】2階建て ※生鮮食品などが2階にあり上らなくてはならない買い物カートが利用しにくい ※たくさんの買い物がしにくい②ピーコック【メリット】100円ショップが一緒にあるイオンペイが使える基本は1フロアで欲しい物が揃う ※文房具や日用品は地下時々、アナログの割引券を配っている ※分かりやすく行く動機になる冷凍食品が充実している【デメリット】イオンペイ以外のQRコード決済が使えないセルフレジがないイオン系列の安価な商品が置いていない③サミット【メリット】駐車場がある1フロアで全ての買い物ができる買い物カートを利用しやすい試食をやっていて、かつ気軽に食べやすい季節に合ったサービスを積極的に行っているヨーグルトの種類が多く比較的安いパンが充実している【デメリット】セルフレジがない独自の決済カードのチャージが現金でしかできない④まいばすけっと【メリット】良い意味でコンパクト ※ピンポイントの買い物は利用しやすいイオン系列の安価な商品を購入できるイオンペイが使えるセルフレジがある【デメリット】商品が少ないイオンペイ以外のQRコード決済が使えない⑤ハナマサ【メリット】肉、牛乳、卵、トマトなど、必需品で他に比べて安い商品が多いクレジットのタッチ決済がある冬は比較的高い確率で、みかんの箱売りをやっている【デメリット】店が狭い、階段を下りるのが大変商品カートが使えないセルフレジがない

令和6年4月から"プラスチック"ゴミの出し方が変わる(墨田区版)

墨田区のチラシで、ゴミ捨て方法の変更の案内がきていたので確認してみます。ゴミ捨てについては、市区町村ごとにルールが違います。今回は、墨田区について確認していきます。内容令和6年4月から"プラスチック"ゴミの出し方が変わる詳細素材が全てプラスチックでできている製品を「プラスチック資源」として出す【プラスチックの例】食品トレー"プラマーク"の付いた包装・容器プラスチック製品(概ね30cm以内)【"プラマーク"の付いた包装や容器】※安全でキレイなプラスチック100%素材容器・キャップ類カップ・パック類チューブ類トレー(皿型容器)類食料品や日用品の袋類発砲スチロールなど【プラスチック製品(概ね30cm以内)】バケツ、じょうろストロー、スプーン歯ブラシハンガーなど【プラスチックとして回収できない物】軽くすすいでも汚れが付着しているもの刃物類・発火の危険があるもの在宅医療で使用したものプラスチック以外のものが付着しているものリサイクル整備の故障になるものペットボトル【二重袋に注意!】回収したプラスチックは、全て袋を破いて中身を確認しているため、家庭から出す際は袋などには入れず、そのまま出して欲しいとのこと。確認した感想試みは理解できるが、"プラスチック"の見分け方が複雑に感じるプラスチック資源の分別方法(見分け方)は、対処まで記載されていてGood!個別にルールを決めるのではなく、国で統一できないのだろうか?チラシ(PDF)https://www.city.sumida.lg.jp/kurashi/gomi_recycle/oshirase/pura_start.files/honnkakutirasi.pdf

ナレッジ?ここって何をするんですか?

説明が無いので良く分かんないのです…。 ちなみに画像は私の落描きです適当に貼りました…。

サッカーなどで利用できる都立公園のスポーツ施設がWeb予約可能になったのを知っていますか?

団体でスポーツする際、場所に困っていませんか?私は中野区でサッカーチームに参加しているのですが、場所の確保にはとても苦労しています。区などが管理しているグラウンドは、区に在住か在勤のメンバーを集めての団体登録が必要になるため、チームの中心になっている地域以外の場所を借りるのは、とても難しい状況だと思います。そんな私のような人に朗報で、2024/3/1から都立公園のスポーツ施設がWebから予約可能になりました。都立公園のスポーツ施設は、個人で利用者登録ができ、予約することが可能です。※以前は、施設に行かないと利用者登録ができませんでした、、都立公園スポーツレクリエーション予約システムhttps://kouen.sports.metro.tokyo.lg.jp/web/場所は3つ①代々木公園②高井戸公園③府中の森公園私も3月になって、早速登録して予約をしました。ただ、とても便利になったので、ライバルは多そうです...。なるべく確立の高そうな場所、時間を狙って予約しようと思いますー

「お好み鯛焼き」って知ってますか?

昨日、「お好み鯛焼き」を食べました初めて食べたのだけど、メチャ旨い!また食べたいので、場所をチェック。錦糸町駅のそば、丸井の中にありました。こちらは本店ですね!https://www.0101.co.jp/054/restaurant-menu/omedetaiyaki.htmlつぶあん、カスタードも気になるところ、、

東京都で3/11(月)よりQRコード決済で10%還元のキャンペーンが開始

来週の月曜から、東京都でQRコード決済のポイント還元キャンペーンが始まるので要チェックですね。ポイントを書き出していきます。公式ページhttps://kurashisupport.metro.tokyo.lg.jp/概要キャンペーン期間中に、都内の対象店舗において、対象のQRコード決済を行うと、後日、決済額の最大10%(上限3,000円相当)のポイントを還元!詳細キャンペーン期間2024/3/11(月)~2024/3/31(日) ※早期終了の可能性あり内容対象店舗での決済で10%のポイントが還元されるポイントの付与は後日ポイント付与の上限は、3,000円相当のポイント対象のQRコード(4つ)①PayPay②楽天Pay③au Pay④d払い対象者対象のQRコード決済を行った利用者(都民でなくてもOK)対象店舗キャンペーン開始日から、各QRコード決済のアプリ・HPで確認できるとのこと※以下の対象外を見ると、飲食以外も対象になりそうです!対象外の店舗国、地方公共団体、公共法人が管理運営する施設金融商品取引業者の店舗銀行、信託会社、保険会社等保険医療機関及び保険薬局等風俗営業等の規制及び業務の適正化等に関する法律第2条に該当する施設その他、本事業の目的・趣旨から適切でないと都が判断するもの間違いそうな点対象のQRコード決済ごとに上限3,000円相当のポイントが付与される※4つのQRコード決済を全て利用すると最大12,000円相当のポイントが受け取れる。

GKの"6秒ルール"が変わる?サッカーのルール改善案が下部カテゴリで試験導入の記事

3/4のYahoo記事からピックアップしました。GKの“6秒ルール”は8秒に増加して厳格化、違反時の再開方法も変更へ…IFABが下部カテゴリでの試験導入を承認https://news.yahoo.co.jp/articles/b4bba588cfe02e7dbf5c9261ce2495ec101f1c5dGKの"6秒ルール"とは?GKは、ボールをキャッチしてから6秒以内でボールを手や腕からはなさなければならない変更内容秒数を6秒→8秒に増加する主審は残り5秒から片手を挙げてカウントダウンする再開を「間接FK」→「CK」or「スローイン」に変更する変更の理由ゴール前からの間接FKとする現在の規定が主審に計測の迷いを生じさせているため。感想現在、私は40歳以上(シニア)のカテゴリーでサッカーをやっています。都リーグを始め、区のリーグ、その他の独自リーグなどにも参加しているが、このGKの「6秒ルール」でファールになっているのは見たことがないです。勝つための時間稼ぎは多発するので、導入は進んでいくと思いました。主審のカウントダウンも分かりやすくて良いので、現状のルールでも取り入れて良さそう。秒数は確かにきっちり計測してないので、6秒だと短いのか8秒が適切なのかは気になるところです。

Widgetテストにおける認証系のテスト

Widgetテストでは、エミュレーターや実機を使えないので、Firebaseに問い合わせるユーザー認証の機能が使えません。なので、モックのFirebaseAuthやGoogleSignInのパッケージを使って認証系のテストをします。https://pub.dev/packages/firebase_auth_mockshttps://pub.dev/packages/google_sign_in_mocksテストの流れFirebaseAuthとGoogleSignInのインスタンスのProviderをoverrideして、それぞれのモックのインスタンスに置き換えるAuthenticator のメソッドがモック化されたので、そのメソッドを使ってテストをするpackages/skimie/test/presentation/pages/login_page/components/signup_buttons_test.dartGoogleログインのWidgetテストを解説します。まず始めに、setUpにて、mockUserやmockGoogleSignIn、mockFirebaseAuthのインスタンスを用意します。このときに、mockFirebaseAuthには、mockUserのインスタンスを渡しておきます。 setUp(() async { final MockUser mockUser = MockUser( initialDisplayName: 'skimie_test', ); mockGoogleSignIn = MockGoogleSignIn(); mockFirebaseAuth = MockFirebaseAuth(initCurrentUser: mockUser); await Firebase.initializeApp(); });Widgetテストを開始するときに、対象のProviderをoverrideしてモック化します。ここでは、Googleログインのテストをしているので、そのメソッドがあるGoogleAuthenticatorをモック化しています。 testWidgets('Googleログイン', (WidgetTester tester) async { await tester.pumpWidget( ProviderScope( overrides: [ googleAuthenticatorProvider.overrideWithValue( GoogleAuthenticator( auth: mockFirebaseAuth, googleSignIn: mockGoogleSignIn, ), ), ], child: const MaterialApp( home: Material( child: SignUpButtons(animating: false), ), ), ), );SignUpButtonsをタップしたときには、FirebaseAuthのsignInWithCredentialを使っているので、モッククラス内でこのメソッドを修正します。 @override Future<UserCredential> signInWithCredential( AuthCredential credential, ) async { // ログインしたプラットフォームを確認 Log.i('ログイン : ${credential.signInMethod}'); final userCredential = MockUserCredential(); // currentUserを更新 currentUser = userCredential.user; return userCredential; } setUp内でcurrentUserにMockUserをセットしていましたが、このメソッドを走らせると、別のユーザーにcurrentUserが置き換わる様に修正しました。メソッドが走ったことをユーザー名が変更されていることで確認します。 // signInWithGoogleが呼ばれたことを確認 expect(loggedInCurrentUser.displayName, 'test_login_success');参考:https://qiita.com/mogmet/items/ade07bd842495192922dhttps://github.com/atn832/firebase_auth_mocks/blob/master/test/firebase_auth_mocks_test.darthttps://riverpod.dev/ja/docs/cookbooks/testing#%E3%83%97%E3%83%AD%E3%83%90%E3%82%A4%E3%83%80%E3%81%AE%E6%8C%99%E5%8B%95%E3%82%92%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%A9%E3%82%A4%E3%83%89%E3%81%99%E3%82%8B

インテグレーションテストについて

Flutter公式のドキュメントhttps://docs.flutter.dev/testing/integration-testsはじめに、テスト対象とするOSのバージョンとデバイスを決めてください。デバイスやOSバージョンの普及率などから、テスト範囲を決められるといいと思います。https://developer.apple.com/jp/support/app-store/packages/skimie/integration_test/test_setting.dart上記のファイルのコメントアウトを外すことで、テスト対象とすることができます。iOSの場合XcodeのインストールされているPCで行ってください。テストの流れ利用可能なエミュレータの情報を取得し、Mapに変換するテストに必要なデバイスがインストールされているかをチェックし、なければ追加するエミュレーターを起動し、テストするエミュレーターを終了し、キャッシュを削除する3. に戻り、テスト対象のOSバージョンとデバイスが終わるまで繰り返す1. 利用可能なエミュレータの情報を取得し、Mapに変換するfinal result = await Process.run('xcrun', ['simctl', 'list']);上記のコードで、使用可能なエミュレーターの一覧の文字列が取得できるの、正規表現を使って、Mapに変換する2. テストに必要なデバイスがインストールされているかをチェックし、なければ追加するtest_setting.dart でテスト対象にしているOSバージョンのデバイスが 1. で作成したMapに存在するかをチェックする。ない場合は、インストールする必要があるので、final result = await Process.run( 'xcrun', [ 'simctl', 'create', targetDevice, targetDevice, 'com.apple.CoreSimulator.SimRuntime.iOS-$major-$miner' ], );上記のコードで、追加する。3. エミュレーターを起動し、テストする// エミュレーター起動 await Process.run('xcrun', ['simctl', 'boot', device.id]);上記のコードで、エミュレーターを起動する。// テスト開始 final result = await Process.run( 'flutter', [ 'test', 'integration_test/app_test.dart', '--dart-define=FLAVOR=stg', '--dart-define=INTEGRATION_TEST=true', '-d', device.id, ], );上記のコードで、テストを開始する。packages/skimie/integration_test/app_test.dart に書かれているテストが実行される。4. エミュレーターを終了し、キャッシュを削除する// シミュレーター終了 print('Test Device Shut Down'); await Process.run('xcrun', ['simctl', 'shutdown', device.id]); // キャッシュの削除 await Process.run('xcrun', ['--kill-cache']);上記のコードで、エミュレーターを終了し、念のため、キャッシュを削除しておく。5. 3. に戻り、テスト対象のOSバージョンとデバイスが終わるまで繰り返す3〜5の操作をFor in で回しているので、指定されたテスト範囲が終了するまで、テストを回す。Androidの場合Android Studioをインストールしてある、PCで行ってください。iOSの場合とテストの流れは、大きくは変わりません。テストの流れ利用可能なエミュレータの情報を取得し、Mapに変換するテストに使用するPCのCPUアーキテクチャを確認しますテストに必要なデバイスがインストールされているかをチェックし、なければ追加する必要なシステムイメージがインストールされているかチェックする、なければ追加するエミュレーターを起動し、テストするエミュレーターを終了する。5. に戻り、テスト対象のOSバージョンとデバイスが終わるまで繰り返す1. 利用可能なエミュレータの情報を取得し、Mapに変換する final result = await Process.run('emulator', ['-list-avds']);上記のコードで、使用可能なエミュレーターの一覧の文字列が取得できるの、正規表現を使って、Mapに変換する2. テストに使用するPCのCPUアーキテクチャを確認します// CPUアーキテクチャを判別して、インストールするsystem imageを選択 Future<String> getSystemStringImagesType() async { if (Platform.isMacOS) { final result = await Process.run('sysctl', ['-n', 'machdep.cpu.brand_string']); if ((result.stdout as String).contains('Apple')) { return 'arm64-v8a'; } return 'x86_64'; } return 'x86_64'; }Widndowの場合は、'x86_64'になり、Macは、Apple Silicon(M1など)の場合があるので確認が必要。エミュレーターをインストールするときに指定する必要がある。3. テストに必要なデバイスがインストールされているかをチェックし、なければ追加するテストの対象になっているOSバージョンのエミュレーターがない場合は、インストールする。await Process.run( 'avdmanager', [ 'create', 'avd', '-n', id, '-k', 'system-images;android-$targetApi;google_apis_playstore;$systemImageType', '-d', targetDevice.deviceSetup, ], );上記のコードで、エミュレーターがインストールされる。4. 必要なシステムイメージがインストールされているかチェックする、なければ追加するテストの対象になっているシステムイメージのチェックをするfinal result = await Process.run('sdkmanager', ['--list']);上記のコードで、インストールされているシステムイメージのリストが取得できる。正規表現を使用して、文字列を加工し、テストに必要なシステムイメージがあれば、インストールする // テストに必要なsystem-imageをインストール for (final systemImage in filteredLines) { await Process.run('sdkmanager', [systemImage]); }5. エミュレーターを起動し、テストする// エミュレーター起動 final process = await Process.start( 'emulator', ['-avd', device.id, '-no-snapshot'], );上記のコードで、エミュレーターを起動。// テスト開始 final result = await Process.run( 'flutter', [ 'test', 'integration_test/app_test.dart', '--dart-define=FLAVOR=stg', '--dart-define=INTEGRATION_TEST=true', '--device-id', deviceId ], );上記のコードで、テストを開始する。packages/skimie/integration_test/app_test.dart に書かれているテストが実行される。6. エミュレーターを終了するawait Process.run( 'adb', ['-s', deviceId, 'emu', 'kill'], );上記のコードで、エミュレーターを終了。7. 5. に戻り、テスト対象のOSバージョンとデバイスが終わるまで繰り返す5〜6の操作をFor in で回しているので、指定されたテスト範囲が終了するまで、テストを回す。インテグレーションテストの追加繰り返しているテストは、packages/skimie/integration_test/app_test.dart に書かれているので、テストはこのファイルに追加する。intro_test や email_test の様にそれぞれのテストをディレクトリで分けて、追加していくと、可読性が良いかと思います。import 'package:authenticator/authenticator.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:integration_test/integration_test.dart'; import 'package:skimie/main.dart' as app; import 'login_page/email_login_test.dart' as email_login; import 'intro_page/intro_test.dart' as intro_test; // Test実行 // dart integration_test/test.dart // 実機やエミュレーターでテストする場合は、localeに気をつけてください。 // エミュレーターの場合、'en'になっていることが多いかと思います。 void main() async { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); testWidgets('Integration Test', ( WidgetTester tester, ) async { // アプリ起動 await app.main(); await tester.pumpAndSettle(); // ログアウトしておく final container = ProviderContainer(); final authenticator = container.read(authenticatorProvider); await authenticator.signOut(); await tester.pumpAndSettle(); // イントロ画面の動作確認 await intro_test.test(tester); // Emailログインのテスト await email_login.test(tester); }); }

Firebase Authを用いた認証機能について

FirebaseAuthについては、丁寧なドキュメントがありますので、まずこちらを参考にしてみてください。https://firebase.google.com/docs/auth?hl=jaFlutterでの導入方法も説明されています。https://firebase.google.com/docs/auth/flutter/start?hl=ja各種認証に関しては、Fireabseのドキュメントにコード例も記載してあり、そのコードを利用するだけで、実装可能です。参考:https://zenn.dev/kazutxt/books/flutter_practice_introduction/viewer/30_chapter4_authenticationhttps://zenn.dev/flutteruniv_dev/articles/5f05c75b070b38https://zenn.dev/flutteruniv_dev/articles/25ae47164a1d44