PrAhaのフィード
https://zenn.dev/p/praha
株式会社PrAhaでは、株式会社アガルートのサービス「アガルートアカデミー」の開発、自社サービス「PrAha Challenge」の運営、スタートアップに特化したデザインと受託開発を行なっています。一緒に働いてくれる方を血眼になって探しています。
フィード

AIで学んでいるのに成長できないなら、環境が原因かもしれない
PrAhaのフィード
昨今のプログラミング学習においては、いつでも気が済むまで質問に答えてくれる生成AIの登場により、以前よりも遥かに効率よく知識を得られるようになりました。多くのプログラミング学習者が、まずAIに質問し、素早く答えを得るという学び方を取り入れています。その一方で、答えはわかるのに成長している実感がない、得た知識が次の課題に応用できないと感じる人が少なくありません。理解したつもりなのに使える知識として定着していないのはなぜなのでしょうか。学習効率を低下させる生成AIの特性を理解し、生成AIを使うだけでは身につかない能力を育むことができる環境に身を置くことで、プログラミング学習をより効果的に...
1ヶ月前

VScodeで使えるDatabase Clientという最高のDBクライアントツール
PrAhaのフィード
私は4年くらい使っています。Database Client - Visual Studio Marketplace 気に入ってるところ AIと連携できるこれが1番素晴らしいと思っています。テーブル名の補完をしてくれますし、GitHub CopilotなどのAIを入れているとSQLをほとんど書いてくれます👇️▲Ctrl+Enterで実行できます(もしくはRunをクリック)「あと少し直せば使える」みたいなSQLをサッと書いてくれるので便利です。あと単純に「普段使っているエディタで書ける」というのが良きです。 いろいろなDBに対応しているCloudflare D1...
1ヶ月前

Pothosで始めるコードファーストなGraphQL開発
PrAhaのフィード
Pothosは型安全性を実現するためのコードファーストなGraphQLスキーマビルダーで、TypeScriptで記述したコードから簡単にGraphQLスキーマを構築できるライブラリです。https://pothos-graphql.dev/本稿ではPothosの特徴と弊社でのどのように使用しているかについて紹介します。 Pothosの特徴 コードファーストによる型安全性Pothosはコードファーストのアプローチを採用しており、オブジェクト型・クエリ・ミューテーションなどGraphQLの要素全てをTypeScriptで表現します。TypeScriptのコードを元にスキーマが...
1ヶ月前

TestcontainersでRDBを使ったテストを快適にする仕組み
PrAhaのフィード
なぜSQLのテストが必要なのかユニットテストでDBアクセスをモックするのは一般的なプラクティスです。テストの高速化に有効ですが、SQLロジック自体はテストされないという課題があります。複雑なJOINや集計処理、サブクエリを含むSQLは、意図通りに動作しているか実際にRDBで実行してみないとわかりません。また、パフォーマンスチューニングのためにSQLを書き換えたとき、テストがなければ「最適化によって挙動が壊れていないか」を確認するのが困難です。「シンプルなSQLだけ書いて、複雑な処理はアプリケーション側で行えばよいのでは」という考え方もあるでしょう。しかし、大量のデータをアプリケ...
2ヶ月前

なぜResult型ライブラリを再発明したのか
PrAhaのフィード
はじめにTypeScriptでエラーハンドリングを型安全に行いたいと考えたとき、皆さんはどのようなアプローチを取るでしょうか。JavaScript/TypeScriptの標準的なエラーハンドリング手法であるtry/catchは、型安全性に欠け、エラーが発生する可能性のあるコードを追跡するのが難しいという問題があります。そんな課題を解決するために、よく用いられるのがResult型を用いたエラーハンドリングです。Result型とは、成功時の値と失敗時のエラーを明示的に表現する型です。TypeScriptにおけるResult型ライブラリといえば、neverthrowが最も有名で広...
3ヶ月前

TypeScriptにResult型を導入するための妥協点はどこか?
PrAhaのフィード
現実のアプリケーションで発生するすべてのエラー・例外をResult型に変換するのは非現実的エラーハンドリングが不要なものはUnexpectedErrorとしてまとめてしまうという現実的な落とし所を提案する記事です。!記事内で使用されているResult型は@praha/byethrowが提供しているものです。カスタムエラーの定義には@praha/error-factoryを使用しています。ライブラリ固有の知識がなくても理解できるように、最小限のAPIのみを使用しています。 TypeScriptにResult型を導入したくなる理由TypeScriptのエラーハンド...
3ヶ月前

【TypeScript】カスタムエラーのすすめ
PrAhaのフィード
TypeScriptで開発をしていると、APIエラーやバリデーションエラーなど、さまざまなエラーを扱う場面があります。そんなときに、標準のErrorクラスだけで対応していませんか。この記事では、カスタムエラーを導入するメリットと、ボイラープレートを減らしてカスタムエラーを楽に定義出来るライブラリを紹介します。 カスタムエラーを作る理由標準のErrorクラスを使用することで楽にエラーを作成できますが、次のような問題があります。エラーの種類を区別しづらい追加の情報(HTTPステータスやエラーコードなど)を持たせづらいメッセージが一貫しないたとえば次のような例を考えてみま...
3ヶ月前

【170GB削減】Flutter開発でストレージ空き容量がパンパンになったときの対処法
PrAhaのフィード
「私の場合はこうすると空き容量を増やせました」を書きます。▲こんな感じで容量がいっぱいになってしまった時の対処法 先に結論結論から書くと、以下をすると合計170GBほど減らせました。miseを使ってる場合:mise pruneする(110GB→10GB)iOSシミュレーターを使ってる場合XCodeの「Window → Devices and Simulators」から不要なシミュレーターを手動でポチポチ消す(たぶん100GB→50GBくらい)dockerを使ってる場合:以下を実行する(40GB→30GB)docker image prune -...
5ヶ月前

Reactで作るアニメ付きドリルダウンUI ─ 状態設計から実装まで
PrAhaのフィード
業務でドリルダウン(UIパターン)を実現するコンポーネントを実装する機会がありました。状態管理やアニメーションの実装に関していろいろ考えることが多かったので、実装中何を考えていたのかをトレースして記事にまとめました。ドリルダウンに関する説明はソシオメディアさんの記事がわかりやすいので、そちらを参照してください。 実装したいコンポーネントのゴールを考えるドリルダウンを実装するにあたり、どのようなデータをどのようなAPIのコンポーネントで扱いたいかを考えます。扱うデータは、大分類>中分類>小分類のように階層的になっているデータを想定します。たとえば次のような部署>...
6ヶ月前

MCPサーバーでTSDocを参照出来るようにする
PrAhaのフィード
はじめに近年、ClaudeをはじめとしたLLMの進化はめざましく、日々の開発補助や設計検討など、ソフトウェアエンジニアリングのあらゆる場面で利用されるようになってきました。しかし、LLMの持つ知識は訓練データのカットオフ時点までのものに限られているという制約があります。これにより、比較的新しいOSSライブラリを使用する際、LLMがそのライブラリを正しく理解・活用できないという問題が発生します。例えば、弊社で最近公開した@praha/byethrowというResult型ライブラリがあります。これはneverthrowなどにインスパイアされた軽量・シンプルなAPIを提供するType...
7ヶ月前

@praha/byethrowの全機能リファレンス
PrAhaのフィード
はじめに前回の記事で@praha/byethrowについて紹介しましたが、本記事ではこのライブラリの全機能についてより詳しく紹介したいと思います。@praha/byethrowは、JavaScript/TypeScript向けの軽量でシンプルなエラーハンドリングライブラリです。Result型を用いることで、関数の成功と失敗を明示的に表現し、try/catchに頼らない型安全なエラーハンドリングを実現できます。以下では、Resultモジュールに含まれる全ての関数について、用途 (何をする関数か)、引数, 戻り値, 使用例コードの順で解説します。まだこのライブラリを知らない方でも分...
7ヶ月前

TreeShakableなResultライブラリを作りました
PrAhaのフィード
はじめにJavaScriptでは、throwを使ってエラーを明示的に投げることで、処理を中断する「大域脱出」が可能です。しかし、TypeScriptではこのthrowによって発生するエラーの型を記述できないため、型安全性が損なわれてしまいます。この問題を解決するために、関数の成功・失敗を明示的に扱えるResult型が有用です。TypeScriptでResult型を利用する場合、neverthrowやeffect-ts、fp-tsなどのライブラリがよく挙げられます。しかし、それぞれ一長一短があり、neverthrowは比較的シンプルで使いやすいものの、現在は活発なメンテナンスが...
7ヶ月前

Flutter初心者にflutter_hooksは必要ないかもしれない
PrAhaのフィード
2024年5月頃から社内でモバイルアプリを開発するチームが立ち上がりました。チーム全員がReactには慣れている一方でほとんどのメンバーがFlutter未経験という状態で、以下のような期待からflutter_hooksの導入を決めました。Widgetからロジックを切り出せるため、Widgetの見通しが良くなる・コードの記述量が減るのではないか慣れているReactHooksのように書けるため、Flutterの学習コストを下げることができるのではないかriverpod・graphql_flutterなど他に採用したライブラリのドキュメントにflutter_hooksと統合するため...
7ヶ月前

beforeAll,afterAll,beforeEach,afterEachの順番を永遠に覚えられないので図解した
PrAhaのフィード
これってどういう順番になるんだっけ?って毎回なるので図解しました。 describeが2個の場合たとえば、以下の場合を考えます。describe('外側のdescribe', () => { beforeAll(() => console.log('🐔 beforeAll')); afterAll(() => console.log('🐔 afterAll')); beforeEach(() => console.log('🐔 beforeEach')); afterEach(() => console.log('🐔 afterEac...
10ヶ月前

Drizzle ORMでテストデータの生成を簡単にする
PrAhaのフィード
はじめに弊社では、テスト実行時にデータベースをモックせず、Testcontainers を用いて実際のデータベースを使用したテストを行っています。このようなテストを行うためには、事前にテストデータを準備する必要があります。しかし、テストデータの作成は煩雑になりがちで、可読性の低下やメンテナンスの手間が増える原因となります。そこで、テストデータの生成をより簡単にするために、Drizzle ORMを活用したテストデータ生成パッケージ@praha/drizzle-factory を開発しました。本記事では、@praha/drizzle-factoryの基本的な使い方について紹介し...
10ヶ月前

【MySQL】手を動かして学ぶトランザクション入門
PrAhaのフィード
「これを見たらトランザクション周りがざっくり分かる」を目指します。MySQLを前提に解説しますが、他のDBMSでもベースとなる部分は同じだと思います。 トランザクションとは?ざっくり言うと「ここからここまでワンセットです」な処理のことです。たとえば、以下のようなSQLが2つあったとします。在庫を減らすSQL;発送処理をするSQL;この2つは絶対にセットで実行したいとします。ですが、この2つを実行した結果「1つ目は成功したけど2つ目は失敗した」となった場合、「在庫だけ減ってしまった!」になってしまいます。こういうときにトランザクションが使えます。この2つをトランザクシ...
10ヶ月前

PullRequestのマージ待ちの管理を自動化した
PrAhaのフィード
Renovateという自動ライブラリ更新botを利用し始めたのですが,マージの順番管理をする時間が増えてしまったので,その自動化をしました.短く言うとこうです.Renovate(またはDependabot)を利用していてGitHubのマージ前にブランチを最新にするルールを利用していると(Renovate以外の)PullRequestがなかなかマージできなくて困るのでマージ順を管理するGitHub ActionsであるMerge Masterを作りましたついでに,Enable auto-mergeを押すだけでいい感じにマージされるようになって便利になりました Reno...
1年前

ライブラリ選定のときに使えるツールあれこれ
PrAhaのフィード
自分が使ってるやつを紹介します。 GitHub Star History指定したGitHubリポジトリのスターの増加数をグラフで見れるサイトです。たとえば、👇の3つのReactのUIライブラリを例に見てみます。muichakra-uishadcn-ui▲https://star-history.com/#shadcn-ui/ui&chakra-ui/chakra-ui&mui/material-ui&Dateこんな感じで、一目でライブラリの人気度合いをざっくり比較できます。 使い方テキストボックスに、比較したいライブラリのGitHubリ...
1年前

DrizzleORMのGoldスポンサーになりました
PrAhaのフィード
はじめに私たちは最近、DrizzleORMのGoldスポンサー($1,000/月)になりました。本記事では、DrizzleORMについての簡単な紹介と、OSSスポンサーになるメリットについてご紹介します。 DrizzleORMとはDrizzleORMとは、TypeScript製のORMライブラリです。シンプルなAPIを提供し、SQLに似たインターフェースでデータベースを操作できる点が特徴です。テーブル定義をTypeScriptで記述でき、TypeScriptの型システムを活用することで、型安全なSQLを作成することができます。例えば、SELECT文は次のように記述でき...
1年前

モバイルアプリをリーダーアプリとして実装してアプリ内購入の実装を回避する
PrAhaのフィード
リーダーアプリとはリーダーアプリとは雑誌、新聞、書籍、オーディオ、音楽、ビデオなどのデジタルコンテンツの閲覧をアプリの主な機能として提供するアプリです。通常、モバイルアプリ内で有料コンテンツを利用する場合はアプリ内購入を実装してアプリ内から有料コンテンツを購入できるようにする必要があります。リーダーアプリとして実装されたアプリはその限りではなく、アプリ外で作成されたアカウントにアプリからサインイン => そのアカウントで購入したコンテンツをアプリで閲覧することができます。今回は他のウェブサイトでアカウント作成とコンテンツの購入をする前提で、そのコンテンツを閲覧するアプリ...
1年前