ブログのタイトルをもとにパーマリンクを生成するスクリプトをAmazon Translateで作ってみた

2021.07.15

こんにちは、CX事業本部の若槻です。

DevelopersIOではブログ記事を投稿する時に、筆者は記事のタイトルやコンテンツに加えて任意のパーマリンク(postname)を指定できます。

postnameは記事のURLの一部となるため、SEO(Search Engine Optimization)を考えると記事の内容に関連した文字列とした方が良いのでしょうが、それを毎回頭で考えるのは億劫です。

なので私は日々のブログ執筆の効率化の一環として、ブログのタイトルをもとにパーマリンク(postname)を生成するスクリプトをAmazon Translateを使って作り、利用しています。今回はそのスクリプトをご紹介します。

スクリプト

スクリプトは下記のようになります。

get_postname.sh

#!/bin/sh
set -eu

# 翻訳処理
get_translated() {
  aws translate translate-text \
    --text "$1" \
    --source-language-code ja \
    --target-language-code en | \
  jq -r '.TranslatedText'
}

# 置換処理
replace_to_postname() {
  echo "$1" | \
    sed -e 's/ /-/g' | \
    sed -e 's/[^a-zA-Z0-9-]//g' | \
    tr '[:upper:]' '[:lower:]',,
}

echo ""
echo "Postname is ..."
translated=$(get_translated "$1")
postname=$(replace_to_postname "${translated}")
echo "  " ${postname}
echo ""

翻訳処理

Amazon Translateを使用して日本語のタイトルを英語に翻訳する処理です。

翻訳処理

% get_translated(){
  echo $(aws translate translate-text \
    --text "$1" \
    --source-language-code ja \
    --target-language-code en) | \
  jq -r '.TranslatedText'
}

実行すると下記のような処理結果が得られます。

% get_translated "ブログのタイトルをもとにパーマリンクを生成するスクリプトをAmazon Translateで作ってみた"
I created a script in Amazon Translate to generate permalinks based on the title of the blog

置換処理

翻訳結果に対して下記の置換を行う処理です。

  • sed -e 's/ /-/g':スペースをハイフン-に置換
  • sed -e 's/[^a-zA-Z0-9-]//g':英数字とハイフン以外の文字列を削除
  • tr '[:upper:]' '[:lower:]',,:英字を大文字から小文字に置換
% replace_to_postname() {
  echo "$1" | \
    sed -e 's/ /-/g' | \
    sed -e 's/[^a-zA-Z0-9-]//g' | \
    tr '[:upper:]' '[:lower:]',,
}

実行すると下記のような処理結果が得られます。

% replace_to_postname "I created a script in Amazon Translate to generate permalinks based on the title of the blog"
i-created-a-script-in-amazon-translate-to-generate-permalinks-based-on-the-title-of-the-blog

スクリプトを使ってみる

ちゃんとブログのタイトルをもとにpostnameが生成できています。

% sh ./get_postname.sh 'ブログのタイトルをもとにパーマリンクを生成するスクリプトをAmazon Translateで作ってみた'

Postname is ...
   i-created-a-script-in-amazon-translate-to-generate-permalinks-based-on-the-title-of-the-blog

記号などが含まれている場合も置換処理によりちゃんと削除されています。

% sh ./get_postname.sh 'ブログ(Developers_IO)のタイトルをもとにパーマリンクを生成するスクリプトを"Amazon Translate"で作ってみた'

Postname is ...
   i-created-a-script-with-amazon-translate-to-generate-a-permalink-based-on-the-title-of-the-blog-developersio

スクリプトで作成したpostnameはそのまま使用しても良いですし、冗長だったり翻訳がおかしいと感じたらちょちょいと添削や順番を変えるなりして修正をかけても良いと思います。今回の記事だと生成結果を下記のように修正しました。

  • (修正前):i-created-a-script-in-amazon-translate-to-generate-permalinks-based-on-the-title-of-the-blog
  • (修正後):script-to-generate-permalinks-based-on-the-title-of-the-blog-using-amazon-translate

おわりに

ブログのタイトルをもとにパーマリンクを生成するスクリプトをAmazon Translateで作ってみたのでそのご紹介でした。

実際使用しているのは今回の10倍ぐらいのボリュームのあるもっとその他色々な効率化処理を行えるスクリプトになるのですが、今回はパーマリンク生成部分のみ紹介しました。他の部分に関しても追々紹介したいと思います。

参考

以上