WEBフロントエンドエンジニアがReactNativeでAIキャラチャットIOSアプリをvive codingしていく日記
ハートレベル(好感度機能)を実装中。
キャラクターから自分へ対する好感度をレベル形式で視覚的に見れる。
ハートレベルの技術選定メモ
lottie-react-native
React Native アプリで Lottie(ロッティ) アニメーションを再生するためのライブラリ。
Lottieアニメーションが何なのかわよくわからないが、アニメーションのデータを事前に作成用意しておかないと使えないようだ。
今自分にその技術はないので使うのはやめておく。
アプリ独自の個性的でリッチなアニメーションを追加したくなった時に採用を検討する
UIの叩き台を作っているフェーズなのでもうちょっと簡易なアニメーションを簡易に実装していきたい
Tamagui Animtions
Tamaguiに内蔵されているアニメーションを指定するためのAPI
クロスプラットフォーム対応でReactNativeやWEB両方で動く
Tamagui自体が「スタイル+コンポーネント+アニメーション」を統合したUIライブラリ
簡易なアニメーションをカンタンに作成できるので、MVPではこちらを中心にアニメーションは実装していく。(そもそもTamaguiを使ってるので)
宣言的でシンプルに書ける。TamaguiコンポーネントのAPIとして記述できる
import { YStack } from 'tamagui'
export function Example() {
return (
<YStack
animation="quick"
enterStyle={{ opacity: 0, scale: 0.9, y: -10 }}
exitStyle={{ opacity: 0, scale: 0.9, y: 10 }}
>
Hello, Tamagui!
</YStack>
)
}
なぜこのスクラップをやっているのか
バイブコーディングしているとアプリは形になるんだけど、自分でコード書いてアウトプットしないから、知識が定着しないので学んだことの概念的なところはアウトプットしていきたい
コードを書くのはAIの仕事なので細かいコードの書き方まで深追いしなくてもいいかなーっておもうけど、これが何なのかくらいは理解しときたい
react-nativeで画像の読み込み時にエラーになる
エラー内容
Error: UnableToResolveError Unable to resolve module
None of these files exist:
* corridor.png
* src/assets/screens/main/episode/001/corridor.png
29 | switch (scene.backgroundImage) {
30 | case 'corridor':
> 31 | return require('@/assets/screens/main/episode/001/corridor.png')
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
32 | default:
33 | return null
34 | }]
原因
tsconfig.jsonとbabel.config.jsにエイリアスの設定が正しく行われていないため
解決策
自分はassetsをルードディレクトリにおいて、srcディレクトリの配下にassetsディレクトリを置いていなかったので、エイリアスに設定されているパスが違いエラーとなっていた
そのため@assetsエイリアスを作成した。
ts.config.json
{
"extends": "expo/tsconfig.base",
"compilerOptions": {
"strict": true,
"baseUrl": ".",
"paths": {
"@/*": ["src/*"],
"@assets/*": ["assets/*"]
}
}
}
babel.config.js
module.exports = function (api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: [
[
'module-resolver',
{
root: ['./'],
alias: {
'@': './src',
'@assets': './assets',
},
},
],
'react-native-reanimated/plugin',
],
};
};
用語解説
- ts.config.json
- typescriptコンパイラがコードをどう解釈するか設定する場所
- 解釈できない(設定していない)エイリアスがコードにあるとエラーを吐く
- 設定しておくとコードの実行前にエディタがエラーを赤線で出して教えてくれる
- babel.config.js
- 実行時に解決できるエイリアスの設定をできる場所
- ここに設定していないエイリアスがコード上に存在すると実行時にエラーになってクラッシュする
expo-auth-sessionとは
ExpoのアプリでOAuth認証を行うためのライブラリ
OAuth認証とは、Google、Facebook等を利用したサードパーティ認証を行う仕組み
Oauthの認証フローについてまとめたい
- インプリシットフロー(セキュリティ弱めで非推奨)と認可コードフロー(推奨)
- PKCEをつかうと認可コードフローを使える。インプリシットフローでは使えない。
- Google認証をIOSアプリで実装する際はリダイレクトURLをIOS許可形式にする必要がある
const redirectUri = AuthSession.makeRedirectUri({
native: 'com.googleusercontent.apps.<REVERSED_CLIENT_ID>:/oauthredirect',
});
- app.config.ts を新規作成して CFBundleURLSchemesってなんだ?なんで必要なんだ?
TODO:書く
SDKってなんだ
SDK = Software Development Kit(ソフトウェア開発キット) の略
「アプリの特定の機能を開発しやすくするための道具セット」
SDKには特定の機能を開発しやすくするためのライブラリやドキュメントやサンプルコードが入っている
具体例
- RevenueCat SDK
- アプリにIAP決済関連機能を簡単に組み込める
- Vercel AI SDK
- アプリにAI機能を簡単に組み込める
結論
アプリに特定の機能を追加するためのスターターセットのようなもの