その他

Poetry × FastAPI × SQLAlchemy × Alembicで作る、モダンなPythonバックエンド環境構築ガイド

目的FastAPIアプリの生成、依存管理、DBマイグレーションを、Poetryで一元管理することで、いままで複数のツールに依存していた作業を簡単にすることができます。ツールの役割ツール役割ひとことで言うとPoetry依存管理 & 仮想環境Pythonのnpm的存在FastAPIWebアプリケーション高速・型安全なAPIフレームワークSQLAlchemyORMPythonからDBを操作AlembicDBマイグレーションスキーマの変更を安全に管理実装の手順poetryプロジェクトの作成poetry newコマンドによるプロジェクトを生成poetry new fastapi-samplecd fastapi-samplepoetry addコマンドにより、pythonパッケージをインストールpoetry add fastapi uvicorn sqlalchemy psycopg2 alembicpoetryプロジェクトの初期状態のフォルダ構成fastapi-sample/├── pyp

その他

Poetryとは? – Python開発を劇的に快適にする依存管理ツール

Poetryとは?Pythonのプロジェクトを開発していると、次のような悩みを感じたことはありませんか?仮想環境(venv)の切り替えが面倒パッケージのバージョンがずれるpythonのバージョンを固定これらをすべて解決してくれるのが、Poetry(ポエトリー) です。Poetry は、Pythonの依存関係・パッケージ・仮想環境を一元的に管理できるツールです。かんたんに言えば、「pip + venv + setuptools」をひとつにまとめた新しい管理ツール。使い方インストールmacOS / Linux% curl -sSL https://install.python-poetry.org | python3 -または、Homebrewにより% brew install poetry確認% poetry --versionPoetry (version 2.2.1)プロジェクトの作成% poetry new myprojectファイル構成m

その他

PostgreSQL – 行レベルセキュリティポリシー(RLS)の利用

行レベルセキュリティとは?PostgreSQLのRLS(Row Level Security)=行レベルセキュリティは、マルチテナントSaaSやCRMのようにユーザーごとに見せるデータを制御したいときに必須の仕組みです。RLSは、テーブル単位で「行ごとにアクセス制御」をかける仕組みです。通常のPostgreSQLでは、SELECT * FROM customers;を実行すると全行が見えますが、RLSを有効にすると「自分の行」だけしか見えなくできます。どういうときに使うか?シナリオRLSで解決できることSaaSアプリ各テナントのデータを分離(他社データを見れない)社内CRM営業担当ごとに顧客データを制限AIログ組織ごとにログアクセスを制御基本の仕組みテーブル単位でRLSを有効化POLICY(ポリシー)を設定して、誰がどの行を見られるか定義PostgreSQLが自動でWHERE句を追加してくれるポリシーの設定例-- サンプルテーブル作成CREATE TABLE customer

その他 未分類

マルチテナントアーキテクチャの理解

マルチテナントアーキテクチャとは?「マルチテナントアーキテクチャ」とは、ひとつのソフトウェアやインフラを複数の利用者(テナント)が共有して使う仕組みのことを指します。たとえばクラウドサービスでは、1つのアプリケーションを何社ものお客さんが同時に使っていても、それぞれのデータや設定はしっかり分かれています。一般的には、データベースを共通したり、スキーマをどう分けるのか、といった技術的な話が多いですが、今回は、ユーザーからみた機能として、どのようなテナントアーキテクチャにすることがよいのか、有名なSaaSがどういう戦略をとっているのかを理解していきたいと思います。テナントとは?法人の管理者がSaaSとサービス利用の契約して管理者が社員や関係者を招待してその単位でデータや権限が管理されるそんな「組織としての利用の入れ物」です。SaaSの比較Slackビジネス向けのチームコミュニケーション(チャット)SaaS。チャンネル中心で会話・ファイル共有・通知連携を行う。テナントまわりテナント:ワーク

その他

Firestoreの特徴と基本的な使い方

Firestoreとは?Cloud Firestoreは、FirebaseとGoogle Cloudが提供する柔軟でスケーラブルなNoSQLドキュメントデータベースです。Web、モバイル、サーバー開発向けに設計されており、リアルタイム同期とオフラインサポートが特徴です。主なコンセプトは以下の通りです。ドキュメントとコレクション: Firestoreのデータは「ドキュメント」として保存されます。ドキュメントはキーと値のペアで構成されるデータの集合です。これらのドキュメントは「コレクション」にまとめられます。コレクションはドキュメントの集まりであり、さらにその中にサブコレクションとして別のコレクションを含めることもできます。これにより、データを階層的に整理できます。データ操作:追加 (Add/Set): コレクションに新しいドキュメントを追加したり、特定のIDでドキュメントを保存したりします。読み取り (Get): ドキュメントのIDを指定してデータを取得したり、コレクションから複数のドキュメン

その他

Monorepoでの設定例 – NestJS, Next.js

はじめにmonorepoは設定が決まるまで、かなり大変な作業ですが、一度うまくいけば、まとめて管理できるメリットがあり、少人数のプロジェクトにはむいていると思います。うまくいった設定を以下にメモし、今後の設定の見直しなどに利用しようと思います。アプリ全体の設定 ルートで、pnpm build, pnpm devで開発できるように設定./package.json{ "name": "my-app", "private": true, "packageManager": "pnpm@9.4.0", "scripts": { "dev": "turbo run dev --parallel", "build": "turbo run build", "lint": "tur

その他

Firebaseによる認証機能の実装

Firebaseプロジェクトの設定Firebaseプロジェクトを作成するFirebase 構築 > Authenticationを開くプロバイダから「匿名」を選択し、有効にする次に、プロバイダの追加で、「Google」を選択し、有効にするGCPサービスアカウントの所得Firebaseプロジェクトと同名で、GCPプロジェクトが作成されているIAMには、Firebase管理用のサービスアカウントが作成されているprivate keyを作成する、これは、後述のfirebase-adminの初期化に使用するNext.jsアプリの構築Next.jsアプリを生成する% npx create-next-app@latest apps/web✔ Would you like to use TypeScript? … No / Yes✔ Which linter would you like to use? › ESLint✔ Would you like to use Ta

その他

NestJS – LLMアダプタを抽象化するようにリファクタリング

はじめにDIを使っているのに、OpenAIとの結びつきが強いので、先に抽象化したコードを検討するLLM 抽象化アーキテクチャ1. LLMの抽象インターフェースを定義libにadaptersを生成する% npx nest g lib adapters✔ What prefix would you like to use for the library (default: @app or 'defaultLibraryPrefix' setting value)? CREATE libs/adapters/tsconfig.lib.json (222 bytes)CREATE libs/adapters/src/index.ts (71 bytes)CREATE libs/adapters/src/adapters.module.ts (202 bytes)CREATE libs/adapters/src/adapters.service.spec.ts (474 bytes)CREATE libs/adapters/

その他

NestJSとは – バックエンド用フレームワークでチャットAPIを実装してみる

NestJSとは?NestJSは、効率的でスケーラブルなサーバーサイドアプリケーションを構築するための、プログレッシブなNode.jsフレームワークです。TypeScriptをベースにしており、クリーンで整理されたコードを書くための構造を提供します。NestJSは、ただのライブラリではなく、アプリケーション全体の骨組み(フレームワーク)を提供することで、大規模なプロジェクトでも一貫性を保ち、開発を効率化することができます。本家の情報は、こちらを参照してください。NestJSの主な特徴1. TypeScriptファーストNestJSはTypeScriptを完全にサポートしています。これにより、静的型付け、インターフェース、デコレーターといったTypeScriptの強力な機能を利用でき、エラーを早期に発見し、保守しやすいコードを書くことができます。2. モジュール化されたアーキテクチャアプリケーションを再利用可能なモジュールに分割して構築します。これにより、コードの管理がしやすくなり、チーム開発や大規模なプロジェクトでも一貫性を保つことがで

その他

n8n – Community nodeの作り方

はじめにこちらのドキュメントを参考にします。n8n のコミュニティノードリポジトリに自作ノードを公開するための手順は以下の通りです:パッケージ名n8n-nodes- または @<scope>/n8n-nodes- で始める。例: n8n-nodes-weather。キーワードn8n-community-node-package を package.json の keywords に含める。package.json の設定n8n 属性の中に自作ノードと認証情報を追加する(starter node の例を参照)。動作確認Linter でチェックし、ローカルでテストして問題がないか確認する。公開npm レジストリにパッケージを登録・公開する(詳細は npm の公式ドキュメント参照)。👉 要するに、命名規則・package.json 設定・テスト・npm 公開が必須です。手順スターターノードをテンプレートレポジトリとして用意されています。このスターターリポジトリを基に、自分用のノードを開発し、npm に

Lang »