

ショートリンクとは?
インターネットをサーフィンしていると、t.cn/A67x8Y
のようなリンクをよく見かけるでしょう。これらは通常非常に短く、クリックすると元のドメイン名とはまったく異なるドメイン名のページにリダイレクトされます。
これらのリンクがショートリンクです。
ショートリンクはなぜ必要か?
ショートリンクは、Twitter の初期の頃、文字数制限が厳しかった時代に登場しました。当時、その主な目的は文字数を節約し、リンクが貴重なスペースを占有しないようにすることでした。
ショートリンクが普及するにつれて、リンク自体の「短さ」はそれほど重要ではなくなりました。より多くの用途が開発されました。
- データ分析:ショートリンクサービスはクリック統計を提供することが多く、ユーザーはクリック数やリンクの拡散効果を容易に理解できます。
- ブロッキングの回避:Safari や一部のメールクライアントなど、一部のソフトウェアはリンク追跡に非常に厳しく、追跡パラメータをリンクから自動的にクリーニングします。ショートリンクを使用すると、この問題を回避できます。
- 美観:ショートリンクはクリーンで簡潔であるため、ソーシャルメディアやテキストメッセージなどのプレーンテキストのシナリオでの共有に適しており、フォーマットを簡素化します。
ショートリンクの仕組み
ショートリンクのプロセスは 2 つのステップに分かれています。
ショートリンクの作成:
- ユーザーが長い URL をサービスに送信します。
- サービスがそれに一意の識別子(例:
aK8xLq
)を生成します。 - サービスは、この「コード」と元の長い URL のマッピングをデータベースに保存します。
- 識別子がユーザーに返されます。
ショートリンクから元のリンクへのリダイレクト:
- 誰かが
https://short.url/aK8xLq
をクリックすると、ブラウザがサーバーにリクエストを送信します。 - サーバーが URL パスから識別子
aK8xLq
を解析します。 - サーバーがデータベースをクエリして、この識別子に対応する元の長い URL を見つけます。
- サーバーがブラウザにリダイレクトステータスコード(301/302)を返し、レスポンスヘッダーの
Location
フィールドに元の長い URL を含めます。 - このレスポンスを受信すると、ブラウザは
Location
フィールドに指定された長い URL に自動的にリダイレクトします。
識別子の生成方法
ハッシュアルゴリズムが一般的に生成に使用されます。
- ハッシュの生成:MD5 や SHA1 のようなハッシュアルゴリズムで、長い URL 自体、または長い URL に「ソルト」(ランダムな文字列)を追加したものを入力として、ダイジェストを生成します。
- セグメントの切り抜き:前のステップで文字列が生成されます。その一部(例:最初の 6 文字)をショートコードとして取得できます。
- 衝突の処理: 2 つの異なる長い URL が同じショートコードを生成する可能性があります。ショートコードをデータベースに保存する前に、それが既に存在するかどうかを確認する必要があります。存在する場合は、別のセグメントを使用するか、ショートコードを再生成できます。
独自のショートリンクサービスの構築
ショートリンクサービスは、 2 つの主要な機能モジュールで構成されています。
- Nest.js
- PostgreSQL、データベースとして
1. プロジェクトの初期化
Nest.js CLI をインストールします。
CLI を使用して新しいプロジェクトを作成します。
これにより、url-shortener
という名前の新しいフォルダが作成され、必要なすべての依存関係がインストールされます。コーディングを開始するために、このディレクトリをお気に入りのエディタで開きます。
2. PostgreSQL データベースへの接続
次に、PostgreSQL データベースを統合します。公式の推奨に従い、ORM として TypeORM を使用します。ORM の役割は、データベースをコードに統合することです。
依存関係のインストール
データベースの設定
手順を簡略化するため、データベースをローカルにインストールしてビルドしません。代わりに、オンラインのデータベースをリクエストします。
Leapcell でワンクリックで無料のデータベースを取得できます。
ウェブサイトでアカウントに登録した後、「データベースの作成」をクリックします。

データベース名を入力し、デプロイメントリージョンを選択して PostgreSQL データベースを作成します。
新しいページには、データベースに接続するために必要な情報が表示されます。下部には、ウェブページ上で直接データベースを読み取ったり変更したりできるコントロールパネルがあります。

データベース接続の設定
src/app.module.ts
ファイルを開き、TypeOrmModule
をインポートします。
Leapcell から取得したデータベース資格情報を使用して、接続情報を入力します。ssl
を true
に設定する必要があることに注意してください。そうしないと、接続が失敗します。
ショートリンクモジュールの作成
次に、ショートリンクを管理するためのモジュールを作成します。
Nest CLI を使用して、必要なファイルを素早く生成できます。
その後、データベースと接続するために ShortLink
エンティティファイルを作成する必要があります。src/short-link
ディレクトリに short-link.entity.ts
という名前のファイルを作成します。
次に、DTO(Data Transfer Object)を作成します。DTO は incoming リクエストデータを検証するために使用され、有効な形式の URL を受信することを保証します。
これで、データベースに接続する必要があります。
ShortLinkModule
で TypeOrmModule
を登録します。src/short-link/short-link.module.ts
を開き、TypeOrmModule.forFeature([ShortLink])
をインポートします。
Leapcell のデータベース詳細ページに移動し、Web エディタで次のコマンドを実行して対応するテーブルを生成します。
ショートリンクサービスの作成
ShortLinkService
は、ショートリンクに関連するすべてのビジネスロジックを処理する責任があります。src/short-link/short-link.service.ts
を開き、次のコードを追加します。
ショートリンクコントローラーの作成
コントローラーは、HTTP リクエストを処理し、サービスを呼び出し、レスポンスを返す責任があります。src/short-link/short-link.controller.ts
を開き、次のコードを追加します。
プロジェクトの開始
src/main.ts
で DTO 検証を有効にします。
プロジェクトを開始するには、ターミナルで次のコマンドを実行します。
コンソールで次のコマンドを実行して、ショートリンクを作成します。
ショートリンクにアクセスする:
前のステップで返された shortCode
を使用して、完全な URL http://localhost:3000/some-hash
を構築し、ブラウザで開きます。Google 検索ページに自動的にリダイレクトされます。
このショートリンクサービスを、訪問数、訪問者の IP アドレスなどを記録するなど、さらに強化し続けることができます。
ショートリンクサービスのオンラインデプロイ
ここで、このサービスをオンラインにデプロイして、ショートリンクをインターネット上で共有できるようにするにはどうすればよいのでしょうか?
データベースを作成するために使用した Leapcell を覚えていますか? Leapcell はデータベースを作成するだけでなく、Web アプリケーションホスティングプラットフォームでもあり、もちろん Nest.js を含むさまざまな言語やフレームワークのプロジェクトをホストできます。
以下の手順に従います。
- プロジェクトを GitHub にプッシュします。手順については、GitHub の公式ドキュメントを参照してください。Leapcell は後で GitHub リポジトリからコードをプルします。
- Leapcell ページで「サービスを作成」をクリックします。
- Nest.js リポジトリを選択すると、Leapcell が必要な設定を自動的に入力します。
- 下部にある「送信」をクリックしてデプロイします。デプロイはすぐに完了し、デプロイメントホームページに戻ります。ここで、Leapcell がドメインを提供していることがわかります。これはショートリンクサービスのオンラインアドレスです。
これで、ショートリンクサービスがライブになり、誰でもインターネット上でショートリンクにアクセスできるようになります。
Xでフォローする:@LeapcellJP
関連記事: