KASHIMURA Blog

Webサービス開発のこと、個人的なことを書いているブログ

PdMに転身して最初に読んだ本まとめ

はじめに 今年の4月に急遽プロダクトマネージャーをやることになり、そもそもプロダクトマネジメントとは何かを言語化できていなかったので手当たり次第に本を読んでインプットをした。そのとき読んだ本のざっくりまとめを書き残しておく。 プロダクトマネ…

Cypressを使ってE2Eテストの導入をやったので振り返り

はじめに 最近、Cypressの導入をやったのでざっくりと振り返り。 導入環境は、React, Rails, GraphQL, Github Action を使ってるSaaS。 なぜCypressを導入しようと思ったのか? 端折って簡単に書くと、お客さんにプロダクトの説明する時に正しく動いてないと…

Xcode14に更新後、発生したエラー「Signing for ** requires a development team ~」の対処

Xcode14.2に更新した後、以下のエラーが発生して実機でのビルドができなくなった。 (※ちなみにReactNativeプロジェクト。) Signing for "React-Core-AccessibilityResources" requires a development team. Select a development team in the Signing & Capa…

最近 React × Apolloで余計なrefetchを呼び出していたことに気がついた

例えば、名前が並んでいて「並び替え」ボタンを押すと順番が変わる機能を作るとき、これまでは次のように実装してた。 ローカルstateに条件を保持して、useEffect()がstateの変更をキャッチしてrefetch()を実行させる。こんな実装。 ただ、3年もこの実装し…

PopoverTriggerの子要素に自作コンポーネントを使う場合はforwardRefを使う(ChakraUI)

ChakraUI (v2.4.1)のポップオーバーを使ってたとき、トリガーになるボタンを独自のコンポーネントにしたら動かなくなったので、原因と対応内容を備忘録として残す。 ‍♂️ まず、ChakraUIのポップオーバーは以下のように実装する。 PopoverTriggerで囲んだButt…

UGCポリシーに引っかかってAndroidアプリがリジェクトされた

この間、めずらしくAndroidの審査に引っかかった。 原因は、Google PlayのUGCポリシーを厳守してないかららしい。 UGCポリシーってなんだ?と思い確認してみると、アプリ内でユーザーが作成したコンテンツに関するポリシーで、例えばユーザーが投稿したコメ…

BitriseのビルドでRubyのバージョンが存在しないと言われたときの対処

BitriseでiOSのビルドをしようとすると以下のようなエラーが発生。 rbenv: version `3.1.2' is not installed (set by /Users/vagrant/git/.ruby-version) ローカルではビルドできているので軽くググると、 Bitriseで使えるRubyバージョンは指定されているみ…

いいデザインドックを作成するため、個人的にやっていること・やったこと

セルフチェックシートを使う デザインドックを作成するときに注意するべき点をチェックシートとしてまとめています。 チェックシートは、推敲するときに使っていて、分かりづらくないか?漏れがないか?などをチェックしてます。 チェックシートの一部を抜粋…

メンバーを知るきっかけとしてライトニングトークを試した話

リモートワークで希薄になったコミュニケーション 某ウイルスが流行り始めた2年ぐらい前からフルリモートになりました。 満員電車に乗らなくてよくなった。朝ギリギリまで寝てられる。など嬉しいこともありますが、仕事の方では、ちらほら課題が出てきます…

情報収集の仕方を改善した話 InoreaderとNotionの活用

これまでの情報収集 最近は、Twitterに流れてくる面白そうな記事とTechFeedを定期的に見るぐらいでした。 自分は、Webエンジニアなので、Web界隈の人をたくさんフォローしていますが、だいたい注目の話題は流れてきます。 そのため、自分から情報を取りに行…

Rechartsのグラフにグラデーションをかけてイイ感じにする

Rechatsというチャートライブラリが生成してくれるチャートにグラデーションをかけてイイ感じにする方法を説明した記事です。

graphql-rubyで認証の有無を判断して処理を分ける

GraphQLをRails APIで採用する時、認証の有無で処理を分ける方法です。 実装方法は何パターンかあるみたいですが、自分はオペレーション名を見て認証が必要なオペレーションが1つ以上存在するなら認証処理を行うようにしました。 GraphQLを利用するためにgem…

カメラを使わずにQRコードを読み取る方法 #ReactNative

ReactNativeでカメラを使わずにQRコードを読み取って情報を取得する方法を紹介します。react-native-image-pickerとfirebaseのML Kitを利用することで比較的シンプルに実現することが可能です。

WebViewの画面遷移をスライドインで表現する #ReactNative

ReactNativeのWebViewで表示しているブラウザの画面遷移をiPhoneのようなスライドインで表現する方法を紹介します。react-navigationの機能をうまく利用することで簡単に実現することが可能です。(本記事はAndroidは対象にしていません)

ブリッジの実装は気をつけないと永遠に処理が止まる #ReactNative

ReactNativeでAndroid用のブリッジを実装する時、@ReactMethodを付与したメソッドにPromiseを渡している場合は、何か返さないと呼び出し元でawaitがついているときにずっと待ってしまいます。 new Promise() ではなく、普段async/awaitで非同期処理を書いて…

Restyleを利用してスタイルを定数化する #ReactNative

基礎となるスタイルを定数化してコンポーネントの役割ごとに色や間隔のサイズを柔軟に指定できるようにする@shopify/restyleを紹介します。 ReactNativeでスタイルを実装する場合、Stylesheetを定義されているかと思いますが、@shopify/restyleを利用するこ…

ReactNativeアプリを多言語化する方法 (react-intl)

ReactNative製のアプリを多言語に対応させる方法を紹介します。本記事では、Reactアプリを国際化するためのライブラリであるreact-intlを使い、端末の設定言語に沿って翻訳する方法やフォールバックの方法など実践的な実装方法を紹介しています。