Help us understand the problem. What is going on with this article?

短縮URLサービスの作り方

More than 3 years have passed since last update.

これは 日本情報クリエイト Engineers Advent Calendar 2016 による10日目の記事になります。

短縮URLサービスとは

長いURLを短いURLにしてリダイレクトさせるサービスです。
https://ja.wikipedia.org/wiki/%E7%9F%AD%E7%B8%AEURL

利用されだして随分経ちますが便利な反面いろいろと問題はあります。
1. 提供サービスの閉鎖により利用できなくなる。
2. 提供サービスの規約に抵触し利用できなくなる。
3. ウイルス感染源になりうる。

1,2は外部サービスを使う宿命ですが、できれば自分でコントロールしたいところです。
3は元のURLが隠しやすいためセキュリティ攻撃者にとっても便利なサービスとなってしまっています。

自分で作れば安心

自分でつくれば閉鎖もないし制限も受けないし、利用者も制限できます。
そこで、できるだけ手間をかけず、コストをかけず、可用性を落とさないサービスとして、AWS のS3を利用しました。
ドメインを用意して、S3のバケットとドメインを紐づけて、htmlファイルにリダイレクトコードを書いた物をアップロードする。
って仕組みを作ったのが2014年5月でした。

そのうち時間ができたらAPI利用して生成ページ作ればアップロードの手間も不要になるなぁ
って放置していたらあっという間に2年が経過していました(^^;

製作者現る!

弊社では毎年複数回インターン生を受け入れているのですが、1名だけのインターンが2回発生しました。
プログラム経験も少ない方だったので、社内向けで短期間で作成できるこの「短縮URL」を作成していただきました。

ポイント

S3も2年の間に進化して、WEBリダイレクトオプションが利用できるようになっていました。
短縮URLっぽく最後に.htmlが不要なのでこちらのオプションを採用しました。

主要コード(php)

for ($i=0;$i<10;$i++){
// オブジェクト名作成
  $s3_object = makeRandStr(6);
  // 同一オブジェクトがあるかの確認
  $check = $client->doesObjectExist($bucket_name,$s3_object);
  if (!$check){
    // 同一オブジェクトが存在していなかったら作成
    $result = $client->putObject(array(
      'Bucket' => $bucket_name,
      'Key' => $s3_object,
      'Body' => $s3_body,
      'ACL' => 'public-read',
      'ContentType' => 'text/html',
      'WebsiteRedirectLocation' => $target_url
     ));
     break;
   }
 }

社内系利用ってこともありきっちりしたエラー処理等も行っていません(^^;
コードの補足説明をすると以下の通りです。
makRandStrはランダムな文字を生成する自作関数です。
$bucket_nameが短縮URLで作成されたバケット名です。
$s3_objectが6文字のランダムな文字で短縮URLの後半部分であり、ファイル名です。
$s3_bodyはファイルの中身です。
$target_urlはリダイレクト先のURLです。

その他aws-apiへの接続部分や、登録フォーム結果表示ページ、本ページへのアクセス制限等を組み込んで完成です。

謝辞

作成いただいたインターン生Aさん、php & AWS-API未経験でインターン補佐をご担当いただいた社員Sさん、手探りでの構築大変だったと思いますが作成いただきありがとうございました(^^

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした