![Author](https://d3t2k53lg8fjy7.cloudfront.net/public/fdb95e707b9319f0957b90be9c3ac3d6d4f3f273.jpeg)
Table of Contents
はじめに
みなさんこんにちは、チーム「Flair」の浦田です。 「Fusicフロントエンド座談会」は、Fusicのフロントエンドエンジニアが、チーム内で気になった記事や技術情報を共有し、ちょっとだけ深ぼりしていく会です。
今回は、TypeScriptやExpo/React Native関連が話題にあがりました。
前回の記事
![Fusicフロントエンド座談会 2024/08/08](https://tech.fusic.co.jp/og/posts/frontend-discussion-2024-08-08.png)
TypeScript
Type-safe raw SQL in Prisma ORM
![Announcing TypedSQL: Make your raw SQL queries type-safe with Prisma ORM](https://cdn.sanity.io/images/p2zxqf70/production/6212889ff7d56ad41636c0f7938159b1fd740651-1688x948.png)
Prismaに新しくTypedSQLという機能が追加されました。 生のSQLをPrisma Clientに読み込ませると返ってくる結果に型がつくようになるようです。
すごく便利だなとは思いつつ、どういう仕組みで実現しているのかは気になります(SQLパーサーで頑張る!?)。
TypeScript-Sudoku
TSの型定義で数独ゲームを実現したソースコードです。 実装もそうですが、まず型で数独を作ろうという発想がすごいです!
TypeScriptなので正解を入力するとエラー表示が消えて即時に答えがわかるので快適にプレイできそうです。
TypeScript 5.6
![Announcing TypeScript 5.6 - TypeScript](https://devblogs.microsoft.com/typescript/wp-content/uploads/sites/11/2018/08/typescriptfeature.png)
TypeScriptにもESLintの no-constant-binary-expression
のような設定ができるようになりました。
例えば、必ずtrueにしかならないようなifの条件分があるとエラーになります。 これによりバグの発見につながることもあると思います。
その他にはInteratorの改善などがこのリリースに含まれています。
ランタイム関係
Node.js Takes Steps Towards Removing Corepack
![Node.js Takes Steps Towards Removing Corepack - Socket](https://cdn.sanity.io/images/cgdhsj6q/production/5fa307ef6135347f38e009b4da8cebcb3b9a386a-1948x1336.png?w=1000&fit=max&auto=format)
Node.jsからCorepackが削除される予定とのことです。 pnpmやyarnを入れる際にそれぞれのドキュメントにCorepackを使用してインストールする方法が書かれていたので、弊社メンバーもよく活用していたそうです。
しかし今後は別途Corepack自体をインストールする必要が出てくるので、使いづらくなってきますね。
早速↓のような記事も投稿されていました。
https://zenn.dev/monicle/articles/b7a9314f9f1efb
Vue.js
Reactive Props Destructure を支える技術
![Reactive Props Destructure を支える技術](https://res.cloudinary.com/zenn/image/upload/s--WIuASzWq--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Reactive%2520Props%2520Destructure%2520%25E3%2582%2592%25E6%2594%25AF%25E3%2581%2588%25E3%2582%258B%25E6%258A%2580%25E8%25A1%2593%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_34:ubugeeei%2Cx_220%2Cy_108/bo_3px_solid_rgb:d6e3ed%2Cg_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzU5MTZlOWFlNjguanBlZw==%2Cr_20%2Cw_90%2Cx_92%2Cy_102/co_rgb:6e7b85%2Cg_south_west%2Cl_text:notosansjp-medium.otf_30:Vue%25E3%2583%25BBNuxt%2520%25E6%2583%2585%25E5%25A0%25B1%25E3%2581%258C%25E9%259B%2586%25E3%2581%25BE%25E3%2582%258B%25E5%25BA%2583%25E5%25A0%25B4%2520%252F%2520P...%2Cx_220%2Cy_160/bo_4px_solid_white%2Cg_south_west%2Ch_50%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2NiZDk4MGE3YzQuanBlZw==%2Cr_max%2Cw_50%2Cx_139%2Cy_84/v1627283836/default/og-base-w1200-v2.png)
Vue 3.5.0で新しく追加された機能Reactive Props Destructureについて解説されている記事になります。 これまでVueコンポーネントのpropsの中の値をリアクティブに扱いたい場合は以下のように各必要がありました。
const props = withDefaults(
defineProps<{
count?: number
msg?: string
}>(),
{
count: 0,
msg: 'hello'
}
)
しかしReactive Props Destructureに対応したことで以下のように分割代入を使用してもリアクティブになります。
const { count = 0, msg = 'hello' } = defineProps<{
count?: number
message?: string
}>()
これによりwithDefaults
も不要になるのでかなりシンプルに書けるようになりました。
これをどうやって実現したかについて詳しく書かれています。 私もざっとしか読めてないので、後で時間をかけて読みたいと思います。
Mobile & Expo
CocoaPodsがメンテナンスモードになる
CocoaPodsがメンテナンスモードに入るというお知らせの公式ブログです。 今後はCocoaPodsは新機能の追加はしなくなり、セキュリティやXcodeのアップデートなどのメンテナンス対応だけになるとのことです。
これは普段React NativeやFlutterで開発を行っているエンジニアには話題になったのではないでしょうか。 弊社でも普段React NativeやFlutterでアプリの開発を行なっているので、メンテナンスサポートが止まるまでにReact NativeやFlutterがSwift Package Managerへ移行することを願っています。
React NativeのSwift Package Manager対応の展望
![React NativeのSwift Package Manager対応の展望](https://res.cloudinary.com/zenn/image/upload/s--5cG3zZTz--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:React%2520Native%25E3%2581%25AESwift%2520Package%2520Manager%25E5%25AF%25BE%25E5%25BF%259C%25E3%2581%25AE%25E5%25B1%2595%25E6%259C%259B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:Nkzn%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2hpRkgxVktGMXZZOFk2eEtfZl9PVklHS2pEeWxkWG42MzVLU0VEZEE9czI1MC1j%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png)
こちらも先ほどのCocoaPodsの記事に関連したもので、React NativeのSwift Package Manager対応の状況について書かれている記事になります。
この記事の中でFlutterはすでにSwift Package Manager(SPM)対応が進んでいるとのことでした。
React Nativeの対応状況としては.podspec
ファイル経由でSPM依存が書けるようになるとのことでした。
React Native v0.75やExpo 52で上記対応が入ってくきて、不安定になるライブラリが出てくる可能性があるとのことで弊社でも覚悟しておきたいと思います。
Expo DOM components
ReactコンポーネントがReact Nativeで動かせるExpo DOM componentsというものが発表されました。
use dom
というディレクティブをファイルの先頭に書けばReact Nativeコンポーネント内でReactコンポーネントをimportして使えるというものです。
実際にshadcn/uiをExpoアプリで動かしたサンプルコードが公開されており、フロントエンドメンバー内でも話題になりました。 Reactのエコシステムが使用できるようになるので、実装の幅が広がりそうです。
BLEを使ったExpoアプリの作り方
![How to build a Bluetooth Low Energy powered Expo app](https://cdn.sanity.io/images/siias52v/production/1aa5809b8e3bd65330c89ab70dee7d371a9e1efc-3456x2234.png?rect=0,144,3456,1947&w=600&h=338&fm=webp&q=80&auto=format)
BLE(Bluetooth Low Energy)機能を活用したExpoアプリの開発方法について書かれたExpo公式のブログになります。
記事内ではreact-native-ble-plx
というライブラリを使用してスマホとArduinoとをBLEで接続していました。
弊社メンバーも技術時間(業務内で自分の興味ある技術を自由に試したり勉強できる時間)を利用してこの記事を参考にスマホからBLE接続してデバイスをLEDを光らせていました。 これは何かの案件に活用できるかもしれません。
iOSの標準APIで翻訳できる
![有償APIを使わなくてもiOS17.4+の標準APIを使って翻訳機能が実装できるらしいのでReact Native用ライブラリ作った](https://res.cloudinary.com/zenn/image/upload/s--OPZZ406t--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E6%259C%2589%25E5%2584%259FAPI%25E3%2582%2592%25E4%25BD%25BF%25E3%2582%258F%25E3%2581%25AA%25E3%2581%258F%25E3%2581%25A6%25E3%2582%2582iOS17.4%252B%25E3%2581%25AE%25E6%25A8%2599%25E6%25BA%2596API%25E3%2582%2592%25E4%25BD%25BF%25E3%2581%25A3%25E3%2581%25A6%25E7%25BF%25BB%25E8%25A8%25B3%25E6%25A9%259F%25E8%2583%25BD%25E3%2581%258C%25E5%25AE%259F%25E8%25A3%2585%25E3%2581%25A7%25E3%2581%258D%25E3%2582%258B%25E3%2582%2589%25E3%2581%2597%25E3%2581%2584%25E3%2581%25AE%25E3%2581%25A7React%2520Native...%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:SH1R4S4G1%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EvQUNnOG9jSk1YQmtDLVREWUhYTFY1NVFOQkM4NmNPZXdiM09vN1l4ZUNQSmNTckRXN2c9czk2LWM=%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png)
iOSの標準APIを利用したReact Nativeライブラリを著者が作成したので、その使い方を解説している記事です。 有償APIを使わずにそれなりに精度の高い翻訳ができるようで、そこがメリットではあるなと思いました。 一方でAndroidも似たような標準APIがあれば良いなと思いました(MLKitで実現できるのかも!?)。
Expoアプリでアニメーションを実装方法
![The beauty of mathematics in crafting stunning animations](https://cdn.sanity.io/images/siias52v/production/6dea7387fa3e850046fb2a33f197eba5ecc63327-2400x1350.png?rect=2,0,2396,1350&w=600&h=338&fm=webp&q=80&auto=format)
色々な数式を使って、アニメーションを実装してるExpoの公式ブログ記事になります。
複雑数式を考えて実装するのは難しいかもしれませんが、react-native-reanimated
が活用できればReact Nativeでもヌルヌルしたアニメーションが実現できそうだなと感じました。
デザイン
イカしたUIを見るシリーズの第2弾が出てた
![【イカしたUIを見る】Vol.2 これは発明だ!と思ったUIパーツ10選|Goodpatch Blog グッドパッチブログ](https://i0.wp.com/cms.goodpatch.com/wp-content/uploads/2024/08/image15.png?fit=1999%2C1125&ssl=1)
Goodpatchさんによる、イカしたUIを紹介する記事第2弾が出てました! 過去のこの座談会でも第1弾を取り上げましたが引き続き第2弾も良い記事でした。
この記事でボトムシートを掴むところを「グラブハンドル」と呼ぶの初めて知りました。
管理画面のUIデザインにおける25の改善ポイント
![【2024年6月版】管理画面のUIデザインにおける25の改善ポイント | ベイジのUIラボ~業務システムとSaaSのUIを考える](https://baigie.me/blog-ui/wp-content/uploads/2023/10/管理画面.png)
管理画面のUIデザインにおけるよくある改善ポイントをまとめた記事になります。 管理画面以外にももちろん当てはまるポイントもありますが、記事内でもある通り「大量の情報と複雑な機能」を有することが多い管理画面では特に気を付けると良さそうでした。
内容がとても充実していて、とても分かりやすい記事でした。
その他
postres.new
![postgres.new: In-browser Postgres with an AI interface](https://supabase.com/images/blog/lw12/day-1/postgres-new-og.png)
Supabaseが発表したAIアシスタント付きin-browser Postgresサンドボックスです。 以下の機能が使えるようです。
- D&DでCSVインポートできて自動でテーブルが作成できる
- レポート出力ができる
- チャートの生成ができる
- DBダイアグラムの作成ができる
私も実際に試してみたんですが、「〇〇のようなシステムを作りたい」のようなプロンプトを入力するだけで、ER図を作成してくれたのでとても便利だなと思いました。今後DB設計が楽になりそうです。
FindyでのGitHub Actions活用事例
![ファインディでのGitHub Actions活用事例](https://files.speakerdeck.com/presentations/254f0b98b50f43ae903ff460ed0e82ad/slide_0.jpg?31428384)
FindyさんでのGitHub Actions活用事例を紹介したスライドになります。 GitHub Actionsを活用した開発効率化のノウハウが詰まっていてとても参考になりました。
最後の方にPR作成されてからCloseされるまでのリードタイム計測に使っていると書かれていて、これは弊社でも活用できそうだなと思いました。
イベント
Supabase Meetup at Fukuoka
![【5席増枠しました】Supabase Meetup at Fukuoka (2024/08/20 19:00〜)](https://media.connpass.com/thumbs/55/55/55559c29cdcd7fed933cd26069ea461f.png)
福岡で開催されたSupabase公式のMeetupイベントでした。 私も参加しましたが、残念ながらSupabaseの人は来ませんでした...(Tシャツもらえました!)
ただ参加してわかったこととして、SupabaseはMeetupを各地で開催することでコミュニティを広げ、ユーザーを拡大していく戦略をとっているということです。
フロントエンドカンファレンス北海道まとめ
![フロントエンドカンファレンス北海道 2024 公開資料・Xアカウントリンクまとめ](https://res.cloudinary.com/zenn/image/upload/s--WNTTBNqv--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%25E3%2583%2595%25E3%2583%25AD%25E3%2583%25B3%25E3%2583%2588%25E3%2582%25A8%25E3%2583%25B3%25E3%2583%2589%25E3%2582%25AB%25E3%2583%25B3%25E3%2583%2595%25E3%2582%25A1%25E3%2583%25AC%25E3%2583%25B3%25E3%2582%25B9%25E5%258C%2597%25E6%25B5%25B7%25E9%2581%2593%25202024%2520%25E5%2585%25AC%25E9%2596%258B%25E8%25B3%2587%25E6%2596%2599%25E3%2583%25BBX%25E3%2582%25A2%25E3%2582%25AB%25E3%2582%25A6%25E3%2583%25B3%25E3%2583%2588%25E3%2583%25AA%25E3%2583%25B3%25E3%2582%25AF%25E3%2581%25BE%25E3%2581%25A8%25E3%2582%2581%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_34:%25E3%2582%2588%25E3%2581%2597%2Cx_220%2Cy_108/bo_3px_solid_rgb:d6e3ed%2Cg_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2U2MzAxMTgwMzUuanBlZw==%2Cr_20%2Cw_90%2Cx_92%2Cy_102/co_rgb:6e7b85%2Cg_south_west%2Cl_text:notosansjp-medium.otf_30:%25E6%25A0%25AA%25E5%25BC%258F%25E4%25BC%259A%25E7%25A4%25BE%25E3%2582%2586%25E3%2582%2581%25E3%2581%25BF%2Cx_220%2Cy_160/bo_4px_solid_white%2Cg_south_west%2Ch_50%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2l3RDVWRUhGaUh0Nmw1SEhtQ3FfVkFGSnRKS21NMmtVd2VicFp4PXMyNTAtYw==%2Cr_max%2Cw_50%2Cx_139%2Cy_84/v1627283836/default/og-base-w1200-v2.png)
夛田くん登壇お疲れ様でした!(「2024年にガラケー・ガラホをサポートするWebフロントエンド」という内容で発表)
全て面白そうな内容ばかりで、私も後で資料を見返そうと思います。
エンジニア出身デザイナーusagimaru氏と学ぶ ロジカルに考える エンジニアのためのUIデザイン
![エンジニア出身デザイナーusagimaru氏と学ぶ ロジカルに考える エンジニアのためのUIデザイン (2024/10/15 12:00〜)](https://media.connpass.com/thumbs/1c/f1/1cf1df6f8a3e1adb99d4e3a3926e457a.png)
こちらは10月15日開催のオンラインイベントです。 結構珍しいエンジニア出身デザイナーの方ということで、私もエンジニアですがUIデザインには興味があるのでぜひ視聴したいと思います。
各社の事例から学ぶウェブアクセシビリティ
![各社の事例から学ぶウェブアクセシビリティ 〜フロントエンドの最前線〜 (2024/08/23 12:00〜)](https://media.connpass.com/thumbs/2d/5e/2d5e8469da53693884dd7b3f2021f830.png)
こちらは8月23日に開催されたウェブアクセシビリティに関する勉強会でした。
印象に残ったポイントがいくつかありました。
- Headless UI使うとアクセシビリティ良くなるのでオススメ
- Linterなど活用することで実装時にチェックできる(eslint-plugin-jsx-a11yなど)
- 画像にAlt入れるなどの小さいところから始めると良い
アクセシビリティカンファレンス名古屋
9月7日に開催されたアクセシビリティのカンファレンスで、こちらも夛田くんが参加しました。
アクセシビリティ支援アプリの話や、受託でのアクセシビリティ対応の話、キャリアの話など色々な話が聞けたとのことです。
宣伝
前回の座談会記事で告知していました「Fusic Tech Live Vol.21 〜Front-End Tech Live〜」が昨日(9月12日)開催されました!
Youtubeでのアーカイブ配信されていますので、見逃した方はぜひご視聴いただけたらと思います!