この記事は デジタル創作サークル UniProject Advent Calendar 2025 18 日目の記事です。
前書き
私は変なドメイン収集癖があります。
そのせいで、ドメイン保持数が10~20ぐらいあります。
最近は減らそうとしています。
その時にayane.xyzとかいう取りにくそうなドメインを入手したので、それを私のホームページがあるayane0857.netへリダイレクトするように最初はしていたのですが、それでは面白くないので省略リンクで遊ぼうとおもって、Goで開発しました。
本編
https://github.com/ayane0857/shorclink
ここから入手できます
現在Pullとか大募集です。
使ったもの
- Go
- gin
- godotenv
- gorm
- postgres
- K8s
K8sはサーバーです。
ユニプロのサーバーを使わせていただきました。
仕組み
postgresにショートコード(https://ayane.xyx/xxxxのxxxxの部分)とリンクを保存させています。
そこからgormで割り当ててます。
/apiや/api/:idにgetとかpostとかすると閲覧できたり、追加できたりいろんなことができます。
handlers/middleware.goでenvの設定ファイルによってAPIを割り当ててます。
私の推奨はrequiredです。
それ以外は無効化か、完全公開しかありません。
もし有効化した場合は、ヘッダーのX-API-TokenにTokenをいれれば通過できます。
APIは型にそってリクエストすると普通に使えるとおもいます。気分が良ければサイトにドキュメント追加します
https://github.com/ayane0857/shorclink/blob/main/models/sholink_models.go
こちらを見たらわかると思います。
envの説明
# Environment variables
ORIGINAL_LINK = https://example.com/
# Cors setting
ALLOWORIGINS = https://example.com/
# API settings
API = required
API_TOKEN = your_api_token
# SHORT_CODE settings
SHORT_CODE = auto
SHORT_CODE_LENGTH = 6
# Database configuration
POSTGRES_USER=your_db_user
POSTGRES_PASSWORD=your_db_password
POSTGRES_DB=your_db_name
POSTGRES_HOST=localhost
ORIGINAL_LINKはルートにアクセスされたときのリダイレクト先です。
ALLOWORIGINSはAPIを送っても大丈夫な部分です。Next.jsなどでリクエストしたいときにそのサイトのURLを使ってください。
API settingsは見たらわかるような設定項目なのでスキップします。
SHORT_CODEはAPIリクエストされたときに自動生成する(generate)か、そちら側で指定してもらう(required)か、自動で判断する(auto)かで分けています。
SHORT_CODE_LENGTHは自動生成する場合のショートコードの文字数です
Database configurationはDBのユーザー名等を記入ください。
凝った部分
handlers/short_code.goでショートコードに自由度を持たせています。
省略リンク系のサービスを見ると自動生成が結構多いんですけど、公式Discordの省略リンクを作りたい場合は/discordみたいな感じでわかりやすいリンクを作りたい方もいると思うので指定できるように、指定してない場合はそこを自動生成したりとか、そこらへんを作りました。
おわりに
Goでなにか作ったのは二回目なので、ちょっと不手際があると思いますが、どうぞ使ってくれるとうれしいです。
あとDBがポスグレか対応していないのがちょっと痛いですかね?
この省略リンクGoで作ったのでリダイレクトとかは早いとは思います、きっと()