aoitaku Advent Calendar 2016 : 11日目 - JavaScript

この記事は aoitaku Advent Calendar 2016 の 11 日目の記事です。

ぼくは今年、仕事では 3 つの言語を扱いました。ひとつは Ruby で、4 日目 に書きました。
もうひとつは Swift で 5 日目 に書きました。そして残る一つが、JavaScript です。というわけで JavaScript のことを書きます。

ぼくが JavaScript を仕事ではじめて扱ったのは 2010 年、Web 業界に転職したときのことで、このときは JQuery を使って何やらしたりしていましたが、JavaScript 自体に触るのはそれ以前からやっていて、その頃はまだ prototype.js が出たくらいの頃でした。

当時ももちろん IEFirefox とで挙動が違う*1みたいな状況で、Firefox だと使える Web 標準の関数が IE だとろくに動かないとかそういうのが背景にあったので、クロスブラウザprototype.js のようなものが出てくるまではそれぞれがオレオレライブラリ作ってなんとかするみたいな時代でした。
ぼくも attacheEvent と addEventListener コンパチで使えるようにしたものとか作ったりしていましたし、IE で使える getElementsByClassName 相当のものを作ったりしてなんとかしていました。

そういう時代を経て JQuery と出会ったときの衝撃は割と大きくて、自分で JQueryプラグイン作ったりとかもしました。Twitter の最近のツイートの表示したり読書メーターの最近読んだ本を表示したりとかそういうのを作った覚えがあります。いまは全部動かなくなってしまったのでもうメンテしてませんが……。

JQuery と出会ってぼくが得たのはたとえは「流暢なインターフェース」あるいは return this であったり、function オブジェクトを渡してコールバックやイベントハンドラをセットするのを利用した DSL であったり、JavaScript オブジェクトを使ったコンフィギュレーションであったりという知見で、これらはその後 Ruby に傾倒していくなかでも多分に影響があったんじゃないかなーという気がしています。

さて、その後しばらく Web 業界で仕事を続けた後でいまの職に就くんですが、ここでは何をやっていたかというと、node.js でサーバサイド JavaScript を動かしたり、JS の Web アプリケーションフレームワーク使った Android 向けハイブリッドアプリ作ったりということをしました。
Android 向けなのは、iOS の方は以前書いたとおり Swift で作ってたからなんですが、Android 版を Java で書くかというとそれは割とコストでかそうだし JS でハイブリッドアプリ作ってパフォーマンスが間に合うならそのほうがいいのでは、みたいな判断からなんですが、まあ割となんとか動くものはできたように思います。

JQuery がない時代から JS 触ってた身としてはもうはるか遠くにやってきたなという印象なんですが、次世代 ECMAScript の仕様はめちゃくちゃいいですね、ということを思っています。
構文レベルだと好きなのは Arrow Function とか Destructuring Assignment とかありますけど、個人的にめちゃ気に入ってるのが Promise で、まだ充分手には馴染んだとはちょっと自信持って言えないんですが、それでも Promise で書いたコードとコールバックで書いたコードだともう断然 Promise で書いたほうが取り回しやすくて、みんな Promise 使おう!ということを思っています。

ところで最近はあんまり JQuery を使っていません。JQuery でほしいのは主に DOM クエリなんですけど、今だとquerySelector があるので別に JQuery でなくてもいいかなということを思っています。アニメーションに関しては最近の CSS アニメーション使ったライブラリのほうがいいのかなーということを思ったりしますが、いろいろ触ってみてもあんまりしっくりこなくて結局手で CSS アニメーション書いてたりしてよくないですね……。

個別のライブラリでいうと lodash とかも使ったりしていましたが、いまは断然 Sugar.js 推しです。ver 2.0 出てからもう人に勧めるのに抵抗ない感じになりました。
lodash と違って既存のオブジェクトを拡張して使うんですが、どのオブジェクトを拡張するかは自分でコントロールできるのと、次世代 JS 標準になる予定のものはポリフィルとして機能するのと、もちろん標準のメソッドとバッティングしないように配慮されてるのと、そのあたりが気に入っています。
lodash は lodash でよいのですが、メジャーバージョンが上がって API の互換性が壊れるということをたびたび経験していて、ちょっとさすがにつらいなという気持ちがあります。
Sugar はそんな機能まであるのかよ~っていうようなメソッドが用意されていたりして、このへんは Ruby 使っててもわりとびっくりしたりします。
さすがに Number の abbr とかはやりすぎな気がしないでもないですが、というかこういう機能生やすなら String のクラスメソッドでは、みたいなこと思ったりしますが、でもまあ実際こういうのはあると便利ではあります。

あらためて振り返ってみると、この一年の間で サーバサイドで CoffeeScript 使って、スマートフォン向けハイブリッドアプリで ES next 使ってて、JS 成分の濃い年だったなと思います。

さて、言語シリーズこの JS の記事を持って最終回なので、いろんな言語をさらってみた感想。

ぐるっと見渡してみて、次にぼくがほしいのは Ruby くらい気軽な構文で JS くらい非同期取り回しやすくて Swift よりもうちょっと取り回しやすい型システムのある言語だなーという感じです。
Ruby 3.0 とか Crystal がそうなるかというとそれはむずかしいと思いますが、まあいずれは非同期当たり前、型安全当たり前、でも人間が書いて苦痛でない言語、みたいな流れになっていくだろうなーということを思っています。なってほしい。

記事が書き上がったのが年明けてからなのでこれも年明けて書いてるわけですが、鬼が笑う心配もなく次やりたいこととか書けるので、次のこと書いておくと、まず Opal で一本ゲーム作りたいなということを思っています。   いま興味があるのは Crystal です。でも Windows でも動くようになったら考えます。
Mac あるので Mac で動くじゃんっていうとそうなんですけど、Crystal でサーバアプリ書きたいわけではなくて、作りたいのはゲームなんですよね。そうすると Mac だけで動いても困るというか、Windows でも動いてくれないと困るというか。
あとは Kotlin で Android アプリ書いてみたいとかも思っています。できるのかな。なんとか時間作って……うう。

これで言語シリーズはおわりです。
残りの日程はゆるい記事書いていきますが、残りも引き続きお楽しみいただければ幸いです。

*1:当時は Chrome はまだありません

aoitaku Advent Calendar 2016 : 9日目 - 今年見たアニメの話

この記事は aoitaku Advent Calendar 2016 の 9 日目の記事です。

今年見たアニメの話します。他に見たアニメあるけどとりあえず書きたいことあるアニメについてだけ書きます。

ワガママハイスペック

原作プレイ済み。
男性向けえっちゲームが原作なのに主人公(男)が最初から最後までまったく登場しない斬新なアニメ。まあショートアニメだからしょうがないね。
一話にしてヒロイン全員脱いだり、ホワイトボードに書かれた主人公がいない理由が毎回違ってて芸が細かったり(しかも割と扱いがひどい)、たのしいアニメでした。個人的には第9話「ネコネコメランコリック」がお気に入り。d アニメストアで見られます。

anime.dmkt-sp.jp

ちなみに原作はアニメと違ってシリアス寄りのシナリオ展開になっています。自分で作品とか作ったりしてる人にはちょいちょい刺さったりするかもしれない。いい刺激をもらえたと思っています。

三者三葉

双葉って一見元気っ娘っぽい感じなんですけど私服めっちゃフェミニンなんですよこれってめちゃくちゃよくないですか!?

NEW GAME!

動くねねっちが見られて本当によかった。

田中くんはいつもけだるげ

白石さんの身体えっちすぎる。

タイトルから脱力系かと思ったらぜんぜんそんなことなくて間の取り方とか絶妙でテンポめちゃくちゃよくていつも30分あっという間でしたね。田中くん以外のキャラが基本的に騒がしかったので緩急の急成分には困らない感じでした。宮野とか。

それはそれとして細谷さんにこういう役やらすの本当に笑うからやめてほしい(もっとやってほしい)。

この素晴らしい世界に祝福を!

ぼくはめぐみんが好きです。

Re:ゼロから始める異世界生活

とりあえずアニメの結末のその後が気になって原作読んだんですけどレムが好きな人は原作読まないほうが幸せになれるのでは……?(ぼくはエミリア派です)

甘々と稲妻

とてもいい話だった。

それはそれとして中村悠一がお父さんやるのめっちゃ新鮮(お兄様とカラ松が全部悪い)。

ふらいんぐうぃっち

たぶんどうってことない話なんですけど、めちゃ平和で、どうってことなくゆっくり時間が流れるのめちゃくちゃよかったですね。

第7話「喫茶コンクルシオ」がお気に入りです。

ユーリ!!! on ICE

ぼく実はフィギュアスケートファンなんですけどこのアニメめちゃくちゃフィギュアスケートしてて演技観てるとアニメ観てるのか現実の大会観てるのか一瞬分からなくなるくらい本当にそれっぽくてとにかくよさしかない。

灼熱の卓球娘

ぼくもあがりちゃんと気持ちいいところ探ししたかった。

灰と幻想のグリムガル

グリムガルについては言いたいことが山ほどあるんですけど第8話「君との思い出に」をとにかく見てほしくて、いや8話見たら9話も見てほしいんですけど、9話見たら10話も11話も見てほしいし、11話まで見たら自動的に12話を見終ってるはずなんですが、7話までのゆっくりした話運びも全部8話以降の展開のためなんで、序盤のんびりしてるなーって思うかもしれないけどとにかく見てほしいし、細谷さん演じるハルヒロの成長を見守ってほしさしかないしいまなら d アニメストアで見られます。Amazon プライム会員ならプライムビデオにもあります。

anime.dmkt-sp.jp

www.amazon.co.jp

グリムガル見たら安済知佳さんのこと好きになると思うんですが安済知佳さんのこと好きになったら響け!ユーフォニアムを見ましょう。

響け!ユーフォニアム2

というわけで2期なんですけど2期見てほしいんだけど見る手段乏しい、そのうち配信されると思うので配信されたあかつきにはぜひ。

ぼくは第4話「めざめるオーボエ」をぜひ皆さんに見ていただいて種﨑敦美さんという声優のことを知ってもらいたいと思っているんですが彼女の感情の振れ幅にぜひ触れてほしい。そして番組名も募集してほしい。ぜひしましょう。

以上、今年見たアニメでした。

aoitaku Advent Calendar 2016 : 8日目 - 遥そら voice

この記事は aoitaku Advent Calendar 2016 の 8 日目の記事です。

8 日目 なので「八」にちなんで「ハ」からはじまるテーマということで、遥そらという女性声優について書きます。

遥そらについて

主にえっちなゲームに出演している女性声優です。2011 年頃から活動しています。
キャラクターの演じ分けが上手く、幅広く役をこなすことに定評があります。

大図書館の羊飼いの鈴木佳奈を演じた人といえば界隈*1の人には伝わるかもしれません。

記憶に残っている遥そら voice 八選

1. 鈴木佳奈(大図書館の羊飼い

というわけでトップバッターは大図書館の羊飼いより佳奈すけこと鈴木佳奈です。
人懐っこい後輩キャラ、と一言でいうとそんな感じなんですが、彼女は言ってみればコミュ力お化けです。これだけのコミュ力を磨く経緯を想像するとつらそうな感じがあります。このへんはゲームをやってもらうとわかるんですが。
主人公の筧くんとの距離感も、登場から持ち前のコミュ力発揮させて絶妙な距離を取るんですが、筧くんはこのへんのことを割と早い段階で見抜いていまして*2、そこを見抜かれたというか見透かされた佳奈すけはだんだん筧くんのことを意識するようになっていきます。
と、まあ、シナリオの展開によって割と感情の振れ幅のあるキャラクターなんですが、この感情の振れ幅の表現がうまくて、ちょっといたずらっぽい声音の軽妙なやりとりから、仲が深まってからの甘えた感じまで、終始魅力尽きないヒロインでしたね。

www.youtube.com

バックで流れてる君だけの Day Star もめっちゃいいですね。

2. 蓮ヶ瀬水菜(ココロ@ファンクション!

www.youtube.com

猫っかぶりのお嬢様です。ぼくがお嬢様好きなのでどうしようもない。
この動画は猫かぶってるモードです。こういうちょっと落ち着いた演技もまたいいんですよね……。
ところがこの子、本来の性格は言いたいことをはっきり言う子で、気心知れた相手には遠慮のないところも見せてくれるようになります。
水菜は同級生なので、後輩キャラをやるときより大人っぽいトーンで喋ってます。

www.youtube.com

あまあまモードだとこんな感じです。いけませんね……とてもいけませんね……。

3. 紅藤友梨亜(サキガケ⇒ジェネレーション!)

自己紹介デモ動画とかない感じなので体験版の登場シーンを。

youtu.be

魔女っ娘です。めちゃ性的な格好しててどきどきする……。
後輩キャラなので幼なめ遥そら voice です。
この子は妹の親友なんですが、こういうちょっといたずらっぽい後輩キャラめちゃくちゃいいんですよね……あまあまな声でからかってからのいたずらっぽく笑うのめちゃくちゃよくないですか……。

主人公の秀穂くんには割と最初からそこそこ好感を寄せてる感じなのは、敦盛に対するぞんざいな態度からわかると思うんですが、これってあくまで親友のお兄さんに対する「あ、なんかちょっといいな」くらいの感情です。
ところがこれがコロっていってからがはにゃ~んって感じで、いやあよくない、非常によくないですね、何によくないかって身体とあとたぶん脳とか耳もおかしくなると思います。みんなでおかしくなろう!

4. 因幡めぐる(サノバウィッチ)

これまた後輩キャラです。コミュニケーションがちょっと苦手なぼっちの女の子です。コミュニケーションが苦手な、というのは、他人に踏み込むのにちょっとためらいがある感じで、ある程度親しい間柄なら異性同性の別を抜きにして軽口も言い合えるような感じで、遥そらー!って感じする子ですね。
佳奈とはタイプが違うんですが、根っこのところは似ているような気がします。人間関係で悩むタイプの役をやったときの遥そら voice 、普段の明るい調子とのギャップがたまらないんですよね。
佳奈すけは素直になれないところは仮面で隠しちゃうんですが、めぐるはちょっと素直になれないところがわりと表に出ちゃったりしてて、そこがまた可愛いと思います。

自己紹介デモ動画とかなかったと思うのでおまけ動画置いときます*3

www.youtube.com

www.youtube.com

www.youtube.com

www.youtube.com

5. 不知火祈(花咲ワークスプリング!)

自己紹介デモ動画とかないので体験版。メインヒロインなのでのっけから登場します。

www.youtube.com

祈はめぐるとは別の意味のぼっちな女の子です。祈は他人と関わることを極端に避けていて、自分から積極的にぼっちになろうとしています。クールというよりは冷めた感じの、抑えめのトーンなんですが、のっけの気遣う感じとか呆れ声とか、こういうところには人間味があります。どこか人間を嫌いになりきれてない人間嫌いって感じがして、そのへんのあっあっ、ウザいって言われるのいい! 冷たくされるのいい! サイテーって言われたい……!!

祈も感情の振れ幅感じさせるキャラです。
普段感情抑えめのキャラが、思わず感情があふれてしまうっていう感じになるところは本当にめちゃくちゃよかったです。

6. 宮国朱璃(千の刃濤、桃花染の皇姫)

遥そら出演作でぼくがやった中では一番新しい作品ですかね。オーガスト作品への出演は佳奈すけに続いて二作目で、こっちはメインヒロインです。
キャラ紹介デモ動画がないので体験版プレイ動画でご紹介。きわめて個人的な要望なんですけど大図書館みたいに紹介動画ほしいですね……。

youtu.be

朱璃は亡国のお姫様でして、毅然として凛とした立ち居振る舞いがかっこいいヒロインです。 が、このお姫様、お転婆なところもあってですね、結構素っぽいリアクションする場面が多くて、突拍子もないことを言われたりすると「は?」とか「はい?」とか「はあ!?」とかいうんですけど、素の声で「はあ!?」って言うこの声がねー、なんていうかめちゃくちゃ素っぽくてマジで遥そらが「はあ!?」って思って言ってるんじゃないのかってくらい自然な「はあ!?」になっててめっちゃ好きなんですよね。繰り返し「はあ!?」だけ何回も聞きました。めっちゃいい。体験版でも何箇所か聴ける場面あるので聴いてみてほしいところです。

朱璃は言いたいことをはっきり言う一本筋の通ったキャラクターでして、ズバズバと自分の意見を理路整然滔々と語るシーンがあってこれがめちゃくちゃ格好いいんですが、不意にその芯がブレたりすると、普段の凛々しさから一転めちゃくちゃ弱くて脆くもなる、そういうときの弱さとか脆さとかがちゃんと声に出るんですけど、そのへんやっぱり感情の振れ幅なんですよね。

7. 黒木未知(ノラと皇女と野良猫ハート)

ノラととに関してももう多分説明とかいらなくてこの動画見てもらうだけでいいと思います。

www.youtube.com

www.youtube.com

www.youtube.com

www.youtube.com

TV でショートアニメ放映するとか続編が出るとか今後も楽しみな作品です。

8. 雪村涼乃(ウィッチズガーデン

ラストを飾るのはウィッチズガーデンより雪村涼乃です。ぼくが最初に遥そら voice を認識したキャラクターでして、めちゃくちゃ印象に残っています。涼乃から遥そら voice の虜になりました。
ミステリアスかつクールな感じの魔女です。
比較的はきはきした役をやることが多いのですが、涼乃は落ち着いたトーンで静かに喋ります。涼乃は基本的に他人とあまり積極的関わろうとしないので、最初のほうは冷たそうな印象があるのですが、親しくなっていくとちょっとずつ心を開いていく感じがあります。一本芯のかよったキャラクターでして、ここぞというときは凛々しくきりっとした雰囲気をまといます。そのへん声で表現するの声優ってすごいなと思うんですが、一方、ささやき声は耳から脳みそまで変になるかと思いました。めちゃくちゃよくて溶けそうになった。というかちょっと溶けました。

動画あります。

www.youtube.com

あ……だいぶ溶けた……。

以上、遥そら八選でした。なお他にも出てるゲーム知ってるんですが未プレイです。逆に言うと八選っていうのはこれプレイして出演してたゲーム全部ですね……全部覚えてるわ……。

ぼくは感情の振れ幅に弱いっぽいらしいぞということに最近気が付きまして、たとえばお嬢様キャラが好きだったりするんですが、それって普段気丈に振る舞ってるキャラがふとしたきっかけで脆さがあらわになったりする展開が好きなんだろうと思います。遥そらもお嬢様キャラやることが割と多くて、声が好きとか演技が好きなのに加えて演じてたキャラも好きになりやすいキャラ多かったかもしれません。もちろん感情の振れ幅の表現がよいから好きになったというのは間違いなくあると思います。

で、ぼくが感情の振れ幅の話をするときにどうしても話しておきたい女性声優がもう一人いるんですけど、またの機会にその話をしたいと思います。お楽しみに!

*1:どこ?

*2:筧くんもまた観察力の化物なのでした

*3:この動画はフィクションです

aoitaku Advent Calendar 2016 : 6日目 - Lua

この記事は aoitaku Advent Calendar 2016 の 6 日目の記事です。

Swift の話の最後に出てきた言語の話は次回やるとして、番外編ということで Lua のことを書きます。

クラスがない言語

Lua はブラジル生まれのスクリプト言語で、主に C などで書かれたアプリケーションへの組み込み用途を目的にしています。とても軽量で組み込みやすく、それでて高速に動作するのが特徴です。

Lua は一応オブジェクト指向プログラミングをサポートしていますが、クラスという概念を持ちません。クラスを作る予約語も機能もありません。

それどころか Lua には表向きは配列すらありません。表向き、というのは、Lua にあるのはテーブルという機能で、キーに数値を使うと配列として扱われるようになります。
配列のようなものとして扱うための機能も一応あって、たとえばテーブルに対する長さ演算子 #t[n+1] == nil となるようなキー n を返すので、キーが連続する数値だけなら配列の個数を得るために使うことができます*1

なんでもテーブル

テーブルというのは JavaScript のオブジェクトのようなもので、キーと値のペアで構成されたデータ構造を持ちます。キーに数値を使った部分は配列のように扱うことができ、キーに文字列を使った部分は連想配列のように扱うことができます。

混ざってても大丈夫。

t = {}
t[1] = 1
t[2] = 2
t["foo"] = 3
t["bar"] = 4

print(#t) -- 2

キーに文字列を使った場合は . を使ってその要素にアクセスできます。

t = {}
t["foo"] = "bar"
print(t.foo) -- "bar"

これを使うとこういうことができます。

t = {}
t[1] = 1
t[2] = 2
t["length"] = function(self)
  return #self
end

print(t.length(t)) -- 2

キーが文字列の部分は長さ演算子に影響を与えないので、配列を想定したテーブルに関数を生やすとかいった使い方ができます。

self

Lua の関数呼び出しはちょっと面白くて、第一引数にレシーバ自身を渡すシンタックスシュガーがあります。

上の length 関数はこのように呼び出せます。

t:length() -- t.length(t) と同じ

まるでオブジェクト指向のメソッド呼び出しのようですね。
このように、テーブルをうまく使うことで配列やオブジェクトのようなものを実現できるようになっています。

メタテーブル

Lua にはメタテーブルといういわゆる演算子オーバーロードを行うための機能があります。
たとえばメタテーブルの __add というキーにメソッドを生やすと二項演算子 + の動作を指定することができます。

おもしろいのはメタテーブルに __index というキーにメソッドを生やすとメソッド探査をフックしたりできます。これを使うとコンポジションと委譲を使って継承っぽい動きを実現したりできます。言語として継承をサポートしていないのでむしろ柔軟に継承を実装できるでしょう。mix-in っぽいことももちろんできます。

引数が文字列やテーブル一個だけのときは関数呼び出しのカッコを省略できる

たとえばテーブルだと、

function ab(args)
  print(args.a, args.b)
end

ab{a="hoge", b="fuga"}

こんなふうに名前付き引数っぽい呼び出しができます。

文字列だとたとえばローカライゼーションとかそういうときに便利だと思います。
あとは複数行文字列リテラルに使うと外部 DSL っぽいものを作りやすいのではないでしょうか。

閑話休題

Lua について軽く紹介してきました。ぼく自身 Lua のコードはちょっと書いただけで、後はふだん使ってるシェルがスクリプトとして Lua を採用しているので Lua 使う機会ちょいちょいあるかな、くらいの感じですが、Lua の仕様を知ったときはかなり世界が広がったような気がします。
継承に頼らず、コンポジションと委譲をうまく使おうという発想も Lua に触れて以降身についた気がしますし、そのおかげで JavaScript に対する理解も深まったのではないかなと思っています。

さて、そういうわけで次回いよいよ JavaScript の話で、これが言語編の最終回になります。お楽しみに。

*1:途中に抜けがある場合の動作は不定となります