[go][python] 依存パッケージのファイルは先にCOPYしてdocker buildを高速化する

docker buildすると依存パッケージのインストールが走ります。 理想的には依存パッケージに変更がなければ依存パッケージのインストールはキャッシュしたいところです。 しかしながらうまくDockerfileを作らないと毎回docker build時に依存パッケージのインストールが走ってしまいます。 依存パッケージのインストールをキャッシュするためには依存パッケージを記述したファイルのみ、先にCOPYしてパッケージのインストールを行います。 ソースコードはDockerfileの最後の方でCOPYします。 こうすることでソースコードに変更が合った場合、依存パッケージのインストールはキャッシュされ、ソースコードのコピーのみ処理が走ります。 goの場合、depパッケージマネージャを使うならGoPkg.tomlとGoPkg.lockのみ先にコピーします。 パッケージインストール時はdep ensure -vendor-only=trueにすることでソースコードの解析が走らずにパッケージのインストールが走ります。dep ensureのみで実行してしまうと、この部分がソースコードに依存してしまうのでソースコードに変更があるとパッケージの再インストールが走ってしまいます。 サンプル https://github.com/garicchi/docker-sample  

Hugっとプリキュアがあつかう、人生の困難への向き合い方

HUGっとプリキュアをご存知でしょうか。 毎週日曜日に放送されている女児向けアニメプリキュアシリーズですが今年のプリキュアは敵がブラック企業の比喩として描かれていて個人的に非常にヒットしています。 そのHUGっとプリキュア33話、「要注意!クライアス社の採用活動!?」は久しぶりに考えさせられる回でした。 特に最後、今作の敵であるクライアス社の社長であるプレジデントクライが、自社の採用に失敗したことを「救えなかった」と表現しています。クライアス社の目的は「時間を止めて永遠の幸せを手に入れる」ことですが、そのことを「救い」と表現しているのです。 ある思想があり、そのために仲間を引き入れることを「救い」と表現することは、現実で言うなれば新興宗教です。つまりプリキュアの敵であるクライアス社はブラック企業の比喩でもありますが、新興宗教の比喩でもあります。 救いとはつまり、困難な状況に対し、その新興宗教に入信し、思想を受け入れることで困難な状況を解決することです。プリキュアたちはその思想にたいし、きっぱりとNOと言います。しかしながら人生には困難がつきもので、自分がいくら強くても他人のことばかりを気にする時代であり、他人から困難が降り注ぐことが多々あります。 HUGっとプリキュアではそこに対するアプローチが提示されています。プリキュアは人生に困難が立ちはだかったとき、「自分を愛し、人を愛する」というアプローチを提示しています。新興宗教に入信する人はたいてい、人生が辛く、自分を愛せなくなった状態の人が多いです。そこに対し、「入信すれば救われる」という他力本願な解決策を新興宗教は提示してきます。しかし他力本願では人生の困難を解決できるはずがありません。人生の困難を解決するのは自分自身であり、自分を愛することで乗り越えられる可能性をプリキュアは訴えています。さらにそれだけではなく、他人を愛することで他の人の人生を解決する力になれるかもしれないとも訴えられていると思います。他人に対する愛はあくまで解決する力になるだけで実際に解決するのは本人です。しかしながら新興宗教は入信していうとおりにすれば救われると提示することが多く、これは人生の困難にたいするアプローチの方法として、他力本願です。 このような人生の困難に対し、自力で解決するか、他力で解決するかを対比的に描かれているのが今作のプリキュアであり、他力で解決しようとする敵に対し、プリキュアは自己愛と他者にたいする無償の愛による解決を提示しています。

未来のミライをみた

先日、同僚とアニメ考察を行なっていると、未来のミライが世間的には酷評されているが考察のしがいがある作品だということを知り、見に行ってきた。 私の場合は最初からわかりにくい作品だということを同僚から教えてもらっていたので、注意深く見ていたが、結局初見では映画の主テーマに気づくことができず、考察サイトを見てやっとわかったのでそこらへんの話をまとめたいと思う。 ※以下ネタバレあり 未来のミライの主テーマについて 最初見終わったとき、この作品は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のツボが超能力で浮いてないらしい。細かい。…

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…