glossary
用語メモ
最終確認日: 2025-12-21
SIP
- System Integrity Protection の略
- macOSの保護機構で、システム領域への変更(特に /System や /usr/bin など)を制限する
- root権限でも書き換えできない範囲があるため、システムの安定性・安全性を高める
XDG Base Directory
- ユーザー設定・データ・キャッシュなどの保存先を標準化する仕様(FreeDesktop.org)
- 目的はホーム直下にドットファイルが散らばるのを防ぐこと
- 主にUnix系で使われるが、macOSでも採用可能(徹底はアプリ次第)
- 代表的な環境変数:
XDG_CONFIG_HOME(既定:~/.config)XDG_DATA_HOME(既定:~/.local/share)XDG_CACHE_HOME(既定:~/.cache)XDG_STATE_HOME(既定:~/.local/state)
RCファイル
- RC = Run Command の略
- 設定ファイルや初期化スクリプトに使われる命名規則
- 元々はUnix系システムで、シェルの起動時に実行される設定ファイル(
.bashrc,.zshrcなど)に由来 - 現在では様々なツールで設定ファイルの拡張子やファイル名として使われる
- 代表的な例:
.bashrc,.zshrc- シェルの設定ファイル.firebaserc- Firebaseプロジェクトの設定ファイル.npmrc- npmの設定ファイル.eslintrc- ESLintの設定ファイル
BaaS (Backend as a Service)
- Backend as a Service の略
- アプリケーションのバックエンド機能(データベース、認証、ストレージ、APIなど)をクラウド上で提供するサービス
- 開発者はサーバー管理やインフラ構築をせずに、バックエンド機能を利用できる
- 代表的なサービス:
- Firebase (Google)
- Supabase
- AWS Amplify
- Appwrite
- Hasura
- Backendless
セルフホスティング (Self-hosting)
- 企業や個人が自らのサーバーやインフラ上でソフトウェアやサービスを運用すること
- クラウドプロバイダーのマネージドサービスではなく、自分でサーバーを管理・運用する
- メリット:
- データの完全な管理とコントロール
- カスタマイズ性が高い
- コストが予測しやすい(固定費)
- データの所在地を完全にコントロールできる(コンプライアンス対応)
- デメリット:
- 運用・保守の責任を負う必要がある
- スケーリングの管理が必要
- セキュリティパッチの適用など、メンテナンスが必要
- 例: Supabase、Appwriteはセルフホスティング可能。Firebaseは不可。
ベンダーロックイン (Vendor Lock-in)
- 特定のベンダーや製品に依存することで、他のベンダーや製品への移行が困難になる状態
- リスク:
- コスト増加(移行コスト、継続的な利用コスト)
- 技術的な柔軟性の低下
- ベンダーの方針変更やサービス終了の影響を受けやすい
- データやコードの移植性が低い
- 対策:
- オープンソースの技術を採用
- 標準的なプロトコルやAPIを使用
- セルフホスティング可能なサービスを選ぶ
- 抽象化レイヤーを設けて、実装を交換可能にする
- 例: Firebaseはベンダーロックインが高い。Supabase(PostgreSQLベース)は低い。
GraphQL
- Graph Query Language の略
- Facebook(現Meta)が開発した、APIのためのクエリ言語およびランタイム
- REST APIの代替として使用される
- 主な特徴:
- 単一エンドポイント: 1つのエンドポイントで全てのデータを取得可能
- 必要なデータのみ取得: クライアントが必要なフィールドを指定して取得できる(オーバーフェッチングを防ぐ)
- 型安全性: スキーマ定義により、型安全なAPIを提供
- リアルタイム機能: Subscriptionにより、リアルタイムデータ更新が可能
- REST APIとの違い:
- REST: 複数のエンドポイント(
/users,/postsなど)でリソースを取得 - GraphQL: 1つのエンドポイント(通常は
/graphql)で、クエリで必要なデータを指定
- REST: 複数のエンドポイント(
- メリット:
- オーバーフェッチング(不要なデータの取得)を防げる
- アンダーフェッチング(複数回のAPI呼び出し)を1回のクエリで解決
- フロントエンドとバックエンドの疎結合
- 強力な型システム
- デメリット:
- 学習曲線がやや高い
- キャッシングが複雑(RESTのHTTPキャッシングほど単純ではない)
- クエリの複雑さによってはパフォーマンス問題が発生する可能性
- 代表的な実装:
- Apollo Server / Apollo Client
- Hasura(GraphQLエンジン)
- Relay(Facebook製)
- GraphQL Yoga
Apollo Server
- GraphQL APIを構築するためのオープンソースのサーバーライブラリ
- Node.js環境で動作
- Apollo GraphQL(旧Meteor Development Group)が開発・メンテナンス
- 主な機能:
- スキーマ定義(GraphQLスキーマ)
- リゾルバ(Resolver)の設定
- データソースの統合
- プラグインシステム(認証、ログ、キャッシングなど)
- サブスクリプション(リアルタイム通信)のサポート
- 特徴:
- Express、Fastify、Koa、Lambdaなど、様々なフレームワークと統合可能
- TypeScriptの型安全性を活用できる
- 開発者ツール(Apollo Studio)との統合
- パフォーマンス最適化機能(DataLoader、キャッシングなど)
- Apollo Clientとの関係:
- Apollo Server: バックエンド(サーバー側)のGraphQL実装
- Apollo Client: フロントエンド(クライアント側)のGraphQL実装
- 両方を組み合わせて、エンドツーエンドのGraphQLアプリケーションを構築
- 使用例:
- 多くの企業やスタートアップで採用されている
- GitHub、Netflix、Airbnb、PayPalなどがGraphQLを使用(Apollo Serverを直接使用しているかは不明)
ストアドプロシージャ (Stored Procedure)
- データベースサーバー内に保存された、一連のSQL文をまとめたプログラム
- データベース内で定義・保存され、必要に応じて呼び出して実行する
- 主な特徴:
- 再利用性: 一度定義すれば、何度でも呼び出し可能
- パフォーマンス: データベースサーバー側で実行されるため、ネットワーク通信が少なく高速
- セキュリティ: アプリケーションから直接SQLを実行せず、プロシージャ経由でアクセスできる
- ビジネスロジックの集約: 複雑な処理をデータベース側に集約できる
- メリット:
- ネットワーク通信の削減(複数のSQL文を1回の呼び出しで実行)
- SQLインジェクション攻撃のリスク低減
- ビジネスロジックの一元管理
- トランザクション処理の簡素化
- デメリット:
- データベースに依存するため、移植性が低い場合がある
- デバッグが難しい場合がある
- バージョン管理が複雑になる場合がある
- 使用例:
-- PostgreSQLの例 CREATE OR REPLACE FUNCTION get_user_orders(user_id INTEGER) RETURNS TABLE(order_id INTEGER, order_date DATE, total_amount DECIMAL) AS $$ BEGIN RETURN QUERY SELECT o.id, o.order_date, o.total FROM orders o WHERE o.user_id = get_user_orders.user_id; END; $$ LANGUAGE plpgsql; - 対応データベース:
- PostgreSQL(PL/pgSQL)
- MySQL(ストアドプロシージャ、ストアドファンクション)
- SQL Server(T-SQL)
- Oracle(PL/SQL)
- 注意: NoSQLデータベース(Firestore、MongoDBなど)では、ストアドプロシージャの概念が異なるか、存在しない場合がある