【開発事例】マインドフルネス × Apple Vision Pro – VR書道アプリの開発

近年、ハイパーデジタル社会におけるメンタルヘルスの維持が社会的な課題となっています。

当社では、梶山 愛先生CEO & Founder, ICARELAB, Inc. / 東北大学大学院医工学研究科 非常勤講師)と連携し、マインドフルネス支援アプリの開発を行いました。

梶山先生が、ご自身の経験を踏まえ、
「もっと日常においても、世界中のヘルスケア/ウェルネス分野で書道が引き出す心身の状態変化を活かせないか?」
という観点から、VRと書道を組み合わせたマインドフルネスに着眼されました。
そこで当社に、Apple Vision Pro開発の知見があることをきっかけに、今回の共同開発に至りました。

梶山 愛先生
梶山 愛先生(CEO & Founder, ICARELAB, Inc. / 東北大学大学院医工学研究科 非常勤講師)

Apple Vision Pro と書道の組み合わせ

Vision Pro がもたらす没入感と、日本古来の文化である書道を組み合わせ、空間コンピューティング上で体験する VR書道アプリを実装しました。
当社は、Vision Proネイティブアプリの開発、高精細な筆跡のシミュレーション、直感的な操作インターフェースの設計、リアルタイムな線データ収集技術の実装を担当しました。

本アプリ最大の特徴は、単なる書道練習ツールではなく、ユーザーが一筆一筆に集中しながら文字を書き、書き上げた線の特徴(圧力、揺れ、完成度など)を解析し、自己理解を促すためのフィードバックを提供する点にあります。
エンターテインメント性を損なわない操作感を保ちつつ、研究側で検討されたマインドフルネス体験の要件をソフトウェアに落とし込むことを目指しました。

今後は、梶山先生の現場ニーズに沿った改良を進め、製品化に向けて取り組んでいきます。
 

Apple Vision Proイメージ
Apple Vision Pro実機
Posted in AppleVisionPro, 開発事例 |

【開発事例】Excel運用廃止に伴う業務DX(Webシステム化)

■全体構成

システム全体構成図

■概要
お客様では、部門間の情報連携をExcel・メール・電話に依存しており、
更新漏れや入力ミス、ファイルのバージョン違いなど、運用面で多くの課題を抱えていました。

また、各部門ごとに情報が分散していたため、必要な情報の確認に時間がかかるなど、業務効率にも影響が出ている状況でした。

本プロジェクトでは、こうしたお客様の課題を解決するため、Excel運用を見直し、
AWS上にWebシステムを構築することで、情報を一元管理できる環境を整備しました。

これにより、部門間で同じ情報をリアルタイムに共有できるようになり、
これまで発生していた確認作業や手戻りの削減につながっています。

さらに、他システムとのデータ連携により、必要な情報を一つの画面で確認できるようにし、
日々の業務をスムーズに進められる仕組みを実現しました。

■ポイント
・Excelファイル運用を廃止し、Webシステムへ移行
・データの一元管理により、情報をリアルタイムに反映
・部門間の連携をスムーズに
・各部門ごとに必要な情報のみを表示
・権限管理により閲覧・更新を制御
・電話・メール中心の連携から脱却し、業務効率を向上
・コミュニケーションロスを削減
・他システムと連携し、必要な情報を一画面で確認可能
・担当者への自動メール通知機能を実装
・システム連携基盤としてMariaDBを採用
・要件定義〜設計・開発・テストまで一貫して対応

Posted in 開発事例 |

【開発事例】汎用的な順番待ちシステム(LINE+WEB)

今回、商品開発室でLINEを利用した順番待ちシステムを作りました。

【概要】
1対1で予約を行うような業種に向けた順番待ちシステムです。
※クリニックで利用をイメージした場合
患者がクリニックにLINEから当日予約を取り、順番待ち状況がわかる。
また、クリニックの受付側で、予約状況がわかる。

【主な特徴】
・LINEアプリで順番待ち登録/状況確認/順番待ち中止
・LINEアプリに順番到来をメッセージで通知
・順番待ち状況画面で状況を一覧表示/順番をアサイン
・LINEが利用できない方に、
受付(クリニック)に設置されたタブレット(ダッシュボード画面)にて状況確認
及びLINEアプリなしで登録

【LINEアプリ利用画面】※ユーザー
「順番待ち登録画面」

「順番待ち状況画面」

【受付にあるタブレット(ダッシュボード)画面】※ユーザー

【PCなど利用したブラウザ画面】※運営側管理画面

【システム構成】

構築概要】
 ・Amazon RDSを利用せず構築
・サーバーレスで構築
・Amazon Cognito APIでカスタムログイン画面を実装

Posted in エンジニアブログ, 開発事例 |

【開発事例】カンテレドーガ 動画配信アプリ開発

◾️カンテレドーガ

  • 関西のテレビ局「関西テレビ」が運営する動画配信サービスです。
  • 2019年、Android・iOSアプリの保守としてプロジェクトに参加。
  • 2023年に大幅なリニューアルを実施し、さらなるユーザー体験の向上を図りました。
  • 2024年にはアプリの開発基盤をFlutterに移行することで、Android・iOSの両方に対応したアプリを一つの仕組みで開発・運用できる体制を構築。
  • これにより、開発・保守にかかるコスト削減と、どのプラットフォームでも変わらない快適なユーザー体験の実現を可能としました。

アプリはこちら

 

Posted in エンジニアブログ, 開発事例 |

【開発事例】〜AppleVisionPro〜アプリケーション開発(3)

Apple Vision Proの写真

前回記事で紹介した、空間にメモを配置するアプリの制作で工夫した点の続きを紹介します。
今回は「標準ウインドウや操作音」についてです。

メモウインドウの開閉

フルイマーシブ空間のアプリでも VisionOS 標準のウインドウを表示することができます。これによりメモ画面を SwiftUI で効率よく構築できます。

以下は付箋ピンがタップされた場合に、 `openWindow` でウインドウを開くコードの抜粋です。ここでは開くメモウインドウを1つに限定したかったため、先に `dismissWindow` を呼んでいます。しかし当時は `dismissWindow` 直後に `openWindow` すると前のWindowが開いていた位置に新しい Window を表示する挙動をしていたため、 ここでは 250 ms の遅延を入れています。

struct StickyNoteRealityView: View {
@Environment(AppState.self) private var appState
  @Environment(\.openWindow) private var openWindow
  @Environment(\.dismissWindow) private var dismissWindow
  @Environment(\.dismissImmersiveSpace) private var dismissImmersiveSpace

  :
  :
  var body: some View {
    RealityView { content in
    :
    :
    .gesture(
      SpatialTapGesture(count: 1)
        .targetedToAnyEntity()
        .onEnded { value in

    .gesture(
      SpatialTapGesture(count: 1)
        .targetedToAnyEntity()
        .onEnded { value in
          // 付箋ピンの場合の処理
          if (value.entity.name == ObjectIdentifier.stickyPin) {
            AudioServicesPlaySystemSound(SystemSound.SCREEN_SHARING_STARTED)
            let pinEntity = value.entity as! ModelEntity
            Task {
              dismissWindow(id: UIIdentifier.noteWindow)
              try! await Task.sleep(for: .milliseconds(250))
              let linkId = pinEntity.getLinkId() as! String?
              if linkId != nil {
                openWindow(id: UIIdentifier.noteWindow, value: linkId!)
                showTargetPlane = false
              }
            }
          }
          :

操作音について

視線とハンドジェスチャによる操作は、特に開発中は、ハンドジェスチャによるタップイベントが認識されないためプログラムが動作しないのか、タップイベントは入力されていてその先のプログラムに不具合があるのか切り分けが難しく困ることがあります。
そのような時はタップのようなユーザー操作に対して操作音を付けると判別が容易になります。

デバッグ目的で、完成度に拘らないのであれば下記のように`AudioServicesPlaySystemSound` を使ってシステム音を鳴らすことができます。

    :
    .gesture(
      SpatialTapGesture(count: 1)
        .targetedToAnyEntity()
        .onEnded { value in
          AudioServicesPlaySystemSound(SystemSound.SCREEN_SHARING_STARTED)
        :

参考情報など

3回に渡りお送りしてきましたが、次回は別の記事を投稿予定です。

Posted in AppleVisionPro, エンジニアブログ, 開発事例 |

【開発事例】〜AppleVisionPro〜アプリケーション開発(2)

Apple Vision Proの写真

前回記事で紹介した、空間にメモを配置するアプリの制作で工夫した点を紹介します。
今回は「メモを置く場所(=平面)を検出する」についてです。

メモを置く場所(=平面)を検出する

RealityKit で平面を検出するために AnchorEntity を使用します。実際のコードは下記のようなもので、縦横方向のどちらの平面も検出し、壁、床、天井など物体の種類は関係なく検出する設定です。

let anchor = AnchorEntity(.plane([.any], classification: [.any], minimumBounds: [0.1, 0.1]), trackingMode: .once)

メモを置く場所(=平面)を検出する

メモを置く場所(=平面)を検出する

これで Vision Pro の視界の中央付近の平面が検出できるのですが、これだけだと細かい位置の調整ができません。そこで検出した平面上に視線検出用のオブジェクトを敷き詰めて、そのオブジェクトのタップイベントを検出して、細かい位置を取得します。

平面上に視線検出用オブジェクトを敷きつめる

視線検出用のオブジェクトを配置すると、先ほどの平面はこのようになります。若干明るく光るオブジェクトは視線の当たっている場所を示しています。

平面上に視線検出用オブジェクトを敷きつめる

平面上に視線検出用オブジェクトを敷きつめる

視線検出用オブジェクトのタップイベントで位置を特定

RealityView に gesture を設定し、SpatialTapGesture でタップジェスチャを取得します。

下記の擬似コードのようにしてオブジェクトにタップイベントを追加します。タップの回数は count で設定できます。ダブルタップ、トリプルタップに個別の処理を設定することも可能です。

var body: some View {

RealityView { content in


.gesture(

SpatialTapGesture(count: 1).

.targetedToAnyEntity().
.onEnded { value in.

さて、以上で平面上のより細かい位置を取得して指定できるようになりました。どこに視線が当たっているか判別しやすいように hover エフェクトを追加しています。

※ 当時は hover エフェクトをカスタマイズできず視認性が良いとは言えませんでしたが、VisionOS 2.0 でエフェクトのカスタマイズがサポートされたようです。

次回、VisionOSの標準ウインドウや操作音など工夫した点を紹介します。

Posted in AppleVisionPro, エンジニアブログ, 開発事例 | Tagged , ,

【開発事例】〜AppleVisionPro〜〜アプリケーション開発

Apple Vision Proの写真

はじめに

株式会社ギガ・システムでは新しいプラットホームへの対応も積極的に行なっています。本記事では Vision Pro、VisionOSがもたらす空間コンピューティングにおける技術の調査・蓄積のためVision Pro向けアプリケーションを開発した事例についてご紹介します。

本事例では RealityKit を使って Vision Pro を装着して見た視界の任意の位置にメモを置くアプリケーションを作成しています。

※ 開発は 2023年11月〜2024年2月 の期間のため本記事の情報は当時のものになります。

開発技術

本記事では Vision Pro アプリケーションで視線による位置の指定を用いて、パススルーして見える視界の任意の場所に仮想のオブジェクト(=メモ)を配置する手法を紹介します。

以下の動画は開発したアプリで壁面やディスプレーにメモを配置する様子をキャプチャしたものです。赤い球体はメモを留める付箋ピンを表すオブジェクトです。付箋ピンをタップするとメモが表示される様子をご確認いただけます。

なお、本記事では紹介していませんが、このアプリでは WorldTrackingProvider, WorldAnchor を使ったメモの永続化の検証も行なっていますので別の記事でご紹介したいと思います。

所感

Vision OSでのアプリケーション開発は従来の iPhone, iPad 向けの開発体験とのギャップが少なく、これまでAppleプラットホームでの開発で蓄積した資産を活かせるようになっていてさすがAppleであると感じます。

またイマーシブ空間向けのアプリケーション開発では Unity による開発もオプションとして用意されていますが、Apple社の提供する RealityKit だけを利用した場合でも工夫次第で視線による空間上の位置指定など一見難しそうな機能が予想よりも簡単に実現できることがわかりました。

開発環境

開発環境(当時)は次のものです。

– MacBook Pro Apple M3 24GB
– XCode Version 15.4 (15F31d)

やったこと

Vision Pro, Vision OS では視線とハンドジェスチャによる操作が基本となりますが、通常の Vision OS アプリ開発の枠組みでは、まず空間上に視線を検出する3Dオブジェクトを置いて、その3Dオブジェクトに視線が当たった状態でタップなどのハンドジェスチャで発火するイベントに対応する処理を作り込んでいく流れになります。

しかし、本事例のように「視線の先にメモ(3Dオブジェクト)を置きたい」という場合、視線を検出するための3Dオブジェクトがないためすこし工夫が必要です。

Vision Pro 実機を入手した現在であれば「Scene Reconstruction API とレイキャスト」での実装を試みると思いますが、本事例に取り組んだ2023年11月頃はシミュレータのみでの開発であったためシミュレータでも動作確認ができる「RealityKit の AnchorEntity による平面検出」をベースに実装しています。

メモの置ける位置指定の粒度やユーザビリティを考慮して大まかな処理の流れを下記のようにしました。

1. メモを置く場所(=平面)を検出する
2. 1の平面上に視線検出用オブジェクトを敷きつめる
3. 視線検出用オブジェクトのタップイベントで位置を特定
4. 検出した位置に付箋ピン(およびメモ)を配置する

次回、工夫した点などを紹介します。

Posted in AppleVisionPro, エンジニアブログ, 開発事例 |

【技術情報】〜AppleVisionPro〜日本語の音声入力について

Apple Vision Proの写真

日本語の音声入力が可能に

Apple Vision Proには、アクセシビリティの音声コントロールとは別に、音声によるテキスト入力機能があります。この機能では、日本語での音声入力が可能です。

例えば、メモアプリで編集中にマイクアイコンを見つめるかタップして日本語で話すと、高精度で認識されます。

ただし、ここで一つ注意点があります。

設定の音声入力言語の選択で、日本語だけをONにしておく必要があります。英語もONにしていると、英語が優先されてしまい、日本語の音声入力ができなくなります。

設定方法

以下の手順で設定を変更出来ます:

1. 設定 → 一般 → キーボード → 音声入力言語

Apple Vision Pro アプリメニュー、設定アプリ

Apple Vision Pro アプリメニューで設定アプリを開く

設定アプリで、一般を開き、キーボードを開く

設定アプリで、一般を開き、キーボードを開く

キーボード設定一覧の音声入力言語を開く

キーボード設定一覧の音声入力言語を開く

2. 英語をOFFにし、日本語のみをONにする

音声入力言語で、英語(日本)がONの場合、OFFにする

音声入力言語で、英語(日本)がONの場合、OFFにする

日本語のみがON

日本語のみがON

Apple Vision Pro アプリメニュー、メモアプリで日本語の音声入力をテストする

メモアプリで日本語の音声入力をテストする

メモアプリで入力モード時のキーボードのマイクアイコンをタップして話すと、日本語の音声入力がテストできる

メモアプリで入力モード時のキーボードのマイクアイコンをタップして話すと、日本語の音声入力がテストできる

これで、日本語の音声入力がスムーズに行えるようになります。

是非、皆さん試してみてください。

Posted in AppleVisionPro, エンジニアブログ |

【技術情報】〜AppleVisionPro〜日本語の音声コントロールについて

Apple Vision Proの写真

今日はApple Vision Proについて、最新の情報を共有したいと思います。

特に、日本でのリリースに伴う新機能やアクセシビリティの改善についてお話しします。

VisionOS 1.2の登場と音声コントロールの現状

Apple Vision ProにはVisionOS 1.2が搭載されています。

このバージョンでは、アクセシビリティの向上に力を入れています。

特に注目すべきは、音声コントロールの言語設定に日本語が追加されたことです。

しかし、ここで少し残念なお知らせがあります。

現在、日本語を選択してもUS Englishに切り替わってしまう問題が発生しています。

つまり、日本語の音声コントロールはまだ使用できない状態です。

VisionOS 2.0 ベータ版のサプライズ

次に、VisionOS 2.0のベータ版がリリースされました。

私は早速、音声コントロールの言語設定で日本語を選択して試してみました。

結果は…なんと、日本語の音声コントロールが使えるようになっていました!

これは非常に喜ばしいバージョンアップです。

ベータ版とはいえ、今後の正式リリースに向けて期待が高まります。

設定方法

1. 設定 → アクセシビリティ → 音声コントロール → 音声コントロールをONにする

Apple Vision Pro アプリメニュー、設定アプリ

Apple Vision Pro アプリメニューで設定アプリを開く

設定一覧、アクセシビリティ一覧、音声コントロールを開く

設定一覧でアクセシビリティを開き、音声コントロールを開く

音声コントロールをONにし、言語を開く

音声コントロールをONにし、言語を開く

2. 言語 → 日本語(日本)を選択する → 「音声コントロールの準備ができました 日本語(日本)」が右上のマイクアイコンで表示されたら使えるようになる

言語で、日本語(日本)を選択し、右上マイクアイコンで、音声コントロールの準備ができました 日本語(日本)が表示された使えるようになる

言語で、日本語(日本)を選択し、右上マイクアイコンで、音声コントロールの準備ができました 日本語(日本)が表示された使えるようになる

まとめ

Apple Vision Proの最新バージョンでは、日本語のサポートが強化されています。

特に、VisionOS 2.0のベータ版での日本語音声コントロールは期待大です。

まだまだ改善の余地はありますが、日本のユーザーにとっては嬉しいニュースです。

また、この機能を活かせた記事など公開したいと思います。

今後もさらに使いやすくなることを期待しつつ、

引き続きアップデート情報をお届けしますので、お楽しみに!

Posted in AppleVisionPro, エンジニアブログ |

【技術情報】〜AppleVisionPro〜Persona(ペルソナ)の完成度

今回は、Apple Vision Pro にベータ版として搭載されているPersona(ペルソナ)について投稿します。

Persona(ペルソナ)とは?

VisonProを装着していると、Web会議やFaceTimeなどのビデオ通話機能にて自分の顔を映すことが出来ない問題があります。

そこで搭載されたのがPersonaモード(ベータ版)です。

・仮想アバターの作成

→フロントカメラを使って撮影します。

音声に従って、上をむいたり下をむいたりと指示に従うだけでOK。

その後、装着し少し待つと完成です。

 

Persona(ペルソナ)の完成度!!

これが凄い。

凄いの一言です。

どっからどう見ても私です。

強いていうなら実物よりも良く写っています(笑)

本物そっくりで、口の動きや目線、手の動きなどもそっくりに再現してくれます。

実際のスクリーンショットがこちら。

すごい完成度ですね!

これでベータ版なので、今後が楽しみです。

Zoomも対応しているようなので、社内会議でVisionProで参加して気付かれるか

また試してみようと思います。

Posted in AppleVisionPro, エンジニアブログ |