未来のミライをみた

先日、同僚とアニメ考察を行なっていると、未来のミライが世間的には酷評されているが考察のしがいがある作品だということを知り、見に行ってきた。

私の場合は最初からわかりにくい作品だということを同僚から教えてもらっていたので、注意深く見ていたが、結局初見では映画の主テーマに気づくことができず、考察サイトを見てやっとわかったのでそこらへんの話をまとめたいと思う。

※以下ネタバレあり


未来のミライの主テーマについて

最初見終わったとき、この作品は4歳の男の子が未来の妹と出会うことをきっかけに、自分のルーツを探して行く中で兄として成長する物語だと思っていた。しかしながらそれは表のテーマであったようで、裏側に隠されたテーマに気づくことができなかった。

最初に違和感を覚えたのは物語の終盤、くんちゃんが「ありがとう!未来のミライちゃん!」(記憶が曖昧)と言ったときに、「私は今を生きてるよ!」とミライちゃんが言ったことである。この瞬間に、「あっこれミライちゃんが未来からきてると見せかけて、くんちゃんが未来に行ってる話なのか?」と思ったが、お母さんや街の風景は全く未来になってなかったし、そんなことも無いようだった。

そして映画を見終わった後、下記の考察サイトにたどり着いて、やっと納得することができた。

『未来のミライ』考察: 誰も気がつかなかった「10年観続けないとわからない」本当のテーマとは

どうやらこの物語の本当の主人公、というか視点は、くんちゃん(4歳)ではなく、未来のくんちゃん(高校生)らしい。

高校生のくんちゃんは(詳しくは明示されていないが)アイデンティティを失っており、自分とは何かがわからなくなり、うつのような状態になっている。そんな中、自分の祖先や親の子供時代、妹が家族になる瞬間を4歳の視点で回想することにより、「自分は家族によって愛され、様々な出来事があったおかげで今の自分がある」と認識し、未来へ進み出す物語なようだ。作品のタイトルである「未来のミライ(ちゃん)」はフェイクで、本当なら「過去の自分」が妥当かもしれない。とにかく、この物語は「不思議な力で未来からきた妹によって4歳児が兄として成長する話」ではなく、「アイデンティティを失った高校生が自分のルーツを辿ることにより、自分の存在を獲得する話」なようだ。

作中の象徴表現

最近何かコンテンツを見るときは象徴表現探しマンになっているぐらい象徴表現をさがしているが、本作で一番目立っていた象徴表現はやはり「木」であろう。くんちゃんは庭のカシの木に出会うたびに未来の妹と出会ったり、時間旅行を繰り返すこととなる。「木」という表現はルーツの象徴表現と考えられる。ルーツとはこの場合、家系を表し、家系図は木構造をしている。家系を木として表現する方法はヤバめの2DホラーゲームであるRusty Lake: Rootsでも使われている。また、作中最後でミライちゃんが「あなたはこの中から今のあなたのいるところを探さなければならない!」と飛びながら言っていたところは無数の木構造であった。たくさんの葉のある木構造の中から、今の自分がいる葉をただしくとらえることは今の自分を形作る様々な歴史を認識することで失った自分を正しく認識する表現となる。

物語冒頭では雪の表現があった。くんちゃんが無数の降り注ぐ雪の中から1つをつかもうとするとその雪はすぐに溶けてしまう。これは無数のアイデンティティというか自分を表ている。しかしくんちゃんは自分を見失っているので手に取るとすぐに溶けてしまう。最初雪の表現を見たときは、「あっこれミライちゃん死ぬな…」と思ったがとんだ勘違いだったようだ。

おもしろかったのはクライマックスの東京駅の表現。家出をしたくんちゃんは電車に飛び乗り、東京駅へとたどり着く。東京駅では家への帰り方がわからなくなり、迷子センターでスタッフに「自分を無くしたのですね」と言われる。「ここでは自分を証明できなければ新幹線に乗ることになり、行き先はひとりぼっちの国」。くんちゃんは必死に乗車を拒否するが新幹線は自分を証明できない子を吸い込んで行く。これはまさにアイデンティティを失ったくんちゃんの状況を東京駅で表現したものとなっている。アニメにおける駅は輪るピングドラムでもあったように「運命の乗り換え」を表す。つまりくんちゃんは運命の岐路に立たされているのである。さらに新幹線は在来線よりも一度乗ったら帰ってくるのにとても時間と労力がかかる。うつ状態という新幹線に乗ってしまわないように、ルーツを辿って自分を証明する必要があるのだ。東京駅で「自分を迷子になる」という表現、自分を証明できなければうつという新幹線に乗ってしまうという表現、どちらもとてもよくできていた。

自分を失ったときはルーツを辿る

誰にでも、私は愛されていなかった、自分がいる意味がないという感情になってしまうときがある。私もよく、自分を見失ってしまうことがあるが、そんなとき自分のルーツを辿ることによって自分は家系という大きな流れの中の1つであり、さまざまな出来事の積み重ねによって今の自分があることを再認識することができる。未来のミライはそのようなアイデンティティを失いかけた全ての人に、過去に立ち返ることを促してくれる、面白い作品だと思った。これを機に、一度自分の家系図も調べて、ルーツに立ち返って見たいと思う(ただし実家にはあまり帰らない)。

2018春アニメ総評

前回

2018年も7月に入り、春クールのアニメが続々と終了し、夏アニメの1話が放送し始めた。自分はアニメオタクなので今年からクールごとにできるだけアニメを見て総評を書いていきたいと思う。

2018年春アニメは正直に言うと不作であった。これは2018年冬アニメが「よりもい」「ゆるキャン」「ダリフラ(1期)」「citrus」「ポプテピピック」「ラーメン大好き小泉さん」などの過去に類をみない豊作であったせいでもあると思う。

加えて東京に引っ越したタイミングでもあったので東京ならTokyo-MX録画しとけばええやろ…と思ってTokyo-MXオンリーで検索をかけていたせいで覇権と思われるアニメの1話を見れなかった。アニメは1話を見逃すと一生見ない。

そんな中でも偶然私のnasneに録画されていた or dアニメストアニコニコ支店で見ていたアニメの感想をここで述べたい。

下の方に行くたびに多分個人的に面白かったものだと思う。

本ランキングはあくまで個人的な感想なのであしからず。

ありす or ありす

nasneに録画されてたけどこの手のたぐいは苦手

甘い懲罰

なんやかんや6話ぐらいまでみたけどただのエロアニメだった

立花館To Lie あんぐる

nasneに録画されてたけど苦手。女の子は可愛いが…。円盤は売れましたか…?

ひそねとまそたん

見たかった。EDだけ見た

キャプテン翼

同僚が見ていたこともあって話を合わせるためにも2話から録画開始したが意外と熱かった。特に昨日の敵が明日のミカタになる辺り、ジャンプの王道的展開で結構アツかった。でも静岡県決勝で若林に集団タックルしたチームはまじでやばいと思う。

魔法少女俺

1話切り

Lostorage conflated WIXOSS

1期みてたはずなのに話についていけなかった

ヲタクに恋は難しい

某所で炎上していたらしい作品。

筋トレをしているときに見ていたが筋トレをしなくなったので見なくなった。

(あのレベルの)ヲタクにすら恋は難しい というので「果たして俺たちは..?」となるので反感を買ったのかもしれない

ウマ娘 プリティーダービー

うまぴょい!うまぴょい!(みなかった)

ゴールデンカムイ

見たかったけど録画されてなかった。友人の家で1話みたけど世界観とストーリーがとても良かったので多分いつか見る

PERSONA 5 THE ANIMATION

ゲームをすでに見ているとアニメを見る気になれなかった…ストーリーは間違いなくいいので見るべき

こみっくがーるず

苦手な部類だがわりと面白かったと思う。

確か主人公のカオスちゃんは少女漫画をかけなくて寮にすむことで少女漫画をかけるようになるというストーリーだったと思うがもう少し闇とか葛藤とか人間味があってもよかったんじゃないかと思った。

OPの第一フレーズで「まっすろな世界」とちゃんと鈍らせてるのにこだわりを感じた

宇宙戦艦ティラミス

自分はあまりギャグアニメで笑う方ではないがこのアニメは結構笑った。加えて約10分で終わるというスピーディーさに朝仕事に行く前に朝ごはんを食べながら見るのにちょうどよいコンテンツであった。ストーリーは主人公であるスバルがデュランダルという人形機体に乗って宇宙戦争をするような話だったがほとんど主人公のコクピットでのこだわりの話だった。シリアスになるとみせかけて結局ギャグに終わるあたり結構安心してみれたんじゃないかと思う。OPがいい

ヒナまつり

直感的なギャグアニメ。個人的にギャグが滑ってた箇所が何個かあったけどそれでも面白いギャグが頻繁にあったと思う。

原作がヒットしてるだけあってクオリティの高い作品だった。

特にギャグだけではなく、金髪の子がでると浄化エンドになったり感動話もあって単調ではなかったと思う。

あと友人から教えてもらったがヒナちゃんがいなくなる話ではEDのツボが超能力で浮いてないらしい。細かい。

メガロボクス

スポーツアニメとしてとってもおもしろかった。あしたのジョーを見てたら多分もっと面白く感じたんだろうと思う。

踏切時間

5分?最終話までみれてないけどかなり好きな部類。

踏切で待っている間の2人の関係性を描くかなり独特な作品だったけど1話から頭citrusだったので朝から勤労に励む意欲が湧いた。

多田くんは恋をしない

2018年春クールではかなり安心してみれた安定作だった。

野崎くんのスタッフに加えてオーイシお兄さんのOPだったのでサビの部分とか野崎くんやん!という感じだったけどそれも含めてよかった。このシリーズは続いてほしい。ストーリーはいい感じの国際ラブコメ。何話か忘れたけど多田くんが風を引いたときにテレサちゃんが看病して寝ている多田くんにキスをしてしまう。その後アレクに「(看病)終わりましたか?」と聞かれたときにテレサちゃんが「はい」と言ったセリフには(看病が)終わったという意味と(恋が)終わったというダブルミーニングだったという部分があったがとてもよかった。

野崎くんとか好きな人にはおすすめできる。あとOPがいい

ダーリンインザフランキス

2018冬クールからの続きものだが序盤の世界観とストーリーに惹かれ、超絶期待して見ていた分、オチが非常に残念だった。

当初は本当にダリフラについてブログ書こうかと思ったぐらい考察していた。

ダリフラの世界では「オトナ」と「コドモ」は明確に区分され、コドモはオトナの管理下で徹底的に管理され、恋愛すら知ることを許されない。しかしコドモがオトナのために敵と戦うロボットのコクピットはどう見ても性行為のメタファーになっていた。つまりコドモは恋愛をしてはいけないのにオトナのために性行為をしなければならない。このとき「あっこれは性表現規制がひどくなっている現代社会の比喩だ!」と思い、社会風刺系のアニメが好きな私は非常に興奮した。

しかしながら22話あたりから敵が本性を表し始めて、急にスケールが宇宙になってきたあたりからポカーンだった。ゼロツーが巨大ロボットになった最後の方はもはやギャグアニメと思ってみていた。期待が大きかっただけに反動もデカかったのかもしれない。

いろいろ言ったけどこれだけ考察のしがいのある世界観の作品は非常良いと思うので割とおすすめの部類

HUGっと!プリキュア

2018年春クール、ひいては2018年全体を通して、好きなアニメ第1位はプリキュアかもしれない。

今期のプリキュアはとにかく社会風刺が多い。敵がブラック企業だし、敵モンスターを倒したら退職するし、古いジェンダー感に縛られたキャラクターも出てくる。

簡単に言うと今期のプリキュアの流れは

ブラック企業の社員がモンスターを発注する→プリキュアが応援する→希望退職

という流れだがプリキュアに応援されることで明日も労働をしようという意欲が高まる。プリキュアは15周年ということもあって、女児だけでなくオトナも楽しめるような構成になっていると思う。

ほんとに女児向けアニメかこれ…と思うような点がいくつかあるが、演出、世界観、ストーリーすべてをとっても満点かそれ以上である。

Hugプリについてはもっといろいろ書きたいけど長くなるので別途記事として書きたい。

とにかくおすすめ。今からでも超絶見るべき。

総評

2018年春クールは録画失敗したせいで不作になってしまった。改めてリストを見ると見逃していた面白そうな作品がいくつかありそうだったのでまたdアニメストアニコニコ支店でみたいと思う。夏クールは録画失敗しないぞ!と思って7/1からnasneを毎日チェックして録画しまくったら1週間に35本もアニメをみないといけなくなってしまった。今の所はねバドが個人的に期待である。

docomoの雑談対話APIのエンドポイントが変わって動かなくなっていた件

日本語でそれっぽい雑談対話を生成してくれてチャットボットとかで使われているであろうdocomoの雑談対話APIにアップデートがあったらしい。

よって今まで動いていたエンドポイントから404が返ってくるようになってしまった。

これからは/naturalChatting/v1/dialogueで終わるエンドポイントへ切り替えなければならないのと、

今まではAPIKEYを指定するだけでリクエストができていたがこれからは事前にユーザー登録を行ってappIdを入手する必要がある。

ということでこちらに新しい仕様があるのでPythonでサンプルを書いてみた

import requests
import os
import json

docomo_key = "{ docomo api key }"


def registration(config_path,key):
    regist = "https://api.apigw.smt.docomo.ne.jp/naturalChatting/v1/registration?APIKEY={key}"\
        .format(key=key)
    data = {
        "botId": "Chatting",
        "appKind": "Smart Phone"
    }
    res = requests.post(regist, json=data)
    res_json = res.json()

    with open(config_path, "w") as f:
        json.dump(res_json, f)

def conversation(key,app_id,speech):
    url = "https://api.apigw.smt.docomo.ne.jp/naturalChatting/v1/dialogue?APIKEY={key}" \
        .format(key=key)
    data = {
        "botId": "Chatting",
        "appId": app_id,
        "voiceText":speech,
        "language":"ja-JP"
    }
    res = requests.post(url, json=data)
    res_json = res.json()
    return res_json["systemText"]["utterance"]

def main():
    # appIdを取得して.cacheディレクトリに入れる
    cache = os.path.join(os.environ["HOME"],".cache")
    dialog = os.path.join(cache,"dialog.json")
    if not os.path.exists(cache):
        os.mkdir(cache)

    if not os.path.exists(dialog):
        registration(dialog,docomo_key)

    with open(dialog,"r") as f:
        config = json.load(f)

    app_id = config["appId"]

    text = "こんにちは"

    res = conversation(docomo_key,app_id,text)

    print(res)

if __name__ == "__main__":
    main()

 

今までdocomoの雑談対話APIで動いていたチャットボットとか結構いたのではないだろうか。それらが動かなくなっているとおもうので対応を頑張ってもらいたい

[symfony] ControllerでJsonを返す

PHP、SymfonyでJsonを返すAPIを作ろうとしていたら思ったより難しかったのでメモ

ORMapperはDoctrineです。

 

Jsonを返すためにはアクションメソッド内でSerializerを利用する必要があります。

コンストラクタでシリアライザを初期化してあとはResponseクラスに入れて返すと無事にJsonが返却できます

class TodoController extends Controller
{
    private $encoders;
    private $normalizers;

    private $serializer;

    public function __construct()
    {
        $this->encoders = array(new XmlEncoder(), new JsonEncoder());
        $this->normalizers = array(new ObjectNormalizer());
        $this->serializer = new Serializer($this->normalizers, $this->encoders);
    }
    /**
     * @Route("/", name="todo_index", methods="GET")
     */
    public function index(TodoRepository $todoRepository): Response
    {

        $items = $todoRepository->findAll();
        $jsonContent = $this->serializer->serialize($items, 'json',['json_encode_options' => JSON_UNESCAPED_SLASHES]);
        $res =  new Response($jsonContent);
        $res->headers->set('Content-Type','application/json');
        return $res;
    }
}

 

[Unity] 動的にテクスチャにお絵かきする

お絵かき機能のあるゲームを作成する必要があったので調べました。

こちらが非常にわかりやすいですが少々バグとUnityのアップデートがあったので方法をメモします。

Unityでテクスチャにお絵描きしよう – おもちゃラボ http://nn-hokuson.hatenablog.com/entry/2016/12/08/200133

 

まず、Cubeオブジェクトを配置し、カメラに写るようにします。

Cubeオブジェクトの名前を「cube_draw」とし、インスペクタからBoxColliderをRemoveComponentし、新たにMeshColliderを追加します。これは後ほど登場するRayHitからUV値を取得するtextureCoordがBoxColliderだと常に(0,0)になってしまうのを防ぐためです。

続いてテキトーな画像を1つ用意し、テクスチャとしてCubeに貼り付けます。この時、「Advanced」->「Read/Write Enabled」にチェックをいれます。

最後に適当なMonoBehaviourに以下のようなコードを書きます。

public class SceneManager : MonoBehaviour {

	private Renderer renderer;
	private Texture2D drawTexture;
	private Color[] textureBuffer;

	private int brushSize = 10;
	// Use this for initialization
	void Start () {
		        
		this.renderer = GameObject.Find("cube_draw").GetComponent<Renderer>();
		var bodyTexture = (Texture2D)this.renderer.material.mainTexture;
		var bodyPixels = bodyTexture.GetPixels();
		this.textureBuffer = new Color[bodyPixels.Length];
		bodyPixels.CopyTo(this.textureBuffer,0);
		        
		this.drawTexture = new Texture2D(bodyTexture.width,bodyTexture.height,TextureFormat.RGBA32,false);
		this.drawTexture.filterMode = FilterMode.Point;
		this.drawTexture.SetPixels(this.textureBuffer);
		this.drawTexture.Apply();
		this.renderer.material.mainTexture = this.drawTexture;
	}
	
	// Update is called once per frame
	void Update () {
		if (Input.GetMouseButton(0))
		{
			// Screenのマウスの位置から空間に向けてレイ(光線)を放つ
			var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
			// 光線が何かのオブジェクトにヒットしたなら
			RaycastHit hit;
			if (Physics.Raycast(ray, out hit))
			{
				// UV値からテクスチャのどの部分にヒットしたのかを計算
				var hitPoint = new Vector2(hit.textureCoord.x * drawTexture.width, hit.textureCoord.y * drawTexture.height);

				// brushSize分のピクセルを塗りつぶす
				for (int x = (int) (hitPoint.x - brushSize / 2); x < hitPoint.x + brushSize; x++)
				{
					for (int y = (int) (hitPoint.y - brushSize / 2); y < hitPoint.y + brushSize; y++)
					{
						if (x >= 0 && y >= 0)
						{
							this.textureBuffer.SetValue(Color.black, (int) x + drawTexture.width * (int) y);
						}
					}
				}

			}

			// テクスチャを適用
			this.drawTexture.SetPixels(this.textureBuffer);
			this.drawTexture.Apply();
			this.renderer.material.mainTexture = this.drawTexture;
		}
	}
}

コードの解説としては、MainCameraのScreenPointToRayメソッドによってカメラから擬似的な光線を照射し、ヒットしたオブジェクトを返します。その後、textureCoordによってヒットした場所のテクスチャUV値を取得します。最後にその部分周辺のピクセル値を書き換えることでお絵かきを実現できます。