【3】React Nativeでテキストエディタを作ってみる!【右往左往編】

こんにちは!かたつむり(@Katatumuri_nyan)です!

Reactを触ってみて、サイト的なものは作れるようになりました(*´ω`)
そこで、次はReactNativeを触ってみようと思い、簡単なテキストエディタを作成しようと企んでおります(笑)

環境構築があらかた終わったので、早速画面を作成してみたいと思います!

最初から見る↓
【1】React Nativeでテキストエディタを作ってみる!【下調べ編】【1】React Nativeでテキストエディタを作ってみる!【下調べ編】

前回を見る↓
【2】React Nativeでテキストエディタを作ってみる!【環境構築編】【2】React Nativeでテキストエディタを作ってみる!【環境構築編】

いきなりエラーから始まります…

picture 1

これは前回の記事の最後にexpo upgradeしたせいですね…。
これ、react-native-webがインストールされてないってことかなぁ…。
と思い、確認するとありました。
でも
/usr/src/app/node_modules/react-native-web/node_modules/fbjs/lib/ExecutionEnvironment.jsはないですね…。

picture 2

よく見たら、expo upgradeのエラーが残っていました。
内容は同じっぽいですね。

picture 3
↑一応コンテナ側で確認するも、確かに/usr/src/app/node_modules/react-native-web/node_modules/fbjs/lib/ExecutionEnvironment.jsはない…。

react-native-webを入れなおしてみます。
yarn add react-native-webをしてインストール

picture 4

次はこれ↑

yarn upgradeもしてみたけど、とくに変わらないので、Docker imageからbuildしなおすことにしました。expoの初期化はなし。

Google Chromeデベロッパーツールの拡張

やっと開発できるようになったので、デベロッパーツールでiPhoneとiPadの表示を確認しながらやっていきます。

picture 5

こんなことができたので( ..)φメモメモ

三点マークを押して、show device frameで一部のデバイスのフレームが表示されました。

今のディレクトリ構成

picture 6

App.jsがおそらくメインの枠になるので、これに合わせてコンポーネントを作っていきます。

ためしにテキストエリアを作成

そもそも、テキストエリアって、Inputエリアでいいのかな…?

とりあえず、TextArea.jsを作成し、App.jsに読み込んでみます。
素材は公式リファレンスから。

picture 7

とりあえず、文字は打てるようになりました(*´ω`)

テキストエディタパッケージを使用するも断念

React Native Editor

npm i react-native-editorしてみる。
互換性があれば使いたい。

ちょっと使ってみたけど、読み込みが遅すぎるので再起動したらエラー…
yarn installしろとのことなので、しておきました。

picture 8

RichToolbar.jsの14行目くらいを以下に変更

picture 9

次はこれなので、expo install react-native-webviewしてみる
WebView

やっぱりうまくいかない😢

react-native-editorは一旦やめて、自前で作ることにしました。

npm rm react-native-editor

試しに画面を作ってみる

React Nativeで任意のReact コンポーネントを使う方法
↑この方法でできそう…?
ということで、ちょっと自前で色々作ってみます。

picture 10

とりあえず、こんな感じです!
コードは以下。

StyleSheetの扱いが難しいですが、できそうな気がしてきました。

ホットリロード問題

作業中にCHOKIDAR_USEPOLLING=trueでのホットリロードが重すぎて悲しくなってきたので、改善したいと思います。

docker-expo

↑こちらによると、Docker環境ではホットリロードが効かないと書いています。
(そうだと思ってた)
Watchmanが必要とのことなので、インストールしてみたいと思います。

Watchmanをインストール

公式ドキュメントを見つつ、Watchmanをインストールしていきます。

yarnを使っているのでyarn add fb-watchmanでインストール。

CHOKIDAR_USEPOLLING=trueを削除して、docker-compose upしなおします。

公式ドキュメントからもインストールの必要ありました。

$ # use the latest stable release
$ git clone https://github.com/facebook/watchman.git -b v4.9.0 –depth 1
$ cd watchman
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

↑こちら真似していきます!

gitがないのでapk add gitします。

python3がないといわれたのでapk add python3します。

エラー(´;ω;`)
react_native\watchman\bootstrap.logを見つけたので見てみます。

ccがないみたいですね。
alpinelinux: install failed: cc: Command not found
↑を参考に、apk add build-baseします。

もう一度↓

(´;ω;`)
試しに/tmp/fbcode_builder_getdeps-ZusrZsrcZappZwatchmanZbuildZfbcode_builder-root/extracted/boost-boost_1_69_0.tar.bz2/boost_1_69_0/b2を打ってみます。

ついでにDockerfile変えときました。

イメージからビルドしなおして、以下を再び行います。
watchmanディレクトリを一度消しました。)

↑の様なエラーが出たので、libtoolを入れないといけないみたいですね。
apk add libtoolをDockerfileに追加します。

ビルド後、コンテナを起動しなおして、再び以下を行います。

GNU M4をインストールします!
apk add m4これもDockerfileに追加します。

↓やりなおし。

aclocalいれます!
How to install aclocal in ubuntu14.04によると、automakeを入れたらいいみたいなので、rootに戻ってapk add automakeします。

再び…

autom4teない!入れます!
autoconfに入ってるみたいですね!
apk add autoconf

再び…

pkg-configないwwwないもの多すぎん?w
pkgconfigこれっぽい。apk add pkgconfig入れてみます。

再び…

何も反応がなく、できたっぽいので次に進みます。

picture 11
いけたかな?

watchman builds on Linux require OpenSSL, but isn’t clearly stated in the docs
↑こちらよりapk add libressl-dev

再度以下を行います!

linux/magic.hないいい!
fstype.c:18:25: error: linux/magic.h: No such file or directory make[1]: *** [watchman-fstype.o]
kernel-headersを入れるといいらしい。
linux-headersぽいので入れます。apk add linux-headers

再度以下を行います!

!?
v4.9.0 compile failure on Debian unstable
↑を参考に./configure --enable-lenientしてみる。

再度以下

./configure --without-python --enable-lenientしてみます!

再度以下

できたっぽいので↓します!

できたのかな…?

watchmanってrootで打ってみた。

イケてるっぽい

.gitignorewatchmanを追加しました。

windowsへdocker-windows-volume-watcherを導入

GAE/GOなdockerを作ろうとしたら10時間溶けた
↑を参考にしました。

windowsのコマンドプロンプトで

ちーん(´;ω;`)

WARNING:root:Bind of container was skipped since it has invalid source path

dockerDesktopのせいなのかな…

rootの名前をReact-TextEditerからReact_TextEditerに変更

ドッカ―イメージからビルドしなおします。

だめでしたー!
名前の問題ではないみたい。

ってか、日本語PATHがダメなのではなかろうか…
と思ってプログラミング学習を英語に変えたけどダメでした。
こまったな~!

zippoxer/docker-windows-volume-watcher
↑こっちも使ってみたいけど、インストールの仕方が分からず💦

kerbe/expoでコンテナ作成・実機確認

kerbe/expo

こちらを使っていきたいと思います!

kerbe/docker-expoを参考にDockerfileとdocker-compose.ymlを編集

react_nativeディレクトリを削除して、以下を実行しました。

templateをblanckと入力。
終わったら、docker-compose upします。

よくわからなかったので、ファイルの編集とコマンドの編集を何度もチャレンジしましたw

成功!
とりあえず、実機確認までできました。

ホットリロードができるか問題

CHOKIDAR_USEPOLLING=trueを設定しているので、webブラウザでは一応リロードしてくれます。
iPhoneではホットリロードが効いていません。
merofeev/docker-windows-volume-watcher
これが使えないので、
zippoxer/docker-windows-volume-watcher
こっちを使ってみることにしました。

goをインストール

WindowsにGo言語開発環境をインストールする
↑こちらの手順にしたがって、Goをインストールしました。

How can I install a package with go get?
↑ go getしたらいけるっぽい
Windowsのコマンドプロンプトから、go get github.com/zippoxer/docker-windows-volume-watcherをします。

とのことなので、go get github.com/FrodeHus/docker-windows-volume-watcherしてみます。

↑をWindowsのコマンドプロンプトから作業ディレクトリに移動してうってみると、いけてる感じがします!

試しにファイルを変更してみると…↓

もうだめだ!\(^o^)/オワタ

ホットリロードは諦めます。

そもそもDocker使わない方がいい気しかしないので、明日は違う方法検討しよう!

時間かかるので辞めましたw

↓続き
【4】React Nativeでテキストエディタを作ってみる!【再び環境構築編】【4】React Nativeでテキストエディタを作ってみる!【再び環境構築編】

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です