詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

Colaboratoryでワードクラウドを生成する

任意の文章に対してワードクラウドを生成したい要件があるとき、非エンジニアでも行えるようにするには、ウェブアプリケーションとして提供するのもよいが、この程度のちょっとしたスクリプトのような用途であれば Google Colaboratory でもいいんじゃね、となったのでやってみた。結果できた。

日本語の文章を入力として、分かち書きした出現頻度をもとにワードクラウドを生成する。

日本語WordCloud

走れメロス』でこんな感じになります。

Colaboratory には変数のもつデータをフォームで指定させる方法があるので、なんとなく使い方がわかるはず。複数行入力できそうな見た目のフォームはなかったけど……。

形態素解析器には Janome を利用した。pip だけでインストールできるので非常に簡単だった。

Google Apps ScriptでSlackのプロフィールカードを作る

オンラインで直接顔を突き合わせずに仕事ができるようになったり、会社が大きくなってきたりすると、たまの飲み会で顔を突き合わせてもあれこの人どこの誰だっけ、となることもしばしば。

物理的な会なら名札を配るところ。オンラインでの会なら、バーチャル背景に自分のプロフィールを書いておくのがオススメだけど、わざわざ全員が自分のを作るのは面倒なので自動化する、ということで今回は Google Apps Script で Slack のプロフィールカードを作ることにする。

GitHub - motemen/gas-slack-profile-card-slide-generator

動きはこんな感じ。

Slack Profile Card Generator demo - YouTube

Google と Slack でログインすると、Slack のプロフィールを元に Google スライドを作ってくれる。

いちおうデプロイしたものが以下にあるが、Google ドライブの権限をかなり広く要求するので、まあ信頼できる人が内輪向けに作ったのを利用するのがいいと思う。

https://script.google.com/macros/s/AKfycbyp8V4S1K3BptwKBNsnD5NcNE7kYd1jWZvGgVnDcLlhF5uQ3k_HxDv9cC4Av_gC-HqN/exec

セットアップ

というわけで自前でデプロイする方法。

@google/clasp を使っている。clasp のセットアップができている環境で yarn setup すると

  • clasp create --type webapp して GAS プロジェクトを作成、
  • yarn build でコードを生成、
  • yarn push で反映させる。

これをやった上で、プロジェクトを GAS でウェブアプリとしてデプロイすれば OK(完全に動かすには下記の設定が必要)。

Slack でログインさせてプロフィール情報を取得したいので、Slack App を作成する必要がある。便利なことに、右上の「Slack App Manifest」から https://api.slack.com/apps で使える JSON 形式の manifest を表示できるので、コールバック URL とか必要なスコープとかを手入力する必要はないはず。

後はいつもどおり GAS エディタで「プロジェクトの設定」→「スクリプト プロパティ」を開き、Slack アプリの SLACK_CLIENT_IDSLACK_CLIENT_SECRET をそれぞれ設定。それに加えて、プロフィールカードのテンプレートとなるスライドの ID(Google スライドの URL の https://docs.google.com/presentation/d/<この部分>/edit)を TEMPLATE_SLIDE_ID として設定すれば設定完了。

テンプレートスライドの作成

テンプレートとなる Google スライドはこんな感じ。

https://docs.google.com/presentation/d/1jwKNAl-MaMhfRSufmoTT3VX1g5Q-_q-EGkCszQo74Xc/edit#

このテンプレートをコピーして、プレースホルダっぽい要素が書き換えた新しいスライドを生成する。スライドは微調整の上、PNG なり SVG なりでダウンロードできる。

右上の「Template Variables」から、どんなテンプレート変数が使えるかが確認できる。ワークスペースに特有のフィールドも対応してるので便利ですぞ。

投稿短歌カレンダー

短歌、いま流行ってるそうです。電源もWi-Fiも歳時記もいらない、趣味としては最高にポータブルな部類でしょう。

現代ではウェブで短歌の投稿を受けつけているメディアもたくさんあって、はがきを送るようなことをしなくてもよいのはデジタルネイティブにもうけますね。また、投稿から掲載までのレイテンシが一ヶ月単位で生じるため、SNS などでインスタントな反応を求めがちな心を調律することもできます。

こういったフォームのそれぞれに題と〆切とがあるわけですが、これらを管理するのが面倒なので、ical 形式でカレンダーにインポートできるものを作りました。

投稿短歌カレンダー

https://tanka-form-calendar.motemen.workers.dev/calendar.ics という URL で配ってるので、これをカレンダーアプリなどから登録するとよいです。

現在対応しているのは以下のメディア。

ほかに対応すべきものがあれば教えてください。

技術的な話

デプロイは Cloudflare Workers。Node で VCR 的なことをする定番が分からなかったんだけど、今回は Polly.JS を使ってみた。Jest での利用も非常に簡単だったけど、あまり日本語の情報を見かけない気がする。別のものが流行ってるのかな?

定期的な更新には Cloudflare の Cron Triggers を使うわけだけど、エラーが起きた場合の通知やログがないので、モニタリングが難しいなー。ここは現状答えを持ってない。

GitHub - motemen/tanka-form-calendar

はてなで一緒に働きませんか?