2023年下半期に他人に勧めたいWeb技術まとめ
はじめに
Web技術は日進月歩で新しい技術が増えているが、実務でそれらすべてを触る機会はない。そこで、今回の記事では2023年下半期に赤の他人に勧めたいWeb技術を個人の独断と偏見で解説する。
対象者
- これから何をすればいいのかわからないプログラマー
- 新しい技術に興味があるひと
- スキルセットを拡大したいひと
- タイトルでなんとなく気になったひと
フレームワーク
FastAPI
FastAPIはPythonでAPIを開発するために開発された軽量のWebフレームワークだ。FastAPIでは、主に以下の特徴がある。
- Node.jsやGo言語に匹敵する高速なアプリケーションを開発できる
- 構造が簡単(Flaskの影響を受けている)
- Pythonに型定義を含められる
- 環境構築がコマンド一つで終了する
- 非同期処理を簡単に実装できる
- Pythonで開発されているので、機械学習との相性が抜群
- RESTとGraphQL両方の開発に対応している
- デフォルトでAPIドキュメントを出力できる
FastAPIはこれらの特徴に対応したライブラリの用途が公式ドキュメントで丁寧に解説されているので、多様性に富んだ開発が得意だ。
PythonでWeb開発をする際に特に拘りがなければ、FastAPIを最もおすすめする。
Django
DjangoはFastAPI同様にWeb開発に特化しているフレームワークである。必要最小限の機能しか搭載されていないFastAPIとは違って、最大の特徴は開発に必要な機能がデフォルトで搭載されていることにある。言いかえれば、Web開発に必要な機能を最初から手で書く必要はなく、デフォルトで書かれているコードをカスタマイズするだけで簡単なアプリケーションを作れるのだ。
たとえば、Djangoには以下のような機能がデフォルトで搭載されている。
- セキュリティ:SQLインジェクション、クロスサイトスクリプティング等のセキュリティ上に関する問題を防ぐ機能が組み込まれている。
- Adminインターフェイス:Djangoには、データベースの内容を管理するための強力なインターフェイスを持つ。
- ORM:Djangoにデフォルトで搭載されている。これを使うことで、データベースのクエリをPythonで書くことができるのだ。
Djangoは世界的に有名なSNS「Instagram」や画像共有サービス「Pinterest」で採用されている。
NestJS
NestJSはTypeScriptで開発されている、バックエンドを開発するためのフレームワークである。最大の特徴は、Djangoと同様にバックエンドの開発に必要な機能がデフォルトで搭載されている点だ。
NestJSの特徴は以下の通りである。
- 拡張性:NestJSは多くのライブラリやツールを組み合わせて使えるので、特定のプロジェクトのニーズに合わせてカスタマイズできる。
- TypeScriptのサポート:NestJSはデフォルトでTypeScriptが使えるので、型安全な開発をバックエンドで導入したり、TypeScriptだけでWebアプリケーションを開発したりする際には最適な技術になる。
- デコレータ:NestJSは依存性注入を採用していて、コンポーネントあいだの結合度を低く保ちつつ、モジュールのテストや再利用を簡単にする。
- 公式ドキュメントが充実している:NestJSの公式ドキュメントは図解やソースコードが豊富で、新しく学ぶ上で手助けになる。
NestJSはフロントエンド開発でTypeScriptを学んでいるプログラマーにとっては非常に学びやすい技術だ。NestJSの設計思想はAngularに影響を受けているのか、独特な専門用語が数多く登場する。それ故に慣れるまで時間がかかるが、学んで損はないWeb技術と言えるだろう。
NestJSに関しては、以下のZenn記事にて基礎知識を丁寧に解説している。時間に余裕があれば確認してほしい。
NextAuth.js
NextAuth.jsは、Next.jsアプリケーション向けの認証および認可ライブラリだ。サーバーレスアプリケーションや他の環境における認証の煩雑さを簡単にすることを目指して設計されている。
NextAuth.jsの主な特徴は以下の通りだ。
- 認証プロバイダの統合: 既存の認証プロバイダ(Google、Facebook、GitHubなどのOAuthサービスをはじめとして多数)との統合が容易で、独自の認証プロバイダを使用できる。
- データベースレス: NextAuth.jsはデータベースを必要とせずに動くが、セッション情報やユーザ情報を保存するために任意のデータベースを使える。
- セッション管理: クライアント側のセッションの状態を簡単に取得するためのフックが提供されており、JWTを使用したセッション管理もサポートしている。
- セキュリティ: CSRF対策、HTTPSを強制するオプション、ワンタイムパスワード(OTP)、マルチファクタ認証など、多くのセキュリティ機能が組み込まれている。
- 高いカスタマイズ性: 認証フローやコールバック、ページ、メールテンプレートなど、多くの部分がカスタマイズできる。
- TypeScriptサポート: NextAuth.jsはTypeScriptで書かれており、型の安全性とエディタのサポートを得られる。
ExpressoTS
ExpressoTSとは、Expressjsをもとに開発されたバックエンドのWebフレームワークだ。読みやすさ、保守性とスケーラビリティに焦点を当て、NestJS同様にコマンド入力一つで簡単にバックエンドを構築できるのが最大の特徴だ。
ExpressoTSには他にも数多くの特徴があるが、特に強調しておきたいのが依存性注入のシステムである。ExpressoTSではContainer、Module、ControllerとClassesの4つのコンポーネントで依存性注入のシステムを実装する。
同じくTypeScriptで開発されているバックエンドのフレームワークであるNestJSと比較すると、専門用語の多さによる独自の設計思想と簡単なセットアップという点で共通点が見られる。さらに、React(Next.js)等でTypeScriptを用いてフロントエンドを開発している際、同じ言語で開発されているのでバックエンドにもフロントエンドの知識や経験をそのまま応用しやすい。
NestJSと同様に、現在TypeScriptでWeb開発を進めているなら学んで損はないWebフレームワークと言えるだろう。
ExpressoTSに関しても、以下のZenn記事にて基礎的な知識とサーバの立て方を簡潔に解説している。
API
Postman
PostmanはAPIの開発、テスト、ドキュメントの作成やモニタリングをサポートするためのツールだ。APIのエンドポイントへのリクエストを簡単に作ったり送信したりできるのが最大の特徴である。Postmanに関しては、公式ドキュメントであるPostman Learning Centerはもちろん、QiitaやZennでもノウハウに関する記事が数多く公開されている。
Postmanに関しては、以下のZenn記事にて詳細に解説している。時間に余裕があれば一読してほしい。
Insomnia
InsomniaもPostmanと同様に、APIの設計・開発を手助けするWebサービスだ。Insomniaが持つ特徴は数多く存在するが、中でも特に重要な特徴を3点に絞って解説する。
- GraphQLのサポート:InsomniaはGraphQLクエリの作成、テストやドキュメント化を簡単にしてくれる組み込みのサポートを提供している。
- プラグインのサポート:Insomniaはプラグインベースのアーキテクチャを採用している。これにより、デフォルトのプラグインを使えるだけではなく、ユーザがカスタム機能を追加するためのプラグインを作ることもできる。特定のニーズや要件に応じてツールをカスタマイズできるのがポイントだ。
- レスポンスのフィルタリング:JSONやXMLのレスポンスを簡単にフィルタリングし、特定のデータを素早く確認できる。
Amplication
Amplicationは、TypeScriptで開発された、APIの設計や開発をサポートするオープンソースのソフトウェアである。PostmanやInsomniaとは違って、APIの開発に特化しているのが最大の特徴だ。データモデルを定義したり、CRUDやユーザ認証等に対応しているAPIを自動生成したりできるのがポイントである。
これからTypeScript(Node.js)でAPIを開発したいなら使って損はない。
Httpie
Httpieは、コマンドラインからHTTPリクエストを簡単に作ったり、送信したりできるPythonのライブラリである。
Httpieが持つ主な特徴は以下の通りだ。
-
シンプルな文法構造:この特徴は、特にJSONを扱う際に非常に便利である。例えば、JSONデータをPOSTする際に
http POST example.com/api name=John age=30
のように簡単にリクエストを作れる。 - カラーリングしてレスポンスを出力:Httpieはレスポンスをカラーリングして表示するため、結果を読み取るのが簡単である。
- フォームとファイルアップロードに対応:Httpieは、フォームデータの送信とファイルアップロードを簡単にできる機能を持つ。
- モダンなプロトコルのサポート:Httpieは最新のHTTPプロトコルや認証方法に対応できる。
これらの特徴により、HttpieはAPIのテストやデバッグ、システム間の通信の確認等、様々なタスクにおいて非常に重宝するツールである。
データベース&ORM
Prisma
PrismaはTypeScript(JavaScript)で開発されたORM――言いかえれば、データベースを設計するための言語である。MySQLやSQLiteのようなリレーショナルデータベースはもちろんのこと、MongoDB等のNoSQLのデータベースにも対応している。
Prismaの最大の強みは、SQLを書かずに人間が読みやすい方法でデータベースのテーブルを設計できる点にある。それだけはなく、PrismaはTypeScriptで開発されているためデータベースに型安全性を持たせることもできるのだ。これにより、エラーを早期発見しやすくデバッグを効率的にできるというメリットがある。
MongoDB
MongoDBは、SQLを書かずにデータベースを設計できるNoSQLを象徴するデータベースである。MongoDBはデータベースの設計にSQLを使わないかわりに、JSONを使う。
テーブル単位でデータベースを管理する、MySQLやSQLiteのようなリレーショナルデータベースとは違って、MongoDBは定義済みのスキーマ無しで多種多様なデータを格納できる。特に地理空間データのサポートが充実しており、地理情報を用いるアプリケーションの開発で便利だ。
MongoDBはWindows、macOSやLinux等の様々なOSに対応していて、かつ多種多様なプログラミング言語に対応している。SQLを書かずにデータベースを設計する経験を味わいたいなら学んで損はないだろう。
MongoDBに関しては、以下のZenn記事で基本的な概念を解説している。
余談:技術選定で重要なポイント
本記事では、「2023年下半期に他人に勧めたい技術」をテーマに多種多様な技術の特徴を紹介した。そこで、技術選定で重要なポイントを説明する。
技術選択はトレードオフだ。技術に絶対的な優劣はない。自分の開発したいアプリケーションや得意な分野等に応じて適宜選択することが非常に重要になる。
技術選定をするうえで、日本経済新聞出版の『任天堂"驚き"を生む方程式』に重要な文があったので抜粋する。
現代に蘇る、枯れた技術の水平思考。
「本来、娯楽って枯れた技術を上手に使って人が驚けばいいわけです。別に最先端かどうかが問題ではなくて、人が驚くかどうかが問題なのだから」
娯楽とIT業界は関係ないように思えるが、上述の引用文にある「人が驚くかどうかが問題」という言葉はソフトウェア開発にも通じるものがあるのではないだろうか。人が感動したり驚いたりすれば、どんな技術を使っても問題はない。
技術はアプリケーションの開発や問題解決の一つの手段に過ぎないことは、技術選定を適切に行う上で留意するべき重要な視点だろう。技術はあくまで手段に過ぎない。
参考記事
以下の記事の影響を受けて、「人に勧めたい技術」の記事を執筆した。
記事の内容は以下のWeb記事・ドキュメントを参考にした。
Discussion
NestJS の記事へのリンクを貼る場所が間違っているかも?です。