投稿

Twilioでオセロ(Reversi)を作ってみました

イメージ
本記事は、 Twilio Advent Calendar 2020 の12月22日担当分です。 はじめに Twilioについて勉強せねば、と思っていたところでタイミングよくAdvent Calendarの話があったので手を挙げてみました。私は普段、Webやメールを扱うエンジニアです。電話を扱う機会はそれほど多くありません。また、Twilioのハンズオンに参加したりドキュメントを読んだことがある程度で、プロダクトでTwilioを使い込んでいるわけでもありません。今回の記事は、Twilio初心者が実際に使ってみて得られた気付きを共有する内容と思って読んでいただけると幸いです。 新しいサービスやハードウェアを理解しようと思ったときに、チュートリアルに沿って手順通り進めるとたいてい動くものができあがるので、なんとなく理解した気分になってしまうのですが、そこから外れたことをやろうと思った瞬間「何から手を付けりゃいいんだっけ」と思考が固まってしまうことがよくあります(自分だけかもしれませんが)。そんな時は、何でもいいので自分で考えたアプリケーションにそのサービスなりハードウェアを組み込んでみるのが、理解のための近道と思っています。 というわけで、Twilioを使ってオセロ( Twilio-Reversi )を作ってみました。 概要 このアプリは、大きく分けて2つの機能で構成されています。一つは、電話機からTwilioの番号に電話をかけてゲームを進める部分です。もう一つは、打った手を対戦相手の電話機にSMSで通知する部分です。 まずはじめにゲームの進行部分です。 (1)電話機からTwilioの番号に電話をかけると、(2)Twilioからアプリケーションに対してWebhookのリクエストが飛びます。アプリケーションはリクエストに応じてゲームを進行させ、(3)状況に応じた結果を TwiML として返すと、(4)Twilioは電話機に対して音声応答を返します。これが基本的な流れですが、石を置けない座標を指定したり、手番じゃない方の電話機で石を置こうとすると、(3)の内容が変化して電話機には入力の拒否ややり直しを伝える音声応答が返ります。 次に対戦相手にSMSで通知する部分です。 こちらは非常にシンプルで、 SMS API を呼び出すと、Twilioが以下のようなメッセージをSMSとして...

kintone-sendgrid-pluginを更新しました(v11)

イメージ
久しぶりにSendGrid kintoneプラグインをバージョンアップしました。使い方については ドキュメント を見ていただくとして、この記事では、ドキュメントに盛り込まなかった裏の仕組みや、今回のバージョンアップ作業に伴い調査したことなどをメモします。 バージョンアップ概要 今回のバージョンアップ内容は以下のとおりです。 Dynamic Transactional Template 文字列置換 if〜else句 イテレータ サンドボックスモード リクエストパラメータ表示 リクエストパラメータのチェック To表示名 対応フィールドの種類拡張 サポート対象ブラウザを明記 Google Chrome Mozzila firefox Dynamic Transactional Template 文字列置換 「文字列置換」はメール本文や件名に宛先(kintoneのレコード)ごとにkintoneフィールドの値を埋め込む機能です。この機能はこれまでサポートしてきたLegacy Transactional Templateでも利用できました。 Dynamic Transactional Templateではこれに加え、「if~else句」と「イテレータ」機能が利用できるようになりました。 if~else句 if~else句はBoolean値により表示を制御する機能です。テンプレートに以下のように記述するとタグ「show」の値に応じて表示を切り替えることができます。 {{if show}} showの値がtrueの場合に表示 {{else}} showの値がfalseの場合に表示 {{#if}} kintoneの場合、(今のところ)Boolean値を返すフィールドは存在しないため、フィールドの値が指定されていない場合に返るnull値をfalse,値が指定されている状態をtrueとして判定する挙動を利用して制御します。より具体的には、 以下の3種類のフィールド が値無指定の場合にnullを返すので、if〜else句の制御に利用できます。 ドロップダウン 日付 時刻 イテレータ イテレータは配列により可変長要素を生成する機能です。テンプレートに以下の...

Cybozu Meetup #19 ヘルプサイトについて語る会に参加してきました

イメージ
2019/6/18に開催された Cybozu Meetupのヘルプサイトについて語る会 に参加してきました。業務でサポートサイトのアップデートを担当しているのですが、基本的なヘルプサイトを作成する際の考え方から、データ分析、多言語対応サイトで効率的にコンテンツを管理する方法まで、短時間ながら非常に濃い内容でした。 内容 トークセッションは3つ。資料は以下のとおりです。 ヘルプサイトの制作プロセス サイボウズ株式会社 仲田 尚央氏 サイボウズのヘルプサイトの作成ノウハウに関する基本的なお話でした。「いいヘルプ」を作成するためのプロセスを整理した上で、「誰が」「何を」「どのように」の観点から、ヘルプサイトの構成について整理する内容でした。 書籍も出されているとのことで参考になりそうです。 ヘルプサイトのデータ分析 サイボウズ株式会社 山本 絵理氏 定量的、定性的分析に基づいてヘルプサイトの具体的な改善例についてのお話でした。Google Analyticsによるデータ収集、Googleデータポータルによる可視化、分析レポートの共有、アンケートなどの定性データと組み合わせたより効果の高い改善活動の紹介がありました。 ヘルプサイトのデータ分析 from Eri Yamamoto GitHubと翻訳支援ツールで多言語サイトの更新を超速にする サイボウズ株式会社 澤井 真佑子氏 多言語展開しているヘルプサイトの更新作業の効率化に関するお話でした。GitHub上でコンテンツ管理し、MemsourceというCATツールと組み合わせて、netlify上でHugoを使ってコンテンツを公開するというもの。 GitHubと翻訳支援ツールで多言語サイトの更新を超速にする from Mayuko Sawai 感想 さすがのサイボウズさん 長年プロダクトを提供されているだけあって、ヘルプサイトに対する手のかけ方が半端ないですね。正直、ここまでキッチリ改善や効率化をやれる環境は羨ましいです。一般的にはヘルプサイトを作るのが精一杯で、改善まで手が回らず結局放置というパターンが多い気がします。まずは収集したデータを可視化して、メンバーに共有するところが第一歩と感じました。蓄積したデー...

外国人との英語での働き方講座に参加してきました

イメージ
3/22に開催された「 外国人との英語での働き方講座 」に参加してきたのでメモします。申し込んだときには気付いていなかったのですが、定員100人に対して300人を超える申し込みのあった超人気イベントでした。私は109番目のエントリーで、キャンセルが出て繰り上がりで参加できることになったのは幸運でした。 同じ内容のイベントが4/5にも開催される そうですが、定員220人に対して申し込み数600人超えという、ちょっとしたカンファレンス級のイベントになっていたりします。 概要 イベントの内容としては、「 マンガでわかる外国人との働き方 」という書籍の内容紹介+α。Stripe Japan社代表取締役社長の ダニエルさん による講演に続き、著者である千代田さん(いわゆる「 ちょま ど 」さんですね)、 ロッシェルさん に加えてダニエルさんによるトークセッション、最後に即売会&サイン会という流れ。 Stripe Japanダニエルさんの講演 まずは、ダニエルさんの講演内容のメモ。 Stripeは世界11箇所にオフィスを構える多国籍企業で社員は約1600人。 D&I を重視しており、採用、社内、社外との関わりなどさまざまな場面で取り組みが行われている。いい会社なんだなぁ、という印象。 採用(この辺、メモが不十分) 採用の応募フォームでGitHubアカウントを必須にしない Rooney Rule を取り入れ、マイノリティが候補者にならないオファーを出さない 社内 Onboading バディシステム ランチボット 強制的に二人をマッチさせてランチに行かせる Social Events アルコール中心にならないように 時間帯を意識する 例えば、子供のお迎えで早く帰宅する人がいる場合、毎回遅い時間に開催するとその人が排除されることになる Meeting アジェンダの事前共有 時差を意識 社外との関わり(ここも、メモが不十分) Conference&Events 奨学金の提供 トークセッション 次に、書籍の内容をベースにしたトークセッション。細かい内容は書籍を読んでもらうのが一番だと思うので概要だけ。書籍の内容は、外国人と仕事をする上でありがちなシチ...

MA2018オレトクヒーロー部門 決勝審査会で発表してきたよ

イメージ
この記事は、 「MashupAwards2018 Advent Calendar 2018」9日目のエントリー です。 はじめに ここのところ、加齢のせいか記憶力の低下が著しく、前日の夕食に何を食べたかすら思い出せないことがままあります。先日も、MashupAwards2018 オレトクヒーロー部門 決勝審査会で発表するという貴重な機会を得たのですが、この時の感動や記憶も時間の経過とともに薄れていくんだろうなと悲しい気持ちになりました。そこで、記憶が新しいうちに記録しておき、いつか振り返りができるようにしておこうと思います。 ぺぺぺルーレット 今回、オレトクヒーロー部門の決勝審査会で発表したのは「 ぺぺぺルーレット 」。「パパパルーレット」の後継の座を狙ったサービスです。ぺぺぺルーレットについては、資料を見ていただくとして、本記事では決勝審査会に出てみて感じたことを中心に書いてみたいと思います。 ピンチ、決勝審査会に参加できない? いきなりですが、決勝審査会の日はたまたま嫁さんが外出の予定で、子供の面倒を観ないといけない日でした。事前に子供に一緒に行くか打診したところ「遊びに行きたいから絶対にヤダ」とのこと。参加する前からいきなりのピンチです。 子供を説得する 子供にゴネられてしまってはどうにもなりません。そこで、考えたのが「もし優勝できたら賞金10万円のうち3万円をお前にやろう」という条件。この条件変更が功を奏し、彼は鋼より固い信念を曲げ決勝審査会についてきてくれることになりました。実はこの「3万円」は戦略的な金額設定で、彼が欲しがっている任天堂スイッチを黙示したものでした。無邪気に3万円ゲットを楽しみにしている彼の姿に軽い罪悪感を覚えつつ(ウソはついてませんよ)会場に到着しました。 オシャレなヴァル研究所さんのエントランス オレトク感がハンパない オレトクヒーロー決勝審査会に選ばれた作品は こちら 。事前にProtoPedia上で各作品をチェックしていたのですが、実際にモノを見てはじめて各作品のオレトク感のハンパなさを実感しました。テキストや動画だけでは伝わらない情報が多すぎるのです。チョコボールの数を自動で数えたり、チューしたり、先端に行ったり。特に印象が強かったのはしゃべる人工苔とウダ...

Activity FeedのBeta版が公開されたので触ってみた

イメージ
数日前からSendGridで Activity FeedのBeta版 が公開されたのでざっと触ってみました。今のところ、すべてのアカウントで使えるようになっているわけではなさそうです。 新しいActivityへの切り替え 左メニューから Activity を選択するといきなり Try the Beta の表示が出てきます。ボタンを選択して切り替えていきます。 ちなみに、一度切り替えると、元に戻すメニューは見つかりません。ブラウザを変えると古いActivityに戻るので、ひょっとするとブラウザ側で設定がキャッシュされているのかもしれません。 ※2018/3/11追記 元に戻すメニューが発見されました( @kikutaro_ さんに教えていただきました)。これは気付かない! 主な機能 これまでのActivityと比べてパッと見で機能がたくさんありそうです。ざっと見ただけで以下のようなものがありそうです。 検索機能が充実 以前のActivityでは、宛先アドレス/ドメインとイベント種別でしかフィルタできませんでしたが、新しいActivityではとても高度な検索が行えるようになっています。詳しくは後述します。 CSV形式でダウンロード 以前のActivityでは画面に表示されているデータのダウンロードはできませんでしたが、新しいActivityでは画面上に表示されるデータがダウンロードできるようになりました。 イベント単位の表示からメール単位での表示に 以前のActivityではイベント単位で表示されていました。各イベントの紐付けはSMTP-IDを見つつユーザ側で行う必要がありましたが、新しいActivityではメール単位でイベントがまとめて表示されるため、イベントの紐付けを行う必要がなくなり、とても見やすくなりました。これも詳しくは後述します。 配信状態がひと目で分かる 一番知りたい「結局どうなったの?」という情報は配信状態で表されるようになりました。配信状態には「Delivered(届いた)」「Processing(処理中)」「Not Delivered(届かなかった)」の3状態があります。 宛先アドレスと件名がひと目で分かる 以前は宛先アドレスしか確認できませんでしたが、これに加えて件名...

SendGridのAPIドキュメントが新しくなったので遊んでみた

イメージ
先日、SendGridのドキュメントに新しいAPIドキュメントが追加されました。元々、APIリファレンスに相当するドキュメントは存在していたのですが、 StopLight というサービスの機能を使ってより使いやすく整理した、といったところでしょうか。 入り口 新しいドキュメントの入り口はちょっとわかりづらくて、 ドキュメントのトップページ 上にある「 SendGrid API 」というリンクです。 主な特徴 次に、この新しいAPIドキュメントの特徴をまとめてみます。 リクエストとレスポンスがちゃんと定義された 今まで定義されてなかったのかよ、って感じですが、 これまで はリクエストについては概ね定義されていましたが、レスポンスはほとんど定義されていませんでした。レスポンスの例は載っていたので特に不都合はなかったのですが、ちゃんとした定義があるに越したことはありませんね。 Swagger(OAS)/RAMLによる定義が公開された StopLightの機能の一つですが、APIの定義全体がSwagger形式とRAML形式で公開されています。これがあると、 SendGridのAPIサーバのモックを作ってテストに利用 するといったことができるようになります。 APIドキュメントからリクエストのテストができるようになった これもStopLightの機能の一つのようですが、各エンドポイントのページの「 Try it out 」タブを選択するとドキュメントからAPIのリクエストを送信して結果確認ができます。使い方はとても簡単で、必要なパーミッションを持ったAPIキーをYOUR_API_KEYパラメータに設定、リクエストJSONをBodyに指定して「 SEND REQUEST 」ボタンを選択するだけです。 コード生成ができるようになった 「 Try it out 」でリクエストを送信すると、代表的な言語のコード生成ができるようになります。「 Code Generation 」から一通りのプログラミング言語およびコマンドのサンプルコードが確認できるので、サッとコピペして使えます。 PostmanにSwaggerの定義ファイルを喰わせてみる Swaggerの定義 が公...