かおるノート

cordx56のブログです

Tweet generatorのバージョン0.2.0を公開しました。

実際のサービスはこちら

Tweet generatorの新バージョン公開と共に、ドメイン名も刷新して新たにサービスを公開し直しました。

github.com

本エントリーはリリースノート代わりに、今回刷新された点について書いていきたいと思います。

新機能

鍵アカウント保護機能

これまでは鍵アカウントで生成された学習済みモデルを鍵アカウントを知らない第三者が利用してテキストを生成することで鍵アカウントのツイート内容が推測されてしまうという問題がありました。

今回のアップデートで新機能として鍵アカウント保護機能が追加されました。

鍵アカウントでモデルを学習した場合に、データベースに鍵アカウントであることが記録され、当該アカウントのテキスト生成時にはTwitterアカウントでログインしているかをチェックします。 鍵アカウントのテキスト生成時に、鍵アカウントでログインしていない場合には上記画像のエラーメッセージが表示されます。 内部的には、ログイン機能が実装されたことになります。 モデル生成時に自動でログインをする仕組みになっています。

動的サムネイル画像生成

Twitter cardなどで利用されるサムネイル画像の動的生成に対応しました。

画像にあるように、リンクからアカウント名を抽出し、アカウント名を含む画像を生成しています。 これにより、どのアカウントの自動生成結果なのかがツイートからわかりにくい問題が解消されました。 内部的には、metaタグをNuxt.jsでSSRし、画像はDjango側でPillowを使って生成しています。

その他の改善点

細かい改善点です。

フロントエンドのデザインを微調整

フロントエンドのデザインを少し変えました。 例えば、従来オプションがオプションとわかりにくく、入力必須であるかのように見えていた問題を解消するため、オプションであることを明記しました。

データベース内部で保持するアカウント名が大文字小文字を維持して保存するようになった

これまではファイルベースで生成済みモデルを保持していたため、大文字小文字の区別を無くすために、内部的に全て小文字で管理していました。 今回データベースに移行するにあたり、内部的に大文字小文字を維持して保存しても、大文字小文字を区別せず検索できるようになりました。 以前はモデル生成時にリダイレクトされるリンク先はアカウント名が全て小文字になったものでしたが、この変更により大文字小文字を区別した状態でリダイレクトされるようになりました。

プログラムの話

今回のバージョンアップ計画では、これまで使っていたフレームワークを変える決断をしました。

まず、PythonバックエンドのフレームワークをFlaskからDjangoに変更した点です。 これは鍵アカウント保護機能において必要だったため変更しました。 勿論、Flaskでログインシステムを一から構築することも考えましたが、データベースの扱いやすさなども考慮した際に、Djangoを利用したほうが開発コストが低いという判断になりました。 自分がインターン先やサークルでDjangoを利用する機会が多く、Djangoの知見がたまっていたという背景もあります。

次に、これまでVue.jsを使っていたのをNuxt.jsに変更した点です。 インターン先の関係でReactとNext.jsの知見がたまっていたためそちらへの移行を最初に考えたのですが1、Vue.jsのソースコードが再利用できるNuxt.jsを利用する方向で落ち着きました。 フロントエンドでは、動的サムネイル画像生成のために、metaタグをクライアントサイドで変更せず、サーバサイドで生成する必要がありました。 そのため、Nuxt.jsでSSRをするという決断に至りました。

おわり

以上が今回のアップデートの概要になります。 これからも多くの方に愛されるサービスであるよう、改良を続けていきたいと考えています。 今後ともTweet generatorをどうぞよろしくおねがいします。

Tweet generatorについてはこちらの記事もご参照ください。

cordx56.hatenablog.com


  1. コミットログにNext.jsを使おうとして途中で諦めたログが残っています