Atsumaru Engineer's Blog

集客プラットフォーム事業を手がける株式会社あつまるのエンジニアブログです

【前編】日本語対応!Amazon Transcribeを使用してみた 〜サービス編〜

こんにちは、エンジニアのかねけんです。
いつかポーカーの大会に出て優勝することが人生の裏の目標です。
ポーカーの魅力はエクイティと期待値をしっかり見定める実力人の心理が掛け合わされたまさに人生そのもの・・・ っていう話をし始めると長くなるので、自己紹介はこれくらいにしときます。

▼目次▼

Amazon Transcribeってなに?

端的にいうと、音声情報をテキスト情報に変えるサービスです。

Amazon Transcribe を使用すると、開発者は音声をテキストに変換する機能をアプリケーションに簡単に追加できます。コンピュータでは、音声データを検索および分析することは事実上不可能です。したがって、録音された音声は、アプリケーションで使用する前にテキストに変換する必要があります。

f:id:kanekok13:20200130160917p:plain

Amazon Transcribe(音声をテキストに変換する機能を簡単に追加)| AWS

背景

あつまるの中の人😭「ミーティングや勉強会の議事録(発言録)を作成するのが大変!なんとかならないかな(涙)」
    僕🤔   「そういえば、Amazon Transcribeが最近、日本語対応したって聞いたな。試してみるか!」



サービス内容(2020年1月30日時点)

1. 機能について

(1) 動画、音声データの文字起こしが可能

当たり前ではあるのですが、動画ファイルも文字起こしができるっていうところが味噌ですね〜。
mp3, mp4, wav, flacの拡張子が可能。

(2) スピーカーの識別ができる

最大10人までのスピーカーの識別が可能。 会議やMTG時に有効な機能かも。

(3) 特定の単語、語彙の削除機能(フィルタリング)

使用者が定義した単語、語彙のフィルタリング設定に基づいて、 特定の単語を削除または、***(アスタリスク)に置き換えるなどの設定が可能。

(4) 固有の単語やフレーズを登録して認識するように設定が可能

会社独自の単語や固有名詞を登録して、発音を学習させることで、認識可能にすることができる。


2. 音声データを変換する時間について

20分ほどの動画の場合(1.33GB)、ダウンロード〜文字起こしまで約5分程度


3. 価格について

GoogleやAzure(Microsoft)にも似たようなサービスがあり、クラウドサービス内では、平均的な価格。 文字起こし業者と比較すると圧倒的に安い(約1万円〜3万円/時間)
ただ、文字起こし業者は整文、要約までしてくれるのは魅力的。

Amazon Transcribeの料金

▼【公式】Amazon Transcribeの料金▼
aws.amazon.com

音声の長さ 料金(ドル) 料金(円)
ソーシャルメディアビデオ ~10秒 0.006 USD ¥0.66
ラジオのコマーシャル ~15秒 0.006 USD ¥0.66
ビデオ トレイラー ~2分30秒 0.06 USD ¥6.6
録画版ウェビナー ~30分 0.72 USD ¥79.2
'The Marvelous Mrs. Maisel'の1話 ~60分 1.44 USD ¥158.4
平均的な長さの経営会議の録音 ~120分 2.88 USD ¥316.8

※$1=¥110で計算


4. 正確性について

実際、どのくらい音声を正しく、テキストに起こすことができるの?という誰もが気になるこのテーマについては、最後に明らかになるので、ここでは省略します!!




ここからは実際に使用方法についてのお話

はじめに、今回良いなと思ったことが、一つありまして。
それは、GUIのみで音声をテキスト化する目的を果たせるということ。
つまり、エンジニアではない方にも簡単に使用できます!

繰り返し同じことを言います!

1行もコードを書かず、マウス操作だけで音声をテキスト化できます!

使用方法については2つのセクションに分けて、書いていきます!

① GUIからの使用方法
② CLIを用いて、自動音声認識システム構築
 → 後日、後編も書きます!

①はエンジニアではない方向け、②はエンジニア向けの内容になります。


① GUIからの使用方法(エンジニアではない方向け)

【STEP 1】S3へ音声データを準備

AWSコンソールにサインイン

f:id:kanekok13:20200130135736p:plain

S3に音声(動画)データをアップロード

S3内に音声データをアップロードするフォルダを作成し、データを格納。
※細かい部分は割愛

f:id:kanekok13:20200130142532p:plain

【STEP 2】Amazon Transcribeでテキスト化実行

サービスから「Amazon Transcribe」を選択

f:id:kanekok13:20200130143200p:plain

「Create Job」からジョブを作成

f:id:kanekok13:20200130143403p:plain

ジョブの情報を入力

f:id:kanekok13:20200130143736p:plain

ラベル 入力値 内容
Name Test(今回はテストのため) ジョブ名
Language Japanese (Japan) 音声データの言語
Job queue - optional チェックなし ジョブキューイングのアクセス許可
Input file location on S3 s3://[Bucketフォルダ名] S3のパス
Data location Amazon defaultにチェック 実行後の結果データを保管する場所

f:id:kanekok13:20200130155000p:plain

ラベル 設定値 内容
Audio identification OFF 話者の識別(個別のチャネルに分割するか、入力オーディオのスピーカーを識別するか)
Alternative results OFF 文字起こしの信頼レベルに基づいて、代替文字起こしの数指定が可能
Vocabualry filtering OFF 語彙フィルタリング
Custom vocabulary OFF ユースケースにあった固有名詞や固有単語の設定

Audio identificationについては以下の記事がわかりやすい。 dev.classmethod.jp

ジョブ作成

ジョブを作成後、すぐにテキスト化が実行されます。

f:id:kanekok13:20200130155742p:plain

数分後・・・

f:id:kanekok13:20200130160451p:plain

NameのTestを選択すると簡易的にテキスト化した内容をみることができます。
※長いテキストは全文表示されません。

【STEP 3】結果表示

f:id:atmr:20200203115936p:plain

気になる正確性については?

よりリアルな正確性をお伝えするため、あえてハキハキと話した音声ではなく、普段の話し口調で試してみました。
私(金子)と近くにいたエンジニアのメンバー渡邊と対話形式で、10分間、好きな歴史上の人物について話した内容になります。

Speaker 1(渡邊): 走り 程度 を お願い し ます もう 元 に なっ た よ と 始まり まし た
      (渡邊)[ファシリテートをお願いしますよ お、もう始まりましたよ]

Speaker 0(金子): アマゾン トランス くらい です ね はい じゃあ 好き え テーマ は? テーマ 話す テーマ は えーっと好き な歴史 上 の 人物 と その 理由 あ ま どう いっ た ところ に えーっと 引か れるみたい な ところ を ま 話し合い 場所
      (金子)[アマゾン トランスクライブのテストですね。](渡邊)[はい、じゃあ好き、え、テーマは?](金子)[テーマ、、話すテーマはえっとー好きな歴史上の人物とその理由。ま、どういったところにえっとー惹かれるのかみたいなところをまぁ話し合いましょうか。]

Speaker 1(渡邊): じゃ まず お手本 で 金子 さん はい
      (渡邊)[じゃあまず お手本で金子さん はい]

Speaker 0(金子): 僕 は ちょっと 分かる 人 が いる か どう か 分から ない ん です けど 犬 ちょっと マイナー な とか 言っ てる と 三国志 の 教員
      (金子)[僕は、わかる人がいるかどうかわからないんですけど](渡邊)[え、マイナー?](金子)[ちょっと、マイナーなところをいくと三国志の姜維(きょうい)]

Speaker 1(渡邊): ああ
      (渡邊)[はぁ〜〜またちょっと]

Speaker 0(金子): なるほど そう 甘い な の? ところ 教員 が めちゃめちゃ えっ と ま 脅威 を 簡単 に 説明 する と えーっと ま 物凄く この 三 区 時代 って いう ので 戯号 色 に 別れ て で 色 の 流儀 先頭 を 切っ て たら 類 義 が ま 亡くなっ た 後に ま る ぜ って いう その 子供 が ま 校庭 に なる ん です けど ま そこ まで 以前 は 結構 遊び人 で なかなか そう な 後 面 だ って 活躍 する よう な 人 で は なかっ た ん です けど ま 教員 が ま そこ を ま 持っ て た 感覚 な ん です ね で ま 所轄 量 の 教え を いただき ながら その 部位 と 地 の 両方 を 兼ね備え て あと は 豆 はい な ところ です か ね? です なんか 最後 まで そこ を 戦い 抜く っていう の が すごく 僕 の 中 で は 聞か れる ので ま その 一番 は やっぱり 豆 誠実 と いう か? そういった ところ が 教員 の 魅力 から
      (渡邊)[マイナーなところですね](金子)[姜維がめちゃめちゃ好きでえっとーま、姜維を簡単に説明するとえっとまぁものすごく三国時代っていうところで魏呉蜀に分かれて、で、蜀の劉備、先頭を切っていた劉備がなくなった後に劉禅っていうその子供が皇帝になるんですけど、そこぉ〜劉禅は結構、遊び人でだからなんかなんていうんだろうな、表立って活躍するような人ではなかったんですけど、姜維がそこを守っていた感覚なんですね。で、諸葛亮の教え
もいただきながら、その武勇と知能の両方を兼ね備えて、とあとは忠実なところですかね。で、最後までそこを戦い抜くっていうのが、すごく僕の中では惹かれる。ので、まぁその、一番は忠実、誠実みたいなそういったところが姜維の魅力かなと思っています。]

Speaker 1(渡邊): 脅威 さん 組み そう だっ たら めっちゃ イケ 麺 の 人 です ね そう じゃ 若林 って
      (渡邊)[おぉ〜姜維。三國無双やったらめっちゃイケメンの人ですね?](金子)[そうですね](渡邊)[めちゃめちゃ若々しくて]

Speaker 0(金子): 実際 は どう な の か? わかん ない です けど ね
      (金子)[実際どうなのか、わかんないですけどね]

Speaker 1(渡邊): 実際 で も あの 色 が 滅ぶ 辺り で で もう 六 十 歳 ぐらい です よ
      (渡邊)[実際、でもあの蜀が滅ぶ辺りでもう六十歳ぐらいですよ]

Speaker 0(金子): ね あんな 若く ない です ね しかも
      (渡邊)[あんな若くないですね、しかも]

Speaker 1(渡邊): 結構 最後 も 無残 じゃ ない です か
      (渡邊)[結構、最後も無残じゃないですか]

Speaker 0(金子): そう です ね
      (金子)[そうですね]

Speaker 1(渡邊): うん なんか 反乱 放送 と し て きょう い 私 達 は 三沢 括弧 です よ ね カッコ 入れ て 言う も ある 知略 も ある 両方 持っ てる そう です よ 教員 教員 ちょっと 分かっ てる 人 も 居る だろ
      (渡邊)[なんか反乱起こそうとして姜維、確かにその忠実さはかっこいいですよね。まぁ武勇もある、知略もある、両方持ってる。姜維、姜維、ちょっとわからん人もおるだろうな〜]

Speaker 0(金子): あと なら さ
      (金子)[渡邊さんは?]

Speaker 1(渡邊): 私 は です ね もう これ 昔 から です よ 小学 三 年 生 から 方 十 歳 臭い 方 から もう ずっと 好き です もう 二 十 年間 凄い です ね 幕末 の 志士 吉田 松陰 です
      (渡邊)[私はですねもうこれ昔からですよ。小学3年生から、だから十歳。九歳か。からもうずっと好きです。もう二十年間。](金子)[凄いですね](渡邊)[幕末の志士 吉田松陰ですよ]

Speaker 0(金子): 俺
      (金子)[おぉ〜]

Speaker 1(渡邊): は もう 事 ある ごと に ずっと 言っ て
      (渡邊)[これはもうことあるごとにずっと言ってます]

Speaker 0(金子): ます そう な
      (金子)[そうなんですね]

Speaker 1(渡邊): ん です ね 吉田 松陰 な ん です よ で 最初 に ご存知
      (渡邊)[吉田松陰なんですよ。吉田松陰、ご存知?]

Speaker 0(金子): もちろん 山口 岡山 だっ た の です ね はい まさに
      (金子)[もちろんです。僕、山口県出身なので。はい、まさにですね。]

Speaker 1(渡邊): です ね ドクター じゃ ない です けど えっ と 僕 は 週内 主 な ん です けど 萩 はぎ です よ ね そう 背景 です よ あのー 小学 三 年 生 の 時 に 家族 旅行 で 山口 県 って
      (渡邊)[どちらでしたっけ?](金子)[えっと、僕は周南市なんですけど、萩ですよね?](渡邊)[そうです、そうです。萩ですよ。あのー小学三年生の時に家族旅行で山口県いって]

Speaker 0(金子): そう です よ
      (金子)[あ、そうなんですね。]

Speaker 1(渡邊): ね はぎ に 行っ て 城下 町
      (渡邊)[で、萩に行って、城下町]
      
Speaker 0(金子): はい はい はい はい
      (金子)[はい はい はい はい]

Speaker 1(渡邊): 歩い て て 吉田 松陰 の その 消化 遜色 入れる ところ で ま 色々 資料 館 と か 言っ て 勉強 し て き た ん? です けど 何 だろ う? 一言 で 言う と アホ みたい な 強靭 な ん です よ はい はい 私 も 行っ て 何 が 他 なんか すごい の か って その 来る ほど の 熱量 自分 の 中 で は こう だ と 思っ た 理想 に 思想 に対して も とことん 突き詰める
      (渡邊)[歩いて、で吉田松陰のその松下村塾っていうところに行ってまぁ色々資料館とか行って勉強してきたんですけど、何だろうな、んー、一言で言うと、アホみたいな狂人何ですよ。](金子)[はい、はい](渡邊)[吉田松陰って。何が僕は凄いのかってその狂うほどの熱量。自分の中でこうだと思った理想に、思想に対して、とことん突き詰めるみたいな]

Speaker 0(金子): ある 外国 に そう ね ドリンク って いう の も
      (金子)[あの外国に行くっていうのも]

Speaker 1(渡邊): 当時 ま バック 江戸 幕府 は 鎖国 体制 を 取っ て た ん です よ ね で も 当然 海外 に 行く の も 禁止 し て た 訳 です よ で そこ に ペリー が 来航 し て って こんな まだ 日本 が 受理 さ れ て しまう と 吉田 松陰 は 危機 感 を 覚え られ ない で 吉田 松陰 は その 上位 船 です けど 他 の 上位 版 の 人 と 違う ところ って 他 の 人 は? 外国 は 岸 から だ から 今 すぐ 殺す べき だ って いう 議論 だっ た です よ 吉田 証人 は そっ えーっと 彼 って 元々 軍略 か な ん です よ 軍 の そういう 平方 とか を その 君主 の モー リー 氏 高知 か に 教える 人 だっ たり し ます よ で その 日 吉田 松陰 は 戦略 課 として 軍略 か として じゃ 外国 を どう 内原 う か? っていう ところ を 考え て 分から ない と 敵 の 戦力 が わから のに 戦略 の 立て よ なんか を 立て られる わけ ない じゃ ない か って いう 穴 に その ロジック から じゃ 適応 知る に は アメリカ 行く しか なく ない
      (渡邊)[当時、幕府、江戸幕府は鎖国体制を取ってたんですよね。でも当然、海外に行くのも禁止していたわけですよ。でそこにペリーが来航して、でこのままだったら、えー日本が蹂躙されてしまうと吉田松陰は危機感を覚えたわけですね。で吉田松陰はその攘夷派何ですけど他の攘夷派の人と違うところって他の人は、外国はけしからんだから今すぐ殺すべきだっていう議論だったんですよ。吉田松陰は、彼って元々軍略家だったんですよ。軍のその兵法とかを君主の毛利氏、敬親に教える人だったんですね。でその、吉田松陰は、戦略家として軍略家としてじゃあ外国をどう打ち払うかっていうところを考えてて、わからんと、敵の戦力がわからんのに戦略の立てようなんかたてられるわけないじゃないかっていう結、そのロジックからじゃあ敵を知るには?アメリカ行くしかなくね?ってなったんですよ。]

Speaker 0(金子): 子 だっ た ん です よ

Speaker 1(渡邊): ま 彼 に とっ て は 当時 そんな 日本 にとって の 外国 って 別 に 今 って なんか 外国 イコール アメリカ の イメージ が あり ます けど 当時 は もっと オランダ とか 中国 と か ロシア と か の 方 が どっち か って いう と 身近 で ただ 最初 分かり 吉田 松陰 は ロシア に 行っ た ん です よ で も ロシア の 船 に 乗り込む と 長崎 に 行っ たら もう その ロシア の 頭 に い なく なっ ちゃっ て だ から ま 過ごす 事 帰っ て いっ た ん? です けど それで 今度 ちょっと 東京 じゃ ない です ね 江戸 に 行っ て 浦賀 に 行っ て あ ベイリオル は 構成 って その 一 コンフェデ ちっちゃい その 熱狂 っぷり だ 末 同じ ソレ バレ たら 殺さ れる 訳 です よ
      (渡邊)[ま、彼にとっては、当時そんな日本にとっての外国って別に今ってなんか外国=アメリカのイメージがありますけど、当時はもっとオランダとか中国とかロシアとかの方がどっちかっていうと身近でだから彼、吉田松陰はロシアに行こうとしたんですよ。でも、ロシアの船に乗り込もうと長崎に言ったら、もうそのロシアの船、いなくなっちゃってだからまぁすごすごと帰っていったんですけど、それで今度とう、東京じゃないですね、江戸に行って、浦賀に行って、あ、ペリーおるわ、行こうぜってなって、その行こうぜで行っちゃえる、その熱狂っぷりが凄い。当時それがバレたら殺されるわけですよ。]

Speaker 0(金子): ね 命懸け 命がけ の 優れ た
      (金子)[そうですね、命懸けのまさに]

Speaker 1(渡邊): ソレ を やっ ちゃ う
      (渡邊)[それをやっちゃう]

Speaker 0(金子): 東京 に 行く 間 エド 行く だけ で も もう 物凄い てる よう です けど 当時 は 浸透 で ある 訳 じゃ ない です ね 一 か月 ぐらい あり ます よ ね かなり そこ まで に 行く に し て も 覚悟 決め て 行っ てる なんか
      (金子)[東京に行く、ま、江戸に行くだけでももう物凄い熱量ですけど当時は新幹線があるわけでもないからですね](渡邊)[2ヶ月ぐらいかかりますよね](金子)[かなりそこまでに行くにしても、覚悟決めて行ってる中]

Speaker 1(渡邊): フリー さ も です ね 当時 は 版 て いう 萩 藩 です か ね の 中 の ま 反応 起き て として 多種
      (渡邊)[クレイジーさも当時は、藩っていう萩藩ですかね?の中の藩の掟として](金子)[長州藩では](渡邊)[あ、長州藩]

Speaker 0(金子): ファン で は
      (渡邊)[長州藩ですね]

Speaker 1(渡邊): ない 気持ち は 調子 外れ た 上質 な ん です ね ええ 掟 として 脱藩 は 罪 だっ た 訳 です よ 脱藩 版 を 付ける こと は やっぱり ロシア も だから 殺さ れ て も 文句 だ よ って 言わ れ ない 言え ない ところで 彼 は 簡単 に 脱藩 し チャウ です よ ね この 話 ご存知 です よ ね もう その 理由 は 何 だ? って 言っ たら 友達 と 旅行 する 約束 を し て しまう た から でも ぞ 版 が 許し て くれ ない じゃあ 止める って
      (渡邊)[で、掟として脱藩は罪だったわけですよ。脱藩、藩を抜けることは脱藩浪士はもう殺されても文句言えないところで、彼は簡単に脱藩しちゃうんですよ。この話ご存知です?](金子)[はい](渡邊)[その理由は何だっていったら、友達と旅行をする約束をしてしまったから、でもそれを藩が許してくれない、じゃあやめる]

Speaker 0(金子): いう と やっぱり し ちゃっ た ね そう で
      (渡邊)[っていう理由で脱藩しちゃうんです]

Speaker 1(渡邊): 純粋 さ 自分 の 思想 なんか 理想 思い に対する 純粋 さ が す 圧倒的 な 結論 に なっ て その 結果 消化 村塾 で 学ん だ 例えば 高杉 晋作 だっ たり と いろいろ みんな 明治維新 を 作っ て いく って いう の を 考える と その 熱量 です
      (渡邊)[その純粋さ、自分の思想なんか理想、想いに対する純粋さが圧倒的な熱量になって、その結果、松下村塾で学んだ例えば高杉晋作だったり、伊藤博文が明治維新を作っていくっていうのを考えるとその熱量って凄い。]

Speaker 0(金子): まだ 本当 に 色んな 人 に 影響 を 与え て ます よ ね そう いう こと 坂本 遼 前 もう 吉田 調印 の 影響 を 受け て です ね
      (金子)[本当にいろんな人に影響を与えてますよね。それこそ坂本龍馬も吉田松蔭の影響をかなり受けてるみたいですね。]

Speaker 1(渡邊): そう です よ ね 例えば その 人 に 有名 な 人 久坂 玄 ずい って いう ね 高杉 晋作 と 僧兵 強打 し た ま 塾 の 姿勢 の 一 人 な ん? です けど 彼 が もし その 明治 明治維新 で です ね その 前 の 何 だろ? う ま 幕末 でも 生き抜い て い たら あのー 西郷 隆盛 で さえ も 彼 の 久坂 玄 髄 が 生き て い たら 自分 は これ ほど なんか 幅 を 利か せ られ なかっ た だろ う って 言っ てる ぐらい すごい 人 だっ た ん です よ ね でも そういう ホント すごい 人材 を たくさん 生み出し た 紹介 層 から ソレ を 作っ た 吉田 松陰 って いう の は うん すごい な と 確か って いう の が ま 僕 が 尊敬 する 人 の 歴史 上 の 人物 です ね
      (渡邊)[そうですよね。例えばその〜一人有名な人で久坂玄瑞っていう人ですね。高杉晋作と双璧を成した、ま、塾の出生の一人何ですけど。彼がもし、明治〜明治維新じゃないですね。その前のま、何だろう、幕末を生き抜いていたら、あの西郷隆盛でさえもかの久坂玄瑞が生きていたら自分はこれほど幅をきかせられなかっただろうって言ってるぐらい凄い人がいたんですよ。そういう本当凄い人材をたくさん生み出した松下村塾。それを作った吉田松陰っていうのは本当凄いなと](金子)[確かに](渡邊)[っていうのが、僕が尊敬する人、歴史上の人物ですね。]

Speaker 0(金子): 確か に 白 勝因 と か もう 何 か 名前 だけ は 聞い て て その 生きざま で あっ たり と か って いう の は 結構 意外 と 習わ ない なら ない 学校 で 習わ ない こと って 結構 ある と 思う ん です よ ね あの 辺 なんか さら っと 行く じゃ ない です か でも 何 か あ そっ こう 生き た 人 たち って 本当 に こう 覚悟 で あっ たり ね 対 で あっ たり って の は 色々 こう 何 です か 本質 じゃ ない なるほど カネ ミ 瓶 と いう か もの が ある 中 で の もう 活躍 な まで 凄い な って 思い ます よ ね ホント に
      (金子)[確かに吉田松陰とかも、なんか名前だけは聞いてて、その生き様であったりとかっていうのは結構意外と習わない、学校で習わないことって結構あると思うんですよね。あの辺、結構サラーッといくじゃないですか。でもなんかあそこ生きた人たちって本当に覚悟であったり、熱意であったり、っていうのは、色々こうなんていうんですか、本質じゃない壁というか、ものがある中でのもう活躍なので、凄いなって思いますよね。本当に。]

Speaker 1(渡邊): ある 意味 そう いう 壁 が ある から なんか かっこよく 見える の か な と 思っ て い て 例えば 新選 組 も も 投じ て いく と 思う ま 無事 あろ う でし た 時代遅れ 無事 で あろ う と し た し その 江戸 幕府 中性 を 誓い 続け た って いう ところ も やっぱ 何 年 も 制約 が ある 中 で でも 自分 の 理想 を 追い求め た って いう の は やっぱ カッコ いい もん だ な って 思い ます 確か に そう です ね でも 新鮮 も 言う たら 多分 人殺し 集団 です から ね でも それだけ やっぱ あれ だけ かっこいい って の は やっぱ その 生きざま 何 か たくさん の 壁 が ある ので 頑張っ て 自分 の 理想 を 追求 する から 姿 って いう の は やっぱり かっこよく 見える そう です
     (渡邊)[ある意味そういう壁があるからなんかカッコよく見えるのかなとも思っていて、例えば、新撰組も、何だろう、当時でいくともう武士であろうとした。時代遅れの武士であろうとしたし、江戸幕府に忠誠を誓い続けた。っていうところもやっぱ何かしらの制約がある中ででも自分の理想を追い求めたっていのがなんかカッコよく映るのかなって思います。](金子)[確かにそうですね。](渡邊)[新撰組もいうたらただの人殺し集団ですからね。元も子もないこというと。でも、それだけ、あれだけかっこいいっていうのはその生き様、なんかたくさんの壁がある中でも頑張って自分の理想を追求する方ていうのはカッコよく見えるのかな。](金子)[そうですね]

Speaker 0(金子): ね ま なんか も どっち に しろ かっこいい です よ ね 坂本 竜馬 に し て も 恐れ こそ 新選 組 の 立場 に し て も 両方 とも カッコ よく 戻っ た 違い です よ ね ソレ は 本当 に 生きざま を 貫い て いる と いう か そこ が やっぱ 違い ます よ
      (金子)[なんかもどっちにしろかっこいいですよね、坂本龍馬にしてもそれこそ、新撰組の立場にしても両方ともがカッコ良い時代ですよね、それは本当に生き様を貫いているというかそこがやっぱ違いますよね。]

Speaker 1(渡邊): ね 確か 確か 面白い です ね 歴史 上 の 人物 だ けど 僕 も 参画 し て 大好き な ので 脅威 と か
      (渡邊)[面白いですね。歴史上の人物だけど僕も三国志大好きなので姜維とかいいですね。]

Speaker 0(金子): そう です ね いや 選び 選ぶ の は 結構 大変 で は ある ん です けど そういう 所轄 よう お願い し てる し た ん です けど まあ 教員 キャロル ま これ は ね 是非 あれ です よ ね お 茶 分から ない ま 僕 も ちょっと 吉田 松陰 について ちょっと 知り たい な って 思い ます し
      (金子)[そうですね。選び、選ぶのは結構大変ではあるんですけどそれこそ諸葛亮も大好きですし、とかあるんですけど、まぁ姜維になるのかな〜。これはぜひあれですよね、わからない、僕もちょっと吉田松陰についてちょっと知りたいなって思いますし。]

Speaker 1(渡邊): 驚異 の 小説 が あっ た ん です よ
      (渡邊)[姜維の小説があったんですよ]

Speaker 0(金子): 驚異 の 小説 が ある
      (金子)[姜維の小説があるんですか?]

Speaker 1(渡邊): 教員 の 小説 が 脅威 と いう か? その さん 牧師 が 終わっ た 後 の 省察 はい はい 何で 所轄 量 が 五 上限 で 死ん だ
      (渡邊)[姜維というかその三国志が終わった後の小説。なので、諸葛亮が五丈原で死んだ後。]

Speaker 0(金子): ん だ
      (金子)[ん〜]

Speaker 1(渡邊): から その 脅威 昔 死ぬ まで の
      (渡邊)[から、その姜維が死ぬまでの]

Speaker 0(金子): 小説 を あのー 結構 こう マイナー
      (渡邊)[小説。](金子)[へー、結構、コアな。](渡邊)[結構、コア、マイナー]

Speaker 1(渡邊): な ところ が あっ て でも そう 面白かっ た です
      (渡邊)[なところがあってでもそれ面白かったですよ]

Speaker 0(金子): よ

Speaker 1(渡邊): 脅威 が 当該 東大 たち が 当該 障害 か 障害 と じゃ どう いう 風 な 話 を し て 体 を 起こす よう に 思っ た の か? はい そこ の ストーリー が 凄い
      (渡邊)[姜維が鄧艾、頭蓋と、あ、違う鄧艾じゃないか、鍾会か。鍾会とじゃどういう風な話をして反乱を起こすように思ったのか。そこのストーリーが凄い面白い]
...

これが普通の会話のリアルな精度です。

※僕の滑舌が悪いだけかもしれないですが、、、(汗)


② CLIを用いて、自動音声認識システム構築(エンジニア向け)

エンジニアの方々お待たせしました!いよいよ開発!!!といったところですが、 長くなったので、後編の記事で書きます!

前編のまとめ

精度には不安が残りますが、なんといってもこの手軽さが素晴らしい!
エンジニアではない方でも使用でき、日本語にも対応して、この安さ!!
一度、使ってみる価値はあると思います!

また、時間を見つけて、Google CloudのSpeech-to-TextやAzureのSpeech to Textも試して、サービス比較表を作りたいな〜と思っています😌

・Google Cloud Speech-to-Text
・Azure Speech to Text

気になる正確性については後編へ!!

【シリコンバレーエンジニア酒井潤氏】「戦略的にキャリアを考えているか?」(トークイベント)

元U21サッカー日本代表、シリコンバレー現役エンジニア、受講生2万人超えのUdemy講師、著作を多数持つ投資家などなど。
酒井潤さんといえば、エンジニア業界のトップランナーとして、多くのエンジニアが憧れる存在。

そんな酒井さんに「これからを生きるエンジニアには何が必要か?」と聞くと、「戦略的に考えること、そして視野を広く持つことが重要だ」と力強く話されました。

今回は、酒井さんを招いて開催したトークイベントの模様をお届けします!

100名を超えるエンジニアと、キャリアについて語る


(写真)エンジニアのキャリアについて語る酒井さん

2019年8月6日19時、TECH PLAY SHIBUYA。

「【Hedge#7】Udemy講師の酒井潤氏登壇!シリコンバレーエンジニアと語るエンジニアキャリア論」と題して、シリコンバレーから一時帰国されていた酒井さんと、株式会社UZUZのCTOともねさん、弊社CTO金子の3名でパネルディスカッションを行いました。

話の中心は、「技術の未来」そして「エンジニアのキャリア」。

中でも印象的だったのは、酒井さんが「スキルはもちろん重要だが、それを学ぼうとする熱意や、学ぶ環境を整えることの方が大切」と語ったこと。

例えば、学ぶ環境という点でいうと、「シリコンバレーには世界中からトップクラスのエンジニアが集まるため、最先端の技術や良いコードの書き方などを現場に即して学ぶことができる。これは日本では経験できないことだ」とのこと。


(写真)テーマ一つ一つに丁寧に答える酒井さん

また、気になる収入面でも面白い話がありました。

「例えば、日本の会社がソフトウェアを作って1000万円売れたとする。600万円がエンジニアの給料になって、400万円が会社の利益だ。しかし、シリコンバレーの場合、世界中が市場になるため1億円売れる。3000万円のエンジニアを2人雇っても、4000万円の利益が出る。2人で開発しているから、1人の負担も少ない。これが、時間的にも、金銭的にも、シリコンバレーのエンジニアが余裕を持って働ける理由の一つだ」

表にまとめると、↓のような感じ。

日本 シリコンバレー
あるソフトウェアの売上 1000万円 1億円
エンジニア年収 600万円 3000万円
開発人数 1人 2人
利益 400万円
(=1000万円-600万円×1人)
4000万円
(=1億円-3000万円×2人)
仕事量 1人で全部やる
→残業増える
2人で分担できるから楽
→早く帰社できる


(写真)酒井さんの話に聞き入る参加者。参加者は100名超!

日本のエンジニアに必要なこと「戦略的にキャリアを考える」

酒井さんが強調していたのは、「シリコンバレーでは、エンジニアは皆戦略的にキャリアを考えている」という点。

「私の席の隣のエジプト人は、2年働いたらエジプトで一生裕福に暮らせるだけの収入が得られる。そのために頑張っている。実際、もう宮殿みたいな家を持っている」 「いきなりシリコンバレーは難しくても、シンガポールやオーストラリアで技術的にも英語的にも経験を積んでから挑戦すればいい」


(写真)弊社CTOも、パネルディスカッションにパネラーとして登壇!

酒井さんの話を聞くと、ただ漠然とエンジニアとして生きるのではなく、目標設定と、その達成に向けた手段をしっかり考えることの重要性を感じました。 ハワイで起業し、シリコンバレーで14年働いている経験から語られる言葉には、強い説得力がありましたね…。

大盛り上がりの懇親会


(写真)懇親会の乾杯の音頭はやっぱりこの人、Hedgehogs小川さん

懇親会の酒井さんは超人気者状態(笑)

酒井さんの周りには何重にも人だかりができて、小一時間ずっと質問大会が行われていました。

この光景を見れただけで、主催者としては報われる思いです。
(´-`).。oO


(写真)芸能人かのような質問攻め

ありがたいことに、本当に多くの方から満足の声をいただきました!

しかし、誰よりも学びを得られたのは、実は今回のイベントを主催させてもらった私だと思います(笑)

GWにサンフランシスコで酒井さんとお会いし、やり取りを重ね、イベントではMCを務め、さらには酒井さんにオフィスへお越しいただき、実際に自分のコードを見てもらい、フィードバックをいただき、イベント後には二次会でさらなる裏話を伺うことができました。

今、コードを描きたくて仕方がありません!

酒井さんには感謝してもしきれないです。
またぜひ、一緒にイベントをさせてください!!!


(写真)最後に集合写真をぱちり


筆:シゲ


アロハ・短パン・ビーサンという季節感溢れる格好でMCを担当。

(´-`).。oO(社内外の有志でコミュニティやってます)

エンジニアの渡邊です!

5月9日(木)に開催されたHedgehogsイベント、

【Hedge #4】デザイナー・エンジニアの「こだわり」が創る、「令和」という新時代

(イベントURLはこちら)

のレポートをお送りします!

▼LTの様子
f:id:snoopy_no_sora:20190527161956j:plain

そもそもHedgehogsって?

"Hedgehogs"とは、所属企業も得意な領域も異なるエンジニアやデザイナーが集まり、普段はなかなかできない様々な「実験」を行い、新しいことにチャレンジしていくコミュニティです!

「実験」の例で言うと、
・ニ○ニコ動画みたいなに、LTを聴いている人がコメント弾幕を投稿できるシステムを作ってみた
・イベントバナーを、素人が作ったものとデザイナーが作ったものでA/Bテストしてみた
・うまい棒100本買って、インスタ映えするかやってみた
みたいな感じ。

f:id:snoopy_no_sora:20190528095122p:plain

ハリネズミ(英語でHedgehog)のように、元気に何事にも挑戦していくというコミュニティなんです。
弊社の社員も数人参加しています^^

▼参加者のネームプレート。分野ごとに色が違います。
f:id:snoopy_no_sora:20190528095530p:plain

GW中に体を張って実験する猛者も出現。大盛り上がりのLT会

会場は渋谷にあるTECH PLAY SHIBUYAさん。
今回初めて利用させていただきました。
(担当の阿部さんありがとうございます!)

約60名のエンジニア、デザイナーの方々が集まりました!
f:id:snoopy_no_sora:20190527164048j:plain

イベントは大きく2部構成になっていまして、第1部は有志によるLT会、第2部は懇親会です。

第1部では、5名によるLT。
「プログラミングに最適な場所はどこか?」を追究するため、歴史的連休であった今年のGWのほぼすべてをLTのネタに費やす人がいたり、業界用語の読み方について熱く語る人がいたり、ロゴデザイン制作にこめる魂を語る人がいたりと、いろいろ盛り上がったLT会でした。

第2部はざっくばらんに懇親会。
もはやHedgehogs恒例の日本酒持ち込みや、アサヒ・麒麟・サッポロ・プレモルの4種のビールの飲み比べなど、飲食面も充実させています。

▼4種のビール。ちょっとこだわりすぎ?
f:id:snoopy_no_sora:20190527170031p:plain

▼軽食もいろいろ。
f:id:snoopy_no_sora:20190528095302p:plain

個人的に嬉しかったのは、リピーターの方がたくさんいらっしゃったことと、そのリピーターの中に友人を連れてきてくださっている方がいたこと。

かしこまらず、面白いことにみんなで「実験」できる場を作りたいという想いのもと、仲間が増えることは本当に嬉しいです( - ω - )

f:id:snoopy_no_sora:20190527165929j:plain

次回は6月11日(火)!
場所は同じくTECH PLAY SHIBUYAさん!
LTテーマは「尊敬する人」です。
【Hedge #5】LT会!尊敬するエンジニア/デザイナーのここがすごい!

エンジニア・デザイナーの皆様、ご参加お待ちしております。
(´-`).。oO

【G検定】受検前に知っておきたい6つのこと

f:id:snoopy_no_sora:20190408130314j:plain

株式会社あつまるの渡邊です。

私、2019年3月9日にG検定なるものを受けました。
15日には合否メールが届いて、結果は、、、、

↓↓↓↓↓↓↓↓↓ f:id:snoopy_no_sora:20190410000613p:plain

無事合格でした。

私自身、正直G検定についてはあまり知らずに受検したため、受検前はおろか受検中、受検後に初めて知ることも多く、いろいろと驚きました。
今回は主にこれからG検定を受ける方を対象に、「受検前に知っておきたい6つのこと」というテーマでブログを書きます。

と、その前に、「G検定ってなに?」という方に向けて、簡単に概要を記載します。

項目 説明 補足
テーマ ディープラーニングを事業に活かすための知識を有しているかを検定する あくまで「知識を有するかどうか」!
開催頻度 年に3回くらい ちょうど良い頻度
開催場所 オンライン 自宅でも受検できるのが良い
受検料 12,960円(税込) 高いです
試験時間 120分 長いです
問題量 小問226問 多いです

詳しくは
一般社団法人 日本ディープラーニング協会 公式HP
をご覧ください。

では、さっそく本編スタート!

(其の一)超高い合格率

合否通知メールを見て知ったのですが、受検者総数は3,436名いたそうです。
その内、合格者が2,500名。

つまり、合格率約72.8%という、超広き門(笑)

受検者総数、合格者数については、合否通知メールに記載されていました。

f:id:snoopy_no_sora:20190410001922p:plain

「合格者数 2,500名」というめちゃくちゃキリの良い数字なので、上位2,500名が合格とか、そういう感じ?

あくまで私の仮説ですが、G検定の目的は世の中に広く「人工知能」を知ってもらうことであり、人材を絞り込むことではないため、大判振る舞いで合格者を出しているのではないでしょうか?

(其の二)自分の点数が何点だったかは知らされない。

私たち一般の受検者にとって、試験結果についてわかるのは「受検者総数と合格者数」、そして「自分の合否」だけです。
自分の点数は何点だったのか、自分でも知ることはできません。

(其の一)と被りますが、これもおそらく検定本来の目的のためだと思われます。
と言いますのも、もし仮に自分の点数がわかった場合、いろんな人の情報を集めればおおよその合格ラインが見えてきます。
そうなると「G検定は〜点以上で合格できる」という点取りゲームと化し、本来の目的である「人工知能の認知拡大」が希薄化するからです。

私の完全なる主観ですが、合格ラインは正答率6割くらいかなーと。

(其の三)公式テキストに載っていない内容が出る。

検定中、一番面食らったのがこれです。
私は検定対策として、『ディープラーニングG検定 公式テキスト』を中心に勉強しました。
f:id:snoopy_no_sora:20190408130314j:plain 「公式テキストってことは教科書だよね?教科書以外からは問題でないでしょ!」と。

これが、見事に予想ハズレ。
公式テキストに載っていないこともバンバン出ました(笑)

「ビジネスの世界に教科書はねぇんだ!」ということをG検定から改めて教わりました。 これからG検定を受ける皆さんは、公式テキストだけでなく、各社の本や過去問(あるのかな?)も含めてやっておくことをオススメします。

(其の四)計算問題がある。

検定中に「お?」となりました。
穴埋めや正誤判定だけかなと思っていたら、計算問題がずばっと出てきて。
問題自体は簡単な微分と行列でしたが、心の準備をしておかないと「うっ」ってなりそう。

(其の五)検定はオンラインで受けられる。

これは良い面。
外の試験会場に移動することなく、オンライン上で受検できます
試験官もいないので、やろうと思えばいくらでもカンニングできます

一点注意点があるとすれば、試験開始時間。
「13時から13時10分の間に開始してください」と案内されます。
その前にブラウザの動作確認をしておきます。
もし、13時10分から試験を受けようと思って、動作エラーが起きたら試合終了です。
遅くとも13時5分には始めるようにしておくと良いです。

(其の六)試験時間が足りない。

今回、最も声を大きくして言いたいことです!

120分で小問226問、単純計算で1問あたり約30秒。
結構なハイペースで進めないと間に合いません。
わからないところがあったら、思い切って飛ばしましょう!

それぞれの問題の左上には「後で確認する」的なボタンがあります。
どうしても後から考えたい場合は、ボタンを押してお気に入り登録(?)しておきましょう。

さいごに

いかがでしたでしょうか?
私の感想としては、G検定はやはり受けてよかったと思います。
技術の発展が目覚ましい現在、「人工知能」関連の知識は最低限必要です。
私にとっては、その知識を体系的に学ぶ良い機会になりました。

「次はE検定受ける!」と言いたいところですが、E検定はどうやら受検するまでに資格がいるらしく、それを取得するのに数十万円かかるそうです。
どうしようかな、、、

文:わたなべ

JavaScript で Hello,world! に挑戦 (ただし記号だけを使って)

f:id:atmr:20190126144008p:plain

どうも、趣味で JavaScript を書いている三井です。

先日、 JavaScript つまみ食い LT 会 というイベントを主催しまして。
そのメインの LT 会後の懇親会で「懇親会 LT」と銘打ったゆるゆる LT をやりました。

私も参加して「JavaScript で Hello,world! に挑戦」という話をしたんですが、その資料が Web に上がっていないので(というか資料無しで話したので)この場を借りて話した内容をまとめてみます。


何をやる?

ブラウザに Hello,world! を表示させる JavaScript プログラムを 記号だけ 使って書きます。

プログラムを学び始めた人がまず最初に取り組む課題が Hello,world! を表示するだけのプログラムを書くというもの。
いまいちど初心に立ち返って記号だけで Hello,world! を書けば、 JavaScript についてより深く知ることができるんじゃないでしょうか(適当)


ご注意

この JavaScript 記号プログラミングは散々語り尽くされた分野です。
パイプライン演算子 |> を取り入れたこれからの記号プログラミングみたいな目新しい話題は出てきません。
それでもいいよという方だけご笑納ください。


では、さっそく取り組んでいきましょう。

まずは素振りしてみる

まずは記号だけで何ができるのか軽く素振りして確認してみましょう。

おなじみの空配列は、

[]

+ 演算子をつけることで数として評価されて、

+[]  // 0

このように 0 に化けます。

また、~ 演算子で補数を取ると、

~[]  // -1

0 以外の数を作ることができます。

なので、

    +[]  // 0
    ~[]  // -1
   -~[]  // 1
  ~-~[]  // -2
 -~-~[]  // 2
~-~-~[]  // -3
...

このように任意の整数を作ることができます。


続いて、

先ほどの空配列 []! 演算子で論理反転させると、

 ![]  // false
!![]  // true

truefalse が得られました。

さらに、 truefalse を空文字列 '' と結合すれば、

''+ ![]  // 'false'
''+!![]  // 'true'

文字列としての 'true''false' が得られました。


整数と文字列が手に入ったので、文字列を演算してみます。

ご存知の通り、

'false'[1]  // 'a'

ですので、

(''+![])[-~[]]  // 'a'

このように書くことで文字列の 'a' を取り出すことができました。


いかがでしょう。記号フログラミングの大いなる可能性を感じていただけましたね?


Hello,world! する

では Hello,world! しましょう。

まずは普通に、

alert('Hello,world!')

これを変形していきます。

使えるものが記号しかない都合上、ほとんどの組み込み関数はそのまま使うことができません。
なので eval() を使って書き直します。

eval("alert('Hello,world!')")

eval() はプログラムを 文字列として 与えてやればなんでも実行してくれる心強いやつです。
ですが、記号プログラミングでは eval() すら自由に使うことができません。代わりに関数コンストラクタ Function() で置き換えます。

Function("alert('Hello,world!')")()

関数コンストラクタ Function() は文字列を与えてインスタンス化すると eval() 相当の働きをする関数を返してくれます。
しかも new 演算子をつけずに関数として呼び出したときにも new 演算子でインスタンス化したときと同様に振る舞うという 雑な 力強い仕様です。


Function() を調達する

Function() をどこからともなく持ってきましょう。
空配列 []constructor を参照してみます。

[].constructor
// function Array() { [native code] }

もういっちょ

[].constructor.constructor
// function Function() { [native code] }

というわけで空配列 [] から Function() を得ることができました。


上記をふまえて alert('Hello,world!')

[].constructor.constructor("alert('Hello,world!')")()

というように変形できます。

さらにさらにメソッド呼び出しをドット演算子 . からブラケット記法 [] に置き換えておきます。

[]['constructor']['constructor']("alert('Hello,world!')")()

これです。
プログラムの中に 記号と文字列しかない 状態にまで変形できたことがお分りでしょうか。


よく使うフレーズを変数に用意しておく

と言うわけで、残る文字列部分を記号に置き換えていきたいんですが。
その前に、よく登場するフレーズを変数に入れて用意しておきましょう。

まずは 'constructor' を。

(''+{})[-~-~-~-~-~[]]     // c
+(''+{})[-~[]]            // o
+(''+[][[]])[-~[]]        // n
+(''+![])[-~-~-~[]]       // s
+(''+!![])[+[]]           // t
+(''+!![])[-~[]]          // r
+(''+[][[]])[+[]]         // u
+(''+({}))[-~-~-~-~-~[]]  // c
+(''+!![])[+[]]           // t
+(''+({}))[-~[]]          // o
+(''+!![])[-~[]]          // r

このように記号化しまして変数に入れます。

記号の中で変数名として使えるんのは $_ ですね。
'constructor'_ に代入します。

_=(''+{})[-~-~-~-~-~[]]+(''+{})[-~[]]+(''+[][[]])[-~[]]+(''+![])[-~-~-~[]]+(''+!![])[+[]]+(''+!![])[-~[]]+(''+[][[]])[+[]]+(''+({}))[-~-~-~-~-~[]]+(''+!![])[+[]]+(''+({}))[-~[]]+(''+!![])[-~[]]

はい。

次、 Function()_$ に代入します。

_$=[][_][_]

簡単ですね。

それから、気まぐれに 'return "\u' を用意して、

(''+!![])[-~[]]               // r
+(''+!![])[-~-~-~[]]          // e
+(''+!![])[+[]]               // t
+(''+!![])[-~-~[]]            // u
+(''+!![])[-~[]]              // r
+(''+[][[]])[-~[]]            // n
+(''+{})[-~-~-~-~-~-~-~[]]    // ' '
+'"\\'                        // "\
+(''+[][[]])[+[]]             // u

変数 __ に代入します。

__=(''+!![])[-~[]]+(''+!![])[-~-~-~[]]+(''+!![])[+[]]+(''+!![])[-~-~[]]+(''+!![])[-~[]]+(''+[][[]])[-~[]]+(''+{})[-~-~-~-~-~-~-~[]]+'"\\'+(''+[][[]])[+[]]

これで役者は揃いました。


プログラム全体を記号化

ではいよいよ、

[]['constructor']['constructor']("alert('Hello,world!')")()

を記号だけで置き換えて、

// 'constructor'
_=(''+{})[-~-~-~-~-~[]]+(''+{})[-~[]]+(''+[][[]])[-~[]]+(''+![])[-~-~-~[]]+(''+!![])[+[]]+(''+!![])[-~[]]+(''+[][[]])[+[]]+(''+({}))[-~-~-~-~-~[]]+(''+!![])[+[]]+(''+({}))[-~[]]+(''+!![])[-~[]]

// Function()
_$=[][_][_]

// 'return "\u'
__=(''+!![])[-~[]]+(''+!![])[-~-~-~[]]+(''+!![])[+[]]+(''+!![])[-~-~[]]+(''+!![])[-~[]]+(''+[][[]])[-~[]]+(''+{})[-~-~-~-~-~-~-~[]]+'"\\'+(''+[][[]])[+[]]

// alert('Hello,world!')
// -> eval("alert('Hello,world!')")
// -> Function("alert('Hello,world!')")()
// -> []['constructor']['constructor']("alert('Hello,world!')")()
[][
  _  // 'constructor'
][
  _  // 'constructor'
](
  (''+![])[-~[]]                                                   // a
  +(''+![])[-~-~[]]                                                // l
  +(''+![])[-~-~-~-~[]]                                            // e
  +(''+!![])[-~[]]                                                 // r
  +(''+!![])[+[]]                                                  // t
  +"('"                                                            // ('
  +_$(__+(+[])+(+[])+(-~-~-~-~[])+(-~-~-~-~-~-~-~-~[])+'"')()      // H
  +(''+!![])[-~-~-~[]]                                             // e
  +(''+![])[-~-~[]]                                                // l
  +(''+![])[-~-~[]]                                                // l
  +(''+{})[-~[]]                                                   // o
  +','                                                             // ,
  +_$(__+(+[])+(+[])+(-~-~-~-~-~-~-~[])+(-~-~-~-~-~-~-~[])+'"')()  // w
  +(''+({}))[-~[]]                                                 // o
  +(''+!![])[-~[]]                                                 // r
  +(''+![])[-~-~[]]                                                // l
  +(''+[][[]])[-~-~[]]                                             // d
  +_$(__+(+[])+(+[])+(-~-~[])+(-~[])+'"')()                        // !
  +"')"                                                            // ')
)()

さらに minify して、

_=(''+{})[-~-~-~-~-~[]]+(''+{})[-~[]]+(''+[][[]])[-~[]]+(''+![])[-~-~-~[]]+(''+!![])[+[]]+(''+!![])[-~[]]+(''+[][[]])[+[]]+(''+({}))[-~-~-~-~-~[]]+(''+!![])[+[]]+(''+({}))[-~[]]+(''+!![])[-~[]];_$=[][_][_];__=(''+!![])[-~[]]+(''+!![])[-~-~-~[]]+(''+!![])[+[]]+(''+!![])[-~-~[]]+(''+!![])[-~[]]+(''+[][[]])[-~[]]+(''+{})[-~-~-~-~-~-~-~[]]+'"\\'+(''+[][[]])[+[]];[][_][_]((''+![])[-~[]]+(''+![])[-~-~[]]+(''+![])[-~-~-~-~[]]+(''+!![])[-~[]]+(''+!![])[+[]]+"('"+_$(__+(+[])+(+[])+(-~-~-~-~[])+(-~-~-~-~-~-~-~-~[])+'"')()+(''+!![])[-~-~-~[]]+(''+![])[-~-~[]]+(''+![])[-~-~[]]+(''+{})[-~[]]+','+_$(__+(+[])+(+[])+(-~-~-~-~-~-~-~[])+(-~-~-~-~-~-~-~[])+'"')()+(''+({}))[-~[]]+(''+!![])[-~[]]+(''+![])[-~-~[]]+(''+[][[]])[-~-~[]]+_$(__+(+[])+(+[])+(-~-~[])+(-~[])+'"')()+"')")()

完成です!


実行結果

f:id:atmr:20190126142817p:plain
Chrome のデベロッパーツールから実行した結果

はい、


まとめ

お疲れさまでした。
ここまで読み進められた方ならば JavaScript の記号プログラミングの魅力を少しでも感じ取っていただけたんではないでしょうか。


私からは以上です。


おまけ

実は今回のような制限の中でプログラムを書く遊びは言語を問わずに様々にあるものでして。

例えば Ruby でも記号だけを使ったプログラムが可能です。


私が知る限りこのような遊びの中でも古いものに perl の 予約語 だけを使ったプログラムがあります。
ppencode というキーワードで検索するといろいろな記事が見つかると思います。


ppencode 発案者は @TAKESAKO さんという方で、自らが ppencode について解説したセッションが動画で残っているので興味のある方はぜひ見てみてください。
perl が読めない書けない人でも ppencode の面白さ・ワクワク感が伝わってくる良いセンションだと思います。


それでは、Enjoy!! ;)